#base robot_giant.pop #base robot_standard.pop //Expert //Rustvalley Rodeotron (Remaster) //Made by Hell-met http://steamcommunity.com/id/hell-met/ //Official Workshop Entry WaveSchedule { StartingCurrency 1000 RespawnWaveTime 3 CanBotsAttackWhileInSpawnRoom Yes Advanced 0 //expert //AddSentryBusterWhenDamageDealtExceeds 0 //debug Templates { T_TFBot_Buster //default { Template T_TFBot_SentryBuster Attributes DisableDodge Attributes IgnoreEnemies } T_TFBot_Buster_Ninja //unpredictable movement { Class Scout ClassIcon sentry_buster Name "Ninja Buster" Skill Expert Health 2000 Item "The Flying Guillotine" Item "The Samson Skewer" Item "Shadow Shroud" Item "Squire's Sabatons" WeaponRestrictions SecondaryOnly Attributes MiniBoss Attributes AutoJump AutoJumpMin 0.2 AutoJumpMax 0.8 CharacterAttributes { "move speed bonus" 2 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 0 "cannot be backstabbed" 1 "head scale" 3 "torso scale" 0.1 "voice pitch scale" 0 //non-demo "air dash count" 4 "cancel falling damage" 1 "gesture speed increase" 100 "increased air control" -100 "increased jump height" 0.85 "attach particle effect" 3208 } } T_TFBot_Buster_Bully //knock players high up { Class HeavyWeapons ClassIcon sentry_buster Name "Bully Buster" Skill Expert Health 2000 Attributes MiniBoss Attributes DisableDodge Attributes AlwaysFireWeapon WeaponRestrictions MeleeOnly Item "The Mantreads" Item "Hellish Overlord" Item "Road Rage" Item "The Purity Fist" Item "Iron Fist" ItemAttributes { ItemName "TF_WEAPON_FISTS" "fish damage override" 1 "damage penalty" 0.25 "fire rate bonus" 0.6 } CharacterAttributes { "move speed bonus" 2 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 7 "cannot be backstabbed" 1 "head scale" 2 "torso scale" 0.3 "voice pitch scale" 0 //non-demo "apply z velocity on damage" 512 "gesture speed increase" 1.4 "hand scale" 1.5 "melee range multiplier" 1.5 "melee bounds multiplier" 1.5 } } T_TFBot_Buster_Backup //backup aura { Class Demoman ClassIcon sentry_buster Name "Support Buster" Health 2000 Attributes MiniBoss Attributes DisableDodge Attributes SpawnWithFullCharge WeaponRestrictions MeleeOnly Item "Loyalty Reward" Item "Bandit's Boots" Item "The Ullapool Caber" Item "The Battalion's Backup" CharacterAttributes { "move speed bonus" 2 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 7 "cannot be backstabbed" 1 "head scale" 2 "torso scale" 0.3 "deploy time decreased" 0.33 "increase buff duration" 100 } } T_TFBot_Buster_Chief //mini explosions and near unkillable { Class Demoman ClassIcon sentry_buster Name "Big Buster" Skill Expert Scale 2.5 Health 25000 Item "The Gunboats" Item "The Ullapool Caber" Item "The Loose Cannon" Item "Orion's Belt" Item "dec2014 engineer_detectiveradio" Item "EOTL_demo_dynamite" Item "Deadbeats" WeaponRestrictions PrimaryOnly Attributes MiniBoss Attributes DisableDodge //Attributes UseBossHealthBar //too distracting? Attributes AlwaysFireWeapon ItemAttributes { ItemName "The Loose Cannon" "blast dmg to self increased" 0 "damage bonus" 3 "blast radius increased" 2.25 "clip size penalty" 0.75 "fire rate penalty" 3 "faster reload rate" -1 "use large smoke explosion" 1 "mark for death" 1 "gesture speed increase" 1338 //nullify passive swing animation } Itemattributes { Itemname "The Ullapool Caber" "is_passive_weapon" 1 "damage bonus" 0 "fire rate penalty" 100 } ItemAttributes { ItemName "Deadbeats" "set item tint rgb" 5432319 } CharacterAttributes { "move speed bonus" 0.6 "damage force reduction" 0 "airblast vulnerability multiplier" 0 "airblast vertical vulnerability multiplier" 0 "override footstep sound set" 7 "cannot be backstabbed" 1 "rage giving scale" 0.1 "voice pitch scale" 0.5 "head scale" 3.3 "torso scale" 0.2 "gesture speed increase" 0.7 } } T_TFBot_Buster_Hacker //anti rescue ranger { Class Spy ClassIcon sentry_buster Name "Sentry Hacker" Skill Easy Health 2000 Item "Graybanns" Item "The Turncoat" Item "Hawk Eyed Hunter" MaxVisionRange 500 WeaponRestrictions SecondaryOnly Attributes MiniBoss Attributes DisableDodge Attributes AlwaysFireWeapon Itemattributes { Itemname "TF_WEAPON_KNIFE" "is_passive_weapon" 1 "damage bonus" 0 "fire rate bonus" 100 } ItemAttributes { ItemName "Hawk Eyed Hunter" "spell: set item tint rgb" 5 } CharacterAttributes { "move speed bonus" 2 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 7 "cannot be backstabbed" 1 "cannot disguise" 1 "head scale" 2.2 "torso scale" 0.3 "voice pitch scale" 0 //non-demo } } T_TFBot_Buster_Runner //surprise detonation charge { Class Demoman ClassIcon sentry_buster Name "Sentry Runner" Skill Expert Health 2000 WeaponRestrictions PrimaryOnly Item "Traffic Cone" Item "EOTL_winter_pants" Item "The Tide Turner" Attributes Miniboss Attributes DisableDodge ItemAttributes { ItemName "The Tide Turner" "charge time increased" 7 "charge recharge rate increased" 7 "charge impact damage increased" 0 "dmg taken from fire reduced" 1 "dmg taken from blast reduced" 1 "lose demo charge on damage when charging" 0 } CharacterAttributes { "move speed bonus" 2 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 7 "cannot be backstabbed" 1 "head scale" 2 "torso scale" 0.3 "gesture speed increase" 100 } } T_TFBot_Buster_Pills //crit pipe trail { Class Demoman ClassIcon sentry_buster Name "Sentry Miner" Skill Expert Health 2000 WeaponRestrictions PrimaryOnly Item "The Iron Bomber" Item "Full Metal Helmet" Item "Mine Sweepers" Attributes MiniBoss Attributes AlwaysCrit Attributes DisableDodge Attributes AlwaysFireWeapon Itemattributes { Itemname "The Iron Bomber" "centerfire projectile" 1 "faster reload rate" 0.0025 "fire rate bonus" 0.3 "projectile speed increased" 0.0025 } CharacterAttributes { "move speed bonus" 2 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 7 "cannot be backstabbed" 1 "head scale" 3 "torso scale" 0.1 "bot custom jump particle" 1 } } T_TFBot_Buster_Burn //fire ring { Class HeavyWeapons Classicon sentry_buster Name "Sentry Roaster" Skill Easy //turn around less Health 2000 Item "The Huo Long Heatmaker" Item "Oxygen Provider" Item "The Bunsen Brave" WeaponRestrictions PrimaryOnly //note passive anim trick won't work here because of rev animation taking priority Attributes MiniBoss Attributes DisableDodge Attributes AlwaysFireWeapon MaxVisionRange 1 //ignoreenemies doesn't work with alwaysfireweapon Itemattributes { Itemname "The Huo Long Heatmaker" "override projectile type" 27 "mod ammo per shot" 100 } Itemattributes { Itemname "The Bunsen Brave" "set item tint rgb" 15185211 } CharacterAttributes { "move speed bonus" 10 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 7 "head scale" 3 "torso scale" 0.1 "voice pitch scale" 0 //non-demo } } T_TFBot_Buster_Mini //4 busters { Class Demoman ClassIcon sentry_buster Name "Mini Sentry Buster" Skill Expert Scale 1.001 Health 625 WeaponRestrictions PrimaryOnly Attributes DisableDodge Attributes IgnoreEnemies CharacterAttributes { "move speed bonus" 2 "voice pitch scale" 2 "bombinomicon effect on death" 1 } } //-------------------------------------------------------------------------------------- T_TFBot_Engineer_Mini { Class Engineer Classicon engineer_minisentry_nys Tag mini_skin_fix Skill Expert Health 275 Item "The Frontier Justice" Item "The Gunslinger" Item "Head Of Defense" Item "Iron Lung" Item "Delldozer" Attributes AlwaysCrit Attributes AlwaysFireWeapon ItemAttributes { ItemName "The Gunslinger" "engineer sentry build rate multiplier" 10 //insta build "engy sentry fire rate increased" 3 //counter the boost from alwayscrit //"engy building health bonus" 2 //blue minis spawn with 50 hp?? } CharacterAttributes { "cannot pick up intelligence" 1 } } T_TFBot_Engineer_Chief { Class Engineer ClassIcon engineer_zealium_terri Name "Urban Displacer" Tag wrangler_shield Skill Expert Health 15000 Scale 1 Item "Golden Wrench" Item "Service Satchel" Item "Prairie Heel Biters" Item "Constructor's Cover" Item "Contaminated Carryall" Item "Veteran's Visor" Item "One-Man Convoy" WeaponRestrictions MeleeOnly Attributes AlwaysFireWeapon Attributes AutoJump AutoJumpMin 0 AutoJumpMax 10 Attributes UseBossHealthBar ItemAttributes { ItemName "Golden Wrench" "damage bonus" 2 "damage causes airblast" 1 "engy sentry radius increased" 10 "engineer sentry build rate multiplier" 100 "rocket specialist" 4 "engy building health bonus" 4 } ItemAttributes { ItemName "Contaminated Carryall" //cannot get razorback to recharge on other classes //"backstab shield" 1 //"jarate backstabber" 1 //"item_meter_charge_type" 1 //"item_meter_charge_rate" 1 } ItemAttributes { ItemName "One-Man Convoy" "item style override" 1 "set item tint rgb" 15787660 } CharacterAttributes { "move speed penalty" 0.77 //heavy speed "rage giving scale" 100 //fill up weapons instantly "rocket jump damage reduction" 25 //use the gun against himself "cannot be backstabbed" 1 //cannot get razorback to recharge on other classes "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "airblast vertical vulnerability multiplier" 0.5 "attach particle effect" 296 "cannot pick up intelligence" 1 } } T_TFBot_Sniper_Low { Class Sniper Skill Expert Attributes DisableDodge } T_TFBot_Spy_Low { Class Spy Skill Expert Attributes DisableDodge } T_TFBot_Engineer_Low { Template T_TFBot_Engineer_Sentry_Battle_TeleIn Health 500 CharacterAttributes { "cannot pick up intelligence" 1 } } T_TFBot_Sniper_High { Class Sniper Classicon sniper_golden_lite Name "Super Sniper" Skill Expert Item "Upgradeable TF_WEAPON_SNIPERRIFLE" Item "The Shahanshah" Item "The Aimframe" Item "Preventative Measure" ItemAttributes { ItemName "Upgradeable TF_WEAPON_SNIPERRIFLE" //pierce resistances double charge third degree "paintkit_proto_def_index" 6.03959638e-43n "dmg pierces resists absorbs" 1 "sniper charge per sec" 2 "damage all connected" 1 } ItemAttributes { ItemName "The Shahanshah" //pierce resistances +30% speed +40% swing kukri "paintkit_proto_def_index" 6.03959638e-43n "dmg pierces resists absorbs" 1 "provide on active" 1 "move speed bonus" 1.3 "fire rate bonus" 0.6 "dmg bonus while half dead" 1 "dmg penalty while half alive" 1 } ItemAttributes { ItemName "Preventative Measure" //all 3 backpacks in one "backstab shield" 1 "afterburn immunity" 1 "dmg taken from fire reduced" 0.5 "health regen" 4 "aiming knockback resistance" 0.8 "aiming no flinch" 1 } CharacterAttributes { "attach particle effect" 397 } } T_TFBot_Spy_High { Class Spy Classicon spy_golden_lite Name "Super Spy" Skill Easy Item "The Criminal Cloak" Item "Deadwave Communicator" Item "Shutterbug" Item "Bandit's Boots" Item "The Dead Ringer" Item "Upgradeable TF_WEAPON_REVOLVER" Item "Upgradeable TF_WEAPON_KNIFE" ItemAttributes { ItemName "Upgradeable TF_WEAPON_REVOLVER" //pierce resistance "paintkit_proto_def_index" 6.03959638e-43n "dmg pierces resists absorbs" 1 "auto fires full clip" 1 } ItemAttributes { ItemName "Upgradeable TF_WEAPON_KNIFE" //pierce resistances +30% speed +40% swing third degree "paintkit_proto_def_index" 6.03959638e-43n "dmg pierces resists absorbs" 1 "provide on active" 1 "move speed bonus" 1.3 "fire rate bonus" 0.6 "damage all connected" 1 } ItemAttributes { ItemName "TF_WEAPON_BUILDER_SPY" //faked rtr because real rtr crashes on bots "sapper degenerates buildings" 0.5 "sapper damage penalty" 0 } CharacterAttributes { "cannot pick up intelligence" 1 //needed because they are also used as actives "attach particle effect" 397 } } T_TFBot_Engineer_High { Class Engineer Classicon engineer_golden_lite Name "Super Engineer" Skill Expert Health 900 Item "The Rescue Ranger" Item "Mined Mind" Item "The Trash Toter" Item "Life Support System" WeaponRestrictions PrimaryOnly Attributes AlwaysFireWeapon ItemAttributes { ItemName "The Rescue Ranger" //upgraded sentry +30% speed infinite clip 2x damage "kill forces attacker to laugh" 1 "move speed bonus" 1.3 "faster reload rate" 0.0025 "damage bonus" 2 "engy building health bonus" 3 //2 ticks out of 3 "engy sentry fire rate increased" 0.7 "engineer sentry build rate multiplier" 4 //mimic wrench build } CharacterAttributes { "attach particle effect" 397 "cannot pick up intelligence" 1 } } T_TFBot_Stampede { Class Heavyweapons Name "Ol' Stampede" Skill Normal Tag bot_cow ClassIcon heavy_steak_lite Health 6500 Attributes AutoJump AutoJumpMin 2 AutoJumpMax 8 Attributes MiniBoss WeaponRestrictions PrimaryOnly Item "The Buffalo Steak Sandvich" Item "Upgradeable TF_WEAPON_FISTS" Item "The Texas Half-Pants" Item "Ali Baba's Wee Booties" Item "The Necroprancer" Item "Blastphomet" ItemAttributes { ItemName "The Buffalo Steak Sandvich" "provide on active" 1 "gesture speed increase" 1.75 "mult_item_meter_charge_rate" 0 //no recharge } ItemAttributes { ItemName "Upgradeable TF_WEAPON_FISTS" "provide on active" 1 "gesture speed increase" 1.75 "move speed bonus" 1.75 "dmg pierces resists absorbs" 1 } ItemAttributes { ItemName "Ali Baba's Wee Booties" "max health additive bonus" 0 } ItemAttributes { ItemName "The Necroprancer" "item style override" 1 "attach particle effect" 3163 } CharacterAttributes { "head scale" 1.25 "deploy time decreased" 0.33 "voice pitch scale" 0 "boots falling stomp" 1 "move speed bonus" 0.5 "damage force reduction" 0.3 "airblast vulnerability multiplier" 0.3 "override footstep sound set" 7 } } T_TFBot_Moonion { Class Scout Classicon scout_blaster_nys_hyper Name "Yun' Wrangler" Health 300 EventChangeAttributes { Default { Skill Expert Attributes AlwaysCrit Attributes HoldFireUntilFullReload Item "Baby Face's Blaster" Item "The WestCoat" Item "The Mantreads" Item "Buck's Brim" ItemAttributes { ItemName "Baby Face's Blaster" "damage bonus" 2 "projectile penetration" 1 } //GATE Attributes IgnoreFlag Tag bot_gatebot BehaviorModifiers Push //GATE } RevertGateBotsBehavior { Skill Easy //Attributes AlwaysCrit //removing crits doesn't work Attributes HoldFireUntilFullReload Item "Baby Face's Blaster" Item "The WestCoat" Item "The Mantreads" Item "Buck's Brim" ItemAttributes { ItemName "Baby Face's Blaster" "damage bonus" 2 "projectile penetration" 1 } } } } T_TFBot_BigHeal { Class Medic Classicon medic_regen Name "Big-Heal Medic" Skill Expert Attributes DisableDodge Attributes IgnoreEnemies WeaponRestrictions SecondaryOnly Item "The Surgeon's Stahlhelm" Item "Medical Emergency" Item "The Quick-Fix" ItemAttributes { ItemName "The Quick-Fix" "ubercharge rate bonus" 0.0025 "heal rate bonus" 20 "overheal penalty" 0 } CharacterAttributes //never uber { "bot medic uber deploy delay duration" 1337 } } T_TFBot_Shield { Class Medic Classicon medic_shield_lite Name "Shield Medic" Skill Easy Attributes DisableDodge Attributes ProjectileShield Attributes SpawnWithFullCharge Item "The Crusader's Crossbow" Item "Platinum Pickelhaube" ItemAttributes { ItemName "TF_WEAPON_MEDIGUN" "generate rage on heal" 1 "increase buff duration" 100 } CharacterAttributes //never uber { "bot medic uber deploy delay duration" 1337 } } T_TFBot_Shield_Large { Class Medic Classicon medic_uber_shield_lite Name "Uber Shield Medic" Skill Normal Attributes DisableDodge Attributes ProjectileShield Attributes SpawnWithFullCharge Item "The Crusader's Crossbow" Item "Madmann's Muzzle" Item "Platinum Pickelhaube" ItemAttributes { ItemName "Platinum Pickelhaube" "set item tint rgb" 1315860 } ItemAttributes { ItemName "TF_WEAPON_MEDIGUN" "generate rage on heal" 2 "increase buff duration" 100 } } T_TFBot_Uber { Class Medic Classicon medic_uber Name "Uber Medic" Skill Normal Attributes DisableDodge Attributes SpawnWithFullCharge CharacterAttributes { "mod weapon blocks healing" 1 //prevent accidental overheal } } T_TFBot_Uber_Baseball { Class Medic Classicon medic_uber Name "Major League Medic" Skill Normal Attributes DisableDodge Attributes SpawnWithFullCharge Item "Batter's Helmet" Item "Cardiologist's Cardigan" CharacterAttributes { "move speed bonus" 2 "cannot pick up intelligence" 1 } ItemAttributes { ItemName "TF_WEAPON_SYRINGEGUN_MEDIC" "provide on active" 1 "health drain" -999 } } T_TFBot_Uber_Infinite { Class Medic Classicon medic_uber_infinite Skill Normal //for blue eyes Name "Infinite Medic" Item "Warlock's Warcloak" Item "The Mean Captain" Attributes IgnoreEnemies Attributes DisableDodge Attributes SpawnWithFullCharge ItemAttributes { ItemName "The Mean Captain" "attach particle effect" 377 } ItemAttributes { ItemName "TF_WEAPON_SYRINGEGUN_MEDIC" "provide on active" 1 "health drain" -999 } ItemAttributes { ItemName "TF_WEAPON_MEDIGUN" "provide on active" 1 "dmg taken increased" 0 "bot medic uber health threshold" 99999 "bot medic uber deploy delay duration" 2.5 //needed else they don't get the self uber "uber duration bonus" 13337 "heal rate bonus" 0 "overheal penalty" 0 "cannot pick up intelligence" 1 "mod weapon blocks healing" 1 "damage force increase hidden" 4 } } T_TFBot_Napalm { Template T_TFBot_Giant_Pyro Name "Giant Lava Pyro" Health 3500 Classicon pyro_ricochet_nys Attributes AlwaysFireWeapon Item "dec2014 Torchers Tabard" Item "Upgradeable TF_WEAPON_FLAMETHROWER" ItemAttributes { ItemName "Upgradeable TF_WEAPON_FLAMETHROWER" "paintkit_proto_def_index" 2.99878e-43n "flame_up_speed" -1337 "flame_gravity" 1337 "flame_drag" -1337 "damage bonus" 2 "weapon burn dmg reduced" 0.34 //degreaser's } } T_TFBot_Pyro_Shotgun //same weapon as valve's heavy shotgun { Class Pyro Classicon heavy_shotgun Name "Pyro Shotgun" Skill Expert WeaponRestrictions SecondaryOnly ItemAttributes { ItemName "TF_WEAPON_SHOTGUN_PYRO" "faster reload rate" 0.1 "fire rate bonus" 2.5 "bullets per shot bonus" 3 "damage bonus" 0.33 } } T_TFBot_Phlog { Class Pyro Classicon pyro_phlog Skill Expert Attributes SpawnWithFullCharge Item "The Phlogistinator" ItemAttributes { ItemName "The Phlogistinator" "airblast disabled" 0 } Item "Pyro Helm" ItemAttributes { ItemName "Pyro Helm" "set item tint rgb" 6535423 } } T_TFBot_Airstrike { Class Soldier ClassIcon soldier_airstrike_lite Skill Expert Item "The Air Strike" Item "The B.A.S.E. Jumper" Item "Stealth Bomber" //Item "War Blunder" Item "The Peacebreaker" Attributes Parachute Attributes HoldFireUntilFullReload ItemAttributes { ItemName "The Air Strike" //"mini rockets" 0 "damage force increase text" 1 "damage force increase hidden" 2 } } T_TFBot_Detonator { Class Pyro Skill Easy Classicon pyro_detonator_lite_spammer Name "Rapid Flare Pyro" Item "The Detonator" Item "Old Guadalajara" WeaponRestrictions SecondaryOnly ItemAttributes { ItemName "The Detonator" "fire rate bonus" 0.3 } } T_TFBot_HoK_Minigun { Class Heavyweapons Name "Heal-On-Kill Heavy" Skill Hard Classicon heavy_deflector_healonkill Item "The Tungsten Toque" Item "Deflector" ItemAttributes { ItemName "Deflector" "attack projectiles" 1 "restore health on kill" 100 } } T_TFBot_Laser_Giant { Class Soldier ClassIcon zap_lite_giant Name "Giant Laser Soldier" Skill Expert Health 4000 Item "The Hellmet" Item "The Cow Mangler 5000" Attributes MiniBoss ItemAttributes { ItemName "The Hellmet" "set item tint rgb" 65535 } ItemAttributes { ItemName "The Cow Mangler 5000" "set item tint rgb" 65535 "override projectile type" 13 "fire rate bonus" 0.05 "damage penalty" 0.5 "energy weapon penetration" 0 //this decides which particle to use "ragdolls plasma effect" 1 "projectile penetration" 1 "subtract victim medigun charge on hit" 10 "subtract victim cloak on hit" 20 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.4 "airblast vulnerability multiplier" 0.4 "override footstep sound set" 3 } } T_TFBot_Laser { Class Soldier Name "Laser Soldier" Classicon zap_lite Skill Expert Item "The Hellmet" Item "The Cow Mangler 5000" ItemAttributes { ItemName "The Hellmet" "set item tint rgb" 65535 } ItemAttributes { ItemName "The Cow Mangler 5000" "set item tint rgb" 65535 "override projectile type" 13 "energy weapon penetration" 1 "ragdolls plasma effect" 1 "projectile penetration" 1 "subtract victim medigun charge on hit" 10 "subtract victim cloak on hit" 20 } } T_TFBot_Donker { Class Demoman Classicon demo_cannon Name "Dunkin's Demo" Skill Expert Health 175 Attributes AirChargeOnly Item "The Loose Cannon" Item "The Splendid Screen" Item "The Juggernaut Jacket" Item "Mine Sweepers" Item "Thunder Dome" ItemAttributes { ItemName "The Loose Cannon" "paintkit_proto_def_index" 5.64723e-43n "faster reload rate" 0.0025 //charged mechanics "fire rate penalty" 2 //charged mechanics "grenade launcher mortar mode" 0 "fuse bonus" 0.25 } ItemAttributes { ItemName "Thunder Dome" "set item tint rgb" 8154199 } CharacterAttributes { "charge time increased" -0.9 "charge recharge rate increased" 50 "full charge turn control" 50 "increased jump height" 2.5 //jump over tank "bot custom jump particle" 1 } } T_TFBot_Mittens_Chief { Class Heavyweapons ClassIcon heavy_mittens Name "Captain Holiday" Health 60000 Scale 1.9 EventChangeAttributes { Default { Skill Expert Tag bot_giant //prevent gatestun Attributes MiniBoss Attributes UseBossHealthBar WeaponRestrictions MeleeOnly Item "dec2014 heavy_parka" Item "The Gift Bringer" Item "The Holiday Punch" Item "MvM Gatebot Light Heavy" ItemAttributes { ItemName "The Holiday Punch" "fire rate bonus" 0.6 "damage bonus" 5 "melee bounds multiplier" 0.5 "drop health pack on kill" 1 "gesture speed increase" 1.75 } ItemAttributes { ItemName "MvM Gatebot Light Heavy" //"attach particle effect" 3087 } CharacterAttributes { "move speed bonus" 0.5 "increased jump height" 0 //no jumping "damage force reduction" 0 "airblast vulnerability multiplier" 0 "airblast vertical vulnerability multiplier" 0 "rage giving scale" 0.1 "add jingle to footsteps" 1 } //GATE Attributes IgnoreFlag Attributes DisableDodge Tag bot_gatebot BehaviorModifiers Push //GATE } RevertGateBotsBehavior { Skill Expert Tag bot_giant //prevent gatestun Attributes MiniBoss Attributes DisableDodge Attributes UseBossHealthBar WeaponRestrictions MeleeOnly Attributes AlwaysCrit //new Item "Noise Maker - Winter 2011" //new Item "MvM GateBot Light Heavy" ItemAttributes { ItemName "The Holiday Punch" "fire rate bonus" 0.6 "damage bonus" 5 "melee bounds multiplier" 0.5 "drop health pack on kill" 1 "gesture speed increase" 1.75 } ItemAttributes { ItemName "MvM GateBot Light Heavy" "item style override" 1 "attach particle effect" 3087 } CharacterAttributes { "move speed bonus" 0.5 "increased jump height" 0 //no jumping "damage force reduction" 0 "airblast vulnerability multiplier" 0 "airblast vertical vulnerability multiplier" 0 "rage giving scale" 0.1 "add jingle to footsteps" 1 } } } } T_TFBot_Steel_Chief { Class Heavyweapons Name "Prototype Punch" ClassIcon heavy_steelfist Skill Expert WeaponRestrictions MeleeOnly Health 60000 Scale 1.9 Item "Fists of Steel" Item "Head Mounted Double Observatory" Item "Big Steel Jaw of Summer Fun" Item "The Polar Pullover" Attributes MiniBoss Attributes UseBossHealthBar ItemAttributes { ItemName "Fists of Steel" "fire rate bonus" 0.6 "damage bonus" 5 "melee range multiplier" 0.5 //duck to avoid "gesture speed increase" 1.75 } ItemAttributes { ItemName "The Polar Pullover" "set item tint rgb" 8289918 } CharacterAttributes { "move speed bonus" 0.5 "increased jump height" 0 //no jumping "damage force reduction" 0 "airblast vulnerability multiplier" 0 "airblast vertical vulnerability multiplier" 0 "override footstep sound set" 2 "rage giving scale" 0.1 } } T_TFBot_Giant_Medic_Fixed { Template T_TFBot_Giant_Medic Attributes IgnoreEnemies //new WeaponRestrictions SecondaryOnly CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.6 "airblast vulnerability multiplier" 0.6 "heal rate bonus" 200 "mod weapon blocks healing" 1 //new } } T_TFBot_Giant_Medic_Regen_Fixed { Template T_TFBot_Giant_Medic_Regen //rewritten to prevent interhealing Name "Giant Regen Medic" Classicon medic_regen Attributes IgnoreEnemies //don't use that -90% needler WeaponRestrictions SecondaryOnly CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.6 "airblast vulnerability multiplier" 0.6 "heal rate bonus" 200 "health regen" 40 "mod weapon blocks healing" 1 //new } } T_TFBot_Miner { Class Soldier Classicon soldier_golden_lite Skill Expert Name "Australium Miner" Item "The Doe-Boy" Item "Mining Light" Item "The Gunboats" Item "The Black Box" ItemAttributes { ItemName "The Black Box" "item style override" 1 "health on radius damage" 0 "damage bonus" 2 "turn to gold" 1 "faster reload rate" 0.0025 } } T_TFBot_Miner_True { Class Soldier Classicon soldier_golden_lite Skill Expert Name "Australium Miner" Item "The Doe-Boy" Item "Mining Light" Item "The Gunboats" Item "The Black Box" Attributes AlwaysFireWeapon Attributes DisableDodge BehaviorModifiers Push ItemAttributes { ItemName "The Black Box" "item style override" 1 "health on radius damage" 0 "damage bonus" 7 "turn to gold" 1 "faster reload rate" 0.0025 "fire rate bonus" 3 "rocket specialist" 4 "projectile speed increased" 0.0025 "cannot pick up intelligence" 1 "mini rockets" 1 "no self blast dmg" 2 "SPELL: Halloween pumpkin explosions" 1 } } T_TFBot_Miner_Giant { Class Soldier Classicon soldier_escapeplan_lite Name "Deep Australium Miner" Skill Expert Health 4000 Attributes Miniboss WeaponRestrictions MeleeOnly Item "The Doe-Boy" Item "Mining Light" Item "Fused Plates" Item "Bomb Blanket" Item "Forest Footwear" Item "The Escape Plan" ItemAttributes { ItemName "The Escape Plan" "turn to gold" 1 "hand scale" 1.25 "damage causes airblast" 1 "critboost on kill" 3 //gknight perk } CharacterAttributes { "move speed bonus" 1 "damage force reduction" 0.4 "airblast vulnerability multiplier" 0.4 "override footstep sound set" 4 "boots falling stomp" 1 //spawn from cliff } } T_TFBot_Diesel_Chief { Class Pyro Name "Dieselnator" Skill Expert Scale 1.9 Tag customrocket Attributes Miniboss ClassIcon pyro_golden_lite Health 30000 MaxVisionRange 2400 Item "Batter's Bracers" Item "Forest Footwear" Item "The Abyss Diver" Item "Deserter's Duster" Attributes UseBossHealthBar Attributes DisableDodge Attributes AlwaysFireWeapon ItemAttributes { ItemName "TF_WEAPON_SHOTGUN_PYRO" "is_passive_weapon" 1 "centerfire projectile" 1 "override projectile type" 2 "projectile spread angle penalty" 8 "projectile speed increased" 0.35 "rocket specialist" 4 "auto fires full clip" 1 "auto fires when full" 1 "can overload" 1 "set damagetype ignite" 1 "fire rate bonus" 0.01 "faster reload rate" 0.6 } ItemAttributes { ItemName "TF_WEAPON_FLAMETHROWER" "flame_lifetime" 3 "flame_speed" "3500" "lunchbox adds minicrits" 2 //legacy graphics } ItemAttributes { ItemName "Deserter's Duster" "spell: set item tint rgb" 5 } CharacterAttributes { "gesture speed increase" 0.25 "hand scale" 0.01 "damage bonus" 10 "move speed bonus" 0.4 "increased jump height" 1.3 //anti-block "override footstep sound set" 5 "damage force reduction" 0 "airblast vulnerability multiplier" 0 "airblast vertical vulnerability multiplier" 0 "rage giving scale" 0.1 "ragdolls become ash" 1 } } T_TFBot_Knight_Chief { Class Demoman Classicon demoknight_golden_lite Health 30000 Skill Expert Scale 1.9 Name "Eleventh Hour" Item "The Eyelander" Item "Steel-Toed Stompers" Item "The Tartan Spartan" Item "Spy Oni Mask" Item "Forgotten King's Pauldrons" Item "The War Goggles" WeaponRestrictions MeleeOnly Attributes Miniboss Attributes UseBossHealthBar Attributes DisableDodge ItemAttributes { ItemName "The Eyelander" "item style override" 1 "damage bonus" 2 "fire rate bonus" 2 "damage causes airblast" 1 "decapitate type" 0 "crit from behind" 1 "max health additive penalty" 0 } ItemAttributes { ItemName "The War Goggles" "spell: set item tint rgb" 5 } CharacterAttributes { "move speed bonus" 0.5 "override footstep sound set" 2 "damage force reduction" 0 "airblast vulnerability multiplier" 0 "airblast vertical vulnerability multiplier" 0 "rage giving scale" 0.1 "gesture speed increase" 2 "boots falling stomp" 1 "ragdolls become ash" 1 "increased jump height" 3 "bot custom jump particle" 1 "increased air control" 100 } } T_TFBot_Sniper_God { Class Sniper Classicon sniper_hyper Health 99999 Skill Easy Tag bot_outline Attributes DisableDodge Name "AVOID-ME 9000" Item "Public Speaker" Item "Badlands Bandido" Item "Bushi-Dou" Item "Head Mounted Double Observatory" Item "Support Spurs" Item "The AWPer Hand" CharacterAttributes { "dmg taken increased" 0 } ItemAttributes { ItemName "Support Spurs" "spell: set item tint rgb" 5 } ItemAttributes { ItemName "The AWPer Hand" "damage causes airblast" 1 "apply z velocity on damage" 9999 "apply look velocity on damage" 9999 "damage bonus" 1338 "kill forces attacker to laugh" 1 "deploy time increased" 1.34 //pre-gun mettle switching "attach particle effect" 44 } } } Mission // Sniper 1 { Objective Sniper Where spawnbot_main_slow1 BeginAtWave 1 RunForThisManyWaves 1 InitialCooldown 10 CooldownTime 50 DesiredCount 2 TFBot { Template T_TFBot_Sniper_Low } } Mission // Spy 2 { Objective Spy Where spawnbot_main_slow1 BeginAtWave 2 RunForThisManyWaves 1 InitialCooldown 120 CooldownTime 70 DesiredCount 3 TFBot { Template T_TFBot_Spy_Low } } Mission // Sniper 3 { Objective Sniper Where spawnbot_main_slow1 BeginAtWave 3 RunForThisManyWaves 1 InitialCooldown 120 CooldownTime 60 DesiredCount 2 TFBot { Template T_TFBot_Sniper_High } } Mission // Spy 5 { Objective Spy Where spawnbot_right0 BeginAtWave 5 RunForThisManyWaves 1 InitialCooldown 30 CooldownTime 70 DesiredCount 3 TFBot { Template T_TFBot_Spy_High Item "The Cloak and Dagger" } } Mission // Engineer 1-2-3 { Objective Engineer Where spawnbot_left0 BeginAtWave 1 RunForThisManyWaves 3 InitialCooldown 0 CooldownTime 50 DesiredCount 1 TFBot { Template T_TFBot_Engineer_Low } } Mission // Engineer 4-5 { Objective Engineer Where spawnbot_main_slow1 BeginAtWave 4 RunForThisManyWaves 2 InitialCooldown 30 CooldownTime 30 DesiredCount 1 TFBot { Template T_TFBot_Engineer_High } } Mission // God Sniper 6 { Objective Sniper Where spawnbot_left0 BeginAtWave 6 RunForThisManyWaves 1 InitialCooldown 60 CooldownTime 60 DesiredCount 1 TFBot { Template T_TFBot_Sniper_God } } Mission // Sniper 7 { Objective Sniper Where spawnbot_main_slow1 BeginAtWave 7 RunForThisManyWaves 1 InitialCooldown 120 CooldownTime 30 DesiredCount 4 TFBot { Template T_TFBot_Sniper_High } } Mission // Mine Layer 7 { Objective Spy Where Anywhere BeginAtWave 7 RunForThisManyWaves 1 InitialCooldown 10 CooldownTime 10 DesiredCount 1 TFBot { Template T_TFBot_Miner_True } } Mission // Random Busters 1-6 { Objective DestroySentries Where spawnbot_left0 Where spawnbot_main1 BeginAtWave 1 RunForThisManyWaves 6 InitialCooldown 0 CooldownTime 40 RandomChoice { TFBot { Template T_TFBot_Buster //common } TFBot { Template T_TFBot_Buster //common } TFBot { Template T_TFBot_Buster //common } TFBot { Template T_TFBot_Buster_Bully } TFBot { Template T_TFBot_Buster_Bully } TFBot { Template T_TFBot_Buster_Burn } TFBot { Template T_TFBot_Buster_Burn } TFBot { Template T_TFBot_Buster_Pills } TFBot { Template T_TFBot_Buster_Pills } TFBot { Template T_TFBot_Buster_Hacker } TFBot { Template T_TFBot_Buster_Hacker } TFBot { Template T_TFBot_Buster_Runner } TFBot { Template T_TFBot_Buster_Chief } Squad { TFBot { Template T_TFBot_Buster_Mini } TFBot { Template T_TFBot_Buster_Mini } TFBot { Template T_TFBot_Buster_Mini } TFBot { Template T_TFBot_Buster_Mini } } } } Wave //WAVE 1 //1000$ { InitWaveOutput { Target bignet Action RunScriptCode Param " PrecacheSound(`#ui/gamestartup10.mp3`) SetSkyboxTexture(`sky_dustbowl_01`) //defaults incase of map vote Convars.SetValue(`tf_forced_holiday`, 8) //allow halloween items (needed for bots) Convars.SetValue(`tf_airblast_cray`, 1) //revert airblast to pre-ji to prevent griefing Convars.SetValue(`tf_allow_sliding_taunt`, 0) //fix phlog exploit Convars.SetValue(`tf_bot_flag_escort_max_count`, 4) //all bots become mobbers if bomb is carried Convars.SetValue(`tf_mvm_bot_sniper_target_by_dps`, 1) //no demo-heavy obsession Convars.SetValue(`tf_bot_suspect_spy_touch_interval`, 5) //instant reveal on enemy touch Convars.SetValue(`tf_bot_medic_start_follow_range`, 250) //stay close to patient even without stock EntFire(`game_text_tf`,`kill`) NetProps.SetPropEntity(Entities.FindByName(null, `cap_a_trigtimer`),`m_hFilter`,Entities.FindByName(null, `filter_blue_bombhat`)) NetProps.SetPropEntity(Entities.FindByName(null, `cap_b_trigtimer`),`m_hFilter`,Entities.FindByName(null, `filter_blue_bombhat`)) IncludeScript(`tankextensions_main_packed`, getroottable()) IncludeScript(`tankextensions_packed/combattank`, getroottable()) IncludeScript(`tankextensions_packed/combattank_weapons/rocketpod`, getroottable()) TankExtPacked.SetValueOverrides({ COMBATTANK_MAX_RANGE = 5000 }) TankExtPacked.AddTankIcon(1, `tank_combat_rocket`, `combattank_nolaser|rocketpod|rocketpod`) for (local kit; kit = Entities.FindByClassname(kit, `item_healthkit_medium`);) { NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, PrecacheModel(`models/items/medkit_medium.mdl`), 0) NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, 0, 1) NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, 0, 2) } //transition from wave7 SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup15.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup15.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) EmitSoundEx ({ sound_name = `vehicles/v8/v8_turbo_on_loop1.wav` flags = 0x4 // SND_STOP }) //wave reset SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup10.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup10.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) " } StartWaveOutput { Target wave_start_relay_expert Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 FirstSpawnWarningSound ambient/cow1.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup10.mp3` team = 255 }) " } } WaveSpawn //louder { Name "music" Where spawnbot_mid0 Support 1 FirstSpawnWarningSound ambient/cow1.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup10.mp3` team = 255 }) " } } WaveSpawn { Name "sesame" Where spawnbot_mid0 WaitBeforeStarting 4 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " EntFire(`fancywoodgate_b`,`open`) EntFire(`gate_b_blocker`,`disable`) EntFire(`spawnbot_main_slow1`,`enable`) EntFire(`nav_interface`,`recomputeblockers`) " } } WaveSpawn { Name "gatecloser" Where spawnbot_mid0 Support 1 FirstSpawnOutput { Target cap_a Action RunScriptCode Param " MyCapTeam2 <- function() { EntFire(`fancywoodgate_b`, `Close`) EntFire(`gate_b_blocker`, `Enable`) EntFire(`spawnbot_main_slow1`, `Disable`) EntFire(`nav_interface`, `RecomputeBlockers`) } self.ConnectOutput(`OnCapTeam2`, `MyCapTeam2`) " } } WaveSpawn { Name "rodeo" Where spawnbot_mid0 TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 100 FirstSpawnWarningSound engineer_bucking_bronco_taunt_start DoneWarningSound engineer_bucking_bronco_taunt_yells FirstSpawnOutput { Target bignet Action RunScriptCode Param " ClientPrint(null, 3, `\x0799CCFFYou may adjust \x07F5E042music \x0799CCFFvolume using \x07F5E042snd_musicvolume \x0799CCFFin the console`) Convars.SetValue(`tf_forced_holiday`, 8) Convars.SetValue(`tf_airblast_cray`, 0) Convars.SetValue(`tf_allow_sliding_taunt`, 1) Convars.SetValue(`tf_bot_flag_escort_max_count`, 0) Convars.SetValue(`tf_mvm_bot_sniper_target_by_dps`, 0) Convars.SetValue(`tf_bot_suspect_spy_touch_interval`, 0) Convars.SetValue(`tf_bot_medic_start_follow_range`, 75) " } TFBot { Template T_TFBot_Stampede Item "Upgradeable TF_WEAPON_MINIGUN" ItemAttributes { ItemName "Upgradeable TF_WEAPON_MINIGUN" "paintkit_proto_def_index" 1.82169e-43n //"minigun spinup time increased" 1.75 "minigun spinup time decreased" 0.0025 "damage bonus" 1.5 } Item "Warrior's Spirit" ItemAttributes { ItemName "Warrior's Spirit" "provide on active" 1 "dmg taken increased" 1 //nullify "damage bonus" 1 //nullify "heal on kill" 0 //nullify "gesture speed increase" 1.75 "minicrits become crits" 1 "move speed bonus" 1.75 "dmg pierces resists absorbs" 1 } ItemAttributes { ItemName "The Buffalo Steak Sandvich" "provide on active" 1 "gesture speed increase" 0.75 //different "mult_item_meter_charge_rate" 0 //no recharge } } } WaveSpawn { Name "rodeo2" Where spawnbot_mid0 WaitBeforeStarting 15 Support 1 FirstSpawnWarningSound ambient/cow1.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `engineer_bucking_bronco_taunt_yells` team = 255 }) " } } WaveSpawn { Name "rodeo3" Where spawnbot_mid0 WaitBeforeStarting 15 Support 1 FirstSpawnWarningSound ambient/cow1.wav //louder FirstSpawnOutput { Target BigNet Action RunScriptCode Param " ::TAG <- `bot_cow` for (local i = 1; i <= MaxClients().tointeger(); i++) { local hEnt = PlayerInstanceFromIndex(i) if (hEnt && hEnt.IsAlive() && hEnt.IsBotOfType(1337) && hEnt.HasBotTag(TAG)) { hEnt.RemoveCondEx(19, true) hEnt.RemoveCondEx(41, true) } } " } } WaveSpawn { Name "part01" Where spawnbot_mid0 TotalCount 8 MaxActive 8 SpawnCount 4 WaitForAllDead "rodeo" WaitBetweenSpawns 8 TotalCurrency 100 Squad { TFBot //rewritten to remove crit { Class Soldier Name "Giant Uncharged Soldier" ClassIcon soldier_crit Skill Normal Health 4000 Item "The Original" Attributes MiniBoss ItemAttributes { ItemName "The Original" "damage bonus" 1.5 //bonus "faster reload rate" 0.2 "fire rate penalty" 2 "projectile speed increased" 0.5 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.4 "airblast vulnerability multiplier" 0.4 "override footstep sound set" 3 } } TFBot { Template T_TFBot_Uber } TFBot { Template T_TFBot_Uber } TFBot { Template T_TFBot_Uber } } } WaveSpawn { Name "part02" Where spawnbot_left0 Where spawnbot_main1 TotalCount 32 MaxActive 8 SpawnCount 1 WaitBetweenSpawns 2 WaitForAllDead "rodeo" WaitBeforeStarting 8 TotalCurrency 100 TFBot { Template T_TFBot_Pyro_Shotgun } } WaveSpawn { Name "part03" Where spawnbot_mid0 TotalCount 32 MaxActive 12 SpawnCount 3 WaitBetweenSpawns 2 WaitForAllDead "part01" TotalCurrency 100 DoneWarningSound items/bomb_warning.wav //danger incoming TFBot { Template T_TFBot_Donker } } WaveSpawn //icon precacher { Support 1 Squad { TFBot { Classicon tank_combat_rocket } } } WaveSpawn //moved for icon order { Name "part03_tank" TotalCount 1 WaitForAllDead "part01" WaitBeforeStarting 20 TotalCurrency 200 FirstSpawnOutput { Target boss_spawn_relay Action Trigger } FirstSpawnWarningSound vehicles/tank_readyfire1.wav Tank { Name "combattank_nolaser|rocketpod|rocketpod" //Classicon tank_combat_rocket Health 10000 Speed 75 StartingPathTrackNode "tank_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name "tank_speed" Where spawnbot_mid0 WaitForAllDead "part01" WaitBeforeStarting 33 Support 1 FirstSpawnWarningSound vehicles/airboat/fan_motor_shut_off1.wav FirstSpawnOutput { Target combattank_nolaser|rocketpod|rocketpod Action setspeed Param 0 } } WaveSpawn //louder { Name "tank_speed" Where spawnbot_mid0 WaitForAllDead "part01" WaitBeforeStarting 33 Support 1 FirstSpawnWarningSound vehicles/airboat/fan_motor_shut_off1.wav } WaveSpawn { Name "tank_speed" Where spawnbot_mid0 WaitForAllSpawned "part04" WaitBeforeStarting 6 Support 1 FirstSpawnWarningSound vehicles/airboat/fan_motor_start1.wav FirstSpawnOutput { Target combattank_nolaser|rocketpod|rocketpod Action setspeed Param 75 } } WaveSpawn //louder { Name "tank_speed" Where spawnbot_mid0 WaitForAllSpawned "part04" WaitBeforeStarting 6 Support 1 FirstSpawnWarningSound vehicles/airboat/fan_motor_start1.wav } WaveSpawn { Name "tank_speed" Where spawnbot_mid0 WaitForAllSpawned "part04" WaitBeforeStarting 139 Support 1 FirstSpawnWarningSound vehicles/airboat/fan_motor_shut_off1.wav FirstSpawnOutput { Target combattank_nolaser|rocketpod|rocketpod Action setspeed Param 0 } } WaveSpawn //louder { Name "tank_speed" Where spawnbot_mid0 WaitForAllSpawned "part04" WaitBeforeStarting 139 Support 1 FirstSpawnWarningSound vehicles/airboat/fan_motor_shut_off1.wav } WaveSpawn { Name "part04" Where spawnbot_mid0 Where spawnbot_main1 TotalCount 24 MaxActive 12 SpawnCount 12 WaitForAllDead "part03" WaitBeforeStarting 2 TotalCurrency 100 TFBot { Class Soldier Classicon soldier_directhit_lite EventChangeAttributes { Default { Skill Expert Attributes AlwaysCrit Attributes HoldFireUntilFullReload Item "The Direct Hit" Item "MvM Gatebot Light Soldier" //GATE Attributes IgnoreFlag Attributes DisableDodge Tag bot_gatebot BehaviorModifiers Push //GATE } RevertGateBotsBehavior { Skill Expert //Attributes AlwaysCrit //removing crits doesn't work Attributes HoldFireUntilFullReload Item "The Direct Hit" Item "MvM Gatebot Light Soldier" ItemAttributes { ItemName "MvM GateBot Light Soldier" "item style override" 1 } } } } } WaveSpawn { Name "part06" Where spawnbot_mid0 Where spawnbot_main1 TotalCount 4 MaxActive 4 SpawnCount 4 WaitForAllDead "part04" WaitBeforeStarting 6 TotalCurrency 100 Squad { TFBot { Template T_TFBot_Napalm Skill Expert Item "Skullbrero" ItemAttributes { ItemName "Skullbrero" "set item tint rgb" 12807213 } } TFBot { Template T_TFBot_Uber } TFBot { Template T_TFBot_Uber } TFBot { Template T_TFBot_Uber } } } WaveSpawn { Name "part07" Where spawnbot_mid0 Where spawnbot_main1 TotalCount 2 MaxActive 2 SpawnCount 2 WaitForAllDead "part06" WaitBeforeStarting 2 TotalCurrency 100 Squad { TFBot { Template T_TFBot_Napalm Skill Easy Item "Skullbrero" ItemAttributes { ItemName "Skullbrero" "set item tint rgb" 5801378 } } TFBot { Template T_TFBot_Giant_Medic_Fixed } } } WaveSpawn { Name "part05" Where spawnbot_mid0 Where spawnbot_main1 TotalCount 100 MaxActive 12 SpawnCount 1 WaitBetweenSpawns 2 WaitForAllDead "part04" Support 1 TotalCurrency 100 TFBot { Template T_TFBot_Detonator } } } Wave //WAVE 2 //1000$ { InitWaveOutput { Target bignet Action RunScriptCode Param " PrecacheSound(`weapons/rpg/rocketfire1.wav`) PrecacheSound(`#ui/gamestartup23.mp3`) PrecacheSound(`#ui/gamestartup1.mp3`) SetSkyboxTexture(`sky_goldrush_01`) Convars.SetValue(`tf_forced_holiday`, 8) Convars.SetValue(`tf_airblast_cray`, 0) Convars.SetValue(`tf_allow_sliding_taunt`, 1) Convars.SetValue(`tf_bot_flag_escort_max_count`, 0) Convars.SetValue(`tf_mvm_bot_sniper_target_by_dps`, 0) Convars.SetValue(`tf_bot_suspect_spy_touch_interval`, 0) Convars.SetValue(`tf_bot_medic_start_follow_range`, 75) EntFire(`game_text_tf`,`kill`) NetProps.SetPropEntity(Entities.FindByName(null, `cap_a_trigtimer`),`m_hFilter`,Entities.FindByName(null, `filter_blue_bombhat`)) NetProps.SetPropEntity(Entities.FindByName(null, `cap_b_trigtimer`),`m_hFilter`,Entities.FindByName(null, `filter_blue_bombhat`)) //IncludeScript(`tankextensions_main_packed`, getroottable()) //IncludeScript(`tankextensions_packed/helicopter`, getroottable()) //OVERRIDDEN FOR NOW IncludeScript(`tankextensions_main`, getroottable()) IncludeScript(`tankextensions/combattank`, getroottable()) IncludeScript(`tankextensions/helicopter`, getroottable()) IncludeScript(`tankextensions/combattank_weapons/cannon`, getroottable()) //OVERRIDDEN FOR NOW TankExtPacked.SetValueOverrides({ COMBATTANK_MAX_RANGE = 1 }) //don't shoot early TankExtPacked.SetValueOverrides({ COMBATTANK_CANNON_ROCKET_DAMAGE = 180 }) TankExtPacked.SetValueOverrides({ COMBATTANK_CANNON_ROCKET_SPEED = 1100 }) TankExtPacked.SetValueOverrides({ COMBATTANK_CANNON_SND_FIRE = `weapons/rpg/rocketfire1.wav` }) TankExtPacked.SetValueOverrides({ COMBATTANK_CANNON_SND_FIRE2 = `weapons/rpg/rocketfire1.wav` }) TankExtPacked.SetValueOverrides({ COMBATTANK_CANNON_ROCKET = `models/bots/boss_bot/combat_tank_mk2/mk2_rocket_seeker.mdl` }) TankExtPacked.SetValueOverrides({ HELICOPTER_MAX_RANGE = 1 }) //don't shoot early TankExtPacked.SetValueOverrides({ HELICOPTER_ROCKET_PARTICLE_TRAIL = `rockettrail` }) TankExtPacked.AddTankIcon(1, `helicopter_blue_nys_nomiplod`, `helicopter_customparticles`) for (local kit; kit = Entities.FindByClassname(kit, `item_healthkit_medium`);) { NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, PrecacheModel(`models/items/medkit_medium.mdl`), 0) NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, 0, 1) NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, 0, 2) } //transition from wave1 SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup10.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup10.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) EmitSoundEx ({ sound_name = `vehicles/v8/v8_turbo_on_loop1.wav` flags = 0x4 // SND_STOP }) //wave reset SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup23.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup23.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup1.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup1.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) " } StartWaveOutput { Target wave_start_relay_expert Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 FirstSpawnWarningSound ambient/cow2.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup23.mp3` team = 255 }) " } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 FirstSpawnWarningSound ambient/cow2.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup23.mp3` team = 255 }) " } } WaveSpawn { Name "sesame" Where spawnbot_mid0 WaitBeforeStarting 4 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " EntFire(`fancywoodgate_b`,`open`) EntFire(`gate_b_blocker`,`disable`) EntFire(`spawnbot_main_slow1`,`enable`) EntFire(`nav_interface`,`recomputeblockers`) " } } WaveSpawn { Name "gatecloser" Where spawnbot_mid0 Support 1 FirstSpawnOutput { Target cap_a Action RunScriptCode Param " MyCapTeam2 <- function() { EntFire(`fancywoodgate_b`, `Close`) EntFire(`gate_b_blocker`, `Enable`) EntFire(`spawnbot_main_slow1`, `Disable`) EntFire(`nav_interface`, `RecomputeBlockers`) } self.ConnectOutput(`OnCapTeam2`, `MyCapTeam2`) " } } WaveSpawn { Name "igniter_teleporter" Where spawnbot_mid0 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " ::TAG2 <- `bot_teleported` EntityOutputs.AddOutput(Entities.FindByName(null, `cap_a`), `OnCapTeam2`, `bignet`, `runscriptcode`, @` for (local i = 1; i <= MaxClients().tointeger(); i++) { local hEnt = PlayerInstanceFromIndex(i) if (hEnt && hEnt.IsAlive() && hEnt.IsBotOfType(1337) && hEnt.HasBotTag(TAG2)) { hEnt.Teleport(true, Vector(-390,1576,-78), false, QAngle(), false, Vector()) } }`, -1, -1) " } } WaveSpawn { Name "rodeo" Where spawnbot_mid0 TotalCount 2 MaxActive 2 SpawnCount 1 WaitBetweenSpawns 0.5 TotalCurrency 100 FirstSpawnWarningSound engineer_bucking_bronco_taunt_start DoneWarningSound engineer_bucking_bronco_taunt_yells TFBot { Template T_TFBot_Stampede Item "Natascha" ItemAttributes { ItemName "Natascha" "damage penalty" 1 "damage bonus" 1.25 } } } WaveSpawn { Name "rodeo2" Where spawnbot_mid0 WaitBeforeStarting 15 Support 1 FirstSpawnWarningSound ambient/cow2.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `engineer_bucking_bronco_taunt_yells` team = 255 }) " } } WaveSpawn { Name "rodeo3" Where spawnbot_mid0 WaitBeforeStarting 15 Support 1 FirstSpawnWarningSound ambient/cow2.wav //louder FirstSpawnOutput { Target BigNet Action RunScriptCode Param " ::TAG <- `bot_cow` for (local i = 1; i <= MaxClients().tointeger(); i++) { local hEnt = PlayerInstanceFromIndex(i) if (hEnt && hEnt.IsAlive() && hEnt.IsBotOfType(1337) && hEnt.HasBotTag(TAG)) { hEnt.RemoveCondEx(19, true) hEnt.RemoveCondEx(41, true) } } " } } WaveSpawn { Name "part01" Where spawnbot_mid0 TotalCount 8 MaxActive 8 SpawnCount 2 WaitBetweenSpawns 4 WaitForAllDead "rodeo" TotalCurrency 100 Squad { TFBot { Template T_TFBot_Giant_Soldier_Spammer Health 4000 } TFBot { Template T_TFBot_BigHeal } } } WaveSpawn { Name "part02" Where spawnbot_left0 Where spawnbot_main1 TotalCount 32 MaxActive 6 SpawnCount 1 WaitBetweenSpawns 2 WaitBeforeStarting 2 WaitForAllDead "part01" TotalCurrency 50 TFBot //not a valve bowman so no -50% dmg { Class Sniper Classicon sniper_bow EventChangeAttributes { Default { Skill Expert Item "The Huntsman" Item "MvM Gatebot Light Sniper" //GATE Attributes IgnoreFlag Attributes DisableDodge Tag bot_gatebot BehaviorModifiers Push //GATE } RevertGateBotsBehavior { Skill Expert Item "The Huntsman" Item "MvM Gatebot Light Sniper" ItemAttributes { ItemName "MvM GateBot Light Sniper" "item style override" 1 } } } } } WaveSpawn { Name "part03" Where spawnbot_mid0 Where spawnbot_main1 TotalCount 24 MaxActive 6 SpawnCount 2 WaitBetweenSpawns 2 WaitForAllDead "part01" TotalCurrency 100 Squad { TFBot { Template T_TFBot_Phlog } TFBot { Template T_TFBot_Shield } } } WaveSpawn { Name "part04" Where spawnbot_right0 Where spawnbot_main1 TotalCount 32 MaxActive 18 SpawnCount 6 WaitBetweenSpawns 3 WaitForAllSpawned "part03" TotalCurrency 100 TFBot { Template T_TFBot_HoK_Minigun } } WaveSpawn { Name "music2" Where spawnbot_mid0 WaitForAllDead "part04" WaitBeforeStarting 10 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup1.mp3` team = 255 }) " } } WaveSpawn { Name "music2" Where spawnbot_mid0 WaitForAllDead "part04" WaitBeforeStarting 10 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup1.mp3` team = 255 }) " } } WaveSpawn //icon precacher { Support 1 Squad { TFBot { Classicon helicopter_blue_nys_nomiplod } } } WaveSpawn { Name "part05_helicopter" TotalCount 1 WaitForAllDead "part04" WaitBeforeStarting 2 TotalCurrency 100 FirstSpawnWarningSound npc/attack_helicopter/aheli_megabomb_siren1.wav FirstSpawnOutput { Target boss_spawn_relay Action Trigger } Tank { Health 11000 //extra hp for lift-off sequence Speed 225 Name "helicopter_customparticles" //Classicon helicopter_blue_nys_nomiplod StartingPathTrackNode "path_blimp_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name "helicopter_resizer" WaitForAllSpawned "part05_helicopter" FirstSpawnOutput { Target BigNet Action RunScriptCode Param " for (local chopper; chopper = Entities.FindByModel(chopper, `models/bots/boss_helicopter/boss_helicopter.mdl`);) { chopper.SetModelScale(0.65,0.0) } " } } WaveSpawn { Name "tank_speed" Where spawnbot_mid0 WaitForAllDead "part04" WaitBeforeStarting 11 Support 1 FirstSpawnWarningSound npc/attack_helicopter/aheli_damaged_alarm1.wav FirstSpawnOutput { Target helicopter_customparticles Action setspeed Param 75 } } WaveSpawn { Name "tank_ai" Where spawnbot_mid0 WaitForAllDead "part04" WaitBeforeStarting 17 Support 1 FirstSpawnOutput { Target bignet Action RunScriptCode Param "TankExtPacked.SetValueOverrides({ HELICOPTER_MAX_RANGE = 5000 })" } } WaveSpawn { Name "tank_ai" Where spawnbot_mid0 WaitForAllDead "part04" WaitBeforeStarting 17 Support 1 FirstSpawnOutput { Target bignet Action RunScriptCode Param "TankExtPacked.SetValueOverrides({ COMBATTANK_MAX_RANGE = 5000 })" } } WaveSpawn { Name "part05" TotalCount 1 WaitForAllDead "part04" WaitBeforeStarting 12 TotalCurrency 100 FirstSpawnWarningSound vehicles/tank_readyfire1.wav FirstSpawnOutput { Target boss_spawn_relay Action Trigger } Tank { Health 10000 Speed 75 Name "combattank_bomb|cannon$disablesmokestack|1" StartingPathTrackNode "tank_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name "part05" TotalCount 1 WaitForAllDead "part04" WaitBeforeStarting 15 TotalCurrency 100 FirstSpawnWarningSound npc/attack_helicopter/aheli_charge_up.wav FirstSpawnOutput { Target boss_spawn_relay Action Trigger } Tank { Health 10000 Speed 75 Name "tank$disablesmokestack|1" StartingPathTrackNode "tank_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name "part05" TotalCount 1 WaitForAllDead "part04" WaitBeforeStarting 18 TotalCurrency 100 FirstSpawnOutput { Target boss_spawn_relay Action Trigger } Tank { Health 10000 Speed 75 Name "tank$disablesmokestack|1" StartingPathTrackNode "tank_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name "part06" Where spawnbot_main_slow1 TotalCount 12 MaxActive 12 WaitForAllDead "part04" WaitBeforeStarting 60 TotalCurrency 50 TFBot { Class Pyro Classicon pyro_backburner_nys Skill Expert Item "The Backburner" ItemAttributes { ItemName "The Backburner" "airblast disabled" 1 } } } WaveSpawn { Name "part05" Where spawnbot_left0 Where spawnbot_main1 TotalCount 100 MaxActive 12 SpawnCount 3 WaitBetweenSpawns 9 WaitBeforeStarting 24 WaitForAllDead "part04" Support 1 TotalCurrency 100 TFBot { Template T_TFBot_Scout_Sandman_FastCharge Name "National League Scout" Health 110 Attributes AlwaysCrit Attributes AutoJump AutoJumpMin 0 AutoJumpMax 5 Item "Ball-Kicking Boots" Item "Blast Blocker" Item "The Bolt Action Blitzer" ItemAttributes { ItemName "The Sandman" "effect bar recharge rate increased" 0.25 //rewritten for overheal fix "max health additive penalty" 0 } ItemAttributes { ItemName "The Bolt Action Blitzer" "set item tint rgb" 6535423 } } } WaveSpawn { Name "igniter" Where spawnbot_left0 Where spawnbot_main1 TotalCount 1 MaxActive 1 SpawnCount 1 WaitForAllDead "part01" TotalCurrency 0 Support 1 RandomChoice //trick to hide icon { RandomChoice //trick to hide icon { TFBot { Class Pyro Name "Ignis Solus" Health 1 Tag bot_teleported Skill Expert Attributes AlwaysFireWeapon Attributes IgnoreFlag Item "Fire Fighter" Item "Hellscape" item "Kazan Karategi" Item "The Backburner" ItemAttributes { ItemName "The Backburner" "flame_spread_degree" 65 "flame_lifetime" 1.2 "lunchbox adds minicrits" 2 //legacy graphics "mod weapon blocks healing" 1 "cannot pick up intelligence" 1 } } } } } } Wave //WAVE 3 //1000$ { InitWaveOutput { Target bignet Action RunScriptCode Param " PrecacheSound(`#ui/gamestartup21.mp3`) PrecacheSound(`#ui/gamestartup3.mp3`) SetSkyboxTexture(`sky_granary_01`) Convars.SetValue(`tf_forced_holiday`, 8) Convars.SetValue(`tf_airblast_cray`, 0) Convars.SetValue(`tf_allow_sliding_taunt`, 1) Convars.SetValue(`tf_bot_flag_escort_max_count`, 0) Convars.SetValue(`tf_mvm_bot_sniper_target_by_dps`, 0) Convars.SetValue(`tf_bot_suspect_spy_touch_interval`, 0) Convars.SetValue(`tf_bot_medic_start_follow_range`, 75) IncludeScript(`tankextensions_main_packed`, getroottable()) IncludeScript(`tankextensions_packed/sentrytank`, getroottable()) IncludeScript(`tankextensions_packed/tankdozer`, getroottable()) TankExtPacked.AddTankIcon(1, `tank_sentry`, `sentrytank^tankdozer_nosentry`) TankExtPacked.SetValueOverrides({ SENTRYTANK_SENTRY_DEFAULTUPGRADE = 0 }) TankExtPacked.SetValueOverrides({ SENTRYTANK_SENTRY_FLAGS = 10 }) ClientPrint(null, 3, `\x0799CCFFThe tank's \x07F5E042sentry gun \x0799CCFFand \x07F5E042armor \x0799CCFFare both immune to damage`) ClientPrint(null, 3, `\x0799CCFFYou must aim for the tank's \x07F5E042exposed parts`) EntFire(`game_text_tf`,`kill`) NetProps.SetPropEntity(Entities.FindByName(null, `cap_a_trigtimer`),`m_hFilter`,Entities.FindByName(null, `filter_blue_bombhat`)) NetProps.SetPropEntity(Entities.FindByName(null, `cap_b_trigtimer`),`m_hFilter`,Entities.FindByName(null, `filter_blue_bombhat`)) for (local kit; kit = Entities.FindByClassname(kit, `item_healthkit_medium`);) { NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, PrecacheModel(`models/items/medkit_medium.mdl`), 0) NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, 0, 1) NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, 0, 2) } //transition from wave2 SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup1.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup1.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) EmitSoundEx ({ sound_name = `vehicles/v8/v8_turbo_on_loop1.wav` flags = 0x4 // SND_STOP }) //wave reset SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup21.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup21.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup21.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup3.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup3.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup3.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) " } StartWaveOutput { Target wave_start_relay_expert Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 FirstSpawnWarningSound ambient/cow3.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup21.mp3` team = 255 }) " } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 FirstSpawnWarningSound ambient/cow3.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup21.mp3` team = 255 }) " } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup21.mp3` team = 255 }) " } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 WaitBeforeStarting 73 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup21.mp3` team = 255 }) " } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 WaitBeforeStarting 73 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup21.mp3` team = 255 }) " } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 WaitBeforeStarting 73 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup21.mp3` team = 255 }) " } } WaveSpawn { Name "sesame" Where spawnbot_mid0 WaitBeforeStarting 4 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " EntFire(`fancywoodgate_b`,`open`) EntFire(`gate_b_blocker`,`disable`) EntFire(`spawnbot_main_slow1`,`enable`) EntFire(`nav_interface`,`recomputeblockers`) " } } WaveSpawn { Name "gatecloser" Where spawnbot_mid0 Support 1 FirstSpawnOutput { Target cap_a Action RunScriptCode Param " MyCapTeam2 <- function() { EntFire(`fancywoodgate_b`, `Close`) EntFire(`gate_b_blocker`, `Enable`) EntFire(`spawnbot_main_slow1`, `Disable`) EntFire(`nav_interface`, `RecomputeBlockers`) } self.ConnectOutput(`OnCapTeam2`, `MyCapTeam2`) " } } WaveSpawn { Name "vscript" Where spawnbot_mid0 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " ::SentryHook <- { function CleanUp() { delete ::SentryHook; } function OnGameEvent_recalculate_holidays(params) { CleanUp(); } function OnGameEvent_mvm_wave_complete(params) { CleanUp(); } function OnGameEvent_player_builtobject(params) { local player = GetPlayerFromUserID(params.userid) if (player == null || !player.IsValid() || !player.IsBotOfType(TF_BOT_TYPE)) { return; } if (params.object != 2) { return; } local object = EntIndexToHScript(params.index); if (player.HasBotTag(`mini_skin_fix`) && NetProps.GetPropBool(object, `m_bMiniBuilding`)) { object.ValidateScriptScope(); local scope = object.GetScriptScope(); scope.Downgraded <- false; scope.Think <- function() { if (!scope.Downgraded && NetProps.GetPropInt(object, `m_iUpgradeLevel`) > 1) { object.SetSkin(1); scope.Downgraded = true; } return 0; } AddThinkToEnt(object, `Think`); } if (!player.HasBotTag(`wrangler_shield`)) { return; } NetProps.SetPropInt(player, `m_bGlowEnabled`, 1) NetProps.SetPropInt(object, `m_bGlowEnabled`, 1) local shield = SpawnEntityFromTable(`prop_dynamic`, { origin = object.GetOrigin(), model = `models/buildables/sentry_shield.mdl`, skin = object.GetTeam() == 3 ? 1 : 0 }); shield.AcceptInput(`SetParent`, `!activator`, object, null); NetProps.SetPropInt(shield, `m_fEffects`, NetProps.GetPropInt(shield, `m_fEffects`) | 16) local target = Entities.FindByName(null, `sentry_shield_particle_control_point`); if (target == null || !target.IsValid()) { target = SpawnEntityFromTable(`info_target` { targetname = `sentry_shield_particle_control_point`, origin = Vector(50, 150, 255) }); } local particle = SpawnEntityFromTable(`info_particle_system`, { origin = object.GetOrigin() + Vector(0.0, 0.0, 30.0), effect_name = `turret_shield`, cpoint1 = `sentry_shield_particle_control_point`, start_active = 1 }); particle.AcceptInput(`SetParent`, `!activator`, object, null); } } __CollectGameEventCallbacks(SentryHook); " } } WaveSpawn { Name "rodeo" Where spawnbot_mid0 TotalCount 3 MaxActive 3 SpawnCount 1 WaitBetweenSpawns 0.5 TotalCurrency 100 FirstSpawnWarningSound engineer_bucking_bronco_taunt_start DoneWarningSound engineer_bucking_bronco_taunt_yells TFBot { Template T_TFBot_Stampede Item "The Huo Long Heatmaker" ItemAttributes { ItemName "The Huo Long Heatmaker" "damage penalty" 1 "damage bonus" 1.4 } } } WaveSpawn { Name "rodeo2" Where spawnbot_mid0 WaitBeforeStarting 15 Support 1 FirstSpawnWarningSound ambient/cow3.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `engineer_bucking_bronco_taunt_yells` team = 255 }) " } } WaveSpawn { Name "rodeo3" Where spawnbot_mid0 WaitBeforeStarting 15 Support 1 FirstSpawnWarningSound ambient/cow3.wav //louder FirstSpawnOutput { Target BigNet Action RunScriptCode Param " ::TAG <- `bot_cow` for (local i = 1; i <= MaxClients().tointeger(); i++) { local hEnt = PlayerInstanceFromIndex(i) if (hEnt && hEnt.IsAlive() && hEnt.IsBotOfType(1337) && hEnt.HasBotTag(TAG)) { hEnt.RemoveCondEx(19, true) hEnt.RemoveCondEx(41, true) } } " } } WaveSpawn { Name "part01" Where spawnbot_scattered0 TotalCount 100 MaxActive 18 SpawnCount 3 WaitBetweenSpawns 2 WaitForAllDead "rodeo" TotalCurrency 100 TFBot { Template T_TFBot_Airstrike } } WaveSpawn { Name "part02" Where spawnbot_left0 TotalCount 6 MaxActive 6 SpawnCount 2 WaitBeforeStarting 60 WaitBetweenSpawns 30 WaitForAllDead "rodeo" TotalCurrency 100 Squad { TFBot { Template T_TFBot_Giant_Scout_Baseball Health 1600 Item "Ball-Kicking Boots" Item "The Strikeout" ItemAttributes { ItemName "The Sandman" "effect bar recharge rate increased" 0.1 "max health additive penalty" 0 } } TFBot { Template T_TFBot_Uber_Baseball } } } WaveSpawn { Name "part03" Where spawnbot_mid0 TotalCount 18 MaxActive 9 SpawnCount 3 WaitForAllDead "part01" WaitBetweenSpawns 3 TotalCurrency 100 DoneWarningSound items/bomb_warning.wav //danger incoming Squad { TFBot { Template T_TFBot_Heavy_IronFist_Airblast Classicon heavy_steelfist_pusher } TFBot { Template T_TFBot_Engineer_Mini } TFBot { Template T_TFBot_Engineer_Mini } } } WaveSpawn { Name "part03" Where spawnbot_left0 TotalCount 18 MaxActive 9 SpawnCount 3 WaitForAllSpawned "part01" WaitBeforeStarting 3 WaitBetweenSpawns 3 TotalCurrency 100 DoneWarningSound items/bomb_warning.wav //danger incoming Squad { TFBot { Template T_TFBot_Heavy_IronFist_Airblast Classicon heavy_steelfist_pusher } TFBot { Template T_TFBot_Engineer_Mini } TFBot { Template T_TFBot_Engineer_Mini } } } WaveSpawn { Name "musicstop" Where spawnbot_mid0 Support 1 WaitForAllDead "part03" FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup21.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) " } } WaveSpawn { Name "musicstop" Where spawnbot_mid0 Support 1 WaitForAllDead "part03" FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup21.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) " } } WaveSpawn { Name "musicstop" Where spawnbot_mid0 Support 1 WaitForAllDead "part03" FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup21.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) " } } WaveSpawn { Name "part04" Where spawnbot_right0 TotalCount 1 MaxActive 1 SpawnCount 1 WaitForAllDead "part03" WaitBeforeStarting 8 TotalCurrency 200 FirstSpawnWarningSound ui/duel_challenge_with_restriction.wav DoneWarningSound Engineer.MVM_CritDeath TFBot { Template T_TFBot_Engineer_Chief } } WaveSpawn //icon precacher { Support 1 Squad { TFBot { Classicon tank_sentry } } } WaveSpawn //moved for icon order { Name "part04_tank" TotalCount 1 WaitForAllDead "part03" WaitBeforeStarting 4 TotalCurrency 200 FirstSpawnWarningSound vehicles/tank_readyfire1.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " for (local tanksentry; tanksentry = Entities.FindByModel(tanksentry, `models/buildables/sentry1.mdl`);) { if(tanksentry.IsValid() && NetProps.GetPropInt(tanksentry, `m_iTeamNum`) == 3) tanksentry.SetSkin(3) tanksentry.SetHealth(99999) NetProps.SetPropInt(tanksentry, `m_fEffects`, NetProps.GetPropInt(tanksentry, `m_fEffects`) | 16) } EntFire(`boss_spawn_relay`,`Trigger`) " Delay 0.1 } Tank { Name "sentrytank^tankdozer_nosentry" //Classicon tank_sentry Health 15000 Speed 75 StartingPathTrackNode path_tank_cliff_1 OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name "tank_command" TotalCount 1 WaitForAllDead "part04_tank" Support 1 FirstSpawnOutput { Target bignet Action RunScriptCode Param "ClientPrint(null, 3, `\x0799CCFFNow destroy the \x07F5E042engineer boss\x0799CCFF!`)" } } WaveSpawn { Name "tank_music" Where spawnbot_mid0 Support 1 WaitForAllDead "part03" WaitBeforeStarting 12 LastSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup3.mp3` team = 255 }) " } } WaveSpawn { Name "tank_music" Where spawnbot_mid0 Support 1 WaitForAllDead "part03" WaitBeforeStarting 12 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup3.mp3` team = 255 }) " } } WaveSpawn { Name "tank_music" Where spawnbot_mid0 Support 1 WaitForAllDead "part03" WaitBeforeStarting 12 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup3.mp3` team = 255 }) " } } WaveSpawn { Name "tank_sound" Where spawnbot_mid0 Support 1 WaitForAllDead "part03" WaitBeforeStarting 10.5 FirstSpawnWarningSound ambient/materials/cartrap_explode_impact1.wav } WaveSpawn { Name "tank_sound" Where spawnbot_mid0 Support 1 WaitForAllDead "part03" WaitBeforeStarting 10.5 FirstSpawnWarningSound ambient/materials/cartrap_explode_impact1.wav } WaveSpawn { Name "part04" Where spawnbot_left0 Where spawnbot_main1 TotalCount 100 MaxActive 12 SpawnCount 1 WaitBetweenSpawns 1 WaitForAllDead "part03" WaitBeforeStarting 40 Support 1 TotalCurrency 100 TFBot { Class Scout EventChangeAttributes { Default { Skill Easy MaxVisionRange 500 Item "MvM GateBot Light Scout" //GATE Attributes IgnoreFlag Tag bot_gatebot BehaviorModifiers Push //GATE } RevertGateBotsBehavior { Skill Easy MaxVisionRange -1 Item "MvM GateBot Light Scout" ItemAttributes { ItemName "MvM GateBot Light Scout" "item style override" 1 } } } } } } Wave //WAVE 4 //1000$ { InitWaveOutput { Target bignet Action RunScriptCode Param " PrecacheSound(`#ui/gamestartup29.mp3`) PrecacheSound(`#ui/gamestartup5.mp3`) PrecacheSound(`#ui/cyoa_musicmoregun.mp3`) SetSkyboxTexture(`sky_hydro_01`) Convars.SetValue(`tf_forced_holiday`, 8) Convars.SetValue(`tf_airblast_cray`, 0) Convars.SetValue(`tf_allow_sliding_taunt`, 1) Convars.SetValue(`tf_bot_flag_escort_max_count`, 0) Convars.SetValue(`tf_mvm_bot_sniper_target_by_dps`, 0) Convars.SetValue(`tf_bot_suspect_spy_touch_interval`, 0) Convars.SetValue(`tf_bot_medic_start_follow_range`, 75) EntFire(`game_text_tf`,`kill`) NetProps.SetPropEntity(Entities.FindByName(null, `cap_a_trigtimer`),`m_hFilter`,Entities.FindByName(null, `filter_blue_bombhat`)) NetProps.SetPropEntity(Entities.FindByName(null, `cap_b_trigtimer`),`m_hFilter`,Entities.FindByName(null, `filter_blue_bombhat`)) IncludeScript(`tankextensions_main_packed`, getroottable()) IncludeScript(`tankextensions_packed/combattank`, getroottable()) IncludeScript(`tankextensions_packed/combattank_weapons/railgun`, getroottable()) IncludeScript(`tankextensions_packed/stickytank`, getroottable()) IncludeScript(`tankextensions_packed/jumptank`, getroottable()) TankExtPacked.SetValueOverrides({ COMBATTANK_MAX_RANGE = 1 }) //don't shoot early TankExtPacked.SetValueOverrides({ JUMPTANK_USE_SPECIAL_DEPLOY = true }) for (local kit; kit = Entities.FindByClassname(kit, `item_healthkit_medium`);) { NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, PrecacheModel(`models/items/medkit_medium.mdl`), 0) NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, 0, 1) NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, 0, 2) } //transition from wave3 SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup3.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup3.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup3.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) EmitSoundEx ({ sound_name = `vehicles/v8/v8_turbo_on_loop1.wav` flags = 0x4 // SND_STOP }) //wave reset SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup29.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup29.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup5.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup5.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/cyoa_musicmoregun.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/cyoa_musicmoregun.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/cyoa_musicmoregun.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/cyoa_musicmoregun.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) " } StartWaveOutput { Target wave_start_relay_expert Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 FirstSpawnWarningSound ambient/cow1.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup29.mp3` team = 255 }) " } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 FirstSpawnWarningSound ambient/cow1.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup29.mp3` team = 255 }) " } } WaveSpawn { Name "heavygatefixer" //fixes heavy gatebot hat problem Where spawnbot_mid0 Support 1 FirstSpawnOutput { Target cap_b Action AddOutput Param "OnCapTeam2 tf_wearableRunScriptCodeif(startswith(self.GetModelName(),`models/bots/gameplay_cosmetic/light_`)){NetProps.SetPropInt(self,`m_nModelIndexOverrides`,PrecacheModel(format(`%s_off.mdl`,self.GetModelName().slice(0,-7))))}0-1" } } WaveSpawn { Name "sesame" Where spawnbot_mid0 WaitBeforeStarting 4 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " EntFire(`fancywoodgate_b`,`open`) EntFire(`gate_b_blocker`,`disable`) EntFire(`spawnbot_main_slow1`,`enable`) EntFire(`nav_interface`,`recomputeblockers`) " } } WaveSpawn { Name "gatecloser" Where spawnbot_mid0 Support 1 FirstSpawnOutput { Target cap_a Action RunScriptCode Param " MyCapTeam2 <- function() { EntFire(`fancywoodgate_b`, `Close`) EntFire(`gate_b_blocker`, `Enable`) EntFire(`spawnbot_main_slow1`, `Disable`) EntFire(`nav_interface`, `RecomputeBlockers`) } self.ConnectOutput(`OnCapTeam2`, `MyCapTeam2`) " } } WaveSpawn { Name "rodeo" Where spawnbot_mid0 TotalCount 4 MaxActive 4 SpawnCount 1 WaitBetweenSpawns 0.5 TotalCurrency 100 FirstSpawnWarningSound engineer_bucking_bronco_taunt_start DoneWarningSound engineer_bucking_bronco_taunt_yells TFBot { Template T_TFBot_Stampede Item "The Brass Beast" ItemAttributes { ItemName "The Brass Beast" "damage bonus" 1.7 } } } WaveSpawn { Name "rodeo2" Where spawnbot_mid0 WaitBeforeStarting 15 Support 1 FirstSpawnWarningSound ambient/cow1.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `engineer_bucking_bronco_taunt_yells` team = 255 }) " } } WaveSpawn { Name "rodeo3" Where spawnbot_mid0 WaitBeforeStarting 15 Support 1 FirstSpawnWarningSound ambient/cow1.wav //louder FirstSpawnOutput { Target BigNet Action RunScriptCode Param " ::TAG <- `bot_cow` for (local i = 1; i <= MaxClients().tointeger(); i++) { local hEnt = PlayerInstanceFromIndex(i) if (hEnt && hEnt.IsAlive() && hEnt.IsBotOfType(1337) && hEnt.HasBotTag(TAG)) { hEnt.RemoveCondEx(19, true) hEnt.RemoveCondEx(41, true) } } " } } WaveSpawn { Name "part01" Where spawnbot_mid0 TotalCount 6 MaxActive 6 SpawnCount 6 WaitForAllDead "rodeo" TotalCurrency 50 DoneWarningSound items/bomb_warning.wav //danger incoming Squad { TFBot { Template T_TFBot_Laser_Giant //pomson graphic } TFBot { Template T_TFBot_Soldier_Extended_Buff_Banner Classicon soldier_banner_trio Item "The Direct Hit" } TFBot { Template T_TFBot_Soldier_Extended_Concheror Classicon soldier_banner_trio Item "The Direct Hit" } TFBot { Template T_TFBot_Soldier_Extended_Battalion Classicon soldier_banner_trio Item "The Direct Hit" } TFBot { Class Pyro Skill Easy MaxVisionRange 1 //try to flail around Classicon soldier_banner_trio //hidden to keep wavebar neat Attributes AlwaysFireWeapon } TFBot { Template T_TFBot_Shield_Large Classicon soldier_banner_trio //hidden to keep wavebar neat } } } WaveSpawn { Name "part01" Where spawnbot_right0 TotalCount 6 MaxActive 6 SpawnCount 6 WaitForAllDead "rodeo" WaitBeforeStarting 8 TotalCurrency 50 DoneWarningSound items/bomb_warning.wav //danger incoming Squad { TFBot { Template T_TFBot_Laser_Giant //bison graphic Item "The Cow Mangler 5000" Attributes MiniBoss ItemAttributes { ItemName "The Hellmet" "set item tint rgb" 65535 } ItemAttributes { ItemName "The Cow Mangler 5000" "set item tint rgb" 65535 "override projectile type" 13 "fire rate bonus" 0.05 "damage penalty" 0.5 "energy weapon penetration" 1 "ragdolls plasma effect" 1 "projectile penetration" 1 "subtract victim medigun charge on hit" 10 "subtract victim cloak on hit" 20 } } TFBot { Template T_TFBot_Soldier_Extended_Buff_Banner Classicon soldier_banner_trio Item "The Direct Hit" } TFBot { Template T_TFBot_Soldier_Extended_Concheror Classicon soldier_banner_trio Item "The Direct Hit" } TFBot { Template T_TFBot_Soldier_Extended_Battalion Classicon soldier_banner_trio Item "The Direct Hit" } TFBot { Class Pyro Skill Easy MaxVisionRange 1 //try to flail around Classicon soldier_banner_trio //hidden to keep wavebar neat Attributes AlwaysFireWeapon } TFBot { Template T_TFBot_Shield_Large Classicon soldier_banner_trio //hidden to keep wavebar neat } } } WaveSpawn { Name "part02" Where spawnbot_mid0 TotalCount 1 MaxActive 1 SpawnCount 1 WaitForAllDead "part01" WaitBeforeStarting 2 TotalCurrency 25 FirstSpawnWarningSound xmas.jingle_noisemaker DoneWarningSound vo/mvm/norm/heavy_mvm_specialcompleted10.mp3 TFBot { Template T_TFBot_Mittens_Chief } } WaveSpawn { Name "part02_beggar" Where spawnbot_mid0 Where spawnbot_main1 TotalCount 15 MaxActive 15 SpawnCount 1 WaitForAllDead "part01" WaitBeforeStarting 12 WaitBetweenSpawns 2 TotalCurrency 25 TFBot { Template T_TFBot_Soldier_Extended_Concheror Classicon soldier_banner_trio Item "The Beggar's Bazooka" ItemAttributes { ItemName "The Beggar's Bazooka" "can overload" 0 "auto fires full clip" 0 } } } WaveSpawn { Name "part03" Where spawnbot_scattered0 Where spawnbot_main1 TotalCount 50 MaxActive 16 SpawnCount 1 WaitBetweenSpawns 0.5 WaitForAllDead "part02" WaitBeforeStarting 6 TotalCurrency 50 TFBot { Class Scout Classicon scout_shortstop Skill Expert Item "The Shortstop" } } WaveSpawn { Name "part03" Where spawnbot_scattered0 Where spawnbot_main1 TotalCount 12 MaxActive 4 SpawnCount 1 WaitBetweenSpawns 3 WaitForAllDead "part02" WaitBeforeStarting 3 TotalCurrency 50 TFBot { Class Soldier Skill Expert Attributes AlwaysCrit } } WaveSpawn { Name "part04_stranded" Where spawnbot_right0 Where spawnbot_main1 TotalCount 12 MaxActive 6 SpawnCount 1 WaitBetweenSpawns 8 WaitBeforeStarting 12 WaitForAllDead "part03" TotalCurrency 100 TFBot { Template T_TFBot_Demoman_Samurai CharacterAttributes { "cancel falling damage" 1 //prevent eventual suicide //"cannot pick up intelligence" 1 //autojump sucks at bombs } } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 WaitForAllSpawned "part03" FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup5.mp3` team = 255 }) " } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 WaitForAllSpawned "part03" FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup5.mp3` team = 255 }) " } } WaveSpawn { Name "part05" Where spawnbot_mid0 Where spawnbot_main1 TotalCount 3 MaxActive 3 SpawnCount 3 WaitForAllDead "part04" TotalCurrency 50 Squad { TFBot { Template T_TFBot_Giant_Demoman Health 3500 Classicon demo_spammer //Attributes AlwaysCrit } TFBot { Template T_TFBot_Giant_Medic_Regen_Fixed } TFBot { Template T_TFBot_Giant_Medic_Regen_Fixed } } } WaveSpawn { Name "part05" Where spawnbot_mid0 Where spawnbot_main1 TotalCount 3 MaxActive 3 SpawnCount 3 WaitForAllDead "part04" WaitBeforeStarting 10 TotalCurrency 50 Squad { TFBot { Template T_TFBot_Giant_Demoman Health 3500 Classicon demo_spammer Attributes AlwaysCrit } TFBot { Template T_TFBot_Giant_Medic_Regen_Fixed } TFBot { Template T_TFBot_Giant_Medic_Regen_Fixed } } } WaveSpawn //split because of icon order issue { Name "part05_gfans" Where spawnbot_left0 Where spawnbot_main1 TotalCount 3 MaxActive 3 SpawnCount 1 WaitForAllDead "part04" WaitBetweenSpawns 12 TotalCurrency 50 TFBot { Template T_TFBot_Giant_Scout_FAN } } WaveSpawn //moved for icon order { Name "part04" TotalCount 1 WaitForAllSpawned "part03" WaitBeforeStarting 3 TotalCurrency 100 FirstSpawnWarningSound "vehicles/tank_readyfire1.wav" FirstSpawnOutput { Target boss_spawn_relay Action Trigger } Tank { Health 25000 Speed 75 Name "sticky_tank" //Classicon tank_sticky_hellmet StartingPathTrackNode "tank_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn //moved for icon order { Name "part04" TotalCount 1 WaitForAllSpawned "part03" //WaitBeforeStarting 5 TotalCurrency 100 FirstSpawnWarningSound vehicles/tank_readyfire1.wav FirstSpawnOutput { Target boss_spawn_relay Action Trigger } Tank { Name "combattank_bomb|railgun|railgun$disablesmokestack|1" //Classicon tank_combat_railgun Health 25000 Speed 75 StartingPathTrackNode "tank_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name "tank_ai" Where spawnbot_mid0 WaitForAllSpawned "part03" WaitBeforeStarting 5 Support 1 FirstSpawnOutput { Target bignet Action RunScriptCode Param "TankExtPacked.SetValueOverrides({ COMBATTANK_MAX_RANGE = 5000 })" } } WaveSpawn //split because of icon order issue { Name "part05_gfans" Where spawnbot_left0 Where spawnbot_main1 TotalCount 3 MaxActive 3 SpawnCount 1 WaitForAllDead "part04" WaitBetweenSpawns 12 TotalCurrency 50 TFBot { Template T_TFBot_Giant_Scout_FAN } } WaveSpawn { Name "part06" Where spawnbot_scattered0 Where spawnbot_main1 TotalCount 100 MaxActive 12 SpawnCount 2 WaitBetweenSpawns 4 WaitForAllDead "part05" Support 1 TotalCurrency 100 Squad { TFBot { Template T_TFBot_Laser } TFBot { Template T_TFBot_Uber } } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 WaitForAllDead "part05" FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/cyoa_musicmoregun.mp3` team = 255 }) " } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 WaitForAllDead "part05" FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/cyoa_musicmoregun.mp3` team = 255 }) " } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 WaitForAllDead "part05" FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/cyoa_musicmoregun.mp3` team = 255 }) " } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 WaitForAllDead "part05" FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/cyoa_musicmoregun.mp3` team = 255 }) " } } WaveSpawn { Name "part06" TotalCount 1 WaitForAllDead "part05" TotalCurrency 50 FirstSpawnOutput { Target boss_spawn_relay Action Trigger } Tank { Health 40000 Speed 75 Name "jumptank" StartingPathTrackNode "tank_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } } Wave //WAVE 5 //1000$ { InitWaveOutput { Target bignet Action RunScriptCode Param " PrecacheSound(`#ui/gamestartup8.mp3`) PrecacheSound(`#ui/gamestartup2.mp3`) SetSkyboxTexture(`sky_well_01`) Convars.SetValue(`tf_forced_holiday`, 8) Convars.SetValue(`tf_airblast_cray`, 0) Convars.SetValue(`tf_allow_sliding_taunt`, 1) Convars.SetValue(`tf_bot_flag_escort_max_count`, 0) Convars.SetValue(`tf_mvm_bot_sniper_target_by_dps`, 0) Convars.SetValue(`tf_bot_suspect_spy_touch_interval`, 0) Convars.SetValue(`tf_bot_medic_start_follow_range`, 75) EntFire(`game_text_tf`,`kill`) NetProps.SetPropEntity(Entities.FindByName(null, `cap_a_trigtimer`),`m_hFilter`,Entities.FindByName(null, `filter_blue_bombhat`)) NetProps.SetPropEntity(Entities.FindByName(null, `cap_b_trigtimer`),`m_hFilter`,Entities.FindByName(null, `filter_blue_bombhat`)) IncludeScript(`tankextensions_main_packed`, getroottable()) IncludeScript(`tankextensions_packed/combattank`, getroottable()) IncludeScript(`tankextensions_packed/combattank_weapons/fireball`, getroottable()) IncludeScript(`tankextensions_packed/combattank_weapons/rocketpod`, getroottable()) IncludeScript(`tankextensions_packed/blimp`, getroottable()) IncludeScript(`tankextensions_packed/fireringtank`, getroottable()) TankExtPacked.SetValueOverrides({ COMBATTANK_MAX_RANGE = 5000 }) //1400 default TankExtPacked.AddTankIcon(3, `blimp2_lite`, `blimp*`) TankExtPacked.AddTankIcon(2, `tank_combat_dragon_fury`, `combattank*`) for (local kit; kit = Entities.FindByClassname(kit, `item_healthkit_medium`);) { NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, PrecacheModel(`models/items/medkit_medium.mdl`), 0) NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, 0, 1) NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, 0, 2) } //transition from wave 4 SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup29.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup29.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup5.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup5.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/cyoa_musicmoregun.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/cyoa_musicmoregun.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/cyoa_musicmoregun.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/cyoa_musicmoregun.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) EmitSoundEx ({ sound_name = `vehicles/v8/v8_turbo_on_loop1.wav` flags = 0x4 // SND_STOP }) //wave reset SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup8.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup8.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup2.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup2.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) " } StartWaveOutput { Target wave_start_relay_expert Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 FirstSpawnWarningSound ambient/cow2.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup8.mp3` team = 255 }) " } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 FirstSpawnWarningSound ambient/cow2.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup8.mp3` team = 255 }) " } } WaveSpawn { Name "sesame" Where spawnbot_mid0 WaitBeforeStarting 4 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " EntFire(`fancywoodgate_b`,`open`) EntFire(`gate_b_blocker`,`disable`) EntFire(`spawnbot_main_slow1`,`enable`) EntFire(`nav_interface`,`recomputeblockers`) " } } WaveSpawn { Name "gatecloser" Where spawnbot_mid0 Support 1 FirstSpawnOutput { Target cap_a Action RunScriptCode Param " MyCapTeam2 <- function() { EntFire(`fancywoodgate_b`, `Close`) EntFire(`gate_b_blocker`, `Enable`) EntFire(`spawnbot_main_slow1`, `Disable`) EntFire(`nav_interface`, `RecomputeBlockers`) } self.ConnectOutput(`OnCapTeam2`, `MyCapTeam2`) " } } WaveSpawn { Name "rodeo" Where spawnbot_mid0 TotalCount 5 MaxActive 5 SpawnCount 1 WaitBetweenSpawns 0.5 TotalCurrency 100 FirstSpawnWarningSound engineer_bucking_bronco_taunt_start DoneWarningSound engineer_bucking_bronco_taunt_yells TFBot { Template T_TFBot_Stampede Item "Tomislav" ItemAttributes { ItemName "Tomislav" "damage bonus" 1.5 } } } WaveSpawn { Name "rodeo2" Where spawnbot_mid0 WaitBeforeStarting 15 Support 1 FirstSpawnWarningSound ambient/cow2.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `engineer_bucking_bronco_taunt_yells` //additional_flags = 0x4 // SND_STOP team = 255 }) " } } WaveSpawn { Name "rodeo3" Where spawnbot_mid0 WaitBeforeStarting 15 Support 1 FirstSpawnWarningSound ambient/cow2.wav //louder FirstSpawnOutput { Target BigNet Action RunScriptCode Param " ::TAG <- `bot_cow` for (local i = 1; i <= MaxClients().tointeger(); i++) { local hEnt = PlayerInstanceFromIndex(i) if (hEnt && hEnt.IsAlive() && hEnt.IsBotOfType(1337) && hEnt.HasBotTag(TAG)) { hEnt.RemoveCondEx(19, true) hEnt.RemoveCondEx(41, true) } } " } } WaveSpawn { Name "heavygatefixer" Where spawnbot_mid0 Support 1 FirstSpawnOutput { Target cap_b Action AddOutput Param "OnCapTeam2 tf_wearableRunScriptCodeif(startswith(self.GetModelName(),`models/bots/gameplay_cosmetic/light_`)){NetProps.SetPropInt(self,`m_nModelIndexOverrides`,PrecacheModel(format(`%s_off.mdl`,self.GetModelName().slice(0,-7))))}0-1" } } WaveSpawn { Name "part01" Where spawnbot_mid0 Where spawnbot_main1 TotalCount 1 MaxActive 1 SpawnCount 1 WaitForAllDead "rodeo" TotalCurrency 34 TFBot { Template T_TFBot_Giant_Heavyweapons_Shotgun MaxVisionRange -1 //infinite Attributes BulletImmune Attributes AlwaysCrit } } WaveSpawn { Name "part01" Where spawnbot_mid0 Where spawnbot_main1 TotalCount 7 MaxActive 7 SpawnCount 7 WaitForAllDead "rodeo" WaitBeforeStarting 3 TotalCurrency 33 Squad { TFBot { Template T_TFBot_Giant_Heavyweapons_Shotgun MaxVisionRange -1 //infinite Attributes BlastImmune //Attributes AlwaysCrit } TFBot { Template T_TFBot_Uber } TFBot { Template T_TFBot_Uber } TFBot { Template T_TFBot_Uber } TFBot { Template T_TFBot_Uber } TFBot { Template T_TFBot_Uber } TFBot { Template T_TFBot_Uber } } } WaveSpawn { Name "part01" Where spawnbot_mid0 Where spawnbot_main1 TotalCount 7 MaxActive 7 SpawnCount 7 WaitForAllDead "rodeo" WaitBeforeStarting 6 TotalCurrency 33 Squad { TFBot { Template T_TFBot_Giant_Heavyweapons_Shotgun MaxVisionRange -1 //infinite Attributes FireImmune //Attributes AlwaysCrit } TFBot { Template T_TFBot_Uber } TFBot { Template T_TFBot_Uber } TFBot { Template T_TFBot_Uber } TFBot { Template T_TFBot_Uber } TFBot { Template T_TFBot_Uber } TFBot { Template T_TFBot_Uber } } } WaveSpawn { Name "part02" Where spawnbot_left0 Where spawnbot_main1 TotalCount 24 MaxActive 8 SpawnCount 2 WaitBetweenSpawns 3 WaitBeforeStarting 3 WaitForAllDead "part01" TotalCurrency 100 Squad { TFBot { Class HeavyWeapons EventChangeAttributes { Default { Skill Expert Item "MvM Gatebot Light Heavy" //GATE Attributes IgnoreFlag Attributes DisableDodge Tag bot_gatebot BehaviorModifiers Push //GATE } RevertGateBotsBehavior { Skill Easy ItemAttributes { ItemName "MvM Gatebot Light Heavy" "item style override" 1 } } } } TFBot { Template T_TFBot_Bigheal } } } WaveSpawn { Name "part02" Where spawnbot_mid0 Where spawnbot_main1 TotalCount 50 MaxActive 12 SpawnCount 3 WaitBetweenSpawns 2 WaitForAllDead "part01" TotalCurrency 100 Squad { TFBot { Class Demoman Skill Expert Item "The Chargin' Targe" Attributes AlwaysCrit } TFBot { Class Demoman Skill Expert Item "The Chargin' Targe" } TFBot { Class Demoman Skill Expert Item "The Chargin' Targe" } } } WaveSpawn { Name "part02" Where spawnbot_mid0 Where spawnbot_main1 TotalCount 6 MaxActive 2 SpawnCount 1 WaitBetweenSpawns 10 WaitForAllDead "part01" TotalCurrency 50 TFBot //had to rewrite it because we can't remove targe otherwise { Class Demoman ClassIcon demoknight_skullcutter_lite Name "Giant Demoknight" Skill Expert Health 3500 Item "Prince Tavish's Crown" Item "The Tide Turner" Item "The Scotsman's Skullcutter" Item "Ali Baba's Wee Booties" WeaponRestrictions MeleeOnly Attributes MiniBoss ItemAttributes { ItemName "The Scotsman's Skullcutter" "critboost on kill" 3 } ItemAttributes { ItemName "The Tide Turner" "lose demo charge on damage when charging" 0 //remove horrible valve nerf } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } } } WaveSpawn { Name "part03" Where spawnbot_right0 Where spawnbot_main1 TotalCount 50 MaxActive 15 SpawnCount 1 WaitForAllDead "part02" WaitBetweenSpawns 1.5 WaitBeforeStarting 12 TotalCurrency 100 DoneWarningSound items/bomb_warning.wav //danger incoming TFBot { Class Pyro Name "Incineratron" //Crematron Classicon pyro_gas Skill Expert Item "Industrial Insurgent" Item "The Unknown Warrior" Item "The Degreaser" Item "The Gas Passer" WeaponRestrictions SecondaryOnly ItemAttributes { ItemName "The Gas Passer" "mult_item_meter_charge_rate" 0.25 "weapon burn dmg increased" 2 //double afterburn } ItemAttributes { ItemName "The Unknown Warrior" "set item tint rgb" 10843461 } } } WaveSpawn { Name "part03" Where spawnbot_left0 Where spawnbot_main1 TotalCount 12 MaxActive 6 SpawnCount 2 WaitBetweenSpawns 8 WaitForAllDead "part02" TotalCurrency 50 DoneWarningSound items/bomb_warning.wav //danger incoming TFBot { Template T_TFBot_Giant_Soldier_Crit Health 4000 } } WaveSpawn { Name "part04" Where spawnbot_mid0 Where spawnbot_main1 TotalCount 1 MaxActive 1 SpawnCount 1 WaitForAllDead "part03" WaitBeforeStarting 2 TotalCurrency 50 FirstSpawnWarningSound vo/mvm/norm/heavy_mvm_laughhappy05.mp3 DoneWarningSound vo/mvm/norm/heavy_mvm_jeers04.mp3 TFBot { Template T_TFBot_Steel_Chief } } WaveSpawn { Name "music" Where spawnbot_mid0 WaitForAllDead "part03" Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup2.mp3` //additional_flags = 0x4 // SND_STOP team = 255 }) " } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 WaitForAllDead "part03" FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup2.mp3` //additional_flags = 0x4 // SND_STOP team = 255 }) " } } WaveSpawn //icon precacher { Support 1 Squad { TFBot { Classicon tank_combat_dragon_fury } } } WaveSpawn //icon precacher { Support 1 Squad { TFBot { Classicon blimp2_lite } } } WaveSpawn //moved for icon order { Name "part03" TotalCount 1 WaitForAllDead "part02" TotalCurrency 100 FirstSpawnOutput { Target boss_spawn_relay Action Trigger } FirstSpawnWarningSound vehicles/tank_readyfire1.wav DoneWarningSound items/bomb_warning.wav //danger incoming Tank { Name "combattank_nolaser_bomb|fireball|fireball" //Classicon tank_combat_dragon_fury Health 30000 Speed 75 StartingPathTrackNode "tank_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name "part05" Where spawnbot_left0 Where spawnbot_main1 TotalCount 50 MaxActive 12 SpawnCount 2 WaitForAllDead "part04" WaitBeforeStarting 12 WaitBetweenSpawns 12 Support 1 TotalCurrency 50 DoneOutput { Target bignet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup2.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup2.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) " } TFBot { Template T_TFBot_Giant_Pyro Health 3500 Classicon pyro_dragon_fury_swordstone Item "The Dragon's Fury" MaxVisionRange 1000 ItemAttributes { ItemName "The Dragon's Fury" "damage bonus" 1.5 } } } WaveSpawn { Name "tank_speed" Where spawnbot_mid0 WaitForAllSpawned "part05_tank" WaitBeforeStarting 144 Support 1 FirstSpawnWarningSound vehicles/airboat/fan_motor_shut_off1.wav FirstSpawnOutput { Target combattank_nolaser|fireball|rocketpod_homing^fireringtank Action setspeed Param 0 } } WaveSpawn //louder { Name "tank_speed" Where spawnbot_mid0 WaitForAllSpawned "part05_tank" WaitBeforeStarting 144 Support 1 FirstSpawnWarningSound vehicles/airboat/fan_motor_shut_off1.wav } WaveSpawn { Name "part05_tank" TotalCount 1 WaitForAllDead "part04" WaitBeforeStarting 4 TotalCurrency 100 FirstSpawnOutput { Target boss_spawn_relay Action Trigger } FirstSpawnWarningSound vehicles/tank_readyfire1.wav Tank { Name "combattank_nolaser|fireball|rocketpod_homing^fireringtank" //Classicon tank_combat_dragon_fury Health 30000 Speed 75 StartingPathTrackNode "tank_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn //moved for icon order { Name "part04_blimp1" TotalCount 2 MaxActive 2 SpawnCount 1 WaitForAllDead "part03" WaitBeforeStarting 4 WaitBetweenSpawns 30 TotalCurrency 66 FirstSpawnOutput { Target boss_spawn_relay Action Trigger } Tank { Health 10000 Speed 75 Name "blimp_customparticles$engineloopsound|npc/combine_gunship/dropship_engine_distant_loop1.wav^pingsound|npc/combine_gunship/ping_search.wav" //Classicon blimp2_lite StartingPathTrackNode "path_blimp_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn //moved for icon order { Name "part04_blimp2" TotalCount 1 MaxActive 1 SpawnCount 1 WaitForAllSpawned "part04_blimp1" WaitBeforeStarting 30 TotalCurrency 34 FirstSpawnOutput { Target boss_spawn_relay Action Trigger } Tank { Health 10000 Speed 75 Skin 1 Name "blimp_customparticles$engineloopsound|npc/combine_gunship/dropship_engine_distant_loop1.wav^pingsound|npc/combine_gunship/ping_search.wav" //Classicon blimp2_lite StartingPathTrackNode "path_blimp_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name "part04_spy" Where spawnbot_left0 TotalCount 20 //30 MaxActive 10 SpawnCount 10 WaitForAllDead "part03" WaitBetweenSpawns 30 WaitBeforeStarting 12 TotalCurrency 0 Support limited RandomChoice //trick to hide icon { RandomChoice //trick to hide icon { TFBot { Template T_TFBot_Spy_High } } } } } Wave //WAVE 6 //1000$ { InitWaveOutput { Target bignet Action RunScriptCode Param " PrecacheSound(`#ui/gamestartup17.mp3`) PrecacheSound(`vehicles/v8/v8_turbo_on_loop1.wav`) SetSkyboxTexture(`sky_badlands_01`) Convars.SetValue(`tf_forced_holiday`, 8) Convars.SetValue(`tf_airblast_cray`, 0) Convars.SetValue(`tf_allow_sliding_taunt`, 1) Convars.SetValue(`tf_bot_flag_escort_max_count`, 0) Convars.SetValue(`tf_mvm_bot_sniper_target_by_dps`, 0) Convars.SetValue(`tf_bot_suspect_spy_touch_interval`, 0) Convars.SetValue(`tf_bot_medic_start_follow_range`, 75) EntFire(`game_text_tf`,`kill`) NetProps.SetPropEntity(Entities.FindByName(null, `cap_a_trigtimer`),`m_hFilter`,Entities.FindByName(null, `filter_blue_bombhat`)) NetProps.SetPropEntity(Entities.FindByName(null, `cap_b_trigtimer`),`m_hFilter`,Entities.FindByName(null, `filter_blue_bombhat`)) ClientPrint(null, 3, `\x0799CCFFYou must \x07F5E042avoid, dodge \x0799CCFFor \x07F5E042distract \x0799CCFFthe invincible \x07F5E042sniper \x0799CCFFin this wave`) IncludeScript(`tankextensions_main_packed`, getroottable()) IncludeScript(`tankextensions_packed/combattank`, getroottable()) IncludeScript(`tankextensions_packed/combattank_weapons/minigun`, getroottable()) IncludeScript(`tankextensions_packed/combattank_weapons/rocketpod`, getroottable()) IncludeScript(`tankextensions_packed/blimp`, getroottable()) IncludeScript(`tankextensions_packed/helicopter`, getroottable()) TankExtPacked.SetValueOverrides({ HELICOPTER_MAX_RANGE = 5000 }) TankExtPacked.SetValueOverrides({ COMBATTANK_MAX_RANGE = 1 }) //don't shoot early TankExtPacked.SetValueOverrides({ HELICOPTER_ROCKET_PARTICLE_TRAIL = `critical_rocket_blue` }) TankExtPacked.AddTankIcon(2, `blimp2_lite`, `blimp*`) TankExtPacked.AddTankIcon(1, `helicopter_blue_nys_nomiplod`, `helicopter_crit_customparticles`, null, MVM_CLASS_FLAG_NORMAL | MVM_CLASS_FLAG_MINIBOSS | MVM_CLASS_FLAG_ALWAYSCRIT) for (local kit; kit = Entities.FindByClassname(kit, `item_healthkit_medium`);) { NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, PrecacheModel(`models/items/medkit_medium.mdl`), 0) NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, 0, 1) NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, 0, 2) } //transition from wave 5 SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup8.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup8.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup2.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup2.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) EmitSoundEx ({ sound_name = `vehicles/v8/v8_turbo_on_loop1.wav` flags = 0x4 // SND_STOP }) //wave reset SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) " } StartWaveOutput { Target wave_start_relay_expert Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 FirstSpawnWarningSound ambient/cow3.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` team = 255 }) " } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 FirstSpawnWarningSound ambient/cow3.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` team = 255 }) " } } WaveSpawn { Name "music2" Where spawnbot_mid0 WaitBeforeStarting 107 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` team = 255 }) " } } WaveSpawn { Name "music2" Where spawnbot_mid0 WaitBeforeStarting 107 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` team = 255 }) " } } WaveSpawn { Name "music3" Where spawnbot_mid0 WaitBeforeStarting 214 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` team = 255 }) " } } WaveSpawn { Name "music3" Where spawnbot_mid0 WaitBeforeStarting 214 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` team = 255 }) " } } WaveSpawn { Name "music4" Where spawnbot_mid0 WaitBeforeStarting 321 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` team = 255 }) " } } WaveSpawn { Name "music4" Where spawnbot_mid0 WaitBeforeStarting 321 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` team = 255 }) " } } WaveSpawn { Name "music5" Where spawnbot_mid0 WaitBeforeStarting 428 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` team = 255 }) " } } WaveSpawn { Name "music5" Where spawnbot_mid0 WaitBeforeStarting 428 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` team = 255 }) " } } WaveSpawn { Name "sesame" Where spawnbot_mid0 WaitBeforeStarting 4 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " EntFire(`fancywoodgate_b`,`open`) EntFire(`gate_b_blocker`,`disable`) EntFire(`spawnbot_main_slow1`,`enable`) EntFire(`nav_interface`,`recomputeblockers`) " } } WaveSpawn { Name "gatecloser" Where spawnbot_mid0 Support 1 FirstSpawnOutput { Target cap_a Action RunScriptCode Param " MyCapTeam2 <- function() { EntFire(`fancywoodgate_b`, `Close`) EntFire(`gate_b_blocker`, `Enable`) EntFire(`spawnbot_main_slow1`, `Disable`) EntFire(`nav_interface`, `RecomputeBlockers`) } self.ConnectOutput(`OnCapTeam2`, `MyCapTeam2`) " } } WaveSpawn { Name "vscript" Where spawnbot_mid0 Support 1 WaitBeforeStarting 63 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " ::TAG3 <- `bot_outline` for (local i = 1; i <= MaxClients().tointeger(); i++) { local hEnt = PlayerInstanceFromIndex(i) if (hEnt && hEnt.IsAlive() && hEnt.IsBotOfType(1337) && hEnt.HasBotTag(TAG3)) { NetProps.SetPropInt(hEnt, `m_bGlowEnabled`, 1) } } " } } WaveSpawn { Name "gatebot_boy" FirstSpawnOutput { Target BigNet Action RunScriptCode Param " ::BoltBoyHook <- { function CleanUp() { delete ::BoltBoyHook; } function OnGameEvent_recalculate_holidays(params) { CleanUp(); } function OnGameEvent_mvm_wave_complete(params) { CleanUp(); } function OnGameEvent_player_spawn(params) { local player = GetPlayerFromUserID(params.userid); if (player == null || !player.IsValid() || !player.IsBotOfType(TF_BOT_TYPE)) { return; } player.TerminateScriptScope(); NetProps.SetPropString(player, `m_iszScriptThinkFunction`, ``); AddThinkToEnt(player, null); EntFireByHandle(player, `RunScriptCode`, `BoltBoyHook.TagCheck(self)`, -1, null, null); } function TagCheck(player) { if (player.HasBotTag(`customgate`)) { local weapon = Entities.CreateByClassname(`tf_weapon_parachute`) NetProps.SetPropInt(weapon, `m_AttributeManager.m_Item.m_iItemDefinitionIndex`, 1101); NetProps.SetPropBool(weapon, `m_AttributeManager.m_Item.m_bInitialized`, true); weapon.SetTeam(player.GetTeam()); weapon.DispatchSpawn(); player.Weapon_Equip(weapon); local wearable = NetProps.GetPropEntity(weapon, `m_hExtraWearable`); weapon.Kill(); NetProps.SetPropInt(wearable, `m_AttributeManager.m_Item.m_iItemDefinitionIndex`, 451); NetProps.SetPropBool(wearable, `m_AttributeManager.m_Item.m_bInitialized`, true); NetProps.SetPropBool(wearable, `m_bValidatedAttachedEntity`, true); wearable.DispatchSpawn(); wearable.SetModelSimple(`models/bots/gameplay_cosmetic/light_bonk_mask.mdl`); } } } __CollectGameEventCallbacks(BoltBoyHook); PrecacheModel(`models/bots/gameplay_cosmetic/light_bonk_mask.mdl`); " } } WaveSpawn { Name "rodeo" Where spawnbot_mid0 TotalCount 6 MaxActive 6 SpawnCount 1 WaitBetweenSpawns 0.5 TotalCurrency 100 FirstSpawnWarningSound engineer_bucking_bronco_taunt_start DoneWarningSound engineer_bucking_bronco_taunt_yells TFBot { Template T_TFBot_Stampede Item "Deflector" ItemAttributes { ItemName "Deflector" "damage bonus" 1.5 "attack projectiles" 2 } } } WaveSpawn { Name "rodeo2" Where spawnbot_mid0 WaitBeforeStarting 15 Support 1 FirstSpawnWarningSound ambient/cow3.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `engineer_bucking_bronco_taunt_yells` team = 255 }) " } } WaveSpawn { Name "rodeo3" Where spawnbot_mid0 WaitBeforeStarting 15 Support 1 FirstSpawnWarningSound ambient/cow3.wav //louder FirstSpawnOutput { Target BigNet Action RunScriptCode Param " ::TAG <- `bot_cow` for (local i = 1; i <= MaxClients().tointeger(); i++) { local hEnt = PlayerInstanceFromIndex(i) if (hEnt && hEnt.IsAlive() && hEnt.IsBotOfType(1337) && hEnt.HasBotTag(TAG)) { hEnt.RemoveCondEx(19, true) hEnt.RemoveCondEx(41, true) } } " } } WaveSpawn { Name "honk" Where spawnbot_mid0 WaitForAllDead "rodeo" WaitBeforeStarting 2 Support 1 FirstSpawnWarningSound ambient/alarms/train_horn_distant1.wav } WaveSpawn { Name "honk" Where spawnbot_mid0 WaitForAllDead "rodeo" WaitBeforeStarting 2 Support 1 FirstSpawnWarningSound ambient/alarms/train_horn_distant1.wav } WaveSpawn { Name "honk" Where spawnbot_mid0 WaitForAllDead "rodeo" WaitBeforeStarting 2 Support 1 FirstSpawnWarningSound ambient/alarms/train_horn_distant1.wav } WaveSpawn { Name "honk" Where spawnbot_mid0 WaitForAllDead "rodeo" WaitBeforeStarting 5 Support 1 FirstSpawnWarningSound ambient/alarms/train_horn_distant1.wav } WaveSpawn { Name "honk" Where spawnbot_mid0 WaitForAllDead "rodeo" WaitBeforeStarting 5 Support 1 FirstSpawnWarningSound ambient/alarms/train_horn_distant1.wav } WaveSpawn { Name "honk" Where spawnbot_mid0 WaitForAllDead "rodeo" WaitBeforeStarting 5 Support 1 FirstSpawnWarningSound ambient/alarms/train_horn_distant1.wav } //part02 has been removed WaveSpawn { Name "part03_ss" Where spawnbot_left0 Where spawnbot_main1 TotalCount 12 MaxActive 3 SpawnCount 3 WaitForAllDead "part01" WaitBeforeStarting 6 WaitBetweenSpawns 30 TotalCurrency 50 TFBot //rewritten valve super scout { Class Scout Classicon scout_giant_fast Name "Super Scout" Health 1200 EventChangeAttributes { Default { Skill Easy Tag nav_prefer_gate1_flank Item "The Holy Mackerel" WeaponRestrictions MeleeOnly Attributes MiniBoss Attributes AlwaysCrit Attributes DisableDodge CharacterAttributes { "move speed bonus" 2 "damage force reduction" 0.7 "airblast vulnerability multiplier" 0.7 "override footstep sound set" 5 } //GATE Attributes IgnoreFlag Tag bot_gatebot Tag bot_giant //prevent gatestun Tag customgate //custom hat BehaviorModifiers Push //GATE } RevertGateBotsBehavior { Skill Easy Item "The Holy Mackerel" WeaponRestrictions MeleeOnly Attributes MiniBoss //Attributes AlwaysCrit //removing crits doesn't work Attributes DisableDodge CharacterAttributes { "move speed bonus" 2 "damage force reduction" 0.7 "airblast vulnerability multiplier" 0.7 "override footstep sound set" 5 } Item "Bonk Boy" ItemAttributes { ItemName "Bonk Boy" "set item tint rgb" 8289918 } } } } } WaveSpawn //moved for icon order { Name "part03_hvy" Where spawnbot_right0 Where spawnbot_main1 TotalCount 24 MaxActive 6 SpawnCount 2 WaitBetweenSpawns 3 WaitForAllDead "part01" TotalCurrency 50 Squad { TFBot //taken from mannslaughter { Class Heavyweapons Name "Deflector Heavy" ClassIcon heavy_deflector Skill Hard Item "The U-clank-a" Item "Deflector" Attributes AlwaysCrit WeaponRestrictions PrimaryOnly MaxVisionRange 1200 ItemAttributes { ItemName "Deflector" "attack projectiles" 2 "damage bonus" 1.5 //new } } TFBot { Template T_TFBot_Uber } } } WaveSpawn { Name "part03" Where spawnbot_scattered0 Where spawnbot_main1 TotalCount 50 MaxActive 16 SpawnCount 4 WaitBetweenSpawns 2 WaitForAllDead "part01" TotalCurrency 50 TFBot { Template T_TFBot_Miner } } WaveSpawn { Name "part04" Where spawnbot_right0 Where spawnbot_main1 TotalCount 12 MaxActive 6 SpawnCount 2 WaitBetweenSpawns 6 WaitForAllSpawned "part03" TotalCurrency 150 Squad { TFBot { Template T_TFBot_Miner_Giant } TFBot { Template T_TFBot_Shield_Large } } } WaveSpawn { Name "part04_fan" //Where spawnbot_scattered0 Where spawnbot_main_slow1 //RandomSpawn 1 TotalCount 100 MaxActive 16 SpawnCount 4 WaitForAllSpawned "part03" TotalCurrency 100 TFBot //base valve fan with 1 hp and maximum move speed { Class Scout Skill Expert ClassIcon scout_fan Name "Motorist" MaxVisionRange 500 Item "The Force-a-Nature" ItemAttributes { ItemName "The Force-a-Nature" "faster reload rate" 1.6 "scattergun knockback mult" 1.5 "damage bonus" 0.65 } Item "Death Racer's Helmet" Item "Fuel Injector" Item "Herzensbrecher" //Item "Kriegsmaschine-9000" Attributes AlwaysCrit Health 1 //quirk for weak arms CharacterAttributes { "move speed bonus" 2 "rage giving scale" 100 //fill up weapons instantly } } } WaveSpawn { Name "part05" Where spawnbot_mid0 Where spawnbot_main1 TotalCount 6 MaxActive 6 SpawnCount 3 WaitBetweenSpawns 12 WaitForAllSpawned "part04" WaitBeforeStarting 30 TotalCurrency 50 Squad { TFBot { Template T_TFBot_Soldier_BurstFire Health 4000 } TFBot { Template T_TFBot_Giant_Medic_Fixed } TFBot { Template T_TFBot_Giant_Medic_Fixed } } } WaveSpawn { Name "part01" TotalCount 1 MaxActive 1 SpawnCount 1 WaitForAllDead "rodeo" WaitBeforeStarting 17 WaitBetweenSpawns 3.5 TotalCurrency 100 FirstSpawnOutput { Target boss_spawn_relay Action Trigger } Tank { Health 10000 Speed 75 Skin 0 Name "blimp$engineloopsound|npc/combine_gunship/dropship_engine_distant_loop1.wav^pingsound|npc/combine_gunship/ping_search.wav" //Classicon blimp2_lite StartingPathTrackNode "path_blimp_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name "part01" TotalCount 1 MaxActive 1 SpawnCount 1 WaitForAllDead "rodeo" WaitBeforeStarting 20.5 TotalCurrency 100 FirstSpawnOutput { Target boss_spawn_relay Action Trigger } Tank { Health 10000 Speed 75 Skin 0 Name "blimp_customparticles$engineloopsound|npc/combine_gunship/dropship_engine_distant_loop1.wav^pingsound|npc/combine_gunship/ping_search.wav" //Classicon blimp2_lite StartingPathTrackNode "path_blimp_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn //moved for icon order { Name "part01" TotalCount 1 WaitForAllDead "rodeo" WaitBeforeStarting 5 TotalCurrency 50 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " for (local chopper; chopper = Entities.FindByModel(chopper, `models/bots/boss_helicopter/boss_helicopter.mdl`);) { chopper.SetModelScale(0.65,0.0) } EntFire(`boss_spawn_relay`,`Trigger`) " Delay 0.1 } Tank { Health 11000 //extra hp for lift-off sequence Speed 75 Skin 1 Name "helicopter_crit_customparticles" //Classicon helicopter_blue_nys_nomiplod StartingPathTrackNode "path_blimp_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name "part01" TotalCount 1 WaitForAllDead "rodeo" WaitBeforeStarting 20 TotalCurrency 50 FirstSpawnOutput { Target boss_spawn_relay Action Trigger } FirstSpawnWarningSound ambient/alarms/razortrain_horn1.wav LastSpawnWarningSound ambient/alarms/razortrain_horn1.wav Tank { Name "combattank_bomb_nolaser|minigun|minigun$disablesmokestack|1" //Classicon tank_combat_minigun Health 20000 Speed 75 StartingPathTrackNode "tank_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name "tank_ai" Where spawnbot_mid0 WaitForAllDead "rodeo" WaitBeforeStarting 24 Support 1 FirstSpawnOutput { Target bignet Action RunScriptCode Param "TankExtPacked.SetValueOverrides({ COMBATTANK_MAX_RANGE = 5000 })" } } WaveSpawn { Name "part01" TotalCount 2 MaxActive 2 SpawnCount 1 WaitForAllDead "rodeo" WaitBeforeStarting 23 WaitBetweenSpawns 3 TotalCurrency 50 FirstSpawnOutput { Target boss_spawn_relay Action Trigger } FirstSpawnWarningSound ambient/machines/train_rumble.wav Tank { Name "tank$disablesmokestack|1" Health 10000 Speed 75 StartingPathTrackNode "tank_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name "part01" TotalCount 1 WaitForAllDead "rodeo" WaitBeforeStarting 29 TotalCurrency 50 FirstSpawnOutput { Target boss_spawn_relay Action Trigger } FirstSpawnWarningSound ambient/machines/train_rumble.wav Tank { Name "combattank_bomb_nolaser|rocketpod|rocketpod_homing" //Classicon tank_combat_rocket Health 20000 Speed 75 StartingPathTrackNode "tank_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name "part05_tank" TotalCount 1 WaitForAllSpawned "part05" WaitBeforeStarting 45 TotalCurrency 50 FirstSpawnWarningSound ambient/alarms/train_horn2.wav FirstSpawnOutput { Target boss_spawn_relay Action Trigger } DoneOutput { Target BigNet Action RunScriptCode Param " EmitSoundEx( { sound_name = `vehicles/v8/v8_turbo_on_loop1.wav` flags = 0x4 // SND_STOP }) " } Tank { Health 20000 Speed 400 Skin 1 Name "speedytank" StartingPathTrackNode "tank_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name "tank_sound" Support 1 WaitForAllSpawned "part05" WaitBeforeStarting 45 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " EmitSoundEx( { sound_name = `vehicles/v8/v8_turbo_on_loop1.wav` }) " } } } Wave //WAVE 7 1000$ { InitWaveOutput { Target bignet Action RunScriptCode Param " PrecacheSound(`#ui/gamestartup15.mp3`) SetSkyboxTexture(`sky_gravel_01`) Convars.SetValue(`tf_forced_holiday`, 8) Convars.SetValue(`tf_airblast_cray`, 0) Convars.SetValue(`tf_allow_sliding_taunt`, 1) Convars.SetValue(`tf_bot_flag_escort_max_count`, 0) Convars.SetValue(`tf_mvm_bot_sniper_target_by_dps`, 0) Convars.SetValue(`tf_bot_suspect_spy_touch_interval`, 0) Convars.SetValue(`tf_bot_medic_start_follow_range`, 75) EntFire(`game_text_tf`,`kill`) NetProps.SetPropEntity(Entities.FindByName(null, `cap_a_trigtimer`),`m_hFilter`,Entities.FindByName(null, `filter_blue_bombhat`)) NetProps.SetPropEntity(Entities.FindByName(null, `cap_b_trigtimer`),`m_hFilter`,Entities.FindByName(null, `filter_blue_bombhat`)) ClientPrint(null, 3, `\x0799CCFFKeep the \x07F5E042medics \x0799CCFFseparated from their boss using any \x07F5E042knockback`) IncludeScript(`tankextensions_main_packed`, getroottable()) IncludeScript(`tankextensions_packed/ubertank`, getroottable()) TankExtPacked.AddTankIcon(1, `tank_uber_lite`, `ubertank|0|999^tankexplosion`) TankExtPacked.SetValueOverrides({ UBERTANK_SND_UBER = `mvm/mvm_tank_start.wav` }) for (local kit; kit = Entities.FindByClassname(kit, `item_healthkit_medium`);) { NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, PrecacheModel(`models/items/medkit_medium.mdl`), 0) NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, 0, 1) NetProps.SetPropIntArray(kit, `m_nModelIndexOverrides`, 0, 2) } //transition from wave 6 SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup17.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) EmitSoundEx ({ sound_name = `vehicles/v8/v8_turbo_on_loop1.wav` flags = 0x4 // SND_STOP }) //wave reset SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup15.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup15.mp3` additional_flags = 0x4 // SND_STOP team = 255 }) " } StartWaveOutput { Target wave_start_relay_expert Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name "exploding_tank" FirstSpawnOutput { Target BigNet Action RunScriptCode Param " //local custom_rocket = `models/bots/boss_bot/combat_tank_mk2/mk2_rocket_dumbfire.mdl`; local custom_rocket = `models/buildables/sentry3_rockets.mdl`; local custom_rocket_index = PrecacheModel(custom_rocket); ::Think_CustomRocket <- function() { for (local ent; ent = Entities.FindByClassname(ent, `tf_projectile_rocket`);) { if (ent.GetOwner() != self || NetProps.GetPropInt(ent, `m_nModelIndex`) == custom_rocket_index) continue NetProps.SetPropString(ent, `m_ModelName`, custom_rocket) NetProps.SetPropInt(ent, `m_nModelIndex`, custom_rocket_index) ent.SetSequence(1) local particle = Entities.CreateByClassname( `trigger_particle` ) particle.KeyValueFromString( `particle_name`, `flaming_arrow` ) particle.KeyValueFromInt( `attachment_type`, 1 ) particle.KeyValueFromInt( `spawnflags`, 64 ) particle.AcceptInput( `StartTouch`, `!activator`, ent, ent ) particle.Kill() //local particle2 = Entities.CreateByClassname( `trigger_particle` ) //particle2.KeyValueFromString( `particle_name`, `rockettrail` ) //particle2.KeyValueFromInt( `attachment_type`, 1 ) //particle2.KeyValueFromInt( `spawnflags`, 64 ) //particle2.AcceptInput( `StartTouch`, `!activator`, ent, ent ) //particle2.Kill() } return -1 } ::CALLBACKS <- {} ::CALLBACKS.OnGameEvent_player_spawn <- function( params ) { local bot = GetPlayerFromUserID( params.userid ) if ( params.team != 3 || !bot.IsBotOfType( 1337 ) ) return EntFireByHandle( bot, `RunScriptCode`, `if ( self.HasBotTag( \`customrocket\` ) ) AddThinkToEnt( self, \`Think_CustomRocket\` )`, -1, null, null ) } ::CALLBACKS.OnGameEvent_player_death <- function( params ) { local player = GetPlayerFromUserID( params.userid ) if ( !player.IsBotOfType( 1337 ) ) return AddThinkToEnt( player, null ) } __CollectGameEventCallbacks( ::CALLBACKS ) TankExtPacked.NewTankType(`tankexplosion`, { function OnDeath() { local flDamage = 600 * 2 local flRange = Convars.GetFloat(`tf_bot_suicide_bomb_range`) * 2 local vecOrigin = self.GetOrigin() local vecCenter = self.GetCenter() DispatchParticleEffect(`explosionTrail_seeds_mvm`, vecOrigin, Vector(1)) DispatchParticleEffect(`fluidSmokeExpl_ring_mvm`, vecOrigin, Vector(1)) ScreenShake(vecOrigin, 25, 5, 5, 1000, SHAKE_START, false) local EntityArray = [] foreach(sClassname in [`player`, `obj_sentrygun`, `obj_dispenser`, `obj_teleporter`]) for(local hEnt; hEnt = FindByClassnameWithin(hEnt, sClassname, vecOrigin, flRange);) EntityArray.append(hEnt) foreach(hEnt in EntityArray) if(hEnt.IsAlive()) { local vecEntCenter = hEnt.GetCenter() local Trace = { start = vecCenter end = vecEntCenter mask = MASK_SOLID_BRUSHONLY startsolid = false allsolid = false } TraceLineEx(Trace) if(!(Trace.fraction < 1 || Trace.allsolid || Trace.startsolid)) { if(hEnt.IsPlayer()) ScreenFade(hEnt, 255, 255, 255, 255, 1, 0.1, FFADE_IN) hEnt.TakeDamageEx(First(), null, null, Vector(), Vector(), flDamage, DMG_BLAST) } } } }) " } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 FirstSpawnWarningSound ambient/cow1.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup15.mp3` team = 255 }) " } } WaveSpawn { Name "music" Where spawnbot_mid0 Support 1 FirstSpawnWarningSound ambient/cow1.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `#ui/gamestartup15.mp3` team = 255 }) " } } WaveSpawn { Name "sesame" Where spawnbot_mid0 WaitBeforeStarting 4 Support 1 FirstSpawnOutput { Target BigNet Action RunScriptCode Param " EntFire(`fancywoodgate_b`,`open`) EntFire(`gate_b_blocker`,`disable`) EntFire(`spawnbot_main_slow1`,`enable`) EntFire(`nav_interface`,`recomputeblockers`) " } } WaveSpawn { Name "gatecloser" Where spawnbot_mid0 Support 1 FirstSpawnOutput { Target cap_a Action RunScriptCode Param " MyCapTeam2 <- function() { EntFire(`fancywoodgate_b`, `Close`) EntFire(`gate_b_blocker`, `Enable`) EntFire(`spawnbot_main_slow1`, `Disable`) EntFire(`nav_interface`, `RecomputeBlockers`) } self.ConnectOutput(`OnCapTeam2`, `MyCapTeam2`) " } } WaveSpawn { Name "rodeo" Where spawnbot_mid0 TotalCount 7 MaxActive 7 SpawnCount 1 WaitBetweenSpawns 0.5 TotalCurrency 200 FirstSpawnWarningSound engineer_bucking_bronco_taunt_start DoneWarningSound engineer_bucking_bronco_taunt_yells TFBot { Template T_TFBot_Stampede Item "teufort_minigun_warroom" ItemAttributes { ItemName "teufort_minigun_warroom" "override projectile type" 5 "fire rate bonus" 0.25 "damage bonus" 2 "dmg pierces resists absorbs" 1 "particle effect use head origin" 1 "particle effect vertical offset" -1000 "projectile spread angle penalty" 15 } ItemAttributes { ItemName "The Necroprancer" "item style override" 0 "set item tint rgb" 15185211 "attach particle effect" 3163 } //GATE Attributes IgnoreFlag Attributes DisableDodge Tag bot_gatebot Tag bot_giant //prevent gatestun BehaviorModifiers Push //GATE } } WaveSpawn { Name "rodeo2" Where spawnbot_mid0 WaitBeforeStarting 15 Support 1 FirstSpawnWarningSound ambient/cow1.wav FirstSpawnOutput { Target BigNet Action RunScriptCode Param " SendGlobalGameEvent(`teamplay_broadcast_audio`, { sound = `engineer_bucking_bronco_taunt_yells` team = 255 }) " } } WaveSpawn { Name "rodeo3" Where spawnbot_mid0 WaitBeforeStarting 15 Support 1 FirstSpawnWarningSound ambient/cow1.wav //louder FirstSpawnOutput { Target BigNet Action RunScriptCode Param " ::TAG <- `bot_cow` for (local i = 1; i <= MaxClients().tointeger(); i++) { local hEnt = PlayerInstanceFromIndex(i) if (hEnt && hEnt.IsAlive() && hEnt.IsBotOfType(1337) && hEnt.HasBotTag(TAG)) { hEnt.RemoveCondEx(19, true) hEnt.RemoveCondEx(41, true) } } " } } WaveSpawn { Name "part01" Where spawnbot_scattered0 Where spawnbot_main1 TotalCount 50 MaxActive 21 SpawnCount 1 WaitForAllDead "rodeo" TotalCurrency 200 TFBot { Template T_TFBot_Moonion } } WaveSpawn { Name "part02" Where spawnbot_mid0 Where spawnbot_main1 TotalCount 2 MaxActive 2 SpawnCount 2 WaitBeforeStarting 4 WaitForAllDead "part01" TotalCurrency 200 FirstSpawnWarningSound vo/mvm/mght/pyro_mvm_m_paincrticialdeath03.mp3 Squad { TFBot { Template T_TFBot_Diesel_Chief } RandomChoice //trick to hide icon { RandomChoice //trick to hide icon { TFBot { Template T_TFBot_Uber_Infinite } } } } } WaveSpawn { Name "part02" Where spawnbot_right0 Where spawnbot_main1 TotalCount 2 MaxActive 2 SpawnCount 2 WaitBeforeStarting 8 WaitForAllDead "part01" TotalCurrency 200 FirstSpawnWarningSound vo/mvm/norm/demoman_mvm_laughevil02.mp3 Squad { TFBot { Template T_TFBot_Knight_Chief } RandomChoice //trick to hide icon { RandomChoice //trick to hide icon { TFBot { Template T_TFBot_Uber_Infinite } } } } } WaveSpawn //fake icon { Support 1 TFBot { Classicon medic_uber_infinite } } WaveSpawn //icon precacher { Support 1 Squad { TFBot { Classicon tank_uber_lite } } } WaveSpawn { Name "part01_tank" TotalCount 1 SpawnCount 1 WaitForAllDead "part01" TotalCurrency 200 DoneWarningSound items/cart_explode.wav Tank { Name "ubertank|0|999^tankexplosion" Health 99998 Speed 200 StartingPathTrackNode "tank_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name "decoy_message" TotalCount 1 WaitForAllDead "part01_tank" Support 1 FirstSpawnOutput { Target bignet Action RunScriptCode Param "ClientPrint(null, 3, `\x0799CCFFRIGGED TANK SUCCESSFULLY \x07FF3F3FDETONATED!`)" } } WaveSpawn { Name "tank_decoy_kill" Where spawnbot_mid0 WaitForAllSpawned "part01_tank" WaitBeforeStarting 12 FirstSpawnWarningSound items/cart_explode_trigger.wav } WaveSpawn { Name "tank_decoy_kill" Where spawnbot_mid0 WaitForAllSpawned "part01_tank" WaitBeforeStarting 12.5 FirstSpawnWarningSound items/cart_explode_trigger.wav } WaveSpawn { Name "tank_decoy_kill" Where spawnbot_mid0 WaitForAllSpawned "part01_tank" WaitBeforeStarting 13 FirstSpawnWarningSound items/cart_explode_trigger.wav } WaveSpawn { Name "tank_decoy_kill" Where spawnbot_mid0 WaitForAllSpawned "part01_tank" WaitBeforeStarting 13.5 FirstSpawnWarningSound items/cart_explode_trigger.wav } WaveSpawn { Name "tank_decoy_kill" Where spawnbot_mid0 WaitForAllSpawned "part01_tank" WaitBeforeStarting 14 Support 1 FirstSpawnWarningSound items/cart_explode_trigger.wav FirstSpawnOutput { Target "ubertank|0|999^tankexplosion" Action removehealth Param 99999 } } WaveSpawn { Name "resetter" TotalCount 1 WaitForAllDead "part02" FirstSpawnOutput { Target bignet Action RunScriptCode Param " Convars.SetValue(`tf_forced_holiday`, 0) Convars.SetValue(`tf_airblast_cray`, 1) Convars.SetValue(`tf_allow_sliding_taunt`, 0) Convars.SetValue(`tf_bot_flag_escort_max_count`, 4) Convars.SetValue(`tf_mvm_bot_sniper_target_by_dps`, 1) Convars.SetValue(`tf_bot_suspect_spy_touch_interval`, 5) Convars.SetValue(`tf_bot_medic_start_follow_range`, 250) " } } } }