// Hydro Horsepower // Advanced mission for hoovydam // Created by Needles #base robot_standard.pop #base robot_giant.pop #base robot_gatebot.pop WaveSchedule { StartingCurrency 800 //800-->700-->800 CanBotsAttackWhileInSpawnRoom No RespawnWaveTime 444 Advanced 1 Mission //SentryBusters { Objective DestroySentries Where spawnbot_a Where spawnbot_b Where spawnbot_c BeginAtWave 1 RunForThisManyWaves 6 CooldownTime 30 TFBot { Template T_TFBot_SentryBuster Tag bot_sentrybuster } } Mission // Sniper wave 1 { Objective Sniper InitialCooldown 36 //32-->40-->35-->28-->36 Where spawnbot_c BeginAtWave 1 RunForThisManyWaves 1 CooldownTime 45 //40-->50-->45-->30-->45 DesiredCount 2 TFBot { Template T_TFBot_Sniper Skill Normal //Hard-->Normal CharacterAttributes { "damage bonus" 1.0 } } } Mission // Spy wave 2 { Objective Spy InitialCooldown 90 Where spawnbot_a BeginAtWave 2 RunForThisManyWaves 1 CooldownTime 90 //120-->90 DesiredCount 2 TFBot { Class Spy Skill Expert Name Spy } } //Mission // Sniper - wave 4 //{ // Objective Sniper // InitialCooldown 30 //30-->26-->30 // Where spawnbot_c // BeginAtWave 4 // RunForThisManyWaves 1 // CooldownTime 45 // DesiredCount 2 // TFBot // { // Template T_TFBot_Sniper // Skill Normal //Hard-->Normal // CharacterAttributes // { // "damage bonus" 1.0 // } // } //} //Mission // Spy - wave 5 //{ // Objective Spy // InitialCooldown 90 // Where spawnbot_a // BeginAtWave 5 // RunForThisManyWaves 1 // CooldownTime 90 //60-->120-->90 // DesiredCount 2 //4-->2 // TFBot // { // Class Spy // Skill Expert // Name Spy // } //} // Wave 1 // // Max cash by this point: 800 + 0 bonus // Cash this wave: 700 // Map Phase: 1 Wave { WaitWhenDone 60 Sound "Announcer.IncomingMob" Checkpoint Yes StartWaveOutput { Target wave_start_relayB Action Trigger } InitWaveOutput { Target initB Action Trigger } DoneOutput { Target pickfast Action PickRandomShuffle } // DISABLE BOMB RESET // WaveSpawn { TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target "intel" Action "SetReturnTime" Param "60000" } } WaveSpawn { TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target "intel2" Action "SetReturnTime" Param "60000" } } WaveSpawn { TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target "intel3" Action "SetReturnTime" Param "60000" } } ///////////////////////// WaveSpawn // Bonk // A) Upper { Name "W1_1_bonk" Where spawnbot_a TotalCount 16 //18-->15-->24-->20-->15-->20-->16 MaxActive 6 //8-->7-->8-->7-->6 SpawnCount 4 //6-->5-->6-->5-->4 WaitBetweenSpawns 10 //8-->12-->8-->10 WaitBeforeStarting 6 //13-->6 TotalCurrency 60 TFBot { Template T_TFBot_Scout_Bonk Skill Hard } } WaveSpawn // Heavies // A) Upper { Name "W1_1" Where spawnbot_a TotalCount 16 //24-->30-->24-->30-->24-->20-->16 MaxActive 7 //12-->10-->8 -->7 SpawnCount 4 //6 -->5 -->4 WaitBetweenSpawns 7 //6 -->8 WaitBeforeStarting 0 TotalCurrency 120 TFBot { Class Heavyweapons Skill Easy } } WaveSpawn // Giant Pyro Push // A) Upper { Name "W1_2_pyro" WaitForAllSpawned "W1_1" Where spawnbot_a //c -->a TotalCount 4 MaxActive 4 SpawnCount 2 WaitBetweenSpawns 18 //18-->17-->18-->22-->20-->18 WaitBeforeStarting 6 //0 -->6 TotalCurrency 90 Squad { FormationSize 500 TFBot { Template T_TFBot_Giant_Pyro Skill Expert Attributes AlwaysFireWeapon } TFBot { Template T_TFBot_Medic_QuickUber Tag bot_squad_member } } } WaveSpawn // Demo rush // B) Lower // I could maybe get away with just reducing the maxactive to 6 and keeping spawncount at 4 { Name "W1_2" WaitForAllDead "W1_1" Where spawnbot_b TotalCount 15 //30-->28-->25-->20-->15 MaxActive 6 //12-->10-->8 -->6 SpawnCount 3 //6 -->5 -->4 -->3 WaitBetweenSpawns 6 //6 -->7 -->6 WaitBeforeStarting 2 //10-->5 -->0 -->2 TotalCurrency 80 TFBot { Class Demoman Skill Normal } } WaveSpawn // Giant Soldier with uber // A) Upper { WaitForAllDead "W1_2_pyro" Where spawnbot_a Name "W1_3" TotalCount 8 //10-->8 MaxActive 8 //5 -->10-->8 SpawnCount 4 //5 -->4 WaitBetweenSpawns 25 //20-->30-->28-->25 WaitBeforeStarting 0 //5 -->0 TotalCurrency 250 Squad { TFBot { Template T_TFBot_Giant_Soldier // Changed from infinite soldier Skill Expert } TFBot { Template T_TFBot_Medic_QuickUber Tag bot_squad_member } TFBot { Template T_TFBot_Medic_QuickUber Tag bot_squad_member } TFBot { Template T_TFBot_Medic_QuickUber Tag bot_squad_member } } } //Revision: Gun scouts can be quite punishing when the team has low money. They can easily pick off a demo or sniper trying to kill the uber medics. Consider changing these to shotgun heavies (less punishing) WaveSpawn // Scout Support // A) Upper { WaitForAllDead "W1_2" Name "W1_3" Where spawnbot_a TotalCount 30 //50-->30 MaxActive 8 //8 -->6 -->8 SpawnCount 4 //4 -->3 -->4 WaitBetweenSpawns 5 //6 -->5 WaitBeforeStarting 3 TotalCurrency 100 Support 1 TFBot { Class Scout Skill Easy } } } // Wave 2 // // Max cash by this point: 1500 + 100 bonus (Careful! Spy and Sniper can get max damage! Giants will die) // Cash this wave: 800 // Map Phase: 2 Wave { WaitWhenDone 60 Sound "Announcer.IncomingMob" Checkpoint Yes StartWaveOutput { Target wave_start_relayA Action Trigger } InitWaveOutput { Target initA_setFront Action Trigger } DoneOutput { Target pickfast Action PickRandomShuffle } // GATE-A NAV FIX // WaveSpawn { WaitBeforeStarting 0 TotalCount 0 FirstSpawnOutput { Target gamerules Action RunScriptCode Param " local ent = null local targetname = `` targetname = `hhpwr_nav_avoid_gate_fix_1` ent = null while (ent = Entities.FindByName(ent, targetname)) { ent.Kill() printl(`*** HHPWR -- Removed existing func_nav_avoid: ` + targetname) } ent = SpawnEntityFromTable(`func_nav_avoid`, { targetname = targetname origin = Vector(-2752, -1152, 448) angles = QAngle(0, 0, 0) tags = `bomb_carrier bomb_carrier1 bomb_carrier2 bomb_carrier3 bot_giant` }) if (!ent) { printl(`*** HHPWR -- Failed to create func_nav_avoid: ` + targetname) return } printl(`*** HHPWR -- Created func_nav_avoid: ` + targetname) ent.SetSize(Vector(0, 0, 0), Vector(128, 320, 128)) ent.SetSolid(2) targetname = `hhpwr_nav_avoid_gate_fix_2` ent = null while (ent = Entities.FindByName(ent, targetname)) { ent.Kill() printl(`*** HHPWR -- Removed existing func_nav_avoid: ` + targetname) } ent = SpawnEntityFromTable(`func_nav_avoid`, { targetname = targetname origin = Vector(-2880, -1536, 256) angles = QAngle(0, 0, 0) tags = `bomb_carrier bomb_carrier1 bomb_carrier2 bomb_carrier3 bot_giant` }) if (!ent) { printl(`*** HHPWR -- Failed to create func_nav_avoid: ` + targetname) return } printl(`*** HHPWR -- Created func_nav_avoid: ` + targetname) ent.SetSize(Vector(0, 0, 0), Vector(256, 256, 128)) ent.SetSolid(2) " } } // DISABLE BOMB RESET // WaveSpawn { TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target "intel" Action "SetReturnTime" Param "60000" } } WaveSpawn { TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target "intel2" Action "SetReturnTime" Param "60000" } } WaveSpawn { TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target "intel3" Action "SetReturnTime" Param "60000" } } ///////////////////////// // CHARGED SOLDIERS ALTERNATE BETWEEN SPAWNS A <--> B WaveSpawn // Giant Charged Soldier Stampede Upper // A) Upper { Name "W2_1" Where spawnbot_a TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 4 WaitBetweenSpawns 22 TotalCurrency 100 TFBot { Template T_TFGateBot_Giant_Soldier_Crit } } WaveSpawn // Giant Charged Soldier Stampede Lower // B) Lower { Name "W2_1" Where spawnbot_b TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 22 TotalCurrency 100 TFBot { Template T_TFGateBot_Giant_Soldier_Crit } } WaveSpawn // Giant Charged Soldier Finale // A) Upper { Name "W2_2" WaitForAllDead "W2_1" Where spawnbot_a TotalCount 8 MaxActive 8 SpawnCount 2 WaitBeforeStarting 2 WaitBetweenSpawns 12 TotalCurrency 400 Squad { TFBot { Template T_TFBot_Giant_Soldier_Crit tag bot_giant } TFBot { Template T_TFBot_Medic_QuickUber tag bot_squad_member } } } WaveSpawn // Heavy intermission // B) Lower { Name "W2_2" WaitForAllDead "W2_1" Where spawnbot_b TotalCount 12 MaxActive 4 //5 -->4 SpawnCount 3 WaitBeforeStarting 3 WaitBetweenSpawns 18 TotalCurrency 100 Support Limited TFBot { Class Heavyweapons Skill Easy } } WaveSpawn // Demoknight support // A) Upper // B) Lower { Name "W2_0" Where spawnbot_a Where spawnbot_b TotalCount 80 //50-->80 MaxActive 8 SpawnCount 4 WaitBeforeStarting 0 WaitBetweenSpawns 8 TotalCurrency 80 Support 1 TFBot { Template T_TFBot_Demoman_Knight } } WaveSpawn // Huntsman support // A) Upper { Name "W2_0" Where spawnbot_a TotalCount 20 MaxActive 4 //6 -->4 SpawnCount 4 WaitBeforeStarting 20 WaitBetweenSpawns 24 TotalCurrency 20 Support 1 TFBot { Template T_TFBot_Sniper_Huntsman } } } // Wave 3 // // Max cash by this point: 2300 + 200 bonus (Be careful! This is enough money for spy to completely max-out his knife! Giant medics will die!) // Cash this wave: 850 // Map Phase: 3 Wave { WaitWhenDone 60 Sound "Announcer.IncomingMob" Checkpoint Yes StartWaveOutput { Target wave_start_relay Action Trigger } InitWaveOutput { Target initMain_sides Action Trigger } DoneOutput { Target pickfast Action PickRandomShuffle } WaveSpawn //Init A { TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target initA_setFront Action Trigger } } // GATE-A NAV FIX // WaveSpawn { WaitBeforeStarting 0 TotalCount 0 FirstSpawnOutput { Target gamerules Action RunScriptCode Param " local ent = null local targetname = `` targetname = `hhpwr_nav_avoid_gate_fix_1` ent = null while (ent = Entities.FindByName(ent, targetname)) { ent.Kill() printl(`*** HHPWR -- Removed existing func_nav_avoid: ` + targetname) } ent = SpawnEntityFromTable(`func_nav_avoid`, { targetname = targetname origin = Vector(-2752, -1152, 448) angles = QAngle(0, 0, 0) tags = `bomb_carrier bomb_carrier1 bomb_carrier2 bomb_carrier3 bot_giant` }) if (!ent) { printl(`*** HHPWR -- Failed to create func_nav_avoid: ` + targetname) return } printl(`*** HHPWR -- Created func_nav_avoid: ` + targetname) ent.SetSize(Vector(0, 0, 0), Vector(128, 320, 128)) ent.SetSolid(2) targetname = `hhpwr_nav_avoid_gate_fix_2` ent = null while (ent = Entities.FindByName(ent, targetname)) { ent.Kill() printl(`*** HHPWR -- Removed existing func_nav_avoid: ` + targetname) } ent = SpawnEntityFromTable(`func_nav_avoid`, { targetname = targetname origin = Vector(-2880, -1536, 256) angles = QAngle(0, 0, 0) tags = `bomb_carrier bomb_carrier1 bomb_carrier2 bomb_carrier3 bot_giant` }) if (!ent) { printl(`*** HHPWR -- Failed to create func_nav_avoid: ` + targetname) return } printl(`*** HHPWR -- Created func_nav_avoid: ` + targetname) ent.SetSize(Vector(0, 0, 0), Vector(256, 256, 128)) ent.SetSolid(2) " } } // DISABLE BOMB RESET // WaveSpawn { TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target "intel" Action "SetReturnTime" Param "60000" } } WaveSpawn { TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target "intel2" Action "SetReturnTime" Param "60000" } } WaveSpawn { TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target "intel3" Action "SetReturnTime" Param "60000" } } ///////////////////////// WaveSpawn // Giant heavy combo #1 // C) Bridge / Cliff // Changed conch to battalion so other bots dont get a speed boost { Where spawnbot_c //a-->c //Let's see how this changes the experience. Name "W3_1" TotalCount 2 MaxActive 2 SpawnCount 2 WaitBetweenSpawns 0 WaitBeforeStarting 0 //6 -->0 TotalCurrency 100 Squad { TFBot { Template T_TFGateBot_Giant_Heavyweapons Tag bot_giant } TFBot { Template T_TFBot_Giant_Medic_Regen //Pop-->Regen Tag bot_squad_member Tag bot_giant } } } WaveSpawn // Soldiers gate rush // C) Cliff // I could put the spawnCount back to 8 and keep maxactive at 8. This is because the 2nd rush has 6 soldiers and can still spawn when 2 soldiers remain. { Name "W3_2" Where spawnbot_c TotalCount 14 //12-->8 -->16-->14-->12-->14-->12-->14 MaxActive 8 //12-->8 -->10-->8 -->10-->8 SpawnCount 8 //4 -->8 -->6 -->8 -->6 -->8 WaitBetweenSpawns 30 //2 -->4 -->3 -->30 WaitBeforeStarting 2 //4 -->0 -->8 -->6 -->3 -->2 TotalCurrency 50 TFBot { Template T_TFGateBot_Soldier_Easy } } WaveSpawn // Giant heavy combo #2 // A) Bridge / Upper // Changed conch to battalion so gate soldiers dont get a speed boost { Name "W3_2_A" WaitForAllDead "W3_1" Where spawnbot_a TotalCount 2 MaxActive 2 SpawnCount 2 WaitBetweenSpawns 0 WaitBeforeStarting 2 //0 -->2 TotalCurrency 50 Squad { TFBot { Template T_TFBot_Giant_Heavyweapons Tag bot_giant } TFBot { Template T_TFBot_Giant_Medic_Regen //Pop-->Regen Tag bot_squad_member Tag bot_giant } } } WaveSpawn // Giant FAN scouts rush gate // B) Flank / Lower { Name "W3_2_B" WaitForAllSpawned "W3_2_A" Where spawnbot_b TotalCount 3 MaxActive 3 SpawnCount 1 WaitBetweenSpawns 6 //6 -->5 -->3 -->4 -->6 WaitBeforeStarting 29 //12-->18-->36-->30-->25-->29-->27-->29 TotalCurrency 75 TFBot { Template T_TFGateBot_Giant_Scout_FAN Tag bot_giant } } //Finale buffer WaveSpawn { Name "W3_2_buff" WaitForAllDead "W3_2_A" WaitBeforeStarting 0 TotalCount 0 } WaveSpawn { Name "W3_2_buff" WaitForAllDead "W3_2_B" WaitBeforeStarting 0 TotalCount 0 } WaveSpawn // Giant crit soldier finale // A) Bridge / Upper // Considering replacing this with giant HOK heavy with armored kritz medics { WaitForAllDead "W3_2_buff" Where spawnbot_a TotalCount 8 MaxActive 8 SpawnCount 4 WaitBetweenSpawns 26 //30-->26 WaitBeforeStarting 0 TotalCurrency 200 Squad { TFBot { Template T_TFBot_Giant_Soldier_Spammer_Reload Attributes AlwaysCrit Tag bot_giant } 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 // KGB support // A) Bridge / Upper { WaitForAllDead "W3_2_buff" Where spawnbot_a TotalCount 25 MaxActive 8 SpawnCount 4 WaitBetweenSpawns 8 //10-->6-->8 WaitBeforeStarting 6 TotalCurrency 125 Support 1 TFBot { Template T_TFBot_Heavyweapons_Heavyweight_Champ } } WaveSpawn // Spy support { WaitForAllDead "W3_2_buff" Where spawnbot_a Where spawnbot_b Where spawnbot_c Randomspawn 1 TotalCount 8 MaxActive 2 SpawnCount 2 WaitBetweenSpawns 30 WaitBeforeStarting 15 TotalCurrency 0 Support 1 TFBot { Class Spy Skill Normal Attributes IgnoreFlag } } //WaveSpawn // Heavy support // // A) Bridge / Upper //{ // WaitForAllDead "W3_2" // // Where spawnbot_a // TotalCount 25 // MaxActive 8 //4 -->8 -->9 -->8 // SpawnCount 4 //1 -->4 -->7 -->6 -->4 // WaitBetweenSpawns 16 //6 -->8 -->16-->10 // WaitBeforeStarting 6 //5 -->0 -->5 -->6 // TotalCurrency 175 // Support 1 // TFBot // { // Class Heavyweapons // Skill Easy // } //} WaveSpawn // Scattergun support (entire wave) // C) Cliff { Name "W3_4" Where spawnbot_c TotalCount 50 MaxActive 8 //4 -->8 SpawnCount 4 //1 -->5 WaitBetweenSpawns 8 //12-->4 -->6 -->8 WaitBeforeStarting 20 //12-->45-->20-->15-->20 TotalCurrency 250 //Moved 50 cash from deleted conch to here Support 1 TFBot { Class Scout Skill Easy } } } // Wave 4 // // Max cash by this point: 3150 + 300 bonus // Cash this wave: 850 // Map Phase: 3 Wave { WaitWhenDone 60 Sound "Announcer.IncomingMob" Checkpoint Yes StartWaveOutput { Target wave_start_relay Action Trigger } InitWaveOutput { Target initMain_sides Action Trigger } DoneOutput { Target pickfast Action PickRandomShuffle } WaveSpawn // Init A { TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target initA_setFront Action Trigger } } // GATE-A NAV FIX // WaveSpawn { WaitBeforeStarting 0 TotalCount 0 FirstSpawnOutput { Target gamerules Action RunScriptCode Param " local ent = null local targetname = `` targetname = `hhpwr_nav_avoid_gate_fix_1` ent = null while (ent = Entities.FindByName(ent, targetname)) { ent.Kill() printl(`*** HHPWR -- Removed existing func_nav_avoid: ` + targetname) } ent = SpawnEntityFromTable(`func_nav_avoid`, { targetname = targetname origin = Vector(-2752, -1152, 448) angles = QAngle(0, 0, 0) tags = `bomb_carrier bomb_carrier1 bomb_carrier2 bomb_carrier3 bot_giant` }) if (!ent) { printl(`*** HHPWR -- Failed to create func_nav_avoid: ` + targetname) return } printl(`*** HHPWR -- Created func_nav_avoid: ` + targetname) ent.SetSize(Vector(0, 0, 0), Vector(128, 320, 128)) ent.SetSolid(2) targetname = `hhpwr_nav_avoid_gate_fix_2` ent = null while (ent = Entities.FindByName(ent, targetname)) { ent.Kill() printl(`*** HHPWR -- Removed existing func_nav_avoid: ` + targetname) } ent = SpawnEntityFromTable(`func_nav_avoid`, { targetname = targetname origin = Vector(-2880, -1536, 256) angles = QAngle(0, 0, 0) tags = `bomb_carrier bomb_carrier1 bomb_carrier2 bomb_carrier3 bot_giant` }) if (!ent) { printl(`*** HHPWR -- Failed to create func_nav_avoid: ` + targetname) return } printl(`*** HHPWR -- Created func_nav_avoid: ` + targetname) ent.SetSize(Vector(0, 0, 0), Vector(256, 256, 128)) ent.SetSolid(2) " } } // DISABLE BOMB RESET // WaveSpawn { TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target "intel" Action "SetReturnTime" Param "60000" } } WaveSpawn { TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target "intel2" Action "SetReturnTime" Param "60000" } } WaveSpawn { TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target "intel3" Action "SetReturnTime" Param "60000" } } ///////////////////////// WaveSpawn // Giant Demo #1 // A) Bridge { Where spawnbot_a Name "W4_1" TotalCount 4 MaxActive 4 SpawnCount 4 WaitBetweenSpawns 0 WaitBeforeStarting 10 //8 -->9 -->10-->8 -->9 -->10 TotalCurrency 100 Squad { TFBot { Template T_TFGateBot_Giant_Demoman_Crit ClassIcon demo_spammer Tag bot_giant } TFBot { Template T_TFGateBot_Heavy_IronFist Tag bot_giant Tag bot_squad_member } TFBot { Template T_TFGateBot_Heavy_IronFist Tag bot_giant Tag bot_squad_member } TFBot { Template T_TFBot_Medic_BigHeal_Armor Tag bot_giant Tag bot_squad_member } } } WaveSpawn // Pyro support #1 // A) Bridge { Where spawnbot_a Name "W4_1" TotalCount 3 MaxActive 3 SpawnCount 3 WaitBetweenSpawns 0 WaitBeforeStarting 18 // 8 seconds after demo spawn TotalCurrency 15 TFBot { Template T_TFGateBot_Pyro_Easy } } WaveSpawn // Giant Demo #2 // B) Flank { Where spawnbot_b Name "W4_1" TotalCount 4 MaxActive 4 SpawnCount 4 WaitBetweenSpawns 0 WaitBeforeStarting 0 TotalCurrency 100 Squad { TFBot { Template T_TFGateBot_Giant_Demoman_Crit ClassIcon demo_spammer Tag bot_giant } TFBot { Template T_TFGateBot_Heavy_IronFist Tag bot_giant Tag bot_squad_member } TFBot { Template T_TFGateBot_Heavy_IronFist Tag bot_giant Tag bot_squad_member } TFBot { Template T_TFBot_Medic_BigHeal_Armor Tag bot_giant Tag bot_squad_member } } } WaveSpawn // Pyro support #2 // B) Flank { Where spawnbot_b Name "W4_1" TotalCount 3 MaxActive 3 SpawnCount 3 WaitBetweenSpawns 0 WaitBeforeStarting 8 // 8 seconds after demo spawn TotalCurrency 15 TFBot { Template T_TFGateBot_Pyro_Easy } } WaveSpawn // Giant Demo #3 // C) Cliff { Where spawnbot_c Name "W4_1" TotalCount 4 MaxActive 4 SpawnCount 4 WaitBetweenSpawns 0 WaitBeforeStarting 16 //12-->14-->16-->12-->14-->6 TotalCurrency 100 Squad { TFBot { Template T_TFGateBot_Giant_Demoman_Crit ClassIcon demo_spammer Tag bot_giant } TFBot { Template T_TFGateBot_Heavy_IronFist Tag bot_squad_member Tag bot_giant } TFBot { Template T_TFGateBot_Heavy_IronFist Tag bot_squad_member Tag bot_giant } TFBot { Template T_TFBot_Medic_BigHeal_Armor Tag bot_giant Tag bot_squad_member } } } WaveSpawn // Pyro support #3 // C) Cliff { Where spawnbot_c Name "W4_1" TotalCount 3 MaxActive 3 SpawnCount 3 WaitBetweenSpawns 0 WaitBeforeStarting 24 // 8 seconds after demo spawn TotalCurrency 15 TFBot { Template T_TFGateBot_Pyro_Easy } } WaveSpawn // Init main // Bomb rush gets sent to the pit { WaitForAllSpawned "W4_1" TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target changeMain_roadside Action Trigger } } WaveSpawn // Giant Gate Soldiers // B) Flank / Lower { Name "W4_2_B" WaitForAllDead "W4_1" Where spawnbot_b //a -->b -->a -->b TotalCount 4 MaxActive 4 SpawnCount 1 WaitBetweenSpawns 10 //12-->10 WaitBeforeStarting 4 //2 -->5 -->4 TotalCurrency 100 TFBot { Template T_TFGateBot_Giant_Soldier_Spammer Tag bot_giant } } WaveSpawn // Gatebot Pyros // A) Bridge { Name "W4_2_B" WaitForAllDead "W4_1" Where spawnbot_b //a -->b -->a -->b TotalCount 8 //6 -->9 -->8 -->8 MaxActive 4 SpawnCount 2 //3 -->2 -->3 -->2 WaitBetweenSpawns 18 //20-->16-->20-->12-->18 WaitBeforeStarting 18 //14-->18-->14-->19-->18 TotalCurrency 30 TFBot { Template T_TFGateBot_Pyro_Easy } } WaveSpawn // Giant scout bomb rush // A) Bridge / Upper { Name "W4_2_B" WaitForAllDead "W4_1" Where spawnbot_a //b -->a -->b -->a TotalCount 3 MaxActive 2 SpawnCount 1 WaitBetweenSpawns 14 WaitBeforeStarting 4 //2 -->5 -->2 -->5 -->4 TotalCurrency 75 TFBot { Template T_TFBot_Giant_Scout_FAN Tag bot_giant } } WaveSpawn // Demoknight // A) Bridge / Upper { Name "W4_420" WaitForAllDead "W4_1" Where spawnbot_a //b -->a -->b -->a TotalCount 16 //20-->16 MaxActive 8 SpawnCount 4 WaitBetweenSpawns 5 WaitBeforeStarting 6 //5 -->8 -->4 -->6 -->7 -->6 TotalCurrency 30 TFBot { Template T_TFBot_Demoman_Knight } } WaveSpawn // Giant Demo Escort #1 // B) Flank / Lower { Name "W4_2_C_1" WaitForAllDead "W4_2_B" Where spawnbot_a TotalCount 9 MaxActive 9 SpawnCount 3 WaitBetweenSpawns 10 WaitBeforeStarting 2 TotalCurrency 75 Squad { TFBot { Template T_TFBot_Giant_Demoman ClassIcon demo_spammer Attributes AlwaysCrit Tag bot_giant } TFBot { Template T_TFBot_Medic_BigHeal_Armor Tag bot_giant Tag bot_squad_member } TFBot { Template T_TFBot_Medic_BigHeal_Armor Tag bot_giant Tag bot_squad_member } } } WaveSpawn // Finale conch support, everything will now go at lightspeed // A) Bridge / Upper // C) Cliff { Name "W4_2_C" WaitForAllDead "W4_2_B" Where spawnbot_a Where spawnbot_b //c -->b TotalCount 25 //18-->12-->18-->25 MaxActive 8 //6 -->3 -->6 -->8 -->10-->8 -->6 -->8 SpawnCount 4 //2 -->1 -->2 -->4 -->3 -->4 WaitBetweenSpawns 5 WaitBeforeStarting 2 TotalCurrency 25 Support 1 TFBot { Template T_TFBot_Soldier_Extended_Concheror Skill Easy //Normal-->Easy } } WaveSpawn // Steel support // A) Bridge / Upper // C) Cliff { Name "W4_2_C" WaitForAllDead "W4_2_B" Where spawnbot_a Where spawnbot_b //c -->b TotalCount 5 MaxActive 2 //1 -->2 SpawnCount 1 WaitBetweenSpawns 14 //10-->14 WaitBeforeStarting 6 TotalCurrency 20 Support 1 //Limited-->1 TFBot { Template T_TFBot_Heavy_IronFist tag bot_giant } } WaveSpawn // Scout bomb carrier // A) Bridge / Upper { Name "W4_420" Where spawnbot_a TotalCount 1 MaxActive 1 //1 -->2 -->1 SpawnCount 1 WaitBetweenSpawns 30 //60-->30-->20-->30 WaitBeforeStarting 120 // Very long delay to reduce chances of stealing the bomb from giant scouts TotalCurrency 0 Support 1 TFBot { Template T_TFBot_Scout_Melee } } } // Wave 5 // // Max cash by this point: 4000 + 400 bonus // Cash this wave: 900 // Map Phase: 3 Wave { // INITIALIZE WAVE WaitWhenDone 60 Sound "Announcer.IncomingMob" Checkpoint Yes StartWaveOutput { Target wave_start_relay Action Trigger } InitWaveOutput { Target initMain_sides Action Trigger } DoneOutput { Target pickfast Action PickRandomShuffle } // INITIALIZE ALTERNATE DEFLECTOR PATH // WaveSpawn { WaitBeforeStarting 0 TotalCount 0 FirstSpawnOutput { Target gamerules Action RunScriptCode Param " local ent = null local targetname = `` targetname = `hhpwr_nav_prefer_deflector_1` ent = null while (ent = Entities.FindByName(ent, targetname)) { ent.Kill() printl(`*** HHPWR -- Removed existing func_nav_prefer: ` + targetname) } ent = SpawnEntityFromTable(`func_nav_prefer`, { targetname = targetname origin = Vector(-1728, 1856, 192) angles = QAngle(0, 0, 0) tags = `nav_prefer_deflector` }) if (!ent) { printl(`*** HHPWR -- Failed to create func_nav_prefer: ` + targetname) return } printl(`*** HHPWR -- Created func_nav_prefer: ` + targetname) ent.SetSize(Vector(0, 0, 0), Vector(800, 480, 192)) ent.SetSolid(2) targetname = `hhpwr_nav_prefer_deflector_2` ent = null while (ent = Entities.FindByName(ent, targetname)) { ent.Kill() printl(`*** HHPWR -- Removed existing func_nav_prefer: ` + targetname) } ent = SpawnEntityFromTable(`func_nav_prefer`, { targetname = targetname origin = Vector(-928, 1664, 192) angles = QAngle(0, 0, 0) tags = `nav_prefer_deflector` }) if (!ent) { printl(`*** HHPWR -- Failed to create func_nav_prefer: ` + targetname) return } printl(`*** HHPWR -- Created func_nav_prefer: ` + targetname) ent.SetSize(Vector(0, 0, 0), Vector(640, 640, 192)) ent.SetSolid(2) targetname = `hhpwr_nav_prefer_deflector_3` ent = null while (ent = Entities.FindByName(ent, targetname)) { ent.Kill() printl(`*** HHPWR -- Removed existing func_nav_prefer: ` + targetname) } ent = SpawnEntityFromTable(`func_nav_prefer`, { targetname = targetname origin = Vector(-1920, 1664, 64) angles = QAngle(0, 0, 0) tags = `nav_prefer_deflector` }) if (!ent) { printl(`*** HHPWR -- Failed to create func_nav_prefer: ` + targetname) return } printl(`*** HHPWR -- Created func_nav_prefer: ` + targetname) ent.SetSize(Vector(0, 0, 0), Vector(192, 672, 320)) ent.SetSolid(2) targetname = `hhpwr_nav_avoid_deflector` ent = null while (ent = Entities.FindByName(ent, targetname)) { ent.Kill() printl(`*** HHPWR -- Removed existing func_nav_avoid: ` + targetname) } ent = SpawnEntityFromTable(`func_nav_avoid`, { targetname = targetname origin = Vector(-1408, -1344, 32) angles = QAngle(0, 0, 0) tags = `nav_prefer_deflector` }) if (!ent) { printl(`*** HHPWR -- Failed to create func_nav_avoid: ` + targetname) return } printl(`*** HHPWR -- Created func_nav_avoid: ` + targetname) ent.SetSize(Vector(0, 0, 0), Vector(640, 576, 448)) ent.SetSolid(2) " } } // GATE-A NAV FIX // WaveSpawn { WaitBeforeStarting 0 TotalCount 0 FirstSpawnOutput { Target gamerules Action RunScriptCode Param " local ent = null local targetname = `` targetname = `hhpwr_nav_avoid_gate_fix_1` ent = null while (ent = Entities.FindByName(ent, targetname)) { ent.Kill() printl(`*** HHPWR -- Removed existing func_nav_avoid: ` + targetname) } ent = SpawnEntityFromTable(`func_nav_avoid`, { targetname = targetname origin = Vector(-2752, -1152, 448) angles = QAngle(0, 0, 0) tags = `bomb_carrier bomb_carrier1 bomb_carrier2 bomb_carrier3 bot_giant` }) if (!ent) { printl(`*** HHPWR -- Failed to create func_nav_avoid: ` + targetname) return } printl(`*** HHPWR -- Created func_nav_avoid: ` + targetname) ent.SetSize(Vector(0, 0, 0), Vector(128, 320, 128)) ent.SetSolid(2) targetname = `hhpwr_nav_avoid_gate_fix_2` ent = null while (ent = Entities.FindByName(ent, targetname)) { ent.Kill() printl(`*** HHPWR -- Removed existing func_nav_avoid: ` + targetname) } ent = SpawnEntityFromTable(`func_nav_avoid`, { targetname = targetname origin = Vector(-2880, -1536, 256) angles = QAngle(0, 0, 0) tags = `bomb_carrier bomb_carrier1 bomb_carrier2 bomb_carrier3 bot_giant` }) if (!ent) { printl(`*** HHPWR -- Failed to create func_nav_avoid: ` + targetname) return } printl(`*** HHPWR -- Created func_nav_avoid: ` + targetname) ent.SetSize(Vector(0, 0, 0), Vector(256, 256, 128)) ent.SetSolid(2) " } } // DISABLE BOMB RESETS WaveSpawn { TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target "intel" Action "SetReturnTime" Param "60000" } } WaveSpawn { TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target "intel2" Action "SetReturnTime" Param "60000" } } WaveSpawn { TotalCount 0 SpawnCount 0 FirstSpawnOutput { Target "intel3" Action "SetReturnTime" Param "60000" } } // WAVE CONTENT WaveSpawn // Tanks { Name "W5_tank" TotalCount 3 WaitBeforeStarting 0 WaitBetweenSpawns 42 //45-->40-->44-->40-->44-->42-->40-->42 TotalCurrency 300 FirstSpawnOutput { Target boss_spawn_relay Action Trigger } Tank { Health 20000 //25k-->30k-->25k-->20k Speed 75 //75-->80-->75 Name "tankboss" StartingPathTrackNode "tank_path_a_10" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn // Final tank with cool skin { Name "W5_tank_final" WaitForAllSpawned "W5_tank" TotalCount 1 WaitBeforeStarting 42 //40-->44-->40-->44-->42-->40-->42 TotalCurrency 100 Tank { Health 20000 Speed 75 //75-->80-->75 Name "tankboss" StartingPathTrackNode "tank_path_a_10" Skin 1 OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn //Giant deflector push out { Where spawnbot_a Name "W5_2" TotalCount 8 //6 -->8 MaxActive 8 //4 -->6 -->4 -->8 SpawnCount 2 WaitBetweenSpawns 42 //26-->38-->40-->44-->40-->44-->42-->40-->42 WaitBeforeStarting 25 //34-->30-->32-->26-->25-->27-->28-->25 TotalCurrency 160 Squad { TFBot { Template T_TFBot_Giant_Heavyweapons_Deflector Tag bot_giant Tag nav_prefer_deflector } TFBot { Template T_TFBot_Giant_Medic_Regen Tag bot_squad_member Tag bot_giant Tag nav_prefer_deflector } } } WaveSpawn // Superscouts!!! You can't ignore them!!! Split up and work as a team!!! { Where spawnbot_c //b -->c Name "W5_0" TotalCount 12 //16-->14-->16-->14-->12-->14-->12 MaxActive 4 SpawnCount 2 WaitBetweenSpawns 28 //20-->22-->24-->28-->24-->28 WaitBeforeStarting 12 //10-->12 TotalCurrency 140 TFBot { Template T_TFBot_Giant_Scout_Fast Tag bot_giant } } WaveSpawn //Crit soldiers, harass tank busters, tempt medic to waste shield { Where spawnbot_a Name "W5_1" TotalCount 8 //16-->8 MaxActive 8 SpawnCount 8 //8 -->8 WaitBetweenSpawns 10 WaitBeforeStarting 16 //16-->13-->16 TotalCurrency 20 TFBot { Class Soldier Skill Hard Attributes AlwaysCrit //Intention is to push and harass tankbusters so that they don't just get a free kill on the tank as soon as it spawns. } } WaveSpawn // MORE CRIT SOLDIERS >:DDD // C) Cliff { Name "W5_4" WaitForAllSpawned "W5_2" Where spawnbot_c TotalCount 8 //8 -->6 -->8 MaxActive 8 //8 -->6 -->8 SpawnCount 8 //8 -->6 -->8 WaitBetweenSpawns 0 WaitBeforeStarting 8 TotalCurrency 20 TFBot { Class Soldier Skill Hard Attributes AlwaysCrit } } // Consider reducing the spawncount instead of the spawn delay. This way the demo support is more spread out and things get less crowded. // The problem is the average density that support demos are usually encountered with. // It also needs to be balanced in a way that demos are continuous and fill up empty space without becoming overwhelming. If there's ever a part of the wave where support demos are absent, then it feels sparse and stagnant. // This usually happens when the team is pushed back to B and it takes a long time for the demos to reach them. WaveSpawn //Demo Support { WaitForAllDead "W5_1" Where spawnbot_a Name "W5_3" TotalCount 40 MaxActive 6 //8 -->6 -->8 -->6 SpawnCount 2 WaitBetweenSpawns 10 //5 -->8 -->10-->12-->10 WaitBeforeStarting 10 TotalCurrency 60 Support 1 TFBot { Class Demoman Skill Normal } } } Templates { T_TFBot_Heavy_IronFist { Class Heavyweapons Name "Steel Gauntlet" ClassIcon heavy_steelfist Health 900 Scale 1.5 WeaponRestrictions MeleeOnly Skill Expert Item "Fists of Steel" } T_TFBot_Medic_Kritzkrieg { Name "Kritzkrieg Medic" Class Medic Health 200 ClassIcon medic_kritz Attributes SpawnWithFullCharge Item "Berlin Brain Bowl" Item "The Kritzkrieg" ItemAttributes { ItemName "The Kritzkrieg" "heal rate bonus" 0.1 // Purpose is to give crits, nothing else. When the medic dies, the crits stop, that's all. "uber duration bonus" 999 "ubercharge rate bonus" 100 } CharacterAttributes { "bot medic uber health threshold" 999 } } T_TFBot_Medic_Kritzkrieg_Armor // Mostly stolen from kinetic energy by Bladex64, just without the resistances { Name "Armored Kritz Medic" Class Medic ClassIcon medic_kritz_armored Skill Expert Scale 1.2 Health 400 Item "The Kritzkrieg" Item "Berlin Brain Bowl" Item "Coldfront Carapace" Attributes SpawnWithFullCharge ItemAttributes { ItemName "The Kritzkrieg" "heal rate bonus" 0.1 "uber duration bonus" 999 "ubercharge rate bonus" 100 } ItemAttributes { ItemName "TF_WEAPON_SYRINGEGUN_MEDIC" "damage penalty" 0.1 } CharacterAttributes { "bot medic uber health threshold" 999 "move speed penalty" 0.65 } Tag bot_giant } T_TFBot_Medic_BigHeal_Armor // Mostly stolen from kinetic energy by Bladex64, just without the resistances { Class Medic Name "Armored Big-Heal Medic" ClassIcon medic_armored Skill Normal Scale 1.2 Health 500 //400-->500-->400-->500 Item "The Quick-Fix" Item "Das Naggenvatcher" Item "Coldfront Carapace" ItemAttributes { ItemName "The Quick-Fix" "ubercharge rate bonus" 0.1 } ItemAttributes { ItemName "TF_WEAPON_SYRINGEGUN_MEDIC" "damage penalty" 0.1 } CharacterAttributes { "heal rate bonus" 10 "move speed penalty" 0.65 } Tag bot_giant } T_TFBot_Soldier_ExtendedExtended_Concheror { Class Soldier Name "Extended Conch Soldier" Skill Normal ClassIcon soldier_conch Attributes SpawnWithFullCharge Item "The Concheror" CharacterAttributes { "increase buff duration" 12.0 } } T_TFBot_Demoman_Knight_Persian { Class Demoman Name "Persian Demoknight" ClassIcon demo_persian Skill Hard WeaponRestrictions MeleeOnly Item "Sultan's Ceremonial" Item "Ali Baba's Wee Booties" Item "The Persian Persuader" Item "The Splendid Screen" ItemAttributes { ItemName "The Splendid Screen" "attack not cancel charge" 1 } CharacterAttributes { "critboost on kill" 3 } } T_TFBot_Giant_Pyro_DragonFury { ClassIcon pyro_giant Name "Giant Pyro" Health 3000 Class Pyro Skill Expert WeaponRestrictions PrimaryOnly MaxVisionRange 800 Attributes "MiniBoss" ItemAttributes { ItemName "The Dragon's Fury" "damage bonus" 1.5 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.6 "airblast vulnerability multiplier" 0.6 "override footstep sound set" 6 } Item "The Dragon's Fury" } T_TFBot_Giant_Soldier_Spammer_SlowReload { Class Soldier Name "Giant Burst Fire Soldier" ClassIcon soldier_burstfire Item "The Shogun's Shoulder Guard" Health 3800 Skill Expert WeaponRestrictions PrimaryOnly Attributes MiniBoss Attributes HoldFireUntilFullReload ItemAttributes { ItemName "TF_WEAPON_ROCKETLAUNCHER" "move speed bonus" 0.5 "faster reload rate" 0.8 "fire rate bonus" 0.1 "clip size upgrade atomic" 5.0 "Projectile speed increased" 0.6 "damage bonus" 1.5 //overkill? } CharacterAttributes { "damage force reduction" 0.4 "airblast vulnerability multiplier" 0.4 "override footstep sound set" 3 } } T_TFBot_Giant_Soldier_Extended_Concheror_Spammer { Class Soldier Name "Giant Concheror Soldier" ClassIcon soldier_conch_giant Skill Expert Health 3800 WeaponRestrictions PrimaryOnly Attributes MiniBoss Attributes SpawnWithFullCharge Item "The Concheror" ItemAttributes { ItemName "TF_WEAPON_ROCKETLAUNCHER" "faster reload rate" -0.8 "fire rate bonus" 0.5 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.4 "airblast vulnerability multiplier" 0.4 "override footstep sound set" 3 "increase buff duration" 9.0 } } T_TFGateBot_Soldier_Extended_Concheror_Hard { Class Soldier ClassIcon soldier_conch Name "Extended Concheror Soldier" EventChangeAttributes { Default { Tag nav_prefer_gate1_flank Tag bot_gatebot BehaviorModifiers push Attributes IgnoreFlag Item "MvM GateBot Light Soldier" Item "The Concheror" Skill Hard Attributes SpawnWithFullCharge CharacterAttributes { "increase buff duration" 9.0 } } RevertGateBotsBehavior { Item "MvM GateBot Light Soldier" ItemAttributes { ItemName "MvM GateBot Light Soldier" "item style override" 1 } Item "The Concheror" Skill Hard Attributes SpawnWithFullCharge CharacterAttributes { "increase buff duration" 9.0 } } } } T_TFGateBot_Soldier_Extended_Concheror_Hard_Crit { Class Soldier ClassIcon soldier_conch Name "Extended Concheror Soldier" EventChangeAttributes { Default { Tag nav_prefer_gate1_flank Tag bot_gatebot BehaviorModifiers push Attributes IgnoreFlag Item "MvM GateBot Light Soldier" Item "The Concheror" Skill Hard Attributes SpawnWithFullCharge Attributes AlwaysCrit CharacterAttributes { "increase buff duration" 9.0 } } RevertGateBotsBehavior { Item "MvM GateBot Light Soldier" ItemAttributes { ItemName "MvM GateBot Light Soldier" "item style override" 1 } Item "The Concheror" Skill Hard Attributes SpawnWithFullCharge Attributes AlwaysCrit CharacterAttributes { "increase buff duration" 9.0 } } } } T_TFGateBot_Soldier_Extended_Battalion_Hard_Crit { Class Soldier ClassIcon soldier_backup Name "Extended Backup Soldier" EventChangeAttributes { Default { Tag nav_prefer_gate1_flank Tag bot_gatebot BehaviorModifiers push Attributes IgnoreFlag Item "MvM GateBot Light Soldier" Item "The Battalion's Backup" Skill Hard Attributes SpawnWithFullCharge Attributes AlwaysCrit CharacterAttributes { "increase buff duration" 9.0 } } RevertGateBotsBehavior { Item "MvM GateBot Light Soldier" ItemAttributes { ItemName "MvM GateBot Light Soldier" "item style override" 1 } Item "The Battalion's Backup" Skill Hard Attributes SpawnWithFullCharge Attributes AlwaysCrit CharacterAttributes { "increase buff duration" 9.0 } } } } T_TFGateBot_Sniper_Huntsman_Spammer { Class Sniper Name "Bowman Rapid Fire" "scale" 1.5 Health 1200 ClassIcon sniper_bow_multi EventChangeAttributes { Default { Tag nav_prefer_gate1_flank Tag bot_gatebot BehaviorModifiers push Attributes IgnoreFlag Item "MvM GateBot Light Sniper" Item "The Huntsman" Skill Hard Tag bot_giant ItemAttributes { ItemName "The Huntsman" "fire rate bonus" 0.6 } CharacterAttributes { "head scale" 0.7 "move speed bonus" 0.85 } } RevertGateBotsBehavior { Item "MvM GateBot Light Sniper" ItemAttributes { ItemName "MvM GateBot Light Sniper" "item style override" 1 } Item "The Huntsman" Tag bot_giant ItemAttributes { ItemName "The Huntsman" "fire rate bonus" 0.6 } CharacterAttributes { "head scale" 0.7 "move speed bonus" 0.85 } } } } T_TFGateBot_Scout_Shortstop_Normal { Class Scout ClassIcon scout_shortstop Name "Shortstop Scout" Health 650 Scale 1.4 EventChangeAttributes { Default { Tag nav_prefer_gate1_flank Tag bot_gatebot BehaviorModifiers push Attributes IgnoreFlag Item "MvM GateBot Light Scout" Item "The Shortstop" Skill Normal Tag bot_giant CharacterAttributes { "head scale" 0.7 "move speed bonus" 1.25 } } RevertGateBotsBehavior { Item "MvM GateBot Light Scout" Item "The Shortstop" ItemAttributes { ItemName "MvM GateBot Light Scout" "item style override" 1 } Skill Normal Tag bot_giant CharacterAttributes { "head scale" 0.7 "move speed bonus" 1.25 } } } } T_TFGateBot_Scout_Shortstop_Normal_Crit { Class Scout ClassIcon scout_shortstop Name "Shortstop Scout" Health 650 Scale 1.4 EventChangeAttributes { Default { Tag nav_prefer_gate1_flank Tag bot_gatebot BehaviorModifiers push Attributes IgnoreFlag Item "MvM GateBot Light Scout" Item "The Shortstop" Item "The Milkman" Skill Normal Tag bot_giant Attributes AlwaysCrit CharacterAttributes { "head scale" 0.7 "move speed bonus" 1.25 } } RevertGateBotsBehavior { Item "MvM GateBot Light Scout" Item "The Shortstop" Item "The Milkman" ItemAttributes { ItemName "MvM GateBot Light Scout" "item style override" 1 } Skill Normal Tag bot_giant Attributes AlwaysCrit CharacterAttributes { "head scale" 0.7 "move speed bonus" 1.25 } } } } T_TFGateBot_Scout_Shortstop_Hard_Crit { Class Scout ClassIcon scout_shortstop Name "Shortstop Scout" Health 650 Scale 1.4 EventChangeAttributes { Default { Tag nav_prefer_gate1_flank Tag bot_gatebot BehaviorModifiers push Attributes IgnoreFlag Item "MvM GateBot Light Scout" Item "The Shortstop" Item "The Milkman" Skill Hard Tag bot_giant Attributes AlwaysCrit CharacterAttributes { "head scale" 0.7 "move speed bonus" 1.25 } } RevertGateBotsBehavior { Item "MvM GateBot Light Scout" Item "The Shortstop" Item "The Milkman" ItemAttributes { ItemName "MvM GateBot Light Scout" "item style override" 1 } Skill Hard Tag bot_giant Attributes AlwaysCrit CharacterAttributes { "head scale" 0.7 "move speed bonus" 1.25 } } } } T_TFGateBot_Sniper_Huntsman_Hard { Class Sniper Name "Bowman" ClassIcon sniper_bow EventChangeAttributes { Default { Tag nav_prefer_gate1_flank Tag bot_gatebot BehaviorModifiers push Attributes IgnoreFlag Item "MvM GateBot Light Sniper" Item "The Huntsman" Skill Hard ItemAttributes { ItemName "The Huntsman" "damage bonus" 0.5 } } RevertGateBotsBehavior { Item "MvM GateBot Light Sniper" ItemAttributes { ItemName "MvM GateBot Light Sniper" "item style override" 1 } Item "The Huntsman" Skill Hard ItemAttributes { ItemName "The Huntsman" "damage bonus" 0.5 } } } } T_TFGateBot_Pyro_Easy { Class Pyro EventChangeAttributes { Default { Tag bot_gatebot Tag nav_prefer_gate1_flank BehaviorModifiers push Attributes IgnoreFlag Item "MvM GateBot Light Pyro" Skill Easy } RevertGateBotsBehavior { Item "MvM GateBot Light Pyro" ItemAttributes { ItemName "MvM GateBot Light Pyro" "item style override" 1 } Skill Easy } } } T_TFGateBot_Pyro_AlwaysFireWeapon_Crit { Class Pyro Skill Easy EventChangeAttributes { Default { Tag bot_gatebot Tag nav_prefer_gate1_flank BehaviorModifiers push Attributes IgnoreFlag Item "MvM GateBot Light Pyro" Attributes AlwaysFireWeapon Attributes AlwaysCrit Skill Easy } RevertGateBotsBehavior { Item "MvM GateBot Light Pyro" ItemAttributes { ItemName "MvM GateBot Light Pyro" "item style override" 1 } Attributes AlwaysFireWeapon Attributes AlwaysCrit Skill Easy } } } T_TFGateBot_Pyro_AlwaysFireWeapon_Crit_Slow { Class Pyro Skill Easy EventChangeAttributes { Default { Tag bot_gatebot Tag nav_prefer_gate1_flank BehaviorModifiers push Attributes IgnoreFlag Item "MvM GateBot Light Pyro" Attributes AlwaysFireWeapon Attributes AlwaysCrit Skill Easy CharacterAttributes { "move speed bonus" 0.9 } } RevertGateBotsBehavior { Item "MvM GateBot Light Pyro" ItemAttributes { ItemName "MvM GateBot Light Pyro" "item style override" 1 } Attributes AlwaysFireWeapon Attributes AlwaysCrit Skill Easy CharacterAttributes { "move speed bonus" 0.9 } } } } T_TFGateBot_Heavyweapons_Easy { Class Heavyweapons Skill Easy EventChangeAttributes { Default { Tag bot_gatebot Tag nav_prefer_gate1_flank BehaviorModifiers push Attributes IgnoreFlag Item "MvM GateBot Light Heavy" Skill Easy } RevertGateBotsBehavior { Item "MvM GateBot Light Heavy" ItemAttributes { ItemName "MvM GateBot Light Heavy" "item style override" 1 } Skill Easy } } } T_TFGateBot_Heavyweapons_Fist { Template T_TFBot_Heavyweapons_Fist EventChangeAttributes { Default { Tag bot_gatebot Tag nav_prefer_gate1_flank BehaviorModifiers push Attributes IgnoreFlag Item "MvM GateBot Light Heavy" Skill Hard } RevertGateBotsBehavior { Item "MvM GateBot Light Heavy" ItemAttributes { ItemName "MvM GateBot Light Heavy" "item style override" 1 } Skill Hard } } } T_TFGateBot_Giant_Scout { Template T_TFBot_Giant_Scout EventChangeAttributes { Default { Tag bot_gatebot Tag nav_prefer_gate1_flank BehaviorModifiers push Attributes IgnoreFlag Item "MvM GateBot Light Scout" Skill Expert } RevertGateBotsBehavior { Item "MvM GateBot Light Scout" ItemAttributes { ItemName "MvM GateBot Light Scout" "item style override" 1 } Skill Expert } } } T_TFGateBot_Giant_Pyro_DragonFury { ClassIcon pyro_giant Name "Giant Dragon's Fury Pyro" Health 3000 Class Pyro EventChangeAttributes { Default { BehaviorModifiers push Attributes IgnoreFlag Tag nav_prefer_gate1_flank Tag bot_gatebot Item "MvM GateBot Light T_TFBot_Giant_Pyro" Item "The Dragon's Fury" ItemAttributes { ItemName "The Dragon's Fury" "damage bonus" 1.5 } Tag bot_giant Skill Expert WeaponRestrictions PrimaryOnly Attributes MiniBoss MaxVisionRange 800 CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.6 "airblast vulnerability multiplier" 0.6 "override footstep sound set" 6 } } RevertGateBotsBehavior { Item "MvM GateBot Light T_TFBot_Giant_Pyro" ItemAttributes { ItemName "MvM GateBot Light Pyro" "item style override" 1 } Item "The Dragon's Fury" ItemAttributes { ItemName "The Dragon's Fury" "damage bonus" 1.5 } Tag bot_giant Skill Expert WeaponRestrictions PrimaryOnly Attributes MiniBoss MaxVisionRange 800 CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.6 "airblast vulnerability multiplier" 0.6 "override footstep sound set" 6 } } } } T_TFGateBot_Giant_Demoman { Class Demoman Name "Giant Rapid-Fire Demoman" ClassIcon demo_giant Health 3300 EventChangeAttributes { Default { BehaviorModifiers push Attributes IgnoreFlag Tag nav_prefer_gate1_flank Tag bot_gatebot Item "MvM GateBot Light Demoman" ItemAttributes { ItemName "TF_WEAPON_GRENADELAUNCHER" "faster reload rate" -0.4 "fire rate bonus" 0.75 } Tag bot_giant Skill Expert WeaponRestrictions PrimaryOnly Attributes MiniBoss CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } } RevertGateBotsBehavior { Item "MvM GateBot Light Demoman" ItemAttributes { ItemName "MvM GateBot Light Demoman" "item style override" 1 } ItemAttributes { ItemName "TF_WEAPON_GRENADELAUNCHER" "faster reload rate" -0.4 "fire rate bonus" 0.75 } Tag bot_giant Skill Expert WeaponRestrictions PrimaryOnly Attributes MiniBoss CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } } } } T_TFGateBot_Giant_Demoman_Crit { Class Demoman Name "Giant Rapid-Fire Demoman" ClassIcon demo_giant Health 3300 EventChangeAttributes { Default { BehaviorModifiers push Attributes IgnoreFlag Attributes AlwaysCrit Tag nav_prefer_gate1_flank Tag bot_gatebot Item "MvM GateBot Light Demoman" ItemAttributes { ItemName "TF_WEAPON_GRENADELAUNCHER" "faster reload rate" -0.4 "fire rate bonus" 0.75 } Tag bot_giant Skill Expert WeaponRestrictions PrimaryOnly Attributes MiniBoss CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } } RevertGateBotsBehavior { Attributes AlwaysCrit Item "MvM GateBot Light Demoman" ItemAttributes { ItemName "MvM GateBot Light Demoman" "item style override" 1 } ItemAttributes { ItemName "TF_WEAPON_GRENADELAUNCHER" "faster reload rate" -0.4 "fire rate bonus" 0.75 } Tag bot_giant Skill Expert WeaponRestrictions PrimaryOnly Attributes MiniBoss CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } } } } T_TFBot_Giant_Demoman_RapidFire { Class Demoman Name "Giant Fast Fire Demoman" ClassIcon demo_giant Health 3000 Skill Expert WeaponRestrictions PrimaryOnly Attributes HoldFireUntilFullReload Attributes MiniBoss ItemAttributes { ItemName "TF_WEAPON_GRENADELAUNCHER" "fire rate bonus" 0.5 "damage force reduction" 0.5 } CharacterAttributes { "move speed bonus" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } } T_TFGateBot_Giant_Demoman_RapidFire_Crit { Class Demoman Name "Giant Fast Fire Demoman" ClassIcon demo_giant Health 3000 EventChangeAttributes { Default { BehaviorModifiers push Attributes IgnoreFlag Attributes AlwaysCrit Tag nav_prefer_gate1_flank Tag bot_gatebot Item "MvM GateBot Light Demoman" ItemAttributes { ItemName "TF_WEAPON_GRENADELAUNCHER" "fire rate bonus" 0.5 "damage force reduction" 0.5 } Tag bot_giant Skill Expert WeaponRestrictions PrimaryOnly Attributes HoldFireUntilFullReload Attributes MiniBoss CharacterAttributes { "move speed bonus" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } } RevertGateBotsBehavior { Attributes AlwaysCrit Item "MvM GateBot Light Demoman" ItemAttributes { ItemName "MvM GateBot Light Demoman" "item style override" 1 } ItemAttributes { ItemName "TF_WEAPON_GRENADELAUNCHER" "fire rate bonus" 0.5 "damage force reduction" 0.5 } Tag bot_giant Skill Expert WeaponRestrictions PrimaryOnly Attributes HoldFireUntilFullReload Attributes MiniBoss CharacterAttributes { "move speed bonus" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } } } } T_TFBot_Giant_Demo_RapidFire { Class Demoman Name "Giant Fast Fire Demoman" ClassIcon demo_giant Item "Glengarry Bonnet" Health 3000 } T_TFGateBot_Giant_Heavyweapons { Class Heavyweapons Name "Giant Heavy" ClassIcon heavy_giant Health 5000 EventChangeAttributes { Default { BehaviorModifiers push Attributes IgnoreFlag Tag nav_prefer_gate1_flank Tag bot_gatebot Item "MvM GateBot Light Heavy" Skill Expert WeaponRestrictions PrimaryOnly Attributes MiniBoss Tag bot_giant ItemAttributes { ItemName "TF_WEAPON_MINIGUN" "damage bonus" 1.5 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.3 "airblast vulnerability multiplier" 0.3 "override footstep sound set" 2 } } RevertGateBotsBehavior { Item "MvM GateBot Light Heavy" ItemAttributes { ItemName "MvM GateBot Light Heavy" "item style override" 1 } Skill Expert WeaponRestrictions PrimaryOnly Attributes MiniBoss Tag bot_giant ItemAttributes { ItemName "TF_WEAPON_MINIGUN" "damage bonus" 1.5 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.3 "airblast vulnerability multiplier" 0.3 "override footstep sound set" 2 } } } } T_TFGateBot_Giant_Soldier_Crit { Class Soldier Name "Giant Charged Soldier" ClassIcon soldier_crit Health 3800 EventChangeAttributes { Default { BehaviorModifiers push Attributes IgnoreFlag Tag nav_prefer_gate1_flank Tag bot_gatebot Item "MvM GateBot Light Soldier" Item "The Original" ItemAttributes { ItemName "The Original" "faster reload rate" 0.2 "fire rate bonus" 2 "Projectile speed increased" 0.5 } Tag bot_giant Skill Normal WeaponRestrictions PrimaryOnly //Attributes HoldFireUntilFullReload Attributes AlwaysCrit Attributes MiniBoss CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.4 "airblast vulnerability multiplier" 0.4 "override footstep sound set" 3 } } RevertGateBotsBehavior { Item "MvM GateBot Light Soldier" ItemAttributes { ItemName "MvM GateBot Light Soldier" "item style override" 1 } Item "The Original" ItemAttributes { ItemName "The Original" "faster reload rate" 0.2 "fire rate bonus" 2 "Projectile speed increased" 0.5 } Tag bot_giant Skill Normal WeaponRestrictions PrimaryOnly //Attributes HoldFireUntilFullReload Attributes AlwaysCrit Attributes MiniBoss CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.4 "airblast vulnerability multiplier" 0.4 "override footstep sound set" 3 } } } } T_TFGateBot_Giant_Soldier_Spammer_Parachute // Stole this from kinetic_energy by Blade x64 { Class Soldier Name "Giant Rapid Fire Soldier" ClassIcon soldier_spammer Health 3800 EventChangeAttributes { Default { Tag bot_gatebot Tag nav_prefer_gate1_flank BehaviorModifiers push Attributes IgnoreFlag Item "The B.A.S.E. Jumper" Item "MvM GateBot Light Soldier" Skill Expert WeaponRestrictions PrimaryOnly Attributes MiniBoss Tag bot_giant ItemAttributes { ItemName "TF_WEAPON_ROCKETLAUNCHER" "faster reload rate" -0.8 "fire rate bonus" 0.5 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.4 "airblast vulnerability multiplier" 0.4 "override footstep sound set" 3 "Projectile speed increased" 0.65 } } RevertGateBotsBehavior { Item "MvM GateBot Light Soldier" ItemAttributes { ItemName "MvM GateBot Light Soldier" "item style override" 1 } Skill Expert WeaponRestrictions PrimaryOnly Attributes MiniBoss Item "The B.A.S.E. Jumper" Tag bot_giant ItemAttributes { ItemName "TF_WEAPON_ROCKETLAUNCHER" "faster reload rate" -0.8 "fire rate bonus" 0.5 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.4 "airblast vulnerability multiplier" 0.4 "override footstep sound set" 3 "Projectile speed increased" 0.65 } } } } } }