// Hydro Horsepower // Advanced mission for hoovydam // Created by Waifu Enthusiast #base robot_standard.pop #base robot_giant.pop #base robot_gatebot.pop WaveSchedule { StartingCurrency 800 //800-->700-->800 CanBotsAttackWhileInSpawnRoom No RespawnWaveTime 4 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 } // BREAD GAME // WaveSpawn { WaitBeforeStarting 0 TotalCount 0 FirstSpawnOutput { Target gamerules Action RunScriptFile Param "hydro_horsepower_bread_game.nut" } } WaveSpawn { WaitBeforeStarting 1 TotalCount 0 FirstSpawnOutput { Target gamerules Action RunScriptCode Param " ::HHPWR_BreadGame.create_bread_item(Vector(-64, -672, 544)) ::HHPWR_BreadGame.create_bread_item(Vector(-32, -672, 544)) ::HHPWR_BreadGame.create_bread_item(Vector(0, -672, 544)) " } } // 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 //Ideas: //Giant heavy+medic spawns from carrier, not on bridge. //Super scouts spawn on bridge. //Demo support spawns from carrier AND bridge (thinking they should spawn from carrier to stop spy from carrying... spy should have his hands full anyway since he may need to help with super scouts...) //What if giant heavies had crit soldiers with them in their squad? It should take spy some more time than usual if he wants to solo them... Or he'll need help from team... Or he'll need to dump 450 in crit resist. //Giving giant heavies some crit soldier friends may make the wave a lot harder... so consider reducing spies in this case. 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 } // FIX TANK INTERACTIONS WITH SHUTTER DOOR // WaveSpawn { WaitBeforeStarting 0 TotalCount 0 FirstSpawnOutput { Target gamerules Action RunScriptFile Param "hydro_horsepower_shutter_fix_simple.nut" } } // 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 //Reduce count and change to regular giant scouts and spawn 1 at a time?? { Where spawnbot_c //b -->c Name "W5_0" TotalCount 14 //16-->14-->16-->14-->12-->14 MaxActive 4 SpawnCount 2 WaitBetweenSpawns 24 //20-->22-->24-->28-->24 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 bushed 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 } } } } } }