// INTERMEDIATE MISSION // Mission created by Nighttime71 // Map created by Nighttime71 #base robot_giant.pop #base robot_standard.pop //#base judge_restricts.pop WaveSchedule { StartingCurrency 700 RespawnWaveTime 2 CanBotsAttackWhileInSpawnRoom no Templates { T_TFBot_Soldier_Katana_Berserk { Class Soldier WeaponRestrictions MeleeOnly Item "The Half-Zatoichi" Health 900 Name "Great Ape" Tag ape Item "Poopy Doe" ClassIcon soldier_samurai_armored CharacterAttributes { "damage force reduction" 0.5 "airblast vertical vulnerability multiplier" 0.5 } } T_TFBot_Sniper_Huntsman_RapidFire { Class Sniper Name "Spammer Bowman" Skill Hard ClassIcon sniper_bow_spammer WeaponRestrictions PrimaryOnly Item "The Huntsman" ItemAttributes { ItemName "The Huntsman" "damage bonus" 0.5 "fire rate bonus" -2 "gesture speed increase" 2 } } T_TFBot_Jarate_Sniper { Class Sniper Skill Normal WeaponRestrictions SecondaryOnly Item "Jarate" Name "Jarate Sniper" ClassIcon sniper_jarate ItemAttributes { ItemName "Jarate" "hand scale" 1.5 "mult_item_meter_charge_rate" -1 "fire rate bonus" 4 } ItemAttributes { ItemName "TF_WEAPON_CLUB" "is_passive_weapon" 1 } } T_TFBot_Kukri_Sniper { Class Sniper Skill Normal WeaponRestrictions MeleeOnly Name "Kukri Sniper" ClassIcon sniper_kukri } T_TFBot_Bushwacka_Sniper { Class Sniper Skill Normal WeaponRestrictions MeleeOnly Name "Bushwacka Sniper" ClassIcon sniper_bushwacka Item "The Bushwacka" } T_TFBot_Bushwacka_Sniper_Armored { Class Sniper Skill Normal WeaponRestrictions MeleeOnly Name "Armored Bushwacka Sniper" ClassIcon sniper_bush_armored Item "The Bushwacka" Health 900 Scale 1.4 } T_TFBot_Giant_Bushwacka_Sniper { Name "Giant Bushwacka Sniper" Class Sniper Skill Expert Attributes MiniBoss Health 3000 ClassIcon sniper_bushwacka_giant Item "The Bushwacka" WeaponRestrictions MeleeOnly ItemAttributes { ItemName "The Bushwacka" "melee attack rate bonus" 0.6 "damage bonus" 1.2 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } } T_TFBot_Giant_Bushwacka_Sniper_Fast { Name "Giant Bushwacka Sniper" Class Sniper Skill Expert Attributes MiniBoss Health 3000 ClassIcon sniper_bushwacka_fast Item "The Bushwacka" WeaponRestrictions MeleeOnly ItemAttributes { ItemName "The Bushwacka" "melee attack rate bonus" 0.6 "damage bonus" 1.2 } CharacterAttributes { "move speed bonus" 0.7 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } } T_TFBot_Giant_Bowman { Class Sniper Name "Giant Bowman" Health 3000 Attributes MiniBoss Skill Expert ClassIcon sniper_bow_giant WeaponRestrictions PrimaryOnly Item "The Huntsman" CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.6 "airblast vulnerability multiplier" 0.6 "override footstep sound set" 6 } } T_TFBot_Giant_Bowman_RapidFire { Class Sniper Name "Giant Rapid Fire Bowman" Health 3000 Attributes MiniBoss Skill Expert ClassIcon sniper_bow_multi_giant WeaponRestrictions PrimaryOnly Item "The Huntsman" CharacterAttributes { "move speed bonus" 0.5 "fire rate bonus" -2 "damage force reduction" 0.6 "airblast vulnerability multiplier" 0.6 "override footstep sound set" 6 } } T_TFBot_Demo_Cannon { Class Demoman Skill Normal Name "Cannon Demo" Item "The Loose Cannon" ClassIcon demo_cannon ItemAttributes { ItemName "The Loose Cannon" "grenade launcher mortar mode" -1 "auto fires full clip" 1 "auto fires when full" 1 } } T_TFBot_Giant_Demo_Cannon { Class Demoman Skill Expert Health 3300 Name "Giant Cannoneer" Item "The Loose Cannon" ClassIcon demo_cannon_giant Attributes MiniBoss ItemAttributes { ItemName "The Loose Cannon" "grenade launcher mortar mode" -1 "auto fires full clip" 1 "auto fires when full" 1 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } } T_TFBot_Giant_Demo_Cannon_BurstFire { Class Demoman Skill Expert Health 3300 Name "Giant Burstfire Cannoneer" Item "The Loose Cannon" ClassIcon demo_cannon_burst_giant Attributes MiniBoss ItemAttributes { ItemName "The Loose Cannon" "grenade launcher mortar mode" -1 "auto fires full clip" 1 "auto fires when full" 1 "clip size bonus" 2 "fire rate bonus" 0.15 "projectile range increased" 1.1 "projectile spread angle penalty" 12 "fuse bonus" 0.3 "faster reload rate" 0.85 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } } T_TFBot_Persian_Demoknight { Class Demoman Name "Persian Demoknight" ClassIcon demoknight_persian_nys Skill Hard 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 } WeaponRestrictions MeleeOnly CharacterAttributes { "critboost on kill" 3 } } T_TFBot_Giant_Persian_Demoknight { Class Demoman Name "Giant Persian Demoknight" ClassIcon demoknight_persian_nys_giant Skill Expert Health 3300 Attributes MiniBoss 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 } WeaponRestrictions MeleeOnly CharacterAttributes { "critboost on kill" 3 "move speed bonus" 0.5 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } } T_TFBot_Warrior_MiniGiant { Class Heavy WeaponRestrictions MeleeOnly Skill Hard ClassIcon heavy_warrior_sif Item "Warrior's Spirit" Health 900 Scale 1.5 Name "Warrior Heavy" ItemAttributes { ItemName "Warrior's Spirit" "restore health on kill" 50 "dmg taken increased" 1 "mult_dmgtaken_active" 1 "move speed bonus" 1.3 "hand scale" 1.3 } } T_TFBot_Conch_Katana_Soldier_MiniGiant { Class Soldier Name "Armored Shogun" ClassIcon soldier_samurai_conch Skill Hard Health 900 Scale 1.4 Item "Soldier Samurai Hat" Item "The Concheror" Item "The Half-Zatoichi" WeaponRestrictions MeleeOnly Attributes SpawnWithFullCharge ItemAttributes { ItemName "The Half-Zatoichi" "honorbound" 0 } CharacterAttributes { "increase buff duration" 9 "damage force reduction" 0.7 "airblast vulnerability multiplier" 0.7 "deploy time decreased" 0.5 } } T_TFBot_Demo_Airbomber { Name "Airbomber Demo" Class Demoman ClassIcon demo_para Skill Normal Item "The B.A.S.E. Jumper" Item "Upgradeable TF_WEAPON_PIPEBOMBLAUNCHER" WeaponRestrictions SecondaryOnly CharacterAttributes { "cancel falling damage" 1 "increased jump height" 3 "blast dmg to self increased" 0 "override projectile type" 3 "stickybomb charge rate" 0.001 //Demo-bot will fire Stickybomb immediately "projectile range increased" 0.5 // Prevents overshooting target } } T_TFBot_Demo_Airbomber_Cannon { Name "Airbomber Demo" Class Demoman ClassIcon demo_para Skill Normal Item "The B.A.S.E. Jumper" Item "Upgradeable TF_WEAPON_PIPEBOMBLAUNCHER" WeaponRestrictions SecondaryOnly CharacterAttributes { "cancel falling damage" 1 "increased jump height" 3 "blast dmg to self increased" 0 "override projectile type" 17 "stickybomb charge rate" 0.001 //Demo-bot will fire Stickybomb immediately "projectile range increased" 0.5 // Prevents overshooting target } } T_TFBot_Sniper_Huntsman_Spammer_Conch { Class Sniper Name "Conch Bowman" Item "The Huntsman" ClassIcon sniper_bow_conch Skill Hard Health 1200 "scale" 1.5 Attributes SpawnWithFullCharge Item "The Concheror" ItemAttributes { ItemName "The Huntsman" "fire rate bonus" 0.6 } CharacterAttributes { "head scale" 0.7 "move speed bonus" 0.85 "increase buff duration" 9 "deploy time decreased" 0.5 } } T_TFBot_Dragon_Fury_Pyro { Class Pyro Name "Dragon's Fury Pyro" Item "The Dragon's Fury" MaxVisionRange 1000 ClassIcon pyro_dragon_fury } T_TFBot_Crossbow_Medic { Class Medic Skill Hard WeaponRestrictions PrimaryOnly Item "The Crusader's Crossbow" ClassIcon medic_crossbow Item "The Quick-Fix" } T_TFBot_Giant_Heavy_Steak_Warrior { Class Heavy Skill Expert Name "Super Steak Heavy" Item "The Buffalo Steak Sandvich" Item "Warrior's Spirit" WeaponRestrictions MeleeOnly Attributes MiniBoss Attributes AlwaysFireWeapon Health 5000 ClassIcon heavy_steak_lite ItemAttributes { ItemName "The Buffalo Steak Sandvich" "max health additive bonus" 1 "force weapon switch" 1 "single wep deploy time increased" 0.01 } ItemAttributes { ItemName "Warrior's Spirit" "fire rate bonus" 0.6 "dmg taken increased" 1 "mult_dmgtaken_active" 1 } CharacterAttributes { "move speed bonus" 0.7 "damage force reduction" 0.3 "airblast vulnerability multiplier" 0.3 "override footstep sound set" 2 } } T_TFBot_Demo_HeadTaker { Class Demoman WeaponRestrictions MeleeOnly Item "The Horseless Headless Horseman's Headtaker" Item "Horseless Headless Horseman's Head" Item "The Chargin' Targe" Name "Head Taker" ClassIcon demoknight_headtaker_nys CharacterAttributes { "hand scale" 1.5 "critboost on kill" 3 } } T_TFBot_Demo_HeadTaker_Giant { Class Demoman WeaponRestrictions MeleeOnly Item "The Horseless Headless Horseman's Headtaker" Item "Horseless Headless Horseman's Head" Name "Giant Head Taker" ClassIcon demoknight_headtaker_nys Attributes MiniBoss Health 3300 ItemAttributes { ItemName "The Horseless Headless Horseman's Headtaker" "hand scale" 1.5 "critboost on kill" 3 "damage bonus" 1.2 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } } T_TFBot_Giant_Demoknight_Flame { Class Demoman ClassIcon demoknight_fire_giant Name "Giant Hellfire Demoknight" Skill Expert Health 3300 Item "Demonic Dome" Item "The Chargin' Targe" Item "The Eyelander" Item "Ali Baba's Wee Booties" WeaponRestrictions MeleeOnly Attributes MiniBoss ItemAttributes { ItemName "The Eyelander" "critboost on kill" 3 "attach particle effect" 3042 "Set DamageType Ignite" 1 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } } T_TFBot_Demo_HeadTaker_BOSS { Class Demoman WeaponRestrictions MeleeOnly Item "The Horseless Headless Horseman's Headtaker" Item "Horseless Headless Horseman's Head" Name "Barnaclus" ClassIcon demoknight_headtaker_nys Attributes MiniBoss Health 15000 Scale 1.9 ItemAttributes { ItemName "The Horseless Headless Horseman's Headtaker" "hand scale" 1.5 "critboost on kill" 3 "damage bonus" 1.2 "dmg pierces resists absorbs" 1 "dmg bonus vs buildings" 2 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.15 "airblast vulnerability multiplier" 0.15 "rage giving scale" 0.15 "override footstep sound set" 4 } } T_TFBot_Flare_Heavy { Class Heavy Item "The Huo Long Heatmaker" ClassIcon pyro_flare_rain_nys ItemAttributes { ItemName "The Huo Long Heatmaker" "override projectile type" 6 "projectile speed increased" 1.3 "projectile spread angle penalty" 2 "attach particle effect" 3042 "fire rate bonus" 2.3 "dmg bonus vs buildings" 2 } } T_TFBot_Giant_Flare_Heavy { Class Heavy Item "The Huo Long Heatmaker" Skill Expert Attributes MiniBoss Health 5000 ClassIcon pyro_flare_rain_nys ItemAttributes { ItemName "The Huo Long Heatmaker" "override projectile type" 6 "projectile speed increased" 1.3 "projectile spread angle penalty" 2 "attach particle effect" 3042 "damage penalty" 1 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.3 "airblast vulnerability multiplier" 0.3 "override footstep sound set" 2 } } T_TFBot_Scout_Butcher_MiniGiant { Class Scout Name "Butcher" Scale 1.4 Health 650 Skill Hard ClassIcon scout_guillotine WeaponRestrictions SecondaryOnly Attributes AlwaysFireWeapon Item "The Flying Guillotine" Item "Three-Rune Blade" Item "Bedouin Bandana" ItemAttributes { ItemName "The Flying Guillotine" "mult_item_meter_charge_rate" 0.01 "fire rate bonus" 4 } ItemAttributes { ItemName "Three-Rune Blade" "is_passive_weapon" 1 "hit self on miss" 0 } CharacterAttributes { "move speed bonus" 1.25 "hand scale" 1.5 "damage bonus" 1.5 "deploy time decreased" 0.5 } } } Mission // sentry buster w 1-2 { Objective DestroySentries InitialCooldown 5 Where spawnbot_front BeginAtWave 1 RunForThisManyWaves 2 CooldownTime 30 TFBot { Template T_TFBot_SentryBuster Item "Spine-Chilling Skull" CharacterAttributes { "head scale" 3 "torso scale" 0 } } } Mission // sentry buster w 3-6 { Objective DestroySentries InitialCooldown 5 Where spawnbot_front BeginAtWave 3 RunForThisManyWaves 4 CooldownTime 30 TFBot { Template T_TFBot_SentryBuster Item "Spine-Chilling Skull" CharacterAttributes { "head scale" 3 "torso scale" 0 } } } // WAVE 1 $500 Wave { InitWaveOutput { Target gamerules Action runscriptcode Param "Convars.SetValue(`tf_forced_holiday`, 2) EntFire(`cave_start`, `trigger`) EntFire(`holograms_main`, `Disable`,null,1) EntFire(`msg_ship`, `addoutput`, `display_text Alert! The Ship is at the Cave!`) EntFire(`msg_ship`, `show`,null,0.2) IncludeScript(`popextensions_main`, getroottable()) if(!(`PointTemplates` in getroottable())) ::PointTemplates <- {} PointTemplates.Wall <- { NoFixup = 1, [0] = { prop_dynamic = { targetname = `wall` model = `models/props_medieval/portcullis.mdl` solid = 6 parentname = `walldoor` } } } PointTemplates.Wall2 <- { NoFixup = 1, [0] = { prop_dynamic = { targetname = `wall` model = `models/props_medieval/portcullis.mdl` solid = 0 modelscale = 2 parentname = `walldoor` } } } PointTemplates.Wall3 <- { NoFixup = 1, [0] = { prop_dynamic = { targetname = `wall` model = `models/props_halloween/hwn_platforms_game01.mdl` solid = 6 rendermode = 10 parentname = `walldoor` } } } PointTemplates.Wall4 <- { NoFixup = 1, [0] = { prop_dynamic = { targetname = `wall` model = `models/props_halloween/hwn_platforms_game01.mdl` solid = 6 rendermode = 10 parentname = `walldoor` } } } SpawnTemplate(`Wall`, null, `-6080 -400 48`, `0 0 0`) SpawnTemplate(`Wall2`, null, `-6896 0 64`, `0 90 0`) SpawnTemplate(`Wall3`, null, `-6624 0 0`, `90 90 0`) SpawnTemplate(`Wall4`, null, `-7440 1472 -32`, `90 0 0`) ::spoopyskeletons <- { Cleanup = function() { delete ::spoopyskeletons } OnGameEvent_recalculate_holidays = function(_) { if (GetRoundState() == 3) Cleanup() } OnGameEvent_mvm_wave_complete = function(_) { Cleanup() } function OnGameEvent_player_spawn(params) { local robot = GetPlayerFromUserID(params.userid); if(robot.GetPlayerClass() == 2) { EntFireByHandle(robot, `SetCustomModelWithClassAnimations`, `models/bots/skeleton_sniper_boss/skeleton_sniper_boss.mdl`, -1, null, null) if(robot.GetTeam() == 3) { NetProps.SetPropBool(robot, `m_bForcedSkin`, true) NetProps.SetPropInt(robot, `m_nForcedSkin`, 1) } } } }__CollectGameEventCallbacks(spoopyskeletons) " } StartWaveOutput { Target wave_start_relay Action trigger } DoneOutput { Target wave_finished_relay Action trigger } WaveSpawn { Name "w1a" Where spawnbot_back TotalCount 15 MaxActive 15 SpawnCount 5 WaitBeforeStarting 0 WaitBetweenSpawns 4 TotalCurrency 40 RandomChoice { TFBot { Template T_TFBot_Bushwacka_Sniper } TFBot { Template T_TFBot_Jarate_Sniper } } } WaveSpawn { Name "w1b" Where spawnbot_back TotalCount 12 MaxActive 12 SpawnCount 6 WaitBeforeStarting 12 WaitBetweenSpawns 12 TotalCurrency 60 TFBot { Template T_TFBot_Sniper_Huntsman Skill Easy } } WaveSpawn { WaitForAllSpawned "w1a" Name "w1b" Where spawnbot_back TotalCount 12 MaxActive 12 SpawnCount 4 WaitBeforeStarting 10 WaitBetweenSpawns 6 TotalCurrency 50 TFBot { Template T_TFBot_Scout_SunStick ClassIcon scout_sunstick_swordstone ItemAttributes { ItemName "Sun-on-a-Stick" "attach particle effect" 13 "Set DamageType Ignite" 1 } } } WaveSpawn { WaitForAllSpawned "w1b" Name "w1c" Where spawnbot_back TotalCount 18 MaxActive 18 SpawnCount 6 WaitBeforeStarting 0 WaitBetweenSpawns 12 TotalCurrency 100 FirstSpawnWarningSound "taunt_burstchester_screams" Squad { TFBot { Template T_TFBot_Bushwacka_Sniper_Armored Name "Skelesaur Jr." Item "Bare Bear Bones" ClassIcon sniper_bushwacka } TFBot { Template T_TFBot_Sniper_Huntsman Skill Easy } TFBot { Template T_TFBot_Sniper_Huntsman Skill Easy } } } WaveSpawn { WaitForAllSpawned "w1b" FirstSpawnWarningSound "taunt_burstchester_screams" } WaveSpawn { WaitForAllSpawned "w1b" FirstSpawnWarningSound "taunt_burstchester_screams" } WaveSpawn { WaitForAllSpawned "w1b" Where spawnbot_back RandomSpawn 1 TotalCount 24 MaxActive 6 SpawnCount 3 WaitBeforeStarting 10 WaitBetweenSpawns 1.8 TotalCurrency 100 RandomChoice { TFBot { Template T_TFBot_Scout_SunStick ClassIcon scout_sunstick_swordstone ItemAttributes { ItemName "Sun-on-a-Stick" "attach particle effect" 13 "Set DamageType Ignite" 1 } } TFBot { Template T_TFBot_Bushwacka_Sniper } } } WaveSpawn { WaitForAllSpawned "w1b" Name "w1d" Where spawnbot_back RandomSpawn 1 TotalCount 12 MaxActive 12 SpawnCount 1 WaitBeforeStarting 10 WaitBetweenSpawns 4 TotalCurrency 50 TFBot { Template T_TFBot_Sniper_Huntsman Name "Skeleton Archer" Skill Easy } } WaveSpawn { WaitForAllSpawned "w1c" Name "w1d" Where spawnbot_back RandomSpawn 1 TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 3 WaitBetweenSpawns 24 TotalCurrency 100 FirstSpawnWarningSound "Taunt.YetiRoarSecond" TFBot { Template T_TFBot_Giant_Bushwacka_Sniper Item "Bare Bear Bones" Item "Forgotten King's Pauldrons" Name "Great Skelesaur" } } } // WAVE 2 $600 Wave { InitWaveOutput { Target gamerules Action runscriptcode Param "Convars.SetValue(`tf_forced_holiday`, 2) EntFire(`move_ship`, `setposition`, `0.4`) EntFire(`holograms_main`, `Disable`,null,1) EntFire(`holograms_cave`, `Enable`,null,1.1) IncludeScript(`popextensions_main`, getroottable()) if(!(`PointTemplates` in getroottable())) ::PointTemplates <- {} PointTemplates.Wall <- { NoFixup = 1, [0] = { prop_dynamic = { targetname = `wall` model = `models/props_medieval/portcullis.mdl` solid = 6 parentname = `walldoor` } } } PointTemplates.Wall2 <- { NoFixup = 1, [0] = { prop_dynamic = { targetname = `wall` model = `models/props_medieval/portcullis.mdl` solid = 0 modelscale = 2 parentname = `walldoor` } } } PointTemplates.Wall3 <- { NoFixup = 1, [0] = { prop_dynamic = { targetname = `wall` model = `models/props_halloween/hwn_platforms_game01.mdl` solid = 6 rendermode = 10 parentname = `walldoor` } } } PointTemplates.Wall4 <- { NoFixup = 1, [0] = { prop_dynamic = { targetname = `wall` model = `models/props_halloween/hwn_platforms_game01.mdl` solid = 6 rendermode = 10 parentname = `walldoor` } } } SpawnTemplate(`Wall`, null, `-6080 -400 48`, `0 0 0`) SpawnTemplate(`Wall2`, null, `-6896 0 64`, `0 90 0`) SpawnTemplate(`Wall3`, null, `-6624 0 0`, `90 90 0`) SpawnTemplate(`Wall4`, null, `-7440 1472 -32`, `90 0 0`) ::spoopyskeletons <- { Cleanup = function() { delete ::spoopyskeletons } OnGameEvent_recalculate_holidays = function(_) { if (GetRoundState() == 3) Cleanup() } OnGameEvent_mvm_wave_complete = function(_) { Cleanup() } function OnGameEvent_player_spawn(params) { local robot = GetPlayerFromUserID(params.userid); if(robot.GetPlayerClass() == 2) { EntFireByHandle(robot, `SetCustomModelWithClassAnimations`, `models/bots/skeleton_sniper_boss/skeleton_sniper_boss.mdl`, -1, null, null) if(robot.GetTeam() == 3) { NetProps.SetPropBool(robot, `m_bForcedSkin`, true) NetProps.SetPropInt(robot, `m_nForcedSkin`, 1) } } } }__CollectGameEventCallbacks(spoopyskeletons)" } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } WaveSpawn // TANK { TotalCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 200 Tank { Health 15000 Speed 75 Name "tankboss" StartingPathTrackNode "path_track_b_1" OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name "w2a" Where spawnbot_cave_tank TotalCount 16 MaxActive 16 SpawnCount 4 WaitBeforeStarting 6 WaitBetweenSpawns 6 TotalCurrency 50 TFBot { Template T_TFBot_Warrior_MiniGiant Health 300 Scale 1 } } WaveSpawn { WaitForAllSpawned "w2a" Name "w2c" Where spawnbot_cave_tank TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 24 TotalCurrency 100 TFBot { Template T_TFBot_Giant_Bushwacka_Sniper_Fast Item "Bare Bear Bones" Item "Forgotten King's Pauldrons" Name "Great Skelesaur" } } WaveSpawn { WaitForAllSpawned "w2c" Name "w2d" Where spawnbot_cave_tank TotalCount 24 MaxActive 16 SpawnCount 4 WaitBeforeStarting 0 WaitBetweenSpawns 1 TotalCurrency 50 RandomChoice { TFBot { Template T_TFBot_Sniper_Huntsman } TFBot { Template T_TFBot_Jarate_Sniper } } } WaveSpawn { WaitForAllSpawned "w2c" FirstSpawnWarningSound "misc\halloween\spell_skeleton_horde_rise.wav" WaitBeforeStarting 20 } WaveSpawn { WaitForAllSpawned "w2c" Name "w2e" Where spawnbot_cave_tank TotalCount 6 MaxActive 6 SpawnCount 3 WaitBeforeStarting 14 WaitBetweenSpawns 28 TotalCurrency 100 Squad { TFBot { Template T_TFBot_Giant_Bushwacka_Sniper_Fast Item "Bare Bear Bones" Item "Forgotten King's Pauldrons" Name "Great Skelesaur" } TFBot { Template T_TFBot_Sniper_Huntsman_Spammer_Conch Skill Easy } TFBot { Template T_TFBot_Sniper_Huntsman_Spammer_Conch Skill Easy } } } WaveSpawn { WaitForAllSpawned "w2d" Name "w2e" Where spawnbot_cave_tank TotalCount 16 MaxActive 16 SpawnCount 4 WaitBeforeStarting 0 WaitBetweenSpawns 6 TotalCurrency 100 TFBot { Template T_TFBot_Warrior_MiniGiant Health 300 Scale 1 } } } Mission // SNIPER WAVE 3 { Objective Sniper InitialCooldown 35 Where spawnbot_beach_tank BeginAtWave 3 RunForThisManyWaves 1 DesiredCount 2 CooldownTime 35 TFBot { Class Sniper Skill Normal } } Mission // ENGINEER WAVE 3 { Objective Engineer InitialCooldown 30 Where spawnbot_beach_tank BeginAtWave 3 RunForThisManyWaves 1 DesiredCount 1 CooldownTime 60 TFBot { Template T_TFBot_Engineer_Sentry_Teleporter TeleportWhere spawnbot_back TeleportWhere spawnbot_front } } // WAVE 3 $900 Wave { InitWaveOutput { Target gamerules Action runscriptcode Param " EntFire(`wall*`, `Kill`) EntFire(`beach`, `trigger`) EntFire(`respawnroom_blue`, `Disable`) EmitSoundEx({sound_name= `Medieval.DoorOpenRaise`,sound_level = 0,channel= 6,origin = GetListenServerHost().GetCenter(), filter_type = Constants.EScriptRecipientFilter.RECIPIENT_FILTER_GLOBAL}); EntFire(`msg_ship`, `addoutput`, `display_text The Ship is retreating! Head towards the beach!`) EntFire(`msg_ship`, `show`,null,0.2) ::spoopyskeletons <- { Cleanup = function() { delete ::spoopyskeletons } OnGameEvent_recalculate_holidays = function(_) { if (GetRoundState() == 3) Cleanup() } OnGameEvent_mvm_wave_complete = function(_) { Cleanup() } function OnGameEvent_player_spawn(params) { local robot = GetPlayerFromUserID(params.userid); if(robot.GetPlayerClass() == 2) { EntFireByHandle(robot, `SetCustomModelWithClassAnimations`, `models/bots/skeleton_sniper_boss/skeleton_sniper_boss.mdl`, -1, null, null) if(robot.GetTeam() == 3) { NetProps.SetPropBool(robot, `m_bForcedSkin`, true) NetProps.SetPropInt(robot, `m_nForcedSkin`, 1) } } } }__CollectGameEventCallbacks(spoopyskeletons)" } StartWaveOutput { Target wave_start_relay Action trigger } DoneOutput { Target wave_finished_relay Action trigger } WaveSpawn { Name "w3a" Where spawnbot TotalCount 8 MaxActive 4 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 0.7 TotalCurrency 50 TFBot { Template T_TFBot_Persian_Demoknight Skill Easy } } WaveSpawn { Name "w3b" Where spawnbot TotalCount 12 MaxActive 4 SpawnCount 1 WaitBeforeStarting 6 WaitBetweenSpawns 1.2 TotalCurrency 100 TFBot { Template T_TFBot_Demo_Cannon } } WaveSpawn { WaitForAllSpawned "w3a" Name "w3b2" Where spawnbot TotalCount 12 MaxActive 12 SpawnCount 3 WaitBeforeStarting 10 WaitBetweenSpawns 10 TotalCurrency 100 FirstSpawnWarningSound "MVM.Siren" FirstSpawnOutput { Target gamerules Action runscriptcode Param "EntFire(`msg_tank_cave`, `addoutput`, `display_text AIR RAID!`) EntFire(`msg_tank_cave`, `addoutput`, `origin -8672 1760 672`) EntFire(`msg_tank_cave`, `show`,null,0.1)" } TFBot { Template T_TFBot_Demo_Cannon Tag para ClassIcon demo_para Name "Magic Flying Demoman" Item "The Crone's Dome" CharacterAttributes { "attach particle effect" 3083 } } } WaveSpawn { WaitForAllSpawned "w3b" Name "w3c" Where spawnbot TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 5 WaitBetweenSpawns 20 TotalCurrency 150 TFBot { Template T_TFBot_Giant_Persian_Demoknight } } WaveSpawn { WaitForAllSpawned "w3c" Name "w3d" Where spawnbot TotalCount 10 MaxActive 10 SpawnCount 2 WaitBeforeStarting 0 WaitBetweenSpawns 6 TotalCurrency 50 TFBot { Template T_TFBot_Persian_Demoknight Skill Easy } } WaveSpawn { WaitForAllSpawned "w3c" Name "w3d" Where spawnbot TotalCount 18 MaxActive 18 SpawnCount 3 WaitBeforeStarting 0 WaitBetweenSpawns 2 TotalCurrency 50 TFBot { Template T_TFBot_Demo_Cannon } } WaveSpawn { WaitForAllSpawned "w3b2" Name "w3d2" Where spawnbot TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 18 WaitBetweenSpawns 18 TotalCurrency 150 TFBot { Template T_TFBot_Giant_Persian_Demoknight } } WaveSpawn { WaitForAllSpawned "w3b2" Name "w3e" Where spawnbot TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 20 WaitBetweenSpawns 20 TotalCurrency 150 TFBot { Template T_TFBot_Giant_Demo_Cannon } } WaveSpawn { WaitForAllSpawned "w3d2" Name "w3e" Where spawnbot TotalCount 12 MaxActive 12 SpawnCount 2 WaitBeforeStarting 0 WaitBetweenSpawns 3 TotalCurrency 100 FirstSpawnWarningSound "MVM.Siren" FirstSpawnOutput { Target gamerules Action runscriptcode Param "EntFire(`msg_tank_cave`, `addoutput`, `display_text AIR RAID!`) EntFire(`msg_tank_cave`, `addoutput`, `origin -8672 1760 672`) EntFire(`msg_tank_cave`, `show`,null,0.1)" } TFBot { Template T_TFBot_Demo_Cannon Tag para ClassIcon demo_para Name "Magic Flying Demoman" Item "The Crone's Dome" CharacterAttributes { "attach particle effect" 3083 } } } } Mission // SPIES WAVE 4 { Objective Spy InitialCooldown 15 Where spawnbot_beach_tank BeginAtWave 4 RunForThisManyWaves 1 DesiredCount 2 CooldownTime 75 TFBot { Class Spy Skill Expert } } // WAVE 4 $900 Wave { InitWaveOutput { Target gamerules Action runscriptcode Param " EntFire(`respawnroom_blue`, `Enable`) EntFire(`path_track_a_18`, `addoutput`, `OnPass boss_spawn_relay:trigger::0:-1`) EntFire(`boss_spawn_relay`, `addoutput`, `OnTrigger bomb_deploy_relay:trigger::9:-1`) ::spoopyskeletons <- { Cleanup = function() { delete ::spoopyskeletons } OnGameEvent_recalculate_holidays = function(_) { if (GetRoundState() == 3) Cleanup() } OnGameEvent_mvm_wave_complete = function(_) { Cleanup() } function OnGameEvent_player_spawn(params) { local robot = GetPlayerFromUserID(params.userid); if(robot.GetPlayerClass() == 2) { EntFireByHandle(robot, `SetCustomModelWithClassAnimations`, `models/bots/skeleton_sniper_boss/skeleton_sniper_boss.mdl`, -1, null, null) if(robot.GetTeam() == 3) { NetProps.SetPropBool(robot, `m_bForcedSkin`, true) NetProps.SetPropInt(robot, `m_nForcedSkin`, 1) } } if(robot.GetTeam() == 3) { if(robot.GetPlayerClass() == 3) { EntFireByHandle(robot, `SetCustomModelWithClassAnimations`, `models/player/soldier.mdl`, -1, null, null) } } } }__CollectGameEventCallbacks(spoopyskeletons)" } StartWaveOutput { Target wave_start_relay Action runscriptcode Param " EntFire(`wave_start_relay`, `Trigger`) IncludeScript(`popextensions_main`, getroottable()) PopExt.AddTankName(`chewchew`, { OnSpawn = function(tank, name) { local particle = SpawnEntityFromTable(`info_particle_system`, {origin = `100 0 60`, effect_name = `flamethrower_giant_mvm`, start_active = `1`}) local trigger = SpawnEntityFromTable(`trigger_hurt`, {origin = `240 0 0`, spawnflags = 1, damage = 20, filtername = `filter_red`, targetname = `flame_trigger`}) local trigger2 = SpawnEntityFromTable(`trigger_hurt`, {origin = `500 0 0`, spawnflags = 1, damage = 10, filtername = `filter_red`, targetname = `flame_trigger`}) PopExtUtil.SetupTriggerBounds(trigger, Vector(-100,-100,-100), Vector(100,100,100)) PopExtUtil.SetupTriggerBounds(trigger2, Vector(-200,-200,-200), Vector(200,200,200)) PopExtUtil.SetParentLocalOrigin([particle, trigger, trigger2], tank) tank.KeyValueFromString(`rendercolor`, `255 184 141`) }, TankModel = { Default = `models/lilchewchew/lilchewchew_v3.mdl`, Damage1 = `models/lilchewchew/lilchewchew_v3.mdl`, Damage2 = `models/lilchewchew/lilchewchew_v3.mdl`, Damage3 = `models/lilchewchew/lilchewchew_v3.mdl`, } }) " } DoneOutput { Target wave_finished_relay Action trigger } WaveSpawn { Name "w4a" Where spawnbot TotalCount 6 MaxActive 4 SpawnCount 2 WaitBeforeStarting 0 WaitBetweenSpawns 10 TotalCurrency 50 TFBot { Class Pyro Item "The Fire Breather" } } WaveSpawn { Name "w4a" Where spawnbot TotalCount 6 MaxActive 6 SpawnCount 2 WaitBeforeStarting 7 WaitBetweenSpawns 7 TotalCurrency 50 TFBot { Template T_TFBot_Flare_Heavy } } WaveSpawn { Where spawnbot TotalCount 25 MaxActive 5 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 0 TotalCurrency 25 Support Limited TFBot { Template T_TFBot_Scout_SunStick ClassIcon scout_sunstick_swordstone ItemAttributes { ItemName "Sun-on-a-Stick" "attach particle effect" 13 "Set DamageType Ignite" 1 } } } WaveSpawn { WaitForAllSpawned "w4a" Name "w4b" Where spawnbot_beach_tank TotalCount 8 MaxActive 4 SpawnCount 2 WaitBeforeStarting 12 WaitBetweenSpawns 12 TotalCurrency 50 TFBot { Template T_TFBot_Bushwacka_Sniper_Armored ClassIcon sniper_bushwacka_fast Item "Bare Bear Bones" Name "Fast Skelesaur Jr." CharacterAttributes { "move speed bonus" 1.5 } } } WaveSpawn { WaitForAllSpawned "w4a" Name "w4a2" Where spawnbot_beach_tank TotalCount 8 MaxActive 8 SpawnCount 2 WaitBeforeStarting 16 WaitBetweenSpawns 12 TotalCurrency 50 Squad { TFBot { Template T_TFBot_Sniper_Huntsman_Spammer Skill Normal } TFBot { Class Pyro Attributes AlwaysFireWeapon Item "The Fire Breather" } } } WaveSpawn // FIRE TANK 1 { WaitForAllSpawned "w4a" TotalCount 1 WaitBeforeStarting 12 WaitBetweenSpawns 0 TotalCurrency 100 FirstSpawnWarningSound "ambient\fire\ignite.wav" FirstSpawnOutput { Target gamerules Action runscriptcode Param "EntFire(`flame_trigger`, `AddOutput`, `OnStartTouchAll !activator:igniteplayer:1:0:-1`)" Delay 1 } Tank { Health 18000 Speed 90 Name "chewchew" StartingPathTrackNode "path_track_a_1" OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } OnKilledOutput { Target boss_spawn_relay Action CancelPending } } } WaveSpawn { WaitForAllSpawned "w4a2" Name "w4c" Where spawnbot_beach_tank TotalCount 18 MaxActive 18 SpawnCount 6 WaitBeforeStarting 14 WaitBetweenSpawns 14 TotalCurrency 100 TFBot { Template T_TFBot_Flare_Heavy } } WaveSpawn { WaitForAllDead "w4a2" Name "w4c2" Where spawnbot_beach_tank TotalCount 18 MaxActive 18 SpawnCount 3 WaitBeforeStarting 0 WaitBetweenSpawns 14 TotalCurrency 150 Squad { TFBot { Template T_TFBot_Sniper_Huntsman_Spammer Skill Normal } TFBot { Class Pyro Attributes AlwaysFireWeapon Item "The Fire Breather" } TFBot { Class Pyro Attributes AlwaysFireWeapon Item "The Fire Breather" } } } WaveSpawn { WaitForAllSpawned "w4b" Where spawnbot_beach_tank TotalCount 25 MaxActive 5 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 25 Support 1 TFBot { Template T_TFBot_Scout_SunStick ClassIcon scout_sunstick_swordstone ItemAttributes { ItemName "Sun-on-a-Stick" "attach particle effect" 13 "Set DamageType Ignite" 1 } } } WaveSpawn { WaitForAllSpawned "w4b" Name "w4d" Where spawnbot_beach_tank TotalCount 4 MaxActive 4 SpawnCount 1 WaitBeforeStarting 25 WaitBetweenSpawns 18 TotalCurrency 200 TFBot { Template T_TFBot_Giant_Pyro Attributes AlwaysFireWeapon } } WaveSpawn // FIRE TANK 2 { WaitForAllSpawned "w4b" TotalCount 1 WaitBeforeStarting 10 WaitBetweenSpawns 0 TotalCurrency 100 FirstSpawnWarningSound "ambient\fire\ignite.wav" FirstSpawnOutput { Target gamerules Action runscriptcode Param "EntFire(`flame_trigger`, `AddOutput`, `OnStartTouchAll !activator:igniteplayer:1:0:-1`)" Delay 1 } Tank { Health 18000 Speed 90 Name "chewchew" StartingPathTrackNode "path_track_a_1" OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } OnKilledOutput { Target boss_spawn_relay Action CancelPending } } } } // WAVE 5 $600 Wave { InitWaveOutput { Target gamerules Action runscriptcode Param " SpawnEntityFromTable(`ambient_generic`{targetname = `apetransformsfx`,message = `ambient/halloween/thunder_08.wav`,health = 10,spawnflags = 49}) ::spoopyskeletons <- { Cleanup = function() { delete ::spoopyskeletons } OnGameEvent_recalculate_holidays = function(_) { if (GetRoundState() == 3) Cleanup() } OnGameEvent_mvm_wave_complete = function(_) { Cleanup() } function OnGameEvent_player_spawn(params) { local robot = GetPlayerFromUserID(params.userid); if(robot.GetPlayerClass() == 2) { EntFireByHandle(robot, `SetCustomModelWithClassAnimations`, `models/bots/skeleton_sniper_boss/skeleton_sniper_boss.mdl`, -1, null, null) if(robot.GetTeam() == 3) { NetProps.SetPropBool(robot, `m_bForcedSkin`, true) NetProps.SetPropInt(robot, `m_nForcedSkin`, 1) } } if(robot.GetTeam() == 3) { if(robot.GetPlayerClass() == 3) { EntFireByHandle(robot, `SetCustomModelWithClassAnimations`, `models/player/soldier.mdl`, -1, null, null) } } } }__CollectGameEventCallbacks(spoopyskeletons) ::apebuff <- { Cleanup = function() { delete ::apebuff } OnGameEvent_recalculate_holidays = function(_) { if (GetRoundState() == 3) Cleanup() } OnGameEvent_mvm_wave_complete = function(_) { Cleanup() } function OnGameEvent_player_hurt(params) { local robot = GetPlayerFromUserID(params.userid); local origin = robot.GetOrigin() if(robot.IsFakeClient()== true) { if(robot.HasBotTag(`ape`)) { if (robot.GetHealth() <= robot.GetMaxHealth()*0.5) { robot.SetOrigin(Vector(origin.x,origin.y,origin.z+10)) EntFire(`apetransformsfx`, `playsound`) PrecacheEntityFromTable({ classname = `info_particle_system`, effect_name = `wrenchmotron_teleport_beam` }) robot.AddCondEx(52,3,null) robot.AddCond(29) robot.AddCond(42) DispatchParticleEffect(`wrenchmotron_teleport_beam`, robot.GetCenter(), Vector(-90, 0, 0)) robot.Taunt(0,11) robot.SetModelScale(1.5,0) robot.SetHealth(900) robot.RemoveBotTag(`ape`) } } } } }__CollectGameEventCallbacks(apebuff)" } StartWaveOutput { Target wave_start_relay Action trigger } DoneOutput { Target wave_finished_relay Action trigger } WaveSpawn { Name "w5a" Where spawnbot_front TotalCount 4 MaxActive 4 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 7 TotalCurrency 25 TFBot { Template T_TFBot_Soldier_Katana_Berserk Item "Zombie Soldier" } } WaveSpawn { Name "w5a" Where spawnbot_front TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 10 WaitBetweenSpawns 20 TotalCurrency 25 TFBot { Template T_TFBot_Giant_Heavy_Steak_Warrior Item "Minsk Beef" Name "Great Buffalo Warrior" CharacterAttributes { "head scale" 1.3 } } } WaveSpawn { Name "w5a2" Where spawnbot TotalCount 12 MaxActive 6 SpawnCount 2 WaitBeforeStarting 4 WaitBetweenSpawns 2 TotalCurrency 25 Support Limited TFBot { Template T_TFBot_Warrior_MiniGiant Health 300 Scale 1 } } WaveSpawn { Name "w5a2" Where spawnbot_front TotalCount 6 MaxActive 6 SpawnCount 1 WaitBeforeStarting 6 WaitBetweenSpawns 6 TotalCurrency 25 Support Limited TFBot { Template T_TFBot_Warrior_MiniGiant } } WaveSpawn { WaitForAllSpawned "w5a2" Name "w5b2" Where spawnbot TotalCount 8 MaxActive 4 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 1.4 TotalCurrency 25 TFBot { Class Scout } } WaveSpawn { WaitForAllSpawned "w5a2" Name "w5b" Where spawnbot_front TotalCount 6 MaxActive 6 SpawnCount 2 WaitBeforeStarting 8 WaitBetweenSpawns 4 TotalCurrency 25 TFBot { Template T_TFBot_Persian_Demoknight Skill Easy } } WaveSpawn { WaitForAllSpawned "w5a2" Name "w5b" Where spawnbot_front TotalCount 6 MaxActive 6 SpawnCount 3 WaitBeforeStarting 14 WaitBetweenSpawns 14 TotalCurrency 50 Squad { TFBot { Template T_TFBot_Sniper_Huntsman_Spammer_Conch Skill Easy Attributes AlwaysCrit } TFBot { Class Demoman Skill Normal } TFBot { Class Demoman Skill Normal } } } WaveSpawn { FirstSpawnOutput { Target gamerules Action runscriptcode Param " EntFire(`msg_tank_cave`, `addoutput`, `origin -9066 -740 400`) EntFire(`msg_tank_cave`, `addoutput`, `display_text Watch out for the flank!`) EntFire(`msg_tank_cave`, `show`,null,0.1)" } WaitForAllDead "w5b2" Name "w5c" Where spawnbot_beach TotalCount 18 MaxActive 18 SpawnCount 6 WaitBeforeStarting 0 WaitBetweenSpawns 12 TotalCurrency 25 FirstSpawnWarningSound "Taunt.YetiRoarSecond" TFBot { Template T_TFBot_Persian_Demoknight Skill Easy } } WaveSpawn { WaitForAllSpawned "w5c" Name "w5d" Where spawnbot_beach TotalCount 16 MaxActive 8 SpawnCount 4 WaitBeforeStarting 0 WaitBetweenSpawns 28 TotalCurrency 50 Squad { TFBot { Template T_TFBot_Sniper_Huntsman_Spammer_Conch Attributes AlwaysCrit Skill Easy } TFBot { Class Demoman Skill Normal } TFBot { Class Demoman Skill Normal } TFBot { Class Demoman Skill Normal } } } WaveSpawn { WaitForAllDead "w5b2" Name "w5d2" Where spawnbot_beach TotalCount 6 MaxActive 4 SpawnCount 1 WaitBeforeStarting 10 WaitBetweenSpawns 15 TotalCurrency 75 TFBot { Template T_TFBot_Giant_Heavy_Steak_Warrior Item "Minsk Beef" Name "Great Buffalo Warrior" CharacterAttributes { "head scale" 1.3 } } } WaveSpawn { WaitForAllSpawned "w5c" Where spawnbot_beach TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 60 TotalCurrency 0 Support Limited TFBot { Template T_TFBot_Engineer_Sentry_Teleporter Attributes IgnoreFlag TeleportWhere spawnbot_beach } } WaveSpawn { WaitForAllDead "w5c" Name "w5e" Where spawnbot_front TotalCount 4 MaxActive 4 SpawnCount 1 WaitBeforeStarting 15 WaitBetweenSpawns 15 TotalCurrency 25 TFBot { Template T_TFBot_Soldier_Katana_Berserk Item "Zombie Soldier" } } WaveSpawn { WaitForAllDead "w5c" Name "w5e" Where spawnbot TotalCount 16 MaxActive 8 SpawnCount 2 WaitBeforeStarting 20 WaitBetweenSpawns 6 TotalCurrency 75 TFBot { Class Scout } } WaveSpawn { WaitForAllSpawned "w5b2" Where spawnbot_beach TotalCount 27 MaxActive 6 SpawnCount 3 WaitBeforeStarting 20 WaitBetweenSpawns 6 TotalCurrency 50 Support 1 Squad { TFBot { Template T_TFBot_Warrior_MiniGiant } TFBot { Template T_TFBot_Warrior_MiniGiant Health 300 Scale 1 } TFBot { Template T_TFBot_Warrior_MiniGiant Health 300 Scale 1 } } } WaveSpawn { WaitForAllSpawned "w5d" Where spawnbot_beach TotalCount 100 MaxActive 12 SpawnCount 3 WaitBeforeStarting 0 WaitBetweenSpawns 0.1 TotalCurrency 100 Support 1 TFBot { Template T_TFBot_Warrior_MiniGiant Health 300 Scale 1 } } } // WAVE 6 $1000 Wave { InitWaveOutput { Target gamerules Action runscriptcode Param "SpawnEntityFromTable(`ambient_generic`{targetname = `ambient_phase1`,message = `Halloween.HeadlessBossSpawnRumble`,health = 10,spawnflags = 49}) SpawnEntityFromTable(`ambient_generic`{targetname = `ambient_phase1`,message = `Halloween.HeadlessBossSpawnRumble`,health = 10,spawnflags = 49}) EntFire(`respawnroom_blue`, `disable`) ::spoopyskeletons <- { Cleanup = function() { delete ::spoopyskeletons } OnGameEvent_recalculate_holidays = function(_) { if (GetRoundState() == 3) Cleanup() } OnGameEvent_mvm_wave_complete = function(_) { Cleanup() } function OnGameEvent_player_spawn(params) { local robot = GetPlayerFromUserID(params.userid); if(robot.GetPlayerClass() == 2) { EntFireByHandle(robot, `SetCustomModelWithClassAnimations`, `models/bots/skeleton_sniper_boss/skeleton_sniper_boss.mdl`, -1, null, null) if(robot.GetTeam() == 3) { NetProps.SetPropBool(robot, `m_bForcedSkin`, true) NetProps.SetPropInt(robot, `m_nForcedSkin`, 1) } } } }__CollectGameEventCallbacks(spoopyskeletons) ::smartdetonate <- { Cleanup = function() { delete ::smartdetonate } OnGameEvent_recalculate_holidays = function(_) { if (GetRoundState() == 3) Cleanup() } OnGameEvent_mvm_wave_complete = function(_) { Cleanup() } function OnGameEvent_player_spawn(params) { PrecacheEntityFromTable({ classname = `info_particle_system`, effect_name = `mvm_pow_gold_seq_firework_mid` }) local robot = GetPlayerFromUserID(params.userid); if (robot.GetTeam() == 3) { EntFireByHandle(robot, `RunScriptCode`, `smartdetonate.Detonate(self)`, -1.0, null, null) } } Detonate = function(robot) { if (robot.HasBotTag(`smartdetonate`)) { EntFireByHandle(robot, `RunScriptCode`, `smartdetonate.Detonate(self)`, 0.1, null, null) } for (local flare = null; (flare = Entities.FindByClassname(flare, `tf_projectile_flare`)) != null; ) for (local player = null; (player = Entities.FindByClassnameWithin(player, `player`, flare.GetOrigin(), 200)) != null; ) { local owner = flare.GetOwner() if(owner == robot) { if(player.GetTeam() == 2) { DispatchParticleEffect(`mvm_pow_gold_seq_firework_mid`, flare.GetCenter(), Vector(1, 0, 0)) flare.EmitSound(`Summer.Fireworks`) robot.PressAltFireButton(0.1) } } } } }__CollectGameEventCallbacks(smartdetonate)" } StartWaveOutput { Target wave_start_relay Action trigger } DoneOutput { Target wave_finished_relay Action trigger } WaveSpawn { Name "w6a" Where spawnbot RandomSpawn 1 TotalCount 24 MaxActive 16 SpawnCount 8 WaitBeforeStarting 0 WaitBetweenSpawns 4 TotalCurrency 50 TFBot { Class Pyro WeaponRestrictions SecondaryOnly Item "The Detonator" Tag smartdetonate Skill Hard ClassIcon pyro_detonator_lite Name "Fireworks Pyro" Attributes AlwaysCrit ItemAttributes { ItemName "The Detonator" "blast radius increased" 2 } CharacterAttributes { "blast dmg to self increased" 0 } } } WaveSpawn { WaitForAllSpawned "w6a" Name "w6a2" Where spawnbot RandomSpawn 1 TotalCount 16 MaxActive 8 SpawnCount 2 WaitBeforeStarting 1 WaitBetweenSpawns 1 TotalCurrency 50 Support Limited TFBot { Template T_TFBot_Sniper_Huntsman_RapidFire Skill Easy } } WaveSpawn { WaitForAllSpawned "w6a" Name "w6b" Where spawnbot RandomSpawn 1 TotalCount 18 MaxActive 6 SpawnCount 1 WaitBeforeStarting 5 WaitBetweenSpawns 1 TotalCurrency 50 Support Limited RandomChoice { TFBot { Template T_TFBot_Dragon_Fury_Pyro Skill Easy } } } WaveSpawn { WaitForAllSpawned "w6a2" Name "w6c" Where spawnbot RandomSpawn 1 TotalCount 16 MaxActive 16 SpawnCount 4 WaitBeforeStarting 10 WaitBetweenSpawns 10 TotalCurrency 50 FirstSpawnWarningSound "MVM.Siren" Support Limited FirstSpawnOutput { Target gamerules Action runscriptcode Param "EntFire(`msg_tank_cave`, `addoutput`, `display_text AIR RAID!`) EntFire(`msg_tank_cave`, `addoutput`, `origin -8672 1760 672`) EntFire(`msg_tank_cave`, `show`,null,0.1)" } TFBot { Template T_TFBot_Demo_Cannon Tag para ClassIcon demo_para Name "Magic Flying Demoman" Item "The Crone's Dome" CharacterAttributes { "attach particle effect" 3083 } } } WaveSpawn { WaitForAllDead "w6a" Name "w6c2" Where spawnbot_front RandomSpawn 1 TotalCount 4 MaxActive 4 SpawnCount 2 WaitBeforeStarting 0 WaitBetweenSpawns 20 TotalCurrency 75 TFBot { Template T_TFBot_Giant_Demo_Cannon ClassIcon demo_spammer_giant Item "The Squid's Lid" CharacterAttributes { "fire rate bonus" 0.75 "faster reload rate" -0.8 } } } WaveSpawn { WaitForAllSpawned "w6a2" Name "w6c2" Where spawnbot_front RandomSpawn 1 TotalCount 8 MaxActive 8 SpawnCount 2 WaitBeforeStarting 0 WaitBetweenSpawns 10 TotalCurrency 100 Squad { TFBot { Template T_TFBot_Bushwacka_Sniper_Armored Health 1200 Scale 1.55 Item "Bare Bear Bones" Item "Forgotten King's Pauldrons" Name "Armored Skelesaur" } TFBot { Template T_TFBot_Bushwacka_Sniper_Armored Health 1200 Scale 1.55 Item "Bare Bear Bones" Item "Forgotten King's Pauldrons" Name "Armored Skelesaur" } } } WaveSpawn { WaitForAllDead "w6c2" WaitBeforeStarting 8 FirstSpawnWarningSound "vo\mvm\mght\demoman_mvm_m_laughevil03.mp3" FirstSpawnOutput { Target gamerules Action runscriptcode Param " EntFire(`nav_interface`, `recomputeblockers`) EntFire(`respawnroom_blue`, `enable`) EntFire(`intel*`, `forcereset`) EntFire(`ambient_phase1`, `playsound`) EntFire(`ambient_phase1`, `playsound`,null,10) EntFire(`cave_in_wall`, `DisableCollision`,null,0.1) EntFire(`cave_in_shake`, `startshake`,null,2) EntFire(`cave_in_smoke`, `start`,null,2) EntFire(`cave_in_smoke`, `start`,null,10) EntFire(`cave_in_explosion`, `Explode`,null,9.9) EntFire(`cave_in_wall`, `Enable`,null,10) EntFire(`cave_in_wall`, `EnableCollision`,null,10) EntFire(`cave_in_smoke`, `stop`,null,20) IncludeScript(`popextensions_main`, getroottable()) if(!(`PointTemplates` in getroottable())) ::PointTemplates <- {} PointTemplates.SHAKE <- { NoFixup = 1, [0] = { env_shake = { targetname = `cave_in_shake` duration = 20 spawnflags = 13 frequency = 255 amplitude = 16 } } } PointTemplates.Smoke <- { NoFixup = 1, [0] = { info_particle_system = { effect_name = `base_destroyed_smoke_doomsday` targetname = `cave_in_smoke` } } } PointTemplates.Explosion <- { NoFixup = 1, [0] = { env_explosion = { targetname = `cave_in_explosion` iMagnitude = 9999 iRadiusOverride = 512 spawnflags = 2 } } } PointTemplates.Cavewall <- { NoFixup = 1, [0] = { prop_dynamic = { StartDisabled = 1 targetname = `cave_in_wall` solid = 6 model = `models/props_coalmines/boulder5_huge.mdl` } } } SpawnTemplate(`SHAKE`, null, `0 0 0`, `0 0 0`) SpawnTemplate(`Smoke`, null, `-6870 -215 520`, `0 180 180`) SpawnTemplate(`Cavewall`, null, `-7000 -128 16`, `0 75 0`) SpawnTemplate(`Explosion`, null, `-6900 -50 200`, `0 0 0`) " } } WaveSpawn { WaitForAllDead "w6c2" WaitBeforeStarting 8 FirstSpawnOutput { Target gamerules Action runscriptcode Param " EntFire(`move_ship`, `SetSpeed`, `100`) EntFire(`msg_tank_cave`, `addoutput`, `origin -8600 1785 900`) EntFire(`msg_tank_cave`, `addoutput`, `display_text Hehehe...`) EntFire(`msg_tank_cave`, `show`,null,0.1) EntFire(`msg_tank_cave`, `addoutput`, `display_text You thought that was the worst of it?`,5) EntFire(`msg_tank_cave`, `show`,null,5.1) EntFire(`cave_start`, `trigger`,null,10)" } } WaveSpawn { WaitForAllDead "w6c2" Where spawnbot RandomSpawn 1 TotalCount 24 MaxActive 2 SpawnCount 1 WaitBeforeStarting 10 WaitBetweenSpawns 2 TotalCurrency 0 Support 1 TFBot { Template T_TFBot_Demo_Cannon Scale 0.01 ClassIcon demo_para Name "Ship Cannons" BehaviorModifiers push ItemAttributes { ItemName "The Loose Cannon" "fire rate bonus" 0.2 "fuse bonus" 1.5 "projectile spread angle penalty" 60 } CharacterAttributes { "health regen" -100 "voice pitch scale" 0 } } } WaveSpawn { WaitForAllDead "w6c2" Name "w6d" Where spawnbot_cave RandomSpawn 1 TotalCount 8 MaxActive 8 SpawnCount 2 WaitBeforeStarting 35 WaitBetweenSpawns 14 TotalCurrency 100 TFBot { Template T_TFBot_Bushwacka_Sniper_Armored Health 1200 Scale 1.55 Item "Bare Bear Bones" Item "Forgotten King's Pauldrons" Name "Armored Skelesaur" } } WaveSpawn { WaitForAllDead "w6c2" WaitBeforeStarting 90 FirstSpawnOutput { Target gamerules Action runscriptcode Param " EntFire(`cave_end`, `trigger`) EntFire(`shipsound`,`trigger`,null,15) EntFire(`shipsound`,`trigger`,null,30) EntFire(`shipsound`,`trigger`,null,45) EntFire(`shipsound`,`trigger`,null,60) EntFire(`msg_tank_cave`, `addoutput`, `display_text Prepare! The final storm is commencing!`) EntFire(`msg_tank_cave`, `addoutput`, `origin -4320 1760 650`) EntFire(`msg_tank_cave`, `show`,null,60)" } } WaveSpawn { WaitForAllDead "w6c2" Where spawnbot_back RandomSpawn 1 TotalCount 50 MaxActive 4 SpawnCount 1 WaitBeforeStarting 40 WaitBetweenSpawns 2 TotalCurrency 50 Support 1 TFBot { Template T_TFBot_Sniper_Huntsman_RapidFire Skill Easy } } WaveSpawn { WaitForAllDead "w6c2" Where spawnbot_back RandomSpawn 1 TotalCount 50 MaxActive 2 SpawnCount 1 WaitBeforeStarting 45 WaitBetweenSpawns 2 TotalCurrency 50 Support 1 TFBot { Template T_TFBot_Dragon_Fury_Pyro Skill Easy } } WaveSpawn { WaitForAllDead "w6c2" Name "w6e" Where spawnbot_back RandomSpawn 1 TotalCount 6 MaxActive 6 SpawnCount 2 WaitBeforeStarting 60 WaitBetweenSpawns 14 TotalCurrency 100 Squad { TFBot { Template T_TFBot_Giant_Bushwacka_Sniper_Fast Item "Bare Bear Bones" Item "Mad Lad" Name "Great Skelesaur" } TFBot { Template T_TFBot_Medic_QuickFix } } } WaveSpawn { WaitForAllSpawned "w6e" Where spawnbot_back RandomSpawn 1 TotalCount 50 MaxActive 2 SpawnCount 1 WaitBeforeStarting 41 WaitBetweenSpawns 2 TotalCurrency 50 Support 1 FirstSpawnWarningSound "Taunt.YetiRoarSecond" TFBot { Template T_TFBot_Sniper_Huntsman_RapidFire Skill Easy } } WaveSpawn { WaitForAllSpawned "w6e" Where spawnbot_back RandomSpawn 1 TotalCount 50 MaxActive 4 SpawnCount 1 WaitBeforeStarting 45 WaitBetweenSpawns 2 TotalCurrency 50 Support 1 TFBot { Template T_TFBot_Dragon_Fury_Pyro Skill Easy } } WaveSpawn { WaitForAllSpawned "w6e" Name "w6f" Where spawnbot_back RandomSpawn 1 TotalCount 6 MaxActive 3 SpawnCount 2 WaitBeforeStarting 45 WaitBetweenSpawns 0 TotalCurrency 50 TFBot { Template T_TFBot_Giant_Pyro Attributes AlwaysCrit Attributes AlwaysFireWeapon } } WaveSpawn { WaitForAllSpawned "w6e" Name "w6f" Where spawnbot_back RandomSpawn 1 TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 60 WaitBetweenSpawns 60 TotalCurrency 25 TFBot { Template T_TFBot_Giant_Demo_Cannon ClassIcon demo_spammer_giant Item "The Squid's Lid" CharacterAttributes { "fire rate bonus" 0.75 "faster reload rate" -0.8 } } } WaveSpawn { WaitForAllSpawned "w6e" Name "w6f" Where spawnbot_back RandomSpawn 1 TotalCount 6 MaxActive 6 SpawnCount 2 WaitBeforeStarting 40 WaitBetweenSpawns 30 TotalCurrency 100 FirstSpawnWarningSound "Taunt.YetiRoarSecond" Squad { TFBot { Template T_TFBot_Giant_Bushwacka_Sniper_Fast Item "Bare Bear Bones" Item "Forgotten King's Pauldrons" Name "Great Skelesaur" } TFBot { Template T_TFBot_Medic_QuickFix } } } } }