// ---------------------------------------------------------------- \\ // Cyberia - Cyber Security (Advanced) \\ // By Ultimaximus - https://steamcommunity.com/id/Ultimaximus \\ // & Tindall Berry - https://steamcommunity.com/id/Iandavebob90802 \\ // \\ // Vanilla-compatible, uses rafmod for optional effects \\ // ---------------------------------------------------------------- \\ // TODO uncomment giant charged soldier damage // todo new nav #base robot_giant.pop #base robot_standard.pop WaveSchedule { StartingCurrency 1200 RespawnWaveTime 4 CanBotsAttackWhileInSpawnRoom no Advanced 1 Templates { T_TFBot_Medic_QF { Class Medic Name "Quick-Fix Medic" Item "The Quick-Fix" } T_TFBot_Medic_Uber // todo consolidate if unused { Class Medic Name "Uber Medic" Skill Normal ClassIcon medic_uber Attributes SpawnWithFullCharge ItemAttributes { ItemName "TF_WEAPON_MEDIGUN" "heal rate bonus" 5 "ubercharge rate bonus" 2 "patient overheal penalty" 0 // Prevents receiving overheal } } T_TFBot_Medic_Uber_Quick { Template T_TFBot_Medic_Uber Name "Quick Uber Medic" ItemAttributes { ItemName "TF_WEAPON_MEDIGUN" "heal rate bonus" 0.1 "ubercharge rate bonus" 5 "uber duration bonus" -3 "patient overheal penalty" 0 } } T_TFBot_Medic_Kritzkrieg { Class Medic Name "Kritzkrieg Medic" Skill Normal Item "The Kritzkrieg" ClassIcon medic_kritz Attributes SpawnWithFullCharge CharacterAttributes { "bot medic uber health threshold" 151 } ItemAttributes { ItemName "The Kritzkrieg" "ubercharge rate bonus" 100 "uber duration bonus" 100 "patient overheal penalty" 0 } } T_TFBot_Giant_Soldier_Rapid_Fire { Class Soldier Name "Giant Rapid Fire Soldier" Skill Expert Health 3800 Item "Upgradeable TF_WEAPON_ROCKETLAUNCHER" ClassIcon soldier_spammer Attributes MiniBoss CharacterAttributes { "move speed penalty" 0.5 "damage force reduction" 0.4 "airblast vulnerability multiplier" 0.4 "override footstep sound set" 3 } ItemAttributes { ItemName "Upgradeable TF_WEAPON_ROCKETLAUNCHER" "faster reload rate" -0.8 "fire rate bonus" 0.5 "projectile speed decreased" 0.65 } } T_WaveSpawn_Scout_Tele { Where spawnbot_mission_sniper_tertiary TotalCount 3 SpawnCount 3 WaitForAllSpawned "6-C" Support Limited TFBot { Template T_TFBot_Scout_Melee Name "Bat Scout" ClassIcon scout_bat_nys Attributes DisableDodge Attributes Aggressive // Fix for robots idling on tank } } } Mission // W1-6 Sentry Buster { Objective DestroySentries Where spawnbot_mission_sentrybuster RunForThisManyWaves 6 InitialCooldown 20 CooldownTime 30 TFBot { Template T_TFBot_SentryBuster Attributes DisableDodge Attributes IgnoreEnemies CharacterAttributes { "voice pitch scale" 0 } } } Mission // W7 Sentry Busters { Objective DestroySentries Where spawnbot_mission_sentrybuster BeginAtWave 7 // DesiredCount 2 // Objective DestroySentries ignores DesiredCount InitialCooldown 20 CooldownTime 33 Squad { // Do not talk to me or my son ever again TFBot { Template T_TFBot_SentryBuster WeaponRestrictions PrimaryOnly Attributes DisableDodge Attributes IgnoreEnemies } TFBot { Template T_TFBot_SentryBuster Name "Sentry Buster Jr." Scale 0.9 WeaponRestrictions PrimaryOnly Attributes DisableDodge Attributes IgnoreEnemies CharacterAttributes { "voice pitch scale" 1.4 } } } } Mission // W2-3 Sniper { Objective Sniper Where spawnbot_mission_sniper BeginAtWave 2 RunForThisManyWaves 2 DesiredCount 1 InitialCooldown 45 CooldownTime 25 TFBot { Template T_TFBot_Sniper } } // Mission // W6 Huntsman Sniper, not fun due to lack of aiming lasers // { // Objective Sniper // Where spawnbot_mission_sniper // BeginAtWave 6 // RunForThisManyWaves 1 // DesiredCount 2 // InitialCooldown 25 // CooldownTime 30 // TFBot // { // Class Sniper // Name "Bowman" // Skill Hard // Item "The Huntsman" // ClassIcon sniper_bow // ItemAttributes // { // ItemName "The Huntsman" // "damage penalty" 0.5 // } // } // } Mission // W7 Sniper { Objective Sniper Where spawnbot_mission_sniper BeginAtWave 7 RunForThisManyWaves 1 DesiredCount 3 InitialCooldown 10 CooldownTime 45 TFBot { Template T_TFBot_Sniper } } Mission // W4 Spy { Objective Spy Where spawnbot_mission_spy BeginAtWave 4 RunForThisManyWaves 1 DesiredCount 2 InitialCooldown 75 CooldownTime 30 TFBot { Template T_TFBot_Spy } } Mission // W6 Spy { Objective Spy Where spawnbot_mission_spy BeginAtWave 6 RunForThisManyWaves 1 DesiredCount 3 InitialCooldown 90 CooldownTime 60 TFBot { Template T_TFBot_Spy } } Mission // W1-6 Teleporter Engineer { Objective Engineer Where spawnbot BeginAtWave 1 RunForThisManyWaves 6 DesiredCount 1 InitialCooldown 65 CooldownTime 70 TFBot { Template T_TFBot_Engineer_Sentry_Teleporter TeleportWhere spawnbot TeleportWhere spawnbot_secondary TeleportWhere spawnbot_tertiary TeleportWhere spawnbot_main CharacterAttributes { "health regen" 1 // Makes health visible } } } PointTemplates { RafmodDetector { } } Wave // Wave 1/7 - $900 { InitWaveOutput { // Target death_pit_math // Original InitWaveOutput must now be done in vscript // Action Disable Target gamerules Action RunScriptCode Param " local function WaveInit() { EntFire(`death_pit_math`, `Disable`) // Don't automatically close pit after too much use if (!Entities.FindByName(null, `magnet_fun`)) { local function ragdollmagnet(coords) { local table = { phys_ragdollmagnet = { targetname = `magnet_fun` radius = `350` force = `1000000` origin = coords } } return table } SpawnEntityGroupFromTable({ a = ragdollmagnet(`2400 640 800`) // Indoor second floor b = ragdollmagnet(`2950 640 800`) c = ragdollmagnet(`3420 640 800`) }) } } WaveInit() // Set up entities, but will run twice on wave 1 loss/jump due to mvm_wave_failed ::CyberSecurity <- { rafmodent = Entities.FindByName(null, `RafmodDetector`) // Find rafmod-only entity resource = Entities.FindByClassname(null, `tf_objective_resource`) // Re-initialize entities on wave failure/jump function OnGameEvent_mvm_wave_failed(params) { WaveInit() } function OnGameEvent_player_spawn(params) { ClientPrint(null, 3, params.userid.tostring()) local player = GetPlayerFromUserID(params.userid) if (NetProps.GetPropString(player, `m_szNetname`) == `Ultimaximus`) NetProps.SetPropString(player, `m_szNetname`, `[Slut] Ultimaximus`) else if (NetProps.GetPropString(player, `m_szNetworkIDString`) == `[U:1:24422872]`) // Tindall Berry NetProps.SetPropString(player, `m_szNetname`, `The Overseer`) else if (NetProps.GetPropString(player, `m_szNetname`) == `Seeking Revenant`) NetProps.SetPropString(player, `m_szNetname`, `the blowuper`) } // Remove everything on mission change function OnGameEvent_mvm_reset_stats(params) { if (NetProps.GetPropString(::CyberSecurity.resource, `m_iszMvMPopfileName`) != `scripts/population/mvm_cyberia_rc6a_adv_cyber_security.pop`) { delete ::CyberSecurity } } } // player_spawn doesn't fire on mission load, so call it manually for each player (also runs twice on w1 loss/jump) for (local i = 1; i <= MaxClients(); i++) { local player = PlayerInstanceFromIndex(i) if (player && player.GetTeam() == 2) { // player_spawn requires a table with a userid ::CyberSecurity.OnGameEvent_player_spawn({ userid = NetProps.GetPropIntArray(Entities.FindByClassname(null, `tf_player_manager`), `m_iUserID`, player.entindex()) }) } } ClearGameEventCallbacks() // Wipe potential event listeners from other missions (don't do on maps that have event listeners) __CollectGameEventCallbacks(::CyberSecurity) " } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Where spawnbot TotalCount 5 SpawnCount 5 TotalCurrency 20 TFBot { Class Demoman Name "Burst Fire Demo" Item "Upgradeable TF_WEAPON_GRENADELAUNCHER" ClassIcon demo_burst Attributes HoldFireUntilFullReload ItemAttributes { ItemName "Upgradeable TF_WEAPON_GRENADELAUNCHER" "damage penalty" 0.3 "reload time increased" 1.75 "fire rate bonus" 0.05 "projectile spread angle penalty" 10 "projectile speed decreased" 0.8 } } DoneOutput { Target cap_hatch_glasswindow Action Break } } WaveSpawn { Name "1-A" Where spawnbot_main RandomSpawn 1 TotalCount 25 MaxActive 10 SpawnCount 5 WaitBeforeStarting 10 WaitBetweenSpawns 8 TotalCurrency 100 TFBot { Class Demoman Name "Burst Fire Demo" Item "Upgradeable TF_WEAPON_GRENADELAUNCHER" ClassIcon demo_burst Attributes HoldFireUntilFullReload ItemAttributes { ItemName "Upgradeable TF_WEAPON_GRENADELAUNCHER" "damage penalty" 0.3 "reload time increased" 1.75 "fire rate bonus" 0.05 "projectile spread angle penalty" 10 "projectile speed decreased" 0.8 } } } WaveSpawn { Name "1-B" Where spawnbot TotalCount 6 MaxActive 4 SpawnCount 2 WaitBeforeStarting 20 WaitBetweenSpawns 25 TotalCurrency 120 Squad { TFBot { Template T_TFBot_Giant_Pyro Attributes AlwaysFireWeapon } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn { Name "1-C" WaitForAllDead "1-A" Where spawnbot TotalCount 40 MaxActive 12 SpawnCount 8 WaitBeforeStarting 3 WaitBetweenSpawns 12 TotalCurrency 200 TFBot { Class Scout } } WaveSpawn { Name "1-D" WaitForAllSpawned "1-B" Where spawnbot TotalCount 2 SpawnCount 1 WaitBeforeStarting 18 WaitBetweenSpawns 20 TotalCurrency 40 TFBot { Class Demoman Name "Giant Demoman" Skill Expert Health 3300 Item "Upgradeable TF_WEAPON_GRENADELAUNCHER" ClassIcon demo_giant Attributes HoldFireUntilFullReload Attributes MiniBoss CharacterAttributes { "move speed penalty" 0.5 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } ItemAttributes { ItemName "Upgradeable TF_WEAPON_GRENADELAUNCHER" "fire rate bonus" 0.5 } } } WaveSpawn { WaitForAllSpawned "1-C" Where spawnbot TotalCount 20 MaxActive 8 SpawnCount 4 WaitBeforeStarting 5 WaitBetweenSpawns 8 TotalCurrency 100 TFBot { Class Pyro } } WaveSpawn { WaitForAllSpawned "1-D" Where spawnbot TotalCount 8 SpawnCount 4 WaitBeforeStarting 22 WaitBetweenSpawns 25 TotalCurrency 200 Squad { TFBot { Template T_TFBot_Giant_Soldier } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn { WaitForAllDead "1-C" Where spawnbot TotalCount 30 MaxActive 6 SpawnCount 3 WaitBeforeStarting 3 WaitBetweenSpawns 12 TotalCurrency 120 Support 1 TFBot { Template T_TFBot_Scout_Melee Name "Bat Scout" ClassIcon scout_bat_nys Attributes DisableDodge } } } Wave // Wave 2/7 - $1100 { // InitWaveOutput // { // Target death_pit_math // Action Disable // } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name "2-A" TotalCount 1 TotalCurrency 175 FirstSpawnWarningSound "mvm/mvm_tank_start.wav" // Not built into the map FirstSpawnOutput // Alternate method to fix tank destruction, see further comments { Target boss_deploy_relay Action AddOutput Param "OnTrigger tankboss:DestroyIfAtCapturePoint:x:0:-1" } Tank { Name "tankboss" Health 15000 Speed 80 StartingPathTrackNode "tank_path_a_1" OnBombDroppedOutput // Cyberia doesn't destroy tanks when they deploy, but it can be done manually { // Target spawnbot_mission_sniper_tertiary // System to deploy bomb and destroy tank simultaneously // Action Enable Target boss_deploy_relay // New system could hang at robot limit, using alternate method but leaving old code for documentation Action Trigger } } StartWaveOutput { Target spawnbot_mission_sniper_tertiary Action Disable } // LastSpawnOutput // Calling DestroyIfAtCapturePoint with Delay risks destroying tank too early or awkwardly late due to timing inconsistencies // { // Target "tankboss" // Action DestroyIfAtCapturePoint // Param "x" // Delay 128 // } } WaveSpawn { Name "2-X" Where spawnbot_mission_sniper_tertiary // This spawnbot was originally enabled when tank deploys TotalCount 1 WaitBeforeStarting 0.1 Support Limited TFBot { Template T_TFBot_Heavyweapons_Heavyweight_Champ_Fast Name "Lightweight Champ" } } WaveSpawn // Outputs must be ran by a separate WaveSpawn to prevent being processed when wave is beaten { WaitForAllSpawned "2-X" Support Limited // Required, or else wave will not end StartWaveOutput // DoneOutput will run on wave end, First/LastSpawnOutput requires a robot { Target "tankboss" Action DestroyIfAtCapturePoint Param "x" // Parameters other than 1/2/3 will use a random animation } } WaveSpawn { WaitForAllSpawned "2-X" Support Limited StartWaveOutput { Target boss_deploy_relay // Deploy bomb if tank delivers Action Trigger } } WaveSpawn { Name "2-B" WaitForAllSpawned "2-Z" Where spawnbot TotalCount 30 MaxActive 10 SpawnCount 5 WaitBeforeStarting 18 WaitBetweenSpawns 9 TotalCurrency 150 TFBot { Class Soldier Skill Normal } } WaveSpawn { Name "2-C" WaitForAllSpawned "2-Z" Where spawnbot TotalCount 4 SpawnCount 2 WaitBeforeStarting 21 WaitBetweenSpawns 24 TotalCurrency 60 Squad { TFBot { Template T_TFBot_Giant_DemoMan_PrinceTavish ItemAttributes { ItemName "The Chargin' Targe" "charge time decreased" -2 } } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn { WaitForAllSpawned "2-B" Where spawnbot TotalCount 15 MaxActive 8 SpawnCount 5 WaitBeforeStarting 15 WaitBetweenSpawns 10 TotalCurrency 75 TFBot { Class Heavy } } WaveSpawn { Name "2-D" WaitForAllDead "2-B" Where spawnbot TotalCount 6 MaxActive 4 SpawnCount 3 WaitBeforeStarting 17 WaitBetweenSpawns 10 TotalCurrency 30 TFBot { Class Soldier Skill Normal } } WaveSpawn { Name "2-E" WaitForAllSpawned "2-C" Where spawnbot TotalCount 3 MaxActive 2 SpawnCount 1 WaitBeforeStarting 16 WaitBetweenSpawns 20 TotalCurrency 60 TFBot { Class Soldier Name "Giant Charged Soldier" Skill Expert Health 3800 Item "The Original" ClassIcon soldier_crit Attributes AlwaysCrit Attributes MiniBoss CharacterAttributes { "move speed penalty" 0.5 "damage force reduction" 0.4 "airblast vulnerability multiplier" 0.4 "override footstep sound set" 3 } ItemAttributes { ItemName "The Original" // "damage bonus" 1.5 "faster reload rate" -0.2 "fire rate penalty" 2 "projectile speed decreased" 0.5 } } } WaveSpawn { WaitForAllSpawned "2-E" Where spawnbot TotalCount 9 SpawnCount 9 WaitBeforeStarting 27 TotalCurrency 180 Squad { TFBot { Template T_TFBot_Giant_Soldier_Rapid_Fire } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn // Friendly Scout { Where red_player_teamspawn TotalCount 1 Support Limited TFBot { Class Scout Health 75 Scale 0.7 ClassIcon heavy_gru WeaponRestrictions MeleeOnly Attributes IgnoreFlag Attributes SuppressFire CharacterAttributes { "dmg taken increased" 0 "airblast vulnerability multiplier" 0 "voice pitch scale" 1.1 } } } WaveSpawn { Name "2-Z" Where spawnbot TotalCount 24 MaxActive 12 SpawnCount 8 WaitBetweenSpawns 12 TotalCurrency 120 Support Limited TFBot { Template T_TFBot_Heavyweapons_Heavyweight_Champ_Fast Name "Lightweight Champ" } } WaveSpawn { WaitForAllSpawned "2-Z" WaitForAllDead "2-A" Where spawnbot TotalCount 30 MaxActive 4 SpawnCount 3 WaitBeforeStarting 32 WaitBetweenSpawns 10 TotalCurrency 150 Support 1 TFBot { Template T_TFBot_Heavyweapons_Heavyweight_Champ_Fast Name "Lightweight Champ" } } WaveSpawn { WaitForAllDead "2-D" Where spawnbot TotalCount 20 MaxActive 8 SpawnCount 5 WaitBeforeStarting 5 WaitBetweenSpawns 10 TotalCurrency 100 Support 1 TFBot { Template T_TFBot_Heavyweapons_Heavyweight_Champ_Fast Name "Lightweight Champ" } } } Wave // Wave 3/7 - $1000 { // InitWaveOutput // { // Target death_pit_math // Action Disable // } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name "3-A" Where spawnbot_mission_sniper_tertiary TotalCount 30 MaxActive 12 SpawnCount 3 WaitBetweenSpawns 2 TotalCurrency 150 TFBot { Class Pyro } StartWaveOutput // Reenable spawnbot that was disabled for tank destruction system { Target spawnbot_mission_sniper_tertiary Action Enable } } WaveSpawn { Name "3-B" Where spawnbot TotalCount 7 SpawnCount 7 WaitBeforeStarting 8 TotalCurrency 140 Squad { TFBot { Template T_TFBot_Giant_Heavyweapons Name "Giant Heater Heavy" Item "The Huo Long Heatmaker" ClassIcon heavy_heater_nys MaxVisionRange 1200 ItemAttributes { ItemName "The Huo Long Heatmaker" "damage bonus" 1.2 "damage penalty" 1 } } TFBot { Template T_TFBot_Medic_Kritzkrieg } TFBot { Template T_TFBot_Medic_Kritzkrieg } TFBot { Template T_TFBot_Medic_Kritzkrieg } TFBot { Template T_TFBot_Medic_Kritzkrieg } TFBot { Template T_TFBot_Medic_Kritzkrieg } TFBot { Template T_TFBot_Medic_Kritzkrieg } } } WaveSpawn { Name "3-C" WaitForAllDead "3-A" Where spawnbot TotalCount 48 MaxActive 12 SpawnCount 8 WaitBetweenSpawns 8 TotalCurrency 145 TFBot { Class Scout } } WaveSpawn { Name "3-D" WaitForAllDead "3-B" Where spawnbot TotalCount 6 MaxActive 2 SpawnCount 2 WaitBeforeStarting 15 WaitBetweenSpawns 20 TotalCurrency 90 TFBot { Template T_TFBot_Giant_Scout_Baseball ItemAttributes { ItemName "The Sandman" "max health additive penalty" 0 // Fixes overheal particles } } } WaveSpawn { WaitForAllDead "3-B" Where spawnbot TotalCount 18 MaxActive 6 SpawnCount 3 WaitBeforeStarting 20 WaitBetweenSpawns 10 TotalCurrency 90 TFBot { Class Soldier Skill Normal } } WaveSpawn { WaitForAllSpawned "3-C" Where spawnbot TotalCount 14 MaxActive 10 SpawnCount 7 WaitBeforeStarting 10 WaitBetweenSpawns 24 TotalCurrency 280 Squad { TFBot { Template T_TFBot_Giant_Demo_Burst Item "Upgradeable TF_WEAPON_GRENADELAUNCHER" ItemAttributes { ItemName "Upgradeable TF_WEAPON_GRENADELAUNCHER" "faster reload rate" 0.65 "fire rate bonus" 0.1 "clip size upgrade atomic" 7 "projectile spread angle penalty" 5 "projectile speed increased" 1.1 } } TFBot { Class Pyro Name "Deflector Pyro" Skill Hard Item "Upgradeable TF_WEAPON_FLAMETHROWER" Item "The U-Clank-A" ClassIcon heavy_deflector_heater ItemAttributes { ItemName "Upgradeable TF_WEAPON_FLAMETHROWER" "damage penalty" 0.01 "weapon burn time reduced" -10 "flame_speed" -10 "flame_ignore_player_velocity" 1 "flame_lifetime" -1 "airblast_destroy_projectile" 1 } } TFBot { Class Pyro Name "Deflector Pyro" Skill Hard Item "Upgradeable TF_WEAPON_FLAMETHROWER" Item "The U-Clank-A" ClassIcon heavy_deflector_heater ItemAttributes { ItemName "Upgradeable TF_WEAPON_FLAMETHROWER" "damage penalty" 0.01 "weapon burn time reduced" -10 "flame_speed" -10 "flame_ignore_player_velocity" 1 "flame_lifetime" -1 "airblast_destroy_projectile" 1 } } TFBot { Class Pyro Name "Deflector Pyro" Skill Hard Item "Upgradeable TF_WEAPON_FLAMETHROWER" Item "The U-Clank-A" ClassIcon heavy_deflector_heater ItemAttributes { ItemName "Upgradeable TF_WEAPON_FLAMETHROWER" "damage penalty" 0.01 "weapon burn time reduced" -10 "flame_speed" -10 "flame_ignore_player_velocity" 1 "flame_lifetime" -1 "airblast_destroy_projectile" 1 } } TFBot { Template T_TFBot_Medic_Kritzkrieg } TFBot { Template T_TFBot_Medic_Kritzkrieg } TFBot { Template T_TFBot_Medic_Kritzkrieg } } } WaveSpawn { WaitForAllSpawned "3-C" Where spawnbot_tertiary TotalCount 36 MaxActive 8 SpawnCount 6 WaitBeforeStarting 20 WaitBetweenSpawns 12 TotalCurrency 105 Support 1 TFBot { Template T_TFBot_Scout_Sandman ItemAttributes { ItemName "The Sandman" "max health additive penalty" 0 } } } } Wave // Wave 4/7 - $1050 { // InitWaveOutput // { // Target death_pit_math // Action Disable // } InitWaveOutput // StartWaveOutput { Target gamerules Action RunScriptCode Param " // if (!::CyberSecurity.rafmodent) { // Don't run if server has rafmod, use DisableSmokestack 1 instead ::CyberSecurity.StartThinking <- function() { // Disables tank's smokestack, must be fired repeatedly since it's reenabled on leaving ceilings activator.ValidateScriptScope() activator.GetScriptScope().AndStopSmoking <- function() { // Thinks call from an entity's scope // EntFireByHandle(self, `DispatchEffect`, `ParticleEffectStop`, 0, null, null) // Will still emit one smoke particle when leaving ceilings } AddThinkToEnt(activator, `AndStopSmoking`) // Parenting a solid brush to the tank exhaust will stop smoke but block attacks, disabling would re-emit a smoke // Tanks turn off their smokestack when under a solid brush local wood = SpawnEntityFromTable(`func_brush`, { targetname = `tanktest` model = `*151` // Small plank of wood // rendermode = 10 // Don't render origin = `-435 2163.5 219` }) wood.SetCollisionGroup(27) EntFireByHandle(wood, `SetParent`, `!activator`, 1, activator, null) } // RunScriptCode needed for namespace functions EntityOutputs.AddOutput(Entities.FindByName(null,`tank_path_b_1`),`OnPass`,`gamerules`,`RunScriptCode`,`::CyberSecurity.StartThinking()`,0,-1) // } " } StartWaveOutput // InitWaveOutput { // Target wave_start_relay // Action Trigger Target gamerules // Must be in separate output due to character limit Action RunScriptCode Param " EntFire(`wave_start_relay`, `Trigger`) // Fake hole for Minitank's bomb, only as an audio-visual effect ::CyberSecurity.MinitankHole <- function() { ClientPrint(null, 3, `minitankhole`) // PrecacheModel(`models/props_spytech/wall_clock.mdl`) local function ambient(name, vol) { local table = { ambient_generic = { targetname = name message = `passtime/projectile_swoosh5.wav` health = vol // Volume radius = `1600` origin = `6100 -880 250` spawnflags = `48` // Start silent, is not looped } } return table } SpawnEntityGroupFromTable({ a = { prop_dynamic = { targetname = `tankhole` model = `models/props_spytech/wall_clock.mdl` modelscale = `0.8` rendermode = `1` // Enable transparency rendercolor = `30 30 50` renderamt = `0` origin = `6100 -880 227` angles = `90 0 0` } } // Four ambient_generics, one is deleted later because playing at higher pitch sounds louder b = ambient(`holesfx1`, 7) c = ambient(`holesfx1`, 7) d = ambient(`holesfx1`, 7) e = ambient(`holesfx2`, 9) f = { math_counter = { targetname = `opacityamt` startvalue = `0` min = `0` max = `255` OutValue = `tankhole,Alpha,,0,-1` OnHitMin = `holefadeout,CancelPending,,0,-1` OnHitMax = `holefadein,CancelPending,,0,-1` } } g = { // Fades hole in with SFX, straightens Minitank path, kills hole on bomb deploy logic_relay = { targetname = `holefadein` // `OnSpawn#1` = `holesfx1,PlaySound,,0,-1` // `OnSpawn#2` = `holesfx2,PlaySound,,0,-1` // OnSpawn = `fixtankpath,Teleport,,0,-1` // OnSpawn = `!self,Trigger,,0.05,-1` // OnSpawn = `boss_deploy_relay,Trigger,,0.05,-1` // OnSpawn = `boss_deploy_relay,AddOutput,OnTrigger tankhole:Kill::0:-1,0,-1` // OnSpawn = `cap_destroy_relay,AddOutput,OnTrigger tankhole:Kill::1:-1,0,-1` // OnTrigger = `!self,Trigger,,1,-1` // OnTrigger = `opacityamt,Add,28,0,-1` spawnflags = `2` // Allow fast retrigger } } h = { // Plays hole SFX at lower volume and higher pitch for fade out logic_relay = { targetname = `holefadeoutinit` OnTrigger = `holesfx2,Kill,,0,-1` OnTrigger = `holesfx1,pitch,150,5.5,-1` OnTrigger = `holefadeout,Trigger,,5.5,-1` } } i = { logic_relay = { targetname = `holefadeout` OnTrigger = `opacityamt,Subtract,28,0,-1` OnTrigger = `!self,Trigger,,0.05,-1` spawnflags = `2` } } j = { point_teleport = { targetname = `fixtankpath` target = `tank_path_b_36` origin = `5840 -880 344` } } k = { point_teleport = { targetname = `fixtankpath` target = `tank_path_b_37` origin = `6056 -880 344` } } }) } " } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name "4-A" Where spawnbot TotalCount 24 MaxActive 12 SpawnCount 6 WaitBeforeStarting 100 WaitBetweenSpawns 5 TotalCurrency 120 TFBot { Class Sniper Name "Bowman" Skill Hard Item "The Huntsman" ClassIcon sniper_bow Attributes AlwaysCrit ItemAttributes { ItemName "The Huntsman" "damage penalty" 0.5 } } } WaveSpawn { Name "4-A" Where spawnbot TotalCount 7 MaxActive 4 SpawnCount 4 WaitBeforeStarting 100 WaitBetweenSpawns 12 TotalCurrency 35 TFBot { Class Pyro Attributes AlwaysFireWeapon } } WaveSpawn { WaitForAllSpawned "4-A" Where spawnbot TotalCount 1 TotalCurrency 5 TFBot { Class Pyro Skill Expert Health 1e5 Item "Silver Botkiller Flame Thrower Mk.I" Item "The Flare Gun" Item "Mad Milk" Item "The Maul" // Item "Rail Spikes" // Cannot be painted unless defined last Item "The Lunatic's Leathers" // Item "Battery Canteens" // No attachment point Item "Pyro Helm" // Vintage Merryweather, must be last to have paint and effect WeaponRestrictions PrimaryOnly Attributes AlwaysFireWeapon Attributes SpawnWithFullCharge CharacterAttributes { "rage giving scale" 10 "dmg taken increased" 500 "override footstep sound set" 9 } ItemAttributes { ItemName "Silver Botkiller Flame Thrower Mk.I" "kill eater" 8888 "kill eater user score type 1" 61 // Strange Part: Tanks Destroyed "kill eater user 1" 4292 // Strange Part count "kill eater user score type 2" 74 // Robot Spies Destroyed "kill eater user 2" 6623 "kill eater user score type 3" 40 // Giant Robots Destroyed "kill eater user 3" 10881 "SPELL: Halloween green flames" 1 "SPELL: Halloween death ghosts" 1 "killstreak effect" 2006 // Singularity "killstreak idleeffect" 7 // Hot Rod "killstreak tier" 3 // Professional "extinguish restores health" 100000 } ItemAttributes { ItemName "The Flare Gun" "damage bonus" 100 "fire rate bonus" 0 "heal on hit for rapidfire" 100000 "critboost on kill" 100 "projectile speed increased" 1.5 // Speed gets clamped on higher values "move speed bonus" 5 "provide on active" 1 "event date" 32475994112 // Gifted date "gifter account id" 0 // 169802 "SPELL: Halloween death ghosts" 1 "killstreak effect" 2006 "killstreak idleeffect" 7 "killstreak tier" 3 } ItemAttributes { ItemName "The Maul" "damage bonus" 100 "fire rate bonus" 0.25 // Lower prevents attacking "heal on hit for rapidfire" 100000 "critboost on kill" 100 "move speed bonus" 5 "provide on active" 1 "SPELL: Halloween death ghosts" 1 "killstreak effect" 2006 "killstreak idleeffect" 7 "killstreak tier" 3 "dmg bonus vs buildings" 100 "dmg penalty vs players" 0.999 } // ItemAttributes // { // ItemName "Rail Spikes" // "set item tint RGB" 1315860 // "unique craft index" 11 // } ItemAttributes { ItemName "The Lunatic's Leathers" "unique craft index" 34 } // ItemAttributes // { // ItemName "Battery Canteens" // "kill eater score type" 109 // Canteens Used // "kill eater" 8764 // "kill eater user score type 1" 39 // Robots Destroyed // "kill eater user 1" 59494 // "kill eater user score type 2" 87 // Cosmetic Part: Kills // "kill eater user 2" 8539 // "kill eater user score type 3" 82 // Damage Dealt // "kill eater user 3" 2180433 // "powerup max charges" 10 // "powerup duration" 99 // } ItemAttributes { ItemName "Pyro Helm" "attach particle effect" 58 // Cloud 9 "set item tint RGB" 3686984 // Operator's Overalls (BLU) } } } WaveSpawn { Name "4-C" WaitForAllSpawned "4-A" Where spawnbot_tertiary TotalCount 12 MaxActive 7 SpawnCount 6 WaitBeforeStarting 5 WaitBetweenSpawns 32 TotalCurrency 240 Squad { TFBot { Template T_TFBot_Giant_Heavyweapons Item "Upgradeable TF_WEAPON_MINIGUN" ItemAttributes { ItemName "Upgradeable TF_WEAPON_MINIGUN" "damage bonus" 1.5 } } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn { Name "4-B" WaitForAllSpawned "4-A" Where spawnbot TotalCount 20 MaxActive 8 SpawnCount 4 WaitBeforeStarting 10 WaitBetweenSpawns 12 TotalCurrency 200 TFBot { Template T_TFBot_Scout_Shortstop Health 450 CharacterAttributes { "move speed bonus" 1 "health regen" 1 } } } WaveSpawn { Name "4-D" // WaitForAllSpawned "4-C" TotalCount 1 // WaitBeforeStarting 15 // TotalCount 2 WaitBeforeStarting 1 WaitBetweenSpawns 3 TotalCurrency 100 FirstSpawnWarningSound "mvm/mvm_tank_start.wav" // FirstSpawnOutput // Inconsistently fails // { // Target boss_spawn_relay_sentrytank // Action Trigger // } FirstSpawnOutput { Target boss_deploy_relay Action AddOutput Param "OnTrigger Minitank:DestroyIfAtCapturePoint:x:0:-1" } Tank { // Name "tankboss_sentrytank" // Mini-Sentry Tank is irredeemably bad, full area denial even with max bullet res Name "Minitank" Health 17500 // Health 175 Speed 80 StartingPathTrackNode "tank_path_b_1" // ClassIcon tank_sentry // DisableSmokestack 1 OnBombDroppedOutput { // Target spawnbot_mission_sniper_tertiary // Action Enable Target boss_deploy_relay Action Trigger } OnKilledOutput { Target holefadeoutinit Action Trigger } } // StartWaveOutput // { // Target spawnbot_mission_sniper_tertiary // Action Disable // } } WaveSpawn { WaitForAllSpawned "4-D" // WaitBeforeStarting 1.75 StartWaveOutput { // Target boss_spawn_relay_sentrytank Target minitank_spawn_relay Action Trigger } DoneOutput { Target "MinitankHole" Action ForceSpawn } } // WaveSpawn // { // Name "4-X" // WaitForAllSpawned "4-C" // Where spawnbot_mission_sniper_tertiary // TotalCount 1 // WaitBeforeStarting 0.1 // Support Limited // TFBot // { // Template T_TFBot_Scout_Melee // Name "Bat Scout" // ClassIcon scout_bat_nys // Attributes DisableDodge // Attributes AlwaysCrit // } // } // WaveSpawn // { // WaitForAllSpawned "4-X" // Support Limited // StartWaveOutput // { // Target "Minitank" // Action DestroyIfAtCapturePoint // Param "x" // } // } // WaveSpawn // { // WaitForAllSpawned "4-X" // Support Limited // StartWaveOutput // { // Target boss_deploy_relay // Action Trigger // } // } WaveSpawn { WaitForAllSpawned "4-C" Where spawnbot TotalCount 3 SpawnCount 3 WaitBeforeStarting 35 TotalCurrency 60 Squad { TFBot { Template T_TFBot_Giant_Soldier_Rapid_Fire } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn { WaitForAllSpawned "4-C" Where spawnbot_secondary TotalCount 3 SpawnCount 3 WaitBeforeStarting 50 TotalCurrency 60 Squad { TFBot { Template T_TFBot_Giant_Soldier_Rapid_Fire } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn { Name "4-Y" WaitForAllSpawned "4-C" Where spawnbot_tertiary TotalCount 3 SpawnCount 3 WaitBeforeStarting 65 TotalCurrency 60 Squad { TFBot { Template T_TFBot_Giant_Soldier_Rapid_Fire } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn { WaitForAllDead "4-A" Where spawnbot TotalCount 30 MaxActive 4 SpawnCount 2 WaitBeforeStarting 12 WaitBetweenSpawns 9 TotalCurrency 90 Support 1 TFBot { Template T_TFBot_Scout_Melee Name "Bat Scout" ClassIcon scout_bat_nys Attributes DisableDodge Attributes AlwaysCrit } } WaveSpawn { WaitForAllSpawned "4-B" Where spawnbot_tertiary TotalCount 40 MaxActive 6 SpawnCount 2 WaitBeforeStarting 10 WaitBetweenSpawns 3 TotalCurrency 80 Support 1 TFBot { Template T_TFBot_Scout_Melee Name "Bat Scout" ClassIcon scout_bat_nys Attributes DisableDodge Attributes AlwaysCrit } } WaveSpawn { WaitForAllDead "4-Y" StartWaveOutput { Target tankdoor1 Action Close } DoneOutput { Target tankdoor2 Action Close } } } Wave // Wave 5/7 - $950 { // InitWaveOutput // { // Target death_pit_math // Action Disable // } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name "5-A" Where spawnbot TotalCount 2 SpawnCount 2 TotalCurrency 50 Squad { TFBot { Template T_TFBot_Giant_Heavyweapons_Shotgun } TFBot { Class Medic Name "Giant Medic" Skill Expert Health 4500 Item "The Quick-Fix" Attributes SpawnWithFullCharge Attributes MiniBoss CharacterAttributes { "move speed penalty" 0.5 "damage force reduction" 0.6 "airblast vulnerability multiplier" 0.6 } ItemAttributes { ItemName "The Quick-Fix" "heal rate bonus" 200 } } } // StartWaveOutput // { // Target spawnbot_mission_sniper_tertiary // Action Enable // } } WaveSpawn { Name "5-A" Where spawnbot TotalCount 18 SpawnCount 6 WaitBeforeStarting 4 WaitBetweenSpawns 8 TotalCurrency 90 TFBot { Class Soldier Skill Normal } } WaveSpawn { Name "5-B" WaitForAllDead "5-A" Where spawnbot TotalCount 4 MaxActive 2 SpawnCount 1 WaitBetweenSpawns 24 TotalCurrency 80 TFBot { Class Scout Name "Force-a-Nature Super Scout" Skill Expert Health 1200 Item "The Force-a-Nature" Item "The Fed-Fightin' Fedora" // Item "The Bolt Boy" // Conflicts with Fedora ClassIcon scout_fan Attributes MiniBoss Attributes HoldFireUntilFullReload MaxVisionRange 1200 CharacterAttributes { "move speed bonus" 1.1 "damage force reduction" 0.7 "airblast vulnerability multiplier" 0.7 "override footstep sound set" 5 } ItemAttributes { ItemName "The Force-a-Nature" "bullets per shot bonus" 2 "fire rate bonus" 0.5 "reload time increased" 1.7 "scattergun knockback mult" 6 "damage penalty" 0.35 "weapon spread bonus" 0.4 } } } WaveSpawn { Name "5-C" WaitForAllDead "5-A" Where spawnbot TotalCount 16 MaxActive 10 SpawnCount 8 WaitBeforeStarting 2 WaitBetweenSpawns 15 TotalCurrency 80 TFBot { Class Heavy } } WaveSpawn { Name "5-D" WaitForAllDead "5-A" Where spawnbot_tertiary TotalCount 15 MaxActive 8 SpawnCount 5 WaitBeforeStarting 10 WaitBetweenSpawns 18 TotalCurrency 225 Squad { TFBot { Template T_TFBot_Giant_Demoman Item "Upgradeable TF_WEAPON_GRENADELAUNCHER" ClassIcon demo_spammer ItemAttributes { ItemName "Upgradeable TF_WEAPON_GRENADELAUNCHER" "faster reload rate" -0.4 "fire rate bonus" 0.75 } } TFBot { Class Soldier Skill Hard } TFBot { Class Soldier Skill Hard } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn { WaitForAllDead "5-C" Where spawnbot TotalCount 18 MaxActive 10 SpawnCount 6 WaitBeforeStarting 3 WaitBetweenSpawns 18 TotalCurrency 90 TFBot { Class Soldier Skill Normal } } WaveSpawn { Name "5-D" WaitForAllDead "5-C" Where spawnbot_tertiary TotalCount 12 MaxActive 6 SpawnCount 2 WaitBeforeStarting 8 WaitBetweenSpawns 5 TotalCurrency 60 Squad { TFBot { Class Heavy } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn { Name "5-E" WaitForAllSpawned "5-D" Where spawnbot TotalCount 8 SpawnCount 4 WaitBeforeStarting 10 WaitBetweenSpawns 18 TotalCurrency 120 Squad { TFBot { Template T_TFBot_Giant_Soldier Name "Giant Burst Fire Soldier" Item "Upgradeable TF_WEAPON_ROCKETLAUNCHER" ClassIcon soldier_burstfire Attributes AlwaysCrit ItemAttributes { ItemName "Upgradeable TF_WEAPON_ROCKETLAUNCHER" "faster reload rate" 0.6 "fire rate bonus" 0.1 "clip size upgrade atomic" 5 "projectile speed decreased" 0.65 } } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn { WaitForAllDead "5-B" WaitForAllSpawned "5-E" Where spawnbot TotalCount 3 SpawnCount 3 WaitBeforeStarting 3 TotalCurrency 45 TFBot { Template T_TFBot_Giant_Scout_Fast Skill Expert } } WaveSpawn { WaitForAllDead "5-A" Where spawnbot_secondary TotalCount 55 MaxActive 4 SpawnCount 3 WaitBeforeStarting 3 WaitBetweenSpawns 15 TotalCurrency 110 Support 1 TFBot { Class Scout } } } Wave // Wave 6/7 - $900 { // InitWaveOutput // { // Target death_pit_math // Action Disable // } InitWaveOutput { Target gamerules Action RunScriptCode Param " ::tf_objective_resource <- Entities.FindByClassname(null, `tf_objective_resource`) if (!::rafmodent) // Don't run if server has rafmod, use ClassIcon tank_tele instead NetProps.SetPropStringArray(::tf_objective_resource, `m_iszMannVsMachineWaveClassNames`, `tank_tele`, 3) // Override tank icon with custom icon " } StartWaveOutput { // Target wave_start_relay // Action Trigger Target gamerules Action RunScriptCode Param " EntFire(`wave_start_relay`, `Trigger`) if (!::rafmodent) NetProps.SetPropStringArray(::tf_objective_resource, `m_iszMannVsMachineWaveClassNames`, `tank_tele`, 3) // Tank icon gets reset on wave start " } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name "6-A" Where spawnbot TotalCount 10 MaxActive 8 SpawnCount 5 WaitBetweenSpawns 20 TotalCurrency 200 Squad { TFBot { Template T_TFBot_Giant_Soldier Name "Giant Blast Soldier" Item "The Liberty Launcher" ClassIcon soldier_libertylauncher CharacterAttributes { "airblast vertical vulnerability multiplier" 0.1 } ItemAttributes { ItemName "The Liberty Launcher" "damage causes airblast" 1 "damage penalty" 0.75 "fire rate bonus" 0.25 "clip size upgrade atomic" 5 "faster reload rate" 0.2 "blast radius increased" 1.2 "projectile spread angle penalty" 4 } } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn { Name "6-B" Where spawnbot TotalCount 40 MaxActive 14 SpawnCount 10 WaitBeforeStarting 5 WaitBetweenSpawns 7 TotalCurrency 80 TFBot { Class Scout Skill Normal Attributes AlwaysCrit } } WaveSpawn { Name "6-C" // WaitForAllDead "6-B" TotalCount 1 WaitBeforeStarting 3 TotalCurrency 200 FirstSpawnWarningSound "mvm/mvm_tank_start.wav" FirstSpawnOutput { Target boss_deploy_relay Action AddOutput Param "OnTrigger teletank:DestroyIfAtCapturePoint:x:0:-1" } Tank { Name "teletank" Health 30 Speed 80 StartingPathTrackNode "tank_path_a_1" // ClassIcon tank_tele Skin 1 OnBombDroppedOutput { // Target spawnbot_mission_sniper // Action Enable Target boss_deploy_relay Action Trigger } OnKilledOutput { Target boss_kill_relay_teletank Action Trigger } } // StartWaveOutput // { // Target spawnbot_mission_sniper // Action Disable // } DoneOutput { Target gamerules Action RunScriptCode Param " if (!::rafmodent) NetProps.SetPropStringArray(::tf_objective_resource, `m_iszMannVsMachineWaveClassNames`, ``, 3) // Remove custom icon " } } WaveSpawn { WaitForAllSpawned "6-C" StartWaveOutput { Target teletank_enter // Kills trigger_teleport over spawnbot Action Kill } FirstSpawnOutput { Target teletank_enter // Kills trigger_teleport over spawnbot_secondary Action Kill } DoneOutput { Target boss_spawn_relay_teletank Action Trigger } } WaveSpawn { Template T_WaveSpawn_Scout_Tele WaitBeforeStarting 8 } WaveSpawn { Template T_WaveSpawn_Scout_Tele WaitBeforeStarting 26 } WaveSpawn { Template T_WaveSpawn_Scout_Tele WaitBeforeStarting 49 } WaveSpawn { Template T_WaveSpawn_Scout_Tele WaitBeforeStarting 66 } WaveSpawn { Template T_WaveSpawn_Scout_Tele WaitBeforeStarting 85 } WaveSpawn { Template T_WaveSpawn_Scout_Tele TotalCount 2 SpawnCount 2 WaitBeforeStarting 105 } WaveSpawn { WaitForAllDead "6-C" DoneOutput { Target spawnbot_mission_sniper_tertiary Action Disable // Stop Bat Scouts from spawning } } // WaveSpawn // { // Name "6-X" // WaitForAllDead "6-B" // Where spawnbot_mission_sniper // TotalCount 1 // WaitBeforeStarting 0.1 // Support Limited // TFBot // { // Class Soldier // Skill Hard // } // } // WaveSpawn // { // WaitForAllSpawned "6-X" // Support Limited // StartWaveOutput // { // Target "teletank" // Action DestroyIfAtCapturePoint // Param "x" // } // } // WaveSpawn // { // WaitForAllSpawned "6-X" // Support Limited // StartWaveOutput // { // Target boss_deploy_relay // Action Trigger // } // } WaveSpawn { WaitForAllDead "6-A" Where spawnbot TotalCount 10 MaxActive 5 SpawnCount 2 WaitBeforeStarting 5 WaitBetweenSpawns 16 TotalCurrency 200 Squad { TFBot { Template T_TFBot_Giant_Pyro Name "Giant Dragon's Furry Pyro" Health 3300 Item "The Dragon's Fury" Item "Lollichop Licker" Item "The Head Prize" ClassIcon pyro_dragon_fury_swordstone MaxVisionRange 600 ItemAttributes { ItemName "The Dragon's Fury" "damage bonus" 1.2 "airblast disabled" 1 } ItemAttributes { ItemName "The Head Prize" "set item tint rgb" 2636109 // An Air of Debonair (BLU) } } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn { WaitForAllDead "6-C" Where spawnbot TotalCount 4 SpawnCount 2 WaitBeforeStarting 3 WaitBetweenSpawns 30 TotalCurrency 100 Squad { TFBot { Class Heavyweapons Name "Giant Brass Beast Heavy" Skill Expert Health 5000 Item "The Brass Beast" Item "Big Chief" ClassIcon heavy_brass_nys MaxVisionRange 1200 Attributes MiniBoss CharacterAttributes { "move speed penalty" 0.4 "damage force reduction" 0.4 "airblast vulnerability multiplier" 0.4 "override footstep sound set" 2 } ItemAttributes { ItemName "The Brass Beast" "damage bonus" 1.8 "minigun spinup time increased" 1.25 "aiming movespeed decreased" 1 "spunup_damage_resistance" 1 "spread penalty" 1.35 } } TFBot { Class Medic Name "Giant Regen Medic" Health 4500 Skill Expert Item "The Crusader's Crossbow" Item "The Quick-Fix" Item "The Surgeon's Stahlhelm" Attributes MiniBoss CharacterAttributes { "move speed penalty" 0.5 "damage force reduction" 0.6 "airblast vulnerability multiplier" 0.6 "health regen" 40 } ItemAttributes { ItemName "The Crusader's Crossbow" "damage bonus" 1.5 } ItemAttributes { ItemName "The Quick-Fix" "ubercharge rate bonus" 0.01 "heal rate bonus" 200 } } } } WaveSpawn { Support Limited TFBot { ClassIcon Soldier } // Ensure Soldier icon appears first, initially not necessary due to tank destruction robot } WaveSpawn { WaitForAllDead "6-C" Where spawnbot_tertiary TotalCount 40 MaxActive 12 SpawnCount 8 WaitBeforeStarting 3 WaitBetweenSpawns 8 TotalCurrency 120 Support Limited RandomChoice { TFBot { Class Soldier Skill Hard } TFBot { Class Demoman Skill Hard } } } } Wave // Wave 7/7 - $1300 { // InitWaveOutput // { // Target death_pit_math // Action Disable // } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } // WaveSpawn // { // DoneOutput // { // Target gamerules // Action Kill // This is funny // } // } WaveSpawn { Where spawnbot TotalCount 4 MaxActive 1 SpawnCount 1 WaitBetweenSpawnsAfterDeath 10 TotalCurrency 60 TFBot { Template T_TFBot_Giant_Scout } // StartWaveOutput // { // Target spawnbot_mission_sniper // Action Enable // } } WaveSpawn { Name "7-A" Where spawnbot TotalCount 24 MaxActive 18 SpawnCount 6 WaitBeforeStarting 3 WaitBetweenSpawns 3 TotalCurrency 95 TFBot { Class Soldier Name "Direct Hit Soldier" Skill Hard Item "The Direct Hit" ClassIcon soldier_directhit_lite } } WaveSpawn { Name "7-B" WaitForAllSpawned "7-A" Where spawnbot TotalCount 40 MaxActive 12 SpawnCount 8 WaitBeforeStarting 12 WaitBetweenSpawns 7 TotalCurrency 80 TFBot { Template T_TFBot_Scout_Scattergun_SlowFire // lol Name "Scout" Skill Normal Attributes AlwaysCrit } } WaveSpawn { Name "7-C" WaitForAllSpawned "7-A" Where spawnbot TotalCount 10 SpawnCount 5 WaitBeforeStarting 15 WaitBetweenSpawns 25 TotalCurrency 200 Squad { TFBot { Template T_TFBot_Giant_Heavyweapons Attributes AlwaysCrit Item "Upgradeable TF_WEAPON_MINIGUN" ItemAttributes { ItemName "Upgradeable TF_WEAPON_MINIGUN" "damage bonus" 1.5 } } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn { Name "7-D" WaitForAllSpawned "7-C" Where spawnbot TotalCount 6 MaxActive 4 SpawnCount 2 WaitBeforeStarting 20 WaitBetweenSpawns 13 TotalCurrency 90 Squad { TFBot { Template T_TFBot_Giant_Pyro Attributes AlwaysFireWeapon Attributes AlwaysCrit } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn { Name "7-D" WaitForAllSpawned "7-C" Where spawnbot_secondary TotalCount 6 MaxActive 4 SpawnCount 2 WaitBeforeStarting 20 WaitBetweenSpawns 13 TotalCurrency 90 Squad { TFBot { Template T_TFBot_Giant_Pyro Attributes AlwaysFireWeapon Attributes AlwaysCrit } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn { Name "7-E" WaitForAllSpawned "7-B" Where spawnbot TotalCount 45 MaxActive 15 SpawnCount 5 WaitBeforeStarting 8 WaitBetweenSpawns 5 TotalCurrency 135 TFBot { Class Sniper Name "Rapid Fire Bowman" Skill Hard Item "The Huntsman" Item "Larrikin Robin" ClassIcon sniper_bow_multi Attributes AlwaysCrit ItemAttributes { ItemName "The Huntsman" "damage penalty" 0.5 "faster reload rate" 0.6 } } } WaveSpawn { Name "7-F" WaitForAllSpawned "7-D" Where spawnbot TotalCount 9 MaxActive 7 SpawnCount 3 WaitBeforeStarting 10 WaitBetweenSpawns 15 TotalCurrency 135 Squad { TFBot { Template T_TFBot_Giant_Soldier Name "Giant Black Box Soldier" Health 4200 Item "The Black Box" ClassIcon soldier_blackbox ItemAttributes { ItemName "The Black Box" "damage bonus" 0.45 "fire rate bonus" 0 "reload time increased" 1.6 "blast radius increased" 1.25 "projectile spread angle penalty" 4 "heal on hit for rapidfire" 1001 "projectile speed increased" 0.8 } } TFBot { Template T_TFBot_Medic_Uber_Quick } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn { WaitForAllSpawned "7-D" Where spawnbot_tertiary TotalCount 12 MaxActive 5 SpawnCount 2 WaitBeforeStarting 12 WaitBetweenSpawns 18 TotalCurrency 180 Squad { TFBot { Template T_TFBot_Giant_Demo_Burst Item "Upgradeable TF_WEAPON_GRENADELAUNCHER" Attributes AlwaysCrit ItemAttributes { ItemName "Upgradeable TF_WEAPON_GRENADELAUNCHER" "faster reload rate" 0.65 "fire rate bonus" 0.1 "clip size upgrade atomic" 7 "projectile spread angle penalty" 5 "projectile speed increased" 1.1 } } TFBot { Template T_TFBot_Medic_Uber_Quick } } } WaveSpawn { WaitForAllSpawned "7-F" Where spawnbot TotalCount 2 SpawnCount 1 WaitBeforeStarting 30 WaitBetweenSpawns 30 TotalCurrency 50 TFBot { Template T_TFBot_Giant_Soldier Name "Giant Burst Fire Soldier" Health 4200 Item "Upgradeable TF_WEAPON_ROCKETLAUNCHER" Item "Tyrant's Helm" ClassIcon soldier_burstfire_hyper_lite Attributes AlwaysCrit ItemAttributes { ItemName "Upgradeable TF_WEAPON_ROCKETLAUNCHER" "damage bonus" 2 "faster reload rate" 0.4 "fire rate bonus" 0.2 "clip size upgrade atomic" 5 "projectile speed decreased" 0.9 } } } WaveSpawn { WaitForAllSpawned "7-F" Where spawnbot TotalCount 6 MaxActive 3 SpawnCount 1 WaitBeforeStarting 50 WaitBetweenSpawns 8 TotalCurrency 90 TFBot { Template T_TFBot_Giant_Scout } } WaveSpawn { WaitForAllDead "7-E" Where spawnbot_secondary TotalCount 48 MaxActive 12 SpawnCount 6 WaitBeforeStarting 3 WaitBetweenSpawns 5 TotalCurrency 95 Support 1 TFBot { Template T_TFBot_Demoman_Knight Attributes AlwaysCrit } DoneOutput // At end of mission, activate unused rocket thruster particles with added sound and hitbox { Target gamerules Action RunScriptCode Param " local hurt = SpawnEntityFromTable(`trigger_hurt`, { targetname = `rocket_damage` damage = `400` damagetype = `8` // Fire origin = `6190 -896 380` spawnflags = `1` startdisabled = `1` }) hurt.SetSolid(2) hurt.SetSize(Vector(-150,-150,-160), Vector(150,150,160)) local sfx = { ambient_generic = { targetname = `rocket_sound` // message = `Weapon_Degreaser.FireLoop` // Soundscripts ignore radius message = `)weapons/flame_thrower_dg_loop.wav` // `)` spatializes sound health = `10` radius = `1250` origin = `6224 -880 300` spawnflags = `16` // Start silent } } SpawnEntityGroupFromTable({ a = sfx b = sfx c = sfx d = sfx e = sfx f = sfx }) EntFire(`rocket_ignition`, `Start`, ``, 0.5) EntFire(`rocket_damage`, `Enable`, ``, 0.5) EntFire(`rocket_sound`, `PlaySound`, ``, 0.5) EntFire(`rocket_damage`, `Disable`, ``, 1.7) EntFire(`rocket_sound`, `StopSound`, ``, 1.5) " } } } } // Thank you for reading!