//Perennial Optimization Protocol //JS OptimizatioN //Runtime Optimization //Optimized Runtime //Runtime Optimization //A silly Advanced mission on Humbridge, consisting of nothing but Scout bots! Surely this will go well. //////////////////////////////////////////////////////////////////////////////////// //Map info: //vvvv Bot spawn locations vvvv //spawnbot (main), spawnbot_tank (tank door), spawnbot_invasion (from main and flankers), flankers (left cliff), //spawnbot_chief (flankers) //spawnbot_mission_sniper (flankers), spawnbot_mission_sentry_buster (main), //spawnbot_mission_spy (main) //vvvv Relays vvvv //wave_start_relay - Regular wave relay. //wave_start_ironman_relay - Timed bomb relay. //reset_wave_relay - ? //bombpath_choose_relay - Picks a bomb path, probably done in init. //bombpath_arrows_clear_relay - Clears bombpath arrows. //wave_a_init - Forces "A" bombpath, over the bridge. //wave_b_init - Forces "B" bombpath, under the bridge. //bombpath_a - ? //bombpath_b - ? //////////////////////////////////////////////////////////////////////////////////// // Initial wave plans that HOPEFULLY won't keep changing: // Shorter waves might be best to keep focus on customs clean and concise. // Some simple thoughts: // **Wave 1** // Vanilla bots. Start off simplistic with just regular Scouts, maybe an Armored Sandman or Bat as a good early bulk bot. // Regular old swarms will do the trick for most of it. // **Wave 2** // Dip into simple customs. Other weapons to mix it up: Sodas, Milkers, Cola, maybe Burst Fire Shortstop. // **Wave 3** // Deeper customs. Flare-Scatter Scouts + Sun-on-a-Sticks fit here, early enough that they're still threatening. // 2nd subwave: 3 bosses with CAPPERs - each distinct laser type (Mangler/Pomson/Bison) // **Wave 4** // Teleporter Scout time. Start with one, end wave with a rush of them. // In addition, Sentry-Tossing Scouts (Giant?) and Dispenser-Tossing Scouts (small!) // haha yes. the engineer-scout wave. // **Wave 5** // More focus on "harder" bots. Start throwing more giants out. // Bigger rush of Pocket Pistols with huge heals on hit, maybe spawn some behind to mimic AccAggr w5? // ---- OR ---- // Soda-focused wave. // **Wave 6** // Sweaty Scouts arrive. Human mobbers that hunt down players while Healing Supers rush for bomb. // Get jiggy with it. // **Wave 7** // Chief Scout, general mobber boss with distinct phases: // Phase 1: // generally shooty. Maybe swap between rapid fire with shortstop and bursts with FaN/Soda? // Phase 2: // burn everything! Flare-Scatter reprise, uses Sun-Stick to single out players and chase 'm. // Phase 3: // get away from me oh god oh fuck. Spams Milk/Pocket Pistol to try and regain health while keeping distance from players. // Phase 4: // fuck it we ball. Uses up to 3 Uber Canteens (with pauses!!) plus Bonk! as it rushes for the bomb with its remaining health, using BFB to try and gain speed. (It loses its inherent move speed penalty at this point) // TEST NOTES Test Notes test notes! //COMP: Scout - Seelpit W1-2, Unsaken W3, Pyro - World of Bob, Heavy - Mentrillium, Soldier - Skin King, Engineer - Sntr //W1: //- Wave pushed quite a bit with GSandman subwave, huh! //W2: //- Pushed less, bots a bit slow. Wingers maybe more deadly, bursty...? //W3: //- Spell Scouts had OVERTUNED damage (and also there were maybe too many for engie to Have Fun(tm)!!!) //- Small bombers end up straggling by the time giants die and bomb is far. Maybe refine numbers and maxactives. //W4: //- Rocketstops are WAAAAY overtuned!!! //- Sentry-Slinger Scouts aren't really enough //W?: //- Sweaty Scouts get fucked even early on, giving em more res should be more than fine. Maybe even more vs sentries...? //////////////////////////////////////////////////////////////////////////////////// // CHANGELOG VERSION 2.1 //////////////////////////////////////////////////////////////////////////////////// //W1 //- //W2 //- //W3 //- Fixed Spell Scouts to deal 60 damage. Removed second WaveSpawn and doubled WaitBetweenSpawns. //W5 //- #base robot_standard.pop #base robot_giant.pop #base judge_restricts.pop //TESTING ONLY RunFastEatAss,OrSomething { StartingCurrency 950 RespawnWaveTime 2 FixedRespawnWaveTime 1 CanBotsAttackWhileInSpawnRoom No MaxRedPlayers 5 //TESTING ONLY AllowBotExtraSlots 1 RobotLimit 42 //There's a LOT of them. BotTeleportUberDuration 2 //Makes Teleporter Scouts less infuriating. ForceHoliday 2 //For cosmetics :3 NoThrillerTaunt 1 //Doesn't fit and is just a bit annoying. NoHolidayPickups 1 //I'm not foregoing class naming conventions even though they're all Scouts. Templates { ////////////////////////////////////////////////////////////////////////// ////////////////// Common bots ////////////////// ////////////////////////////////////////////////////////////////////////// ////////// Wave 1 ////////// //Default Scattergun scouts with slightly less good aim than Normal. T_TFBot_Scout_Scatter { Class Scout Skill Normal AimTrackingInterval 0.4 } //Regular ol' Bat Scout. Normal skill. T_TFBot_Scout_Bat { Class Scout Skill Normal WeaponRestrictions MeleeOnly ClassIcon scout_bat_nys } ////////// Wave 2 ////////// //A bulky, slower Scattergun Scout that fires in quick bursts. //...so a Soda Popper with more clip size! T_TFBot_Scout_Burst_Armored { Name "Armored Burst Scout" Class Scout Skill Normal AimTrackingInterval 0.35 Health 650 Scale 1.3 Item "Fortunate Son" Item "Flak Jack" Item "Upgradeable TF_WEAPON_SCATTERGUN" ClassIcon scout_burst_armored ItemAttributes { ItemName "Upgradeable TF_WEAPON_SCATTERGUN" "fire rate bonus" 0.35 "scattergun no reload single" 1 "reload time increased" 4 "clip size penalty" 0.66 "damage penalty" 0.75 } CharacterAttributes { "move speed penalty" 0.75 "damage force reduction" 0.75 } } //A Scout with a powerful Soda Popper! //Attempts to get in close. Has reduced max vis range. T_TFBot_Scout_SodaPopper { Name "Soda Popper Scout" Class Scout Skill Normal Item "The Soda Popper" Item "Bonk Leadwear" WeaponRestrictions PrimaryOnly MaxVisionRange 900 DesiredAttackRange 150 ClassIcon scout_popper ItemAttributes { ItemName "Bonk Leadwear" "set item tint rgb" 8208497 } } //A Scout with a powerful Soda Popper, paired with Crit-a-Cola! //Attempts to get in close. Has reduced max vis range and no self-minicrit. T_TFBot_Scout_SodaPopper_Cola { Name "Cola Popper Scout" Class Scout Skill Normal Item "The Soda Popper" Item "Crit-a-Cola" Item "The Cola Cooler" //Item style override be damned, I want my fancy bots Item "Bonk Leadwear" WeaponRestrictions PrimaryOnly MaxVisionRange 900 DesiredAttackRange 150 ClassIcon scout_popper_cola ItemAttributes { ItemName "Crit-a-Cola" "mod_mark_attacker_for_death" 0 } ItemAttributes { ItemName "Bonk Leadwear" "set item tint rgb" 8208497 } } //A Force-a-Nature Scout with a Conch, and unchanged stats. //Very speedy! T_TFBot_Scout_FaN_Conch { Name "Force-a-Conch Scout" Class Scout Skill Normal ClassIcon scout_fan_conch_lite Item "The Bolt Boy" Item "The Force-a-Nature" Item "The Concheror" Attributes SpawnWithFullCharge MaxVisionRange 600 CharacterAttributes { "increase buff duration" 6 } } //Fan O' War scout. Useful for support! T_TFBot_Scout_Marker { Name "Marker Scout" Class Scout Skill Hard Item "The Fan O'War" WeaponRestrictions MeleeOnly ClassIcon scout_fanowar } //A stereotypical Two Cities scout that LITERALLY CANNOT use its Scattergun :^3 T_TFBot_Scout_MilkMark { Name "Milk 'n Mark Scout" Class Scout Skill Hard Item "Mad Milk" Item "The Fan O'War" ClassIcon scout_fanowar_milk StripItemSlot 0 //removes primary ItemAttributes { ItemName "Mad Milk" "effect bar recharge rate increased" 0.6 } } //A Scout wielding the Homewrecker. Powerful versus sentries! T_TFBot_Scout_Homewrecker { Name "Armored Homewrecker Scout" Health 650 Scale 1.3 Class Scout Skill Expert ClassIcon pyro_homewrecker_lite_armored Item "The Mantreads" Item "The Homewrecker" Item "Engineer Welding Mask" Item "The Trash Toter" Item "The Tools of the Trade" WeaponRestrictions MeleeOnly CharacterAttributes { "move speed penalty" 0.75 } } ////////// Wave 3 ////////// //A Scout that fires single Flares. Can crit. T_TFBot_Scout_Flare { Name "Flarestop Scout" Class Scout Skill Normal Item "The Shortstop" ClassIcon pyro_flare //scout_flarestop ItemAttributes { ItemName "The Shortstop" "paintkit_proto_def_index" 293 //Searing Souls, for fire "set_item_texture_wear" 0.4 "override projectile type" 6 "damage bonus" 2.5 //30 base damage "mod max primary clip override" -1 "fire rate penalty" 2.25 //every 0.9s } } //A Scout that fires small bursts of Flares that don't crit. T_TFBot_Scout_FlareScatter { Name "Flare-Scatter Scout" Class Scout Skill Normal Item "Upgradeable TF_WEAPON_SCATTERGUN" ClassIcon pyro_flare_burst_nys ItemAttributes { ItemName "Upgradeable TF_WEAPON_SCATTERGUN" "paintkit_proto_def_index" 293 //Searing Souls, for fire "set_item_texture_wear" 0.4 "override projectile type" 6 "crits_become_minicrits" 1 //Prevents full crits...? TODO: TEST! "mult projectile count" 3 //Tops out at 90 damage "projectile spread angle penalty" 4.5 "projectile speed decreased" 0.3 //600 HU/s } } //A Scout that fires Manmelter projectiles quickly! T_TFBot_Scout_Manmelter { Name "Rapid Melter Scout" Class Scout Skill Normal Item "The Shortstop" Item "Feathered Fiend" ClassIcon pyro_manmelter_spammer MaxVisionRange 1200 ItemAttributes { ItemName "The Shortstop" "paintkit_proto_def_index" 293 //Searing Souls, for fire "set_item_texture_wear" 0.2 "set damagetype ignite" 1 "override projectile type" 6 "projectile speed increased" 1 "projectile speed decreased" 0.5 //1000 HU/s "projectile trail particle" "~drg_manmelter_projectile" "damage bonus" 2.5 "flare no crit burning" 1 "mod max primary clip override" -1 "fire rate bonus" 1.5 //0.54s } } //Sun-on-a-Stick Scout. Supposedly deadly, but rarely gets things done. T_TFBot_Scout_Sun { Name "Sun Stick Scout" Class Scout Skill Hard Item "Sun-on-a-Stick" Item "Blazing Bull" WeaponRestrictions MeleeOnly ClassIcon scout_sunstick_swordstone } //A Scout that tosses Sun-on-a-Sticks! They should deal melee damage. T_TFBot_Scout_Sun_Tosser { Name "Sun Stick-Tossing Scout" Class Scout WeaponRestrictions PrimaryOnly ClassIcon scout_sunstick_swordstone Item "Fire Fighter" Item "Sun Stick Tosser" Item "Sun-on-a-Stick" Attributes SuppressFire ItemAttributes { ItemName "Sun-on-a-Stick" "is_passive_weapon" 1 "dmg taken from fire reduced" 1 } ShootTemplate { Name "PT_RotatingSunStick" ItemName "Sun Stick Tosser" AttachToProjectile 1 } FireWeapon { Type "Primary" Cooldown 0.75 Duration 0.1 Delay 4 IfSeeTarget 1 } } //A minigiant Scout that casts Fireball Spells while wielding a Spellbook! //...as a weapon. Like. To smack you with. T_TFBot_Scout_Spell { Name "Spellcaster Scout" Health 650 Scale 1.3 Class Scout Skill Expert StripItemSlot 0 StripItemSlot 1 ClassIcon pyro_dragon_fury_spell UseHumanModel 2 Action Mobber Attributes DisableDodge DesiredAttackRange 500 Item "Mage Hat" Item "Mage Shirt" Item "The Bat Outta Hell" ItemAttributes { ItemName "The Bat Outta Hell" "custom item model" "models/player/items/all_class/hwn_spellbook_complete.mdl" "attachment name" "effect_hand_R" "attachment angles" "-12 0 40" "attachment offset" "-2 4 0" //change!!! "custom kill icon" "taunt_scout" } Item "TF_WEAPON_SPELLBOOK" ItemAttributes { ItemName "TF_WEAPON_SPELLBOOK" "projectile speed decreased" 0.5 //~1020 * 0.5 = 510 "mod projectile heat seek power" 10 "mod projectile heat aim time" 2 "mod projectile heat no predict target speed" 1 "dmg penalty vs players" 0.6 } Spell { Delay 5 Cooldown 3 Type "Fireball" } } //A Scout that tosses grenades instead of Sandman balls! //Grenades deal less damage and no self-damage. //Might change to reduced self-damage if particles are too lackluster. T_TFBot_Scout_BomberLeague { Name "Bomber League Scout" Class Scout Skill Expert Item "The Sandman" Item "Head Banger" Item "EOTL_demo_dynamite" Tag "ballbomber" WeaponRestrictions MeleeOnly ClassIcon demo //I mean, it's what they do? MaxVisionRange 900 DesiredAttackRange 400 //Further away instead of up close. UseMeleeThreatPrioritization 0 ItemAttributes { ItemName "The Sandman" "effect bar recharge rate increased" 0.1 //Every second } SpawnTemplate { Name "PT_GrenadeMimic" Origin "0 0 65" //approx. from eyes } } //A Scout that tosses grenades instead of Sandman balls! ...and is bulkier! //Grenades deal less damage and no self-damage. T_TFBot_Scout_BomberLeague_Armored { Name "Demolition League Scout" Health 650 Scale 1.3 Class Scout Skill Expert Item "The Sandman" Item "Head Banger" Item "EOTL_demo_dynamite" Item "The Scrap Sack" Tag "ballbomber" WeaponRestrictions MeleeOnly ClassIcon demo_armored MaxVisionRange 1200 DesiredAttackRange 400 //Further away instead of up close. UseMeleeThreatPrioritization 0 ItemAttributes { ItemName "The Sandman" "effect bar recharge rate increased" 0.1 //Every second } CharacterAttributes { "move speed penalty" 0.75 } SpawnTemplate { Name "PT_GrenadeMimic" Origin "0 0 85" //approx. from eyes } } //Funkier new Batsaber Scout. Hard skill (makes virtually NO difference). //Focuses players! T_TFBot_Scout_Batsaber_Mobber { Name "Laserbat Scout" Class Scout Skill Hard WeaponRestrictions MeleeOnly ClassIcon scout_batsaber_nys UseHumanModel 2 Action Mobber Attributes DisableDodge Item "Phononaut" Item "Cadet Visor" Item "Speedster's Spandex" Item "Batsaber" } //A Pistol Scout that inflicts Jarate on hit. //*deep sigh* yeah. T_TFBot_Scout_Pisstol { Name "Pisstol Scout" Class Scout Skill Normal ClassIcon scout_pisstol Item "Upgradeable TF_WEAPON_PISTOL" Item "Ol' Snaggletooth" Item "The Jarmaments" ItemAttributes { ItemName "Upgradeable TF_WEAPON_PISTOL" "paintkit_proto_def_index" 302 //Mannana Peeled, for the yellowness "set_item_texture_wear" 0 "fire rate penalty" 3 "add cond on hit" 24 } } //A Scout...with a knife. He shanks you. //It *is* England after all. T_TFBot_Scout_Knife { Name "Shanker Scout" Class Scout Skill Hard Action Mobber Item "Upgradeable TF_WEAPON_KNIFE" Item "Shanker Hat" Item "Shanker Shirt" Item "The Argyle Ace" WeaponRestrictions MeleeOnly Attributes DisableDodge UseHumanModel 2 MoveBehindEnemy 1 ClassIcon spy ItemAttributes { ItemName "Upgradeable TF_WEAPON_KNIFE" "item style override" 1 "fire rate bonus" 0.75 } } ////////// Wave 4 ////////// //A Scout that fires a Pomson 6000. Very shrimple. //Instant reload, no fire rate bonus. T_TFBot_Scout_Pomson { Class Scout Name "Pomson Scout" Skill Normal ClassIcon engineer_pomson_v2 Item "The Pomson 6000" Item "The Tin-1000" ItemAttributes { ItemName "The Pomson 6000" "faster reload rate" 0 "dmg bonus vs buildings" 5 } } //A Scattergun Scout that fires in quick bursts. //...so a Soda Popper with more clip size! T_TFBot_Scout_Burst { Name "Burst Fire Scout" Class Scout Skill Normal AimTrackingInterval 0.35 Item "Fortunate Son" Item "Upgradeable TF_WEAPON_SCATTERGUN" ClassIcon scout_burst ItemAttributes { ItemName "Upgradeable TF_WEAPON_SCATTERGUN" "fire rate bonus" 0.35 "scattergun no reload single" 1 "reload time increased" 4 "clip size penalty" 0.66 "damage penalty" 0.75 } } //A Scout that shoots (sentry) rockets. Damage is the same as a normal rocket. T_TFBot_Scout_RocketStop { Name "Rocketstop Scout" Health 650 Scale 1.3 Class Scout Skill Expert ClassIcon soldier_armored Item "The Shortstop" Item "Cranium Cooler" ItemAttributes { ItemName "The Shortstop" "override projectile type" 2 "fire rate penalty" 2.2 //~0.8s "reload time increased" 2 //~3s, regular ol' reload "damage bonus" 7.5 //12 base dmg * 7.5 = 90 "custom projectile model" "models/buildables/sentry3_rockets.mdl" } CharacterAttributes { "move speed penalty" 0.75 } } ////////// Wave 5 ////////// //A Scout that rapidly tosses grenades instead of Sandman balls! //Grenades deal no self-damage. T_TFBot_Scout_BomberLeague_Spammer { Name "Hasty Bomber League Scout" Class Scout Skill Expert Item "The Sandman" Item "Head Banger" Item "EOTL_demo_dynamite" Tag "ballbomber" WeaponRestrictions MeleeOnly ClassIcon demo_spammer MaxVisionRange 900 DesiredAttackRange 400 //Further away instead of up close. UseMeleeThreatPrioritization 0 ItemAttributes { ItemName "The Sandman" "effect bar recharge rate increased" 0.03 //Every 0.3 seconds } SpawnTemplate { Name "PT_GrenadeMimic" Origin "0 0 65" //approx. from eyes } } //A Scout that buffs itself with the Concheror effect for self-healing and faster move speed. //Uses a Shortstop, though without more healing received. T_TFBot_Scout_Bonch { Name "Bonch! Scout" Class Scout Skill Normal Item "The Shortstop" Item "Bonch!" Item "Benefactor's Kanmuri" //You do not have this hat, do you? ClassIcon scout_bonch } ////////////////////////////////////////////////////////////////////////// ////////////////// Giant bots ////////////////// ////////////////////////////////////////////////////////////////////////// ////////// Wave 2 ////////// //A burst fire Shortstop Scout, firing very fast in bursts. //Slower with good bulk. T_TFBot_Giant_Scout_Shortstop_Burst { Name "Giant Shortstop Scout" Health 4500 Class Scout Skill Hard Attributes MiniBoss Item "The Shortstop" ClassIcon scout_shortstop_armored ItemAttributes { ItemName "The Shortstop" "fire rate bonus" 0.35 } CharacterAttributes { "move speed penalty" 0.4 //160 HU/s "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 } FireWeapon { Type "Secondary" Cooldown 6 Delay 0 IfSeeTarget 1 MaxTargetRange 96 //A little more than 1.75x 48 (melee range) } } //A Pretty Boy's Pocket Pistol Scout, capable of healing a dangerous amount from stray hits. //Fast with low bulk. T_TFBot_Giant_Scout_PocketPistol { Name "Super Pocket Pistol Scout" Health 1200 Class Scout Skill Normal //Do NOT make these aim good. Attributes MiniBoss WeaponRestrictions SecondaryOnly Item "Pretty Boy's Pocket Pistol" Item "The Fed-Fightin' Fedora" ClassIcon scout_pocketpistol_heal_lite ItemAttributes { ItemName "Pretty Boy's Pocket Pistol" "reload time increased" 1.5 "heal on hit for rapidfire" 200 } CharacterAttributes { "damage force reduction" 0.7 "airblast vulnerability multiplier" 0.7 } } //A Pretty Boy's Pocket Pistol Scout, capable of healing a dangerous amount from stray hits. //Slower with good bulk. T_TFBot_Giant_Scout_PocketPistol_Armored { Name "Giant Pocket Pistol Scout" Health 4000 Class Scout Skill Normal //Do NOT make these aim good. Attributes MiniBoss WeaponRestrictions SecondaryOnly Item "Pretty Boy's Pocket Pistol" Item "The Fed-Fightin' Fedora" ClassIcon scout_pocketpistol_heal_lite ItemAttributes { ItemName "Pretty Boy's Pocket Pistol" "reload time increased" 1.5 "fire rate bonus" 0.55 "heal on hit for rapidfire" 200 } CharacterAttributes { "move speed penalty" 0.4 //160 HU/s "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 } } //A Winger Scout, capable of dealing a dangerous amount of damage per shot, but fires slowly. //Slower with good bulk. T_TFBot_Giant_Scout_Winger { Name "Captain Hermes" Health 4500 Class Scout Skill Normal Attributes MiniBoss WeaponRestrictions SecondaryOnly Item "The Winger" Item "The Patriot Peak" Item "Airborne Attire" ClassIcon scout_winger_lite_armored ItemAttributes { ItemName "The Winger" "paintkit_proto_def_index" 241 //Electroshocked "set_item_texture_wear" 0 "attach particle effect" 703 //Cool "damage bonus" 4 //60 base damage (rampup: 90) "reload time increased" 1.5 "fire rate penalty" 5 //0.75s between shots } CharacterAttributes { "move speed penalty" 0.4 //160 HU/s "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 } } ////////// Wave 3 ////////// //A Scout that fires bundles of flares! Deals mini-crits vs burning. //Slower with good bulk. T_TFBot_Giant_Scout_Flare { Name "Giant Flare-Scatter Scout" Health 4500 Class Scout Skill Expert Item "Upgradeable TF_WEAPON_SCATTERGUN" Item "Deity's Dress" Item "The Aztec Aggressor" MaxVisionRange 1200 Attributes MiniBoss ClassIcon pyro_flare_burst_nys //TODO: does _giant exist / is it necessary? ItemAttributes { ItemName "Upgradeable TF_WEAPON_SCATTERGUN" "paintkit_proto_def_index" 293 //Searing Souls, for fire "set_item_texture_wear" 0.2 "set damagetype ignite" 1 "override projectile type" 6 "crits_become_minicrits" 1 //Prevents full crits...? TODO: TEST! "mult projectile count" 5 //Tops out at 150 damage, or 1.5x dmg from normal scatter 8) "projectile spread angle penalty" 6 "projectile speed decreased" 0.3 //600 HU/s "damage bonus" 5 } ItemAttributes { ItemName "The Aztec Aggressor" "attach particle effect" 2 //Burning Flames, red! } CharacterAttributes { "move speed penalty" 0.4 //160 HU/s "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 } } //A Scout that fires a concentrated beam of Manmelter projectiles! //Slower with good bulk. T_TFBot_Giant_Scout_Manmelter { Name "Giant Solar Beam Scout" Health 4500 Class Scout Skill Expert Item "The Shortstop" Item "Deity's Dress" Item "Feathered Fiend" Attributes MiniBoss ClassIcon pyro_manmelter_spammer ItemAttributes { ItemName "The Shortstop" "paintkit_proto_def_index" 293 //Searing Souls, for fire "set_item_texture_wear" 0.2 "set damagetype ignite" 1 "override projectile type" 6 "projectile speed increased" 1 "projectile speed decreased" 0.3 //600 HU/s "projectile trail particle" "~drg_manmelter_projectile" "flare no crit burning" 1 "faster reload rate" 0 "fire rate bonus" 0.25 //0.09s "damage bonus" 2.5 } ItemAttributes { ItemName "Feathered Fiend" "attach particle effect" 14 //Scorching Flames, red! } CharacterAttributes { "move speed penalty" 0.4 //160 HU/s "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 } } //A Scout that tosses Sun-on-a-Sticks! They should deal melee damage. T_TFBot_Giant_Scout_Sun_Tosser { Name "Giant Sun-Tossing Scout" Health 4500 Class Scout Skill Expert WeaponRestrictions PrimaryOnly ClassIcon scout_sunstick_swordstone Item "Fire Fighter" Item "Sun Stick Tosser" Item "Sun-on-a-Stick" MaxVisionRange 1200 Attributes SuppressFire Attributes MiniBoss ItemAttributes { ItemName "Sun-on-a-Stick" "is_passive_weapon" 1 "dmg taken from fire reduced" 1 } ShootTemplate { Name "PT_RotatingSunStick" ItemName "Sun Stick Tosser" AttachToProjectile 1 } FireWeapon { Type "Primary" Cooldown 0.5 Duration 0.1 Delay 4 IfSeeTarget 1 } CharacterAttributes { "move speed penalty" 0.4 //160 HU/s "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 } } //A Scout that rapidly tosses grenades instead of Sandman balls! //Grenades deal less damage and no self-damage. //Slower with good bulk. T_TFBot_Giant_Scout_BomberLeague { Name "Major Bomber League Scout" Health 4500 Class Scout Skill Expert Tag "ballbomber" Item "The Sandman" Item "Head Banger" Item "EOTL_demo_dynamite" Item "Blast Blocker" ClassIcon demo_burst Attributes MiniBoss Attributes SuppressFire WeaponRestrictions MeleeOnly MaxVisionRange 1200 DesiredAttackRange 400 //Further away instead of up close. UseMeleeThreatPrioritization 0 ItemAttributes { ItemName "The Sandman" "maxammo grenades1 increased" 10 "effect bar recharge rate increased" 0.01 "fire rate bonus" 0.3 } SpawnTemplate { Name "PT_GrenadeMimic" Origin "0 0 113" //approx. from eyes } CharacterAttributes { "move speed penalty" 0.4 //160 HU/s "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 } FireInput { Target "!self" Action "RunScriptCode" Param " local hWep = GetPropEntityArray(self, `m_hMyWeapons`, 2) function ForceSecondaryAttack() { if (!hWep.IsValid()) return; SetPropFloat(hWep, `m_flNextSecondaryAttack`, 0) hWep.SecondaryAttack() } EntFireByHandle(self,`CallScriptFunction`,`ForceSecondaryAttack`,0,self,self) EntFireByHandle(self,`CallScriptFunction`,`ForceSecondaryAttack`,0.1,self,self) EntFireByHandle(self,`CallScriptFunction`,`ForceSecondaryAttack`,0.2,self,self) EntFireByHandle(self,`CallScriptFunction`,`ForceSecondaryAttack`,0.3,self,self) EntFireByHandle(self,`CallScriptFunction`,`ForceSecondaryAttack`,0.4,self,self) EntFireByHandle(self,`CallScriptFunction`,`ForceSecondaryAttack`,0.5,self,self) EntFireByHandle(self,`CallScriptFunction`,`ForceSecondaryAttack`,0.6,self,self) EntFireByHandle(self,`CallScriptFunction`,`ForceSecondaryAttack`,0.7,self,self) EntFireByHandle(self,`CallScriptFunction`,`ForceSecondaryAttack`,0.8,self,self) " Cooldown 2.8 Delay 2 IfSeeTarget 1 } } ////////// Wave 4 ////////// //A Giant Scout that fires a Pomson, rapidly. Fairly spammy! T_TFBot_Giant_Scout_Pomson { Name "Giant Rapid Pomson Scout" Health 4500 Class Scout Skill Expert Item "The Pomson 6000" Item "Rocket Operator" Item "The Tin-1000" Attributes MiniBoss ClassIcon engineer_pomson_v2_spammer ItemAttributes { ItemName "The Pomson 6000" "dmg bonus vs buildings" 5 "fire rate bonus" 0.25 "faster reload rate" 0 "projectile speed decreased" 0.6 //720, slightly faster than rocket. } CharacterAttributes { "move speed penalty" 0.4 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 } } //A Giant Scout, dressed up like an Engineer, that shoots instantly-deploying sentries! T_TFBot_Giant_Scout_Sentry_Spawner { Name "Giant Sentry-Slinger Scout" Health 4500 Class Scout ClassIcon sentry_gun_lvl3_lite Skill Expert WeaponRestrictions PrimaryOnly Item "The Rescue Ranger" Item "Cargo Constructor" Item "Texas Tin-Gallon" Attributes MiniBoss Attributes HoldFireUntilFullReload ItemAttributes { ItemName "The Rescue Ranger" "paintkit_proto_def_index" 414 //Bomb Carrier "set_item_texture_wear" 0 "fire rate penalty" 7.5 "mod max primary clip override" -1 "projectile penetration" 1 "projectile gravity" 300 "projectile lifetime" 9 "Projectile speed decreased" 0.2 "mult projectile scale" 0.001 "arrow hit kill time" 0.01 } ItemAttributes { ItemName "Texas Tin-Gallon" "attachment scale" 1.2 "set item tint rgb" 12091445 //Cream Spirit } CharacterAttributes { "move speed bonus" 0.4 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 } ShootTemplate { Name PT_SentrySpawner AttachToProjectile 1 } } //A Giant Scout, dressed up like an Engineer, that carries a handy-dandy dispenser! //Also uses a multi-shot Rescue Ranger. T_TFBot_Giant_Scout_Dispenser { Name "Giant Dispenser Ranger Scout" Health 4500 Class Scout ClassIcon dispenser_lite Skill Expert WeaponRestrictions PrimaryOnly Item "The Rescue Ranger" Item "Packable Provisions" Item "Provisions Cap" Attributes MiniBoss Attributes HoldFireUntilFullReload ItemAttributes { ItemName "The Rescue Ranger" "paintkit_proto_def_index" 406 //Health and Hell "set_item_texture_wear" 0 "mult projectile count" 4 "fire rate penalty" 1.4 "projectile spread angle penalty" 4 "projectile speed decreased" 0.4 "mod max primary clip override" -1 } CharacterAttributes { "move speed bonus" 0.4 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "health from healers reduced" 0.2 } SpawnTemplate { Name "PT_DispenserBackpack" Bone "bip_spine_0" Delay 5 } } //A Giant Scout, dressed up like an Engineer, that drops a teleporter on death! //Uses a VScript trace to find proper ground. Wields a rather weak but fast Jag, making it largely unthreatening. T_TFBot_Giant_Scout_Teleporter { Template T_TFBot_Giant_Scout Name "Giant Teleporter Scout" ClassIcon teleporter_seel //scout_ambush as alternative WeaponRestrictions MeleeOnly Item "Telefragger Toque" Item "EOTL_Insulated_innovator" //Insulated Inventor Item "The Jag" Item "Lucky No. 42" ItemAttributes { ItemName "The Jag" "fire rate bonus" 0.625 //every .5s } ItemAttributes { ItemName "Lucky No. 42" "custom item model" "models/buildables/teleporter_blueprint_exit.mdl" } SpawnTemplate "PT_PortableTeleport" } ////////// Wave 5 ////////// //Giant Regen Bonk! Scouts, who sometimes sip some Bonk to make 'em regenerate big health! //Courtesy of our beloved Riles. T_TFBot_Giant_Scout_RegenBonk { Name "Giant Regen Bonk Scout" Health 1600 Class Scout Skill Normal ClassIcon scout_regenbonk WeaponRestrictions MeleeOnly Item "Bonk! Atomic Punch" Item "Batsaber" Item "Bonk Helm" Attributes MiniBoss // Tag bot_regenscout / No longer necessary thanks to rafmod attribute, wahoo SpawnTemplate "PT_PowerupLogic" ItemAttributes { ItemName "Bonk! Atomic Punch" "effect cond override" 92 "effect add attributes" "health regen|128" "effect bar recharge rate increased" 0.55 } ItemAttributes { ItemName "Batsaber" "set item tint rgb" 6901050 } ItemColor { ItemName "Bonk! Atomic Punch" Red 202 Green 100 Blue 0 } ItemColor { ItemName "Bonk Helm" Red 255 Green 120 Blue 0 } CharacterAttributes { "damage force reduction" 0.7 "airblast vulnerability multiplier" 0.7 } } ////////////////////////////////////////////////////////////////////////// ////////////////// Chief bots ////////////////// ////////////////////////////////////////////////////////////////////////// ////////// Wave 3 ////////// //Chief Bison Scout. Fires a constant stream of Bison shots! T_TFBot_Chief_Scout_Laser_Bison { Name "Chief Atomic Annihilator" Health 7500 Class Scout Skill Hard ClassIcon scout_capper_trio_lite_nys_tind WeaponRestrictions SecondaryOnly Item "The C.A.P.P.E.R" Item "Starduster" Item "Phobos Filter" Attributes UseBossHealthBar Attributes MiniBoss ItemAttributes { ItemName "Phobos Filter" "attach particle effect" 3129 "set item tint rgb" 5801378 //Team Spirit, BLU } ItemAttributes { ItemName "The C.A.P.P.E.R" "override projectile type" 13 "energy weapon penetration" 1 "dmg bonus vs buildings" 2.5 //Sheer spam "faster reload rate" 0 "fire rate bonus" 0.4 "projectile spread angle penalty" 1 } CharacterAttributes { "move speed penalty" 0.3 //120 HU/s, Soldier speed "damage force reduction" 0.1 "airblast vulnerability multiplier" 0.1 "rage giving scale" 0.34 } FireInput { Target "!self" Action "RunScriptCode" Param "SINS.ChangeClassIcon(self,`soldier_bison_spammer`)" Repeats 1 Delay 0 } } //Chief Mangler Scout. Fires bursts of Mangler rockets! T_TFBot_Chief_Scout_Laser_Mangler { Name "Chief Molecular Mangler" Health 7500 Class Scout Skill Expert ClassIcon scout_capper_trio_lite_nys_tind WeaponRestrictions SecondaryOnly Item "The Surgeon's Space Suit" Item "The C.A.P.P.E.R" Item "Lord Cockswain's Pith Helmet" Attributes UseBossHealthBar Attributes MiniBoss Attributes HoldFireUntilFullReload ItemAttributes { ItemName "Lord Cockswain's Pith Helmet" "attach particle effect" 3141 } ItemAttributes { ItemName "The C.A.P.P.E.R" "override projectile type" 2 //rockets, to make them adhere projspeed "custom projectile model" "models/empty.mdl" "explosion particle" "drg_cow_explosioncore_normal_blue" "projectile trail particle" "drg_cow_rockettrail_normal_blue" "dmg bonus vs buildings" 5 "fire rate bonus" 0.6 //0.09s between shots "reload time increased" 3.8 //~3.8s "clip size penalty" 0.75 "projectile speed decreased" 0.65 "damage bonus" 5 //75 base damage but higher rampup, maybe apply lower rampup } CharacterAttributes { "move speed penalty" 0.3 //120 HU/s, Soldier speed "damage force reduction" 0.1 "airblast vulnerability multiplier" 0.1 "rage giving scale" 0.34 } FireInput { Target "!self" Action "RunScriptCode" Param "SINS.ChangeClassIcon(self,`soldier_mangler_burst`)" Repeats 1 Delay 0 } } //Chief Pomson Scout. Fires spreads of Pomson shots! T_TFBot_Chief_Scout_Laser_Pomson { Name "Chief Particle Pulverizer" Health 7500 Class Scout Skill Expert ClassIcon scout_capper_trio_lite_nys_tind WeaponRestrictions SecondaryOnly Item "The C.A.P.P.E.R" Item "Rocket Operator" Item "Defragmenting Hard Hat 17%" Attributes UseBossHealthBar Attributes MiniBoss ItemAttributes { ItemName "Defragmenting Hard Hat 17%" "attach particle effect" 3044 } ItemAttributes { ItemName "The C.A.P.P.E.R" "override projectile type" 13 "energy weapon penetration" 0 "dmg bonus vs buildings" 5 "fire rate penalty" 4 "dmg penalty vs players" 0.5 //32-72 -> 16-36 * 5 "mult projectile count" 5 "clip size penalty" 0.34 "projectile speed decreased" 0.6 //720, slightly faster than rocket. "projectile spread angle penalty" 5 } CharacterAttributes { "move speed penalty" 0.3 //120 HU/s, Soldier speed "damage force reduction" 0.1 "airblast vulnerability multiplier" 0.1 "rage giving scale" 0.34 } FireInput { Target "!self" Action "RunScriptCode" Param "SINS.ChangeClassIcon(self,`engineer_pomson_v2`)" Repeats 1 Delay 0 } } ////////// Wave 5 ////////// // Chief Soda Scout, AKA Jeremessiah's second coming. Uses rocket launcher [scattergun], gradually drinks more buffs // Crit-a-Cola (like others) // > Bonch // --> Multi-Pop: +2 projectiles per shot // ----> Haste Shake/Fizzy Haste // ------> Shield Shake: gains (small?) projshield, teaser for next wave // --------> Water (this kills him) T_TFBot_Chief_Scout_Soda { Name "Jeremessiah, Carbonated Doom" Health 20000 Class Scout Skill Expert ClassIcon tf2_lite Scale 1 UseHumanModel 1 AlwaysGlow 1 NoIdleSound 1 Item "Twat's Scattergun" Item "Bastard's Hat" Item "Prick's Shirt" Item "Jerk's Boots" Item "Employee Badge A" Attributes MiniBoss //Healthbar triggered at start of fight, as is scale SpawnTemplate "PT_PowerupLogic" SpawnTemplate "PT_SodaBossStuff_Hidden" ItemAttributes { ItemName "Employee Badge A" "custom item model" "models/weapons/c_models/c_shogun_warbanner/c_shogun_warbanner.mdl" "attachment name" "prop_bone" "attachment scale" 0 "attachment angles" "120 -90 -30" } AddAttribute { Item "Employee Badge A" Name "attachment offset" Value "-45 40 10" Delay 0.1 Repeats 1 } EventChangeAttributes { Default { InterruptAction // Stop current bot ai and force the bot to move to a location { Target "320 3150 210" // Frontmost rock of spawnbot AimTarget "128 3000 256" // Diagonally "forward" plus a little up Delay 0.1 Repeats 1 Cooldown 3 Duration 0.5 // How long should the ai be interrupted WaitUntilDone 1 // Duration timer starts when he moves to the target location OnDoneChangeAttributes "Fighting" // Once done, switch to this EventChangeAttributes Distance 25 } CharacterAttributes { "move speed penalty" 0.6 } } Fighting { Taunt //Taunts once @ start { Delay 0.01 Repeats 1 Name "Taunt: Cheers!" } FireInput //Enlarge thine self. { Target "!self" Action "RunScriptCode" Param "SeelRuntime.ChangeScaleToGiant(self)" Repeats 1 Delay 2.8 } FireInput //And get a fancy boss health bar when you crush the can. { Target "!self" Action "RunScriptCode" Param "self.SetUseBossHealthBar(true)" Repeats 1 Delay 5.25 } FireInput //Start the thinkin' for health thresholds. { Target "!self" Action "RunScriptCode" Param "SeelRuntime.EnableBossThink(self)" Repeats 1 Delay 0.03 } VoiceCommand //What a gamer. { Type "Battle cry" Delay 20 Cooldown 12 Repeats 4 IfHealthAbove 7500 } Taunt //Taunts once @ death { Delay 0.01 Repeats 1 Name "Taunt: Cheers!" IfHealthBelow 100 } FireInput //Taunts once @ death { Target "intel" Action "ForceResetAndDisableSilent" Delay 0.01 Repeats 1 IfHealthBelow 100 } CharacterAttributes { "move speed penalty" 0.5 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 } } } } ////////////////////////////////////////////////////////////////////////// ////////////////// Special bots ////////////////// ////////////////////////////////////////////////////////////////////////// ////////// Wave 5 ////////// T_TFBot_Player { ClassIcon tf2_lite //fuck it this is a standard now UseHumanModel 1 AlwaysGlow 1 FastUpdate 1 //Moves fast NoPushaway 1 //For the start DeathSound "=25|mvm/mvm_player_died.wav" Action Mobber //Do NOT pick up bomb. CharacterAttributes { "dmg taken increased" 0.25 "dmg taken from crit reduced" 0.1 "health regen" 8 "damage force reduction" 0.5 } } //Jeremy, Arrogant Attacker. Leader of the bunch. //Scout with sig upgrades. (damage boost, reload rate, resists, regen) T_TFBot_Player_Scout_Jeremy { Template T_TFBot_Player Class Scout Name "Jeremy, Arrogant Attacker" Skill Expert Item "Upgradeable TF_WEAPON_SCATTERGUN" Item "Batsaber" Item "The El Jefe" Item "Aloha Apparel" Item "Lucky No. 42" Item "Scout Flip-Flops" Item "Power Up Canteen (MvM)" //Doesn't actually use these, these are reskinned Summer Shades >:3 Attributes HoldFireUntilFullReload DesiredAttackRange 90 //he gets in deep ItemAttributes { ItemName "Power Up Canteen (MvM)" "custom item model" "models/player/items/scout/summer_shades.mdl" } ItemAttributes { ItemName "Upgradeable TF_WEAPON_SCATTERGUN" "item style override" 1 "killstreak tier" 2 "killstreak idleeffect" 4 //mean green, cause he's a meanie >8) "damage bonus" 1.5 "fire rate bonus" 0.6 "faster reload rate" 0.4 } CharacterAttributes { "move speed bonus" 1.3 } EventChangeAttributes { Default { InterruptAction // Stop current bot ai and force the bot to move to a location { Target "320 3150 210" // Frontmost rock of spawnbot AimTarget "128 3000 256" // Diagonally "forward" plus a little up Delay 0.1 Repeats 1 Cooldown 3 Duration 0.5 // How long should the ai be interrupted WaitUntilDone 1 // Duration timer starts when he moves to the target location OnDoneChangeAttributes "Fighting" // Once done, switch to this EventChangeAttributes Distance 25 } CharacterAttributes { "move speed penalty" 0.6 } } Fighting { Taunt //Taunts once @ start { Delay 0.01 Repeats 1 Name "Battin' a Thousand Taunt" } VoiceCommand { Type "Battle cry" Delay 6 Cooldown 10 Repeats 4 IfHealthAbove 120 } VoiceCommand { Type "Medic" Delay 0 Cooldown 15 Repeats 4 IfHealthBelow 119 //he's a WUSS } } } } //KING JEREMIAH. Flare and burn enthusiast. //Flare-Scatter user with Axtinguisher. T_TFBot_Player_Scout_Flare { Class Scout Name "KING JEREMIAH" Skill Expert Template T_TFBot_Player Item "Upgradeable TF_WEAPON_SCATTERGUN" Item "JEREMIAH's Hat" Item "JEREMIAH's Shirt" Item "JEREMIAH's Boots" Attributes HoldFireUntilFullReload DesiredAttackRange 320 //stays at a moderate distance KeepAway "Target" KeepAwayRadius 220 ItemAttributes { ItemName "Upgradeable TF_WEAPON_SCATTERGUN" "killstreak tier" 2 "killstreak idleeffect" 4 //mean green, cause he's a meanie >8) "paintkit_proto_def_index" 293 //Searing Souls, for fire "set_item_texture_wear" 0.2 "override projectile type" 6 "flare no crit burning" 1 "minicrit vs burning player" 1 //Prevents full crits...? TODO: TEST! "mult projectile count" 5 "projectile spread angle penalty" 6 "projectile speed decreased" 0.3 //600 HU/s "fire rate bonus" 0.8 "faster reload rate" 0.25 } CharacterAttributes { "damage force reduction" 0.5 } EventChangeAttributes { Default { InterruptAction // Stop current bot ai and force the bot to move to a location { Target "290 3360 210" // To Jeremy's left AimTarget "128 3000 256" // Diagonally "forward" plus a little up Delay 0.1 Repeats 1 Cooldown 3 //Time between each task (Default: 10) Duration 0.5 // How long should the ai be interrupted WaitUntilDone 1 // Duration timer starts when he moves to the target location OnDoneChangeAttributes "Fighting" // Once done, switch to this EventChangeAttributes Distance 25 } CharacterAttributes { "move speed penalty" 0.8 } } Fighting { Taunt //Taunts once @ start { Delay 0.01 Repeats 1 Name "Deep Fried Desire Taunt" } VoiceCommand { Type "Battle cry" Delay 5 Cooldown 10 Repeats 4 } Item "TF_WEAPON_SPELLBOOK" ItemAttributes { ItemName "TF_WEAPON_SPELLBOOK" "projectile speed decreased" 0.7 //~1020 * 0.7 = 714 "mod projectile heat seek power" 10 "mod projectile heat aim time" 2 "mod projectile heat no predict target speed" 1 "dmg penalty vs players" 0.6 } Spell { Delay 5 Cooldown 6 Type "Fireball" } } } } //Jeremius, Blood-oath Lord. Maximum edgelord with bleed spam. //Throws cleavers, Shortstops you while running away like a bastard. T_TFBot_Player_Scout_ShortstopCleaver { Class Scout Name "Jeremius the Blood-oath Lord" Skill Expert Template T_TFBot_Player Item "The Shortstop" Item "The Flying Guillotine" Item "Zombie Scout" Item "Head Hunter" Item "Claws and Infect" Item "Deadbeats" DesiredAttackRange 475 KeepAway "Target" KeepAwayRadius 450 //stays at a moderate distance, like a coward. ItemAttributes { ItemName "The Shortstop" "killstreak tier" 2 "killstreak idleeffect" 6 //Villainous Violet, cause he's edgy "paintkit_proto_def_index" 204 //Kill Covered "set_item_texture_wear" 0.2 "fire rate bonus" 0.8 "damage bonus" 1.5 "clip size bonus" 1.5 } EventChangeAttributes { Default { InterruptAction // Stop current bot ai and force the bot to move to a location { Target "465 3160 210" // To Jeremy's right AimTarget "128 3000 256" // Diagonally "forward" plus a little up Delay 0.1 Repeats 1 Cooldown 3 //Time between each task (Default: 10) Duration 0.5 // How long should the ai be interrupted WaitUntilDone 1 // Duration timer starts when he moves to the target location OnDoneChangeAttributes "Fighting" // Once done, switch to this EventChangeAttributes Distance 25 } } Fighting { Taunt //Taunts once @ start { Delay 0.01 Repeats 1 Name "Taunt: Burstchester" } VoiceCommand { Type "Positive" Delay 6 Cooldown 10 Repeats 4 } } } } //Jester Jerome. A tricky fellow that teleports around the map. //Sneaks around with the Back Scatter, tries to strafe around you. //TODO: add "teleports around the map" functionality. T_TFBot_Player_Scout_BackScatter { Class Scout Name "Jester Jerome" Skill Expert Template T_TFBot_Player Item "The Back Scatter" Item "Jerome's Hat" Item "Jerome's Shirt" Item "Jerome's Boots" Attributes HoldFireUntilFullReload MoveBehindEnemy 1 DesiredAttackRange 150 ItemAttributes { ItemName "The Back Scatter" "killstreak tier" 2 "killstreak idleeffect" 1 //Team Shine, cause he's actually kinda okay "paintkit_proto_def_index" 204 //Kill Covered "set_item_texture_wear" 0.2 "fire rate bonus" 1 "damage bonus" 1.5 "faster reload rate" 0.4 } CharacterAttributes { "move speed bonus" 1.2 "increased jump height" 1.2 //In case he gets stuck, I suppose. } EventChangeAttributes { Default { InterruptAction // Stop current bot ai and force the bot to move to a location { Target "475 3400 245" // Behind Jeremy AimTarget "128 3000 256" // Diagonally "forward" plus a little up Delay 0.1 Repeats 1 Cooldown 3 //Time between each task (Default: 10) Duration 0.5 // How long should the ai be interrupted WaitUntilDone 1 // Duration timer starts when he moves to the target location OnDoneChangeAttributes "Fighting" // Once done, switch to this EventChangeAttributes Distance 25 } CharacterAttributes { "move speed penalty" 0.55 } } Fighting { Taunt //Taunts once @ start { Delay 0.01 Repeats 1 Name "Taunt: Peace Out" } VoiceCommand { Type "Positive" Delay 6 Cooldown 10 Repeats 4 } } } } //The Festive Jeremix. A feisty fellow that is just a little guy! //Runs around with the Force-a-Nature and Bonk!, getting in your way while invulnerable. //TODO: add "teleports around the map" functionality. T_TFBot_Player_Scout_FAN_Bonk { Class Scout Name "The Festive Jeremix" Skill Expert Template T_TFBot_Player Item "Festive Force-a-Nature" Item "Festive Bonk 2014" Item "Jeremix's Hat" Item "Jeremix's Shirt" Item "Blizzard Britches" MoveBehindEnemy 300 DesiredAttackRange 150 ItemAttributes { ItemName "Festive Force-a-Nature" "killstreak tier" 2 "killstreak idleeffect" 1 //Team Shine, cause he's actually kinda okay "paintkit_proto_def_index" 204 //Kill Covered "set_item_texture_wear" 0.2 "damage bonus" 1.5 "faster reload rate" 0.4 } CharacterAttributes { "move speed bonus" 1.2 "increased jump height" 1.2 //In case he gets stuck, I suppose. } EventChangeAttributes { Default { InterruptAction // Stop current bot ai and force the bot to move to a location { Target "375 3480 225" // Behind Jeremy's right AimTarget "128 3000 256" // Diagonally "forward" plus a little up Delay 0.1 Repeats 1 Cooldown 3 //Time between each task (Default: 10) Duration 0.5 // How long should the ai be interrupted WaitUntilDone 1 // Duration timer starts when he moves to the target location OnDoneChangeAttributes "Fighting" // Once done, switch to this EventChangeAttributes Distance 25 } CharacterAttributes { "move speed penalty" 0.7 } } Fighting { Taunt //Taunts once @ start { Delay 0.01 Repeats 1 Name "Taunt: The Boston Breakdance" } VoiceCommand { Type "Positive" Delay 6 Cooldown 10 Repeats 4 } } } } //Jeremessiah. The bastard. //Uses a Soda Popper, tosses Milk (with minor slow?), and tries to Mark you sometimes. //What an ass. T_TFBot_Player_Scout_TheBastard { Class Scout Name "Your Savior: Jeremessiah" Skill Expert Template T_TFBot_Player Item "The Soda Popper" Item "Mad Milk" Item "The Fan O' War" Item "Bastard's Hat" Item "Prick's Shirt" Item "Jerk's Boots" MoveBehindEnemy 1 DesiredAttackRange 150 ItemAttributes { ItemName "The Soda Popper" "killstreak tier" 2 "killstreak idleeffect" 5 //Agonizing Emerald, because it just barely doesn't fit. fuck you "paintkit_proto_def_index" 407 //Health and Hell. but green. GREEN. "set_item_texture_wear" 0 "attach particle effect" 702 //Isotope. of course you have this. bastard. "fire rate bonus" 0.4 //of course you abuse ghost upgrades "damage bonus" 1.25 "clip size bonus" 1.5 } CharacterAttributes { "move speed bonus" 1.3 "increased jump height" 1.6 //WHY WOULD YOU NEED THIS MUCH JUMP HEIGHT } EventChangeAttributes { Default { InterruptAction // Stop current bot ai and force the bot to move to a location { Target "590 3270 235" // Behind Jeremy's left AimTarget "128 3000 256" // Diagonally "forward" plus a little up Delay 0.1 Repeats 1 Cooldown 3 //Time between each task (Default: 10) Duration 0.5 // How long should the ai be interrupted WaitUntilDone 1 // Duration timer starts when he moves to the target location OnDoneChangeAttributes "Fighting" // Once done, switch to this EventChangeAttributes Distance 25 } CharacterAttributes { "move speed penalty" 0.5 } } Fighting { Taunt //Taunts once @ start { Delay 0.01 Repeats 1 Name "Laugh Taunt" } VoiceCommand { Type "Positive" Delay 6 Cooldown 10 Repeats 4 } } } } } PointTemplates { CallFuncOnSelf { OnSpawnOutput { Target "!self" Action "RunScriptCode" Param "TankToBeCarried(self)" } } PT_RotatingSunStick { OnSpawnOutput { Target "!activator" Action "AddOutput" Param "rendermode 10" Delay 0.01 } prop_dynamic { "targetname" "sunstick" "parentname" "rot" "model" "models/workshop/weapons/c_models/c_rift_fire_mace/c_rift_fire_mace.mdl" "origin" "0 0 -20" "angles" "0 0 0" "solid" "0" } func_rotating { "targetname" "rot" "spawnflags" 73 //not solid, spin on Y, start active "fanfriction" 100 "maxspeed" 400 } } PT_GrenadeMimic { OnSpawnOutput { Target "grenade_mimic" Action "$SetOwner" Param "!activator" Delay 0 } OnSpawnOutput { Target "grenade_mimic" Action "$RotateTowards" Param "!activator" Delay 0.01 } tf_point_weapon_mimic { "targetname" "grenade_mimic" "$weaponname" "Ball Bomber" "$modules" "rotator" "$lookat" "aim" "$rotationspeedx" "350" "$rotationspeedy" "350" } } PT_Text_HumanMobbers { training_annotation { "targetname" "mobber_infotext" "display_text" "Human enemies ignore the bomb, but will relentlessly hunt you down!" "lifetime" "5" "origin" "320 3150 210" } } PT_SentrySpawner { KeepAlive 1 OnSpawnOutput { Target "sentry_obj" Action "$SetProp$m_hBuilder" Param "@e@m_hOwnerEntity@!activator" Delay 0.1 } OnSpawnOutput { Target "sentry_obj" Action "$SetOwner" Param "@e@m_hOwnerEntity@!activator" Delay 0.1 } OnSpawnOutput { Target "sentrymodel_relay" Action "FireUser1" } OnParentKilledOutput { Target "sentrymodel_relay" Action "Trigger" } OnParentKilledOutput { Target "sentrymodel_relay" Action "Kill" Delay 0.03 } logic_relay { "targetname" "sentrymodel_relay" "OnUser1" "sentry_obj,Hide,,0,-1" "OnUser1" "!activator,RunScriptCode,printl(self.GetCollisionGroup()),0,-1" //ROCKET_BUT_NOT_WITH_OTHER_ROCKETS: solid to hitscan (egh), physics, world "OnUser1" "sentry_obj,RunScriptCode,self.SetCollisionGroup(23),0,-1" //COMBATOBJECT: solid to everything but players! "OnTrigger" "sentry_obj,Show,,0,-1" "OnTrigger" "sentry_obj,RunScriptCode,SeelRuntime.SetXZAnglesToZero(self),0.1,-1" //Ensures it's not weirdly rotated. "OnTrigger" "sentry_obj,RemoveHealth,500,6,-1" "OnTrigger" "sentry_box,Kill,,0,-1" } prop_dynamic { "targetname" "sentry_box" "model" "models/weapons/w_models/w_toolbox.mdl" "solid" "0" "skin" "1" } obj_sentrygun { "targetname" "sentry_obj" "teamnum" "3" "defaultupgrade" "2" "SolidToPlayer" "0" "spawnflags" "8" // inf ammo "skin" "1" "$OnKilled" "@p@sentry_obj,Kill,,-1,-1" } } PT_DispenserBackpack { OnSpawnOutput { Target "dispenser_relay" Action "Trigger" Delay 0.1 } logic_relay { "targetname" "dispenser_relay" "OnTrigger" "dispenserbp,$SetOwner,!activator,0,-1" "OnTrigger" "dispenserbp,SetBuilder,!activator,0,-1" "OnTrigger" "dispenserbp,RunScriptCode,self.SetSolid(0),0,-1" "OnTrigger" "dispenserbp,RunScriptCode,SeelRuntime.FindTouchTrigger(self),0,-1" "OnTrigger" "dispenserbp,SetModelScale,0,0,-1" "OnTrigger" "dispenserbp,$SetLocalOrigin,0 20 35,0,-1" } obj_dispenser { "targetname" "dispenserbp" "angles" "-90 90 0" //X = flat against back, Y = perpendicular to scout facing direction "origin" "0 200 30" //Y = up/down, Z = move back out of torso "teamnum" 3 //blu "defaultupgrade" 2 // "$modules" "fakeparent" // "$fakeparentoffset" "0 20 35" // "$fakeparentrotation" "-90 90 0" // "$bone" "bip_spine_0" "$attributeoverride" 1 //Since attributes don't want to play nice... "$radiusmult" 5 "$ratemult" 5 } } PT_PortableTeleport { OnParentKilledOutput { Target "!activator" Action "RunScriptCode" Param "SeelRuntime.SpawnTele(self)" Delay -1 } info_teleport_destination { "targetname" "_teleporterscoutchecker" } } PT_Text_SweatyScoutSquad { logic_relay { "targetname" "wcq_text_relay" "OnTrigger" "random_upper_text,PickRandom,,0,-1" "OnTrigger" "wcq_lower_text,Display,,0.84,-1" } logic_case { "targetname" "random_upper_text" "OnCase01" "wcq_upper_text_1,Display,,0,-1" "OnCase02" "wcq_upper_text_2,Display,,0,-1" } game_text { "targetname" "wcq_upper_text_1" "message" "STRAIGHT FROM COMPETITIVE 6s" "color" "255 235 200" "color2" "0 0 0" "x" "-1" "y" "0.42" "spawnflags" "1" "effect" "2" "channel" "2" "fxtime" "0.2" "fadein" "0.02" "fadeout" "1" "holdtime" "4.84" "origin" "-800 -3200 101" } game_text { "targetname" "wcq_upper_text_2" "message" "THE PROFESSIONAL PUBSTOMPERS" "color" "255 235 200" "color2" "0 0 0" "x" "-1" "y" "0.42" "spawnflags" "1" "effect" "2" "channel" "2" "fxtime" "0.2" "fadein" "0.02" "fadeout" "1" "holdtime" "4.84" "origin" "-800 -3200 101" } game_text { "targetname" "wcq_lower_text" "message" "SWEATY SCOUT S.Q.U.A.D." "color" "250 200 80" "color2" "250 80 60" "x" "-1" "y" "0.55" "spawnflags" "1" "effect" "2" "channel" "4" "fxtime" "0.2" "fadein" "0.04" "fadeout" "1" "holdtime" "4" "origin" "-800 -3200 101" } } PT_PowerupLogic { OnSpawnOutput { Target "powerup_haver_target" Action "SetParent" Param "!activator" Delay 0.01 } OnParentKilledOutput { Target "item_powerup_rune" Action "Kill" Delay 0 } info_target { "targetname" "powerup_haver_target" } } PT_ProjShield { NoFixup 1 OnSpawnOutput { Target "projshield" Action "$SetOwner" Param "!activator" Delay 0.05 } entity_medigun_shield { "targetname" "projshield" "origin" "150 0 0" "spawnflags" "1" //No expire, no blocking line-of-sight "teamnum" "3" "skin" "1" } } //Silly way of making a "sudden" projectile shield work. //This PT spawns it invisibly and high in the air; when the related bot drinks its Shield Shake, //it's set to become visible once more and block attacks. PT_SodaBossStuff_Hidden { NoFixup 1 OnSpawnOutput { Target "projshield" Action "$SetOwner" Param "!activator" Delay 0.015 } OnSpawnOutput { Target "projshield" Action "SetModel" Param "models/empty.mdl" Delay 0.03 } entity_medigun_shield { "targetname" "projshield" "origin" "150 0 0" "spawnflags" "1" //No expire, no blocking line-of-sight "teamnum" "3" "skin" "1" } logic_relay { "targetname" "soda_relay" //Bonch!, can be used by any bot. "spawnflags" 2 //Ensures multiple bots can do this. "OnUser1" "!activator,$AddCond,29,1.2,-1" "OnUser1" "!activator,$AddItemAttribute,attachment scale|1.25|8,1.2,-1" "OnUser1" "!activator,$PlaySound,=80|items/samurai/tf_conch.wav,0.2,-1" //Multi-Pop, for multiple attributes being added. "OnUser2" "!activator,$AddItemAttribute,mult projectile count|3|0" "OnUser2" "!activator,$AddItemAttribute,ignores other projectiles|1|0" "OnUser2" "!activator,$AddItemAttribute,projectile spread angle penalty|3.5|0" "OnUser2" "!activator,$AddItemAttribute,damage penalty|0.75|0" //idk if this balances it out at all :crab: //I'm doing this bc EntFire() doesn't want to cooperate. "OnUser4" "!activator,$Suicide,,0,-1" //Shield Shake "OnTrigger" "projshield,SetModel,models/props_mvm/mvm_player_shield.mdl,1.2,-1" } } PT_W5BossLogic //Currently not used. { logic_relay { "targetname" "w5_boss_relay" //Scale change, set icon to giant, add healthbar "OnTrigger" "!activator,RunScriptCode,SeelRuntime.ChangeScaleToGiant(self),2.8,-1" } } } ExtraSpawnPoint { Name "spawnbot_hatch" TeamNum 3 X "3800" Y "-720" Z "25" } CustomWeapon { "Sun Stick Tosser" { OriginalItemName "The Rescue Ranger" "projectile gravity" -1 "projectile speed decreased" 0.4 "penetrate teammates" 1 "projectile penetration" 1 "arrow hit kill time" 0.1 // "projectile lifetime" 10 // "grenade bounce speed" 0.3 "no damage falloff" 1 "damage penalty" 0.7 //28 "crit vs burning players" 1 "remove damage type" 536870912 //DMG_BUCKSHOT, the bullet damage it deals. "add damage type" 128 //DMG_CLUB, melee damage. "fire rate bonus" 0.6 //0.375 "mod max primary clip override" -1 "custom projectile model" "models/weapons/w_models/w_drg_ball.mdl" "custom item model" "models/workshop/weapons/c_models/c_rift_fire_mace/c_rift_fire_mace.mdl" "custom weapon fire sound" "common/null.wav" "custom kill icon" "lava_bat" } "Ball Bomber" { OriginalItemName "The Iron Bomber" "damage penalty" 1 "projectile trail particle" "stunballtrail_blue" "no self blast dmg" 2 "custom kill icon" "iron_bomber" } "Twat's Scattergun" { OriginalItemName "Upgradeable TF_WEAPON_SCATTERGUN" "killstreak tier" 2 "killstreak idleeffect" 1 //Team Shine cause he IS the team. "paintkit_proto_def_index" 414 //Bomb Carrier, because now we're mixing in BLUE. "set_item_texture_wear" 0 "attach particle effect" 246 //Startrance for fanciness. Doesn't even exist smh my head. "override projectile type" 2 "projectile speed decreased" 0.65 "fire rate bonus" 0.6 "damage bonus" 15 //Base damage: 6 * 15 = 90. "hold fire until full reload" 1 } "Etern-a-Cola" { OriginalItemName "Crit-a-Cola" "effect cond override" 23 //"Overheal", does nothing. "effect bar recharge rate increased" 200 "mod_mark_attacker_for_death" 0 "fire input on taunt" "!activator^$AddCond^16" //Buff Banner minicrits effect, since Crit-a-Cola is hardcoded to run out on Scout. } "Bonch!" { OriginalItemName "Crit-a-Cola" "effect cond override" 23 //"Overheal", does nothing. "effect bar recharge rate increased" 200 "mod_mark_attacker_for_death" 0 "fire input on taunt" "soda_relay^FireUser1^" //Concheror effect + flag. TODO: does this affect radials? } "Multi-Pop" { OriginalItemName "Crit-a-Cola" "effect cond override" 23 //"Overheal", does nothing. "effect bar recharge rate increased" 200 "mod_mark_attacker_for_death" 0 "fire input on taunt" "soda_relay^FireUser2^" } "Haste Fizz" { OriginalItemName "Crit-a-Cola" "effect cond override" 23 //"Overheal", does nothing. "effect bar recharge rate increased" 200 "mod_mark_attacker_for_death" 0 "fire input on taunt" "!activator^$AddCond^91" } "Shield Shake" { OriginalItemName "Crit-a-Cola" "effect cond override" 23 //"Overheal", does nothing. "effect bar recharge rate increased" 200 "mod_mark_attacker_for_death" 0 "fire input on taunt" "soda_relay^Trigger^" //"Creates" a projshield. Actually just calls it down. } "The Cola Cooler" { OriginalItemName "The Caffeine Cooler" "item style override" 2 } "Mage Hat" { OriginalItemName "Starlight Sorcerer" "set item tint rgb" 13595446 //Mann Co Orange } "Mage Shirt" { OriginalItemName "The Triple Jumper" "set item tint rgb" 13595446 } "Shanker Hat" { OriginalItemName "The Executioner" "set item tint rgb" 1581885 //Balaclavas Are Forever (BLU) } "Shanker Shirt" { OriginalItemName "The Frenchman's Formals" "set item tint rgb" 1581885 //Balaclavas Are Forever (BLU) } "JEREMIAH's Hat" { OriginalItemName "Bedouin Bandana" "set item tint rgb" 15185211 //Australium Gold } "JEREMIAH's Shirt" { OriginalItemName "Jumping Jester" "set item tint rgb" 15185211 } "JEREMIAH's Boots" { OriginalItemName "EOTL_hiphunter_boots" //Flashdance Footies "set item tint rgb" 15185211 } "Jerome's Hat" { OriginalItemName "dec2014 Marauders Mask" //Mountebank's Masque "set item tint rgb" 15185211 } "Jerome's Shirt" { OriginalItemName "Jumping Jester" "set item tint rgb" 15185211 } "Jerome's Boots" { OriginalItemName "dec2014 Fools Footwear" //Harlequin's Hooves "set item tint rgb" 5801378 //Team Spirit, BLU } "Jeremix's Hat" { OriginalItemName "Bonk Beanie" "set item tint rgb" 5801378 } "Jeremix's Shirt" { OriginalItemName "Isotopic Insulator" "set item tint rgb" 5801378 } "Bastard's Hat" { OriginalItemName "Scout Beanie" "set item tint rgb" 3329330 //Lime Green, "item style override" 3 //Oldest school. } "Prick's Shirt" { OriginalItemName "The Fast Learner" "set item tint rgb" 3329330 //Lime Green, } "Jerk's Boots" { OriginalItemName "MNC Mascot Outfit" "set item tint rgb" 16738740 //and L- PINK?! } } //Busters will be plentiful. Mission { Objective DestroySentries Where spawnbot CooldownTime 40 //this might be TOO short though InitialCooldown 6 DesiredCount 1 BeginAtWave 1 RunForThisManyWaves 3 TFBot { Template T_TFBot_SentryBuster Attributes IgnoreEnemies Attributes DisableDodge CharacterAttributes { "damage force reduction" 0 } } } //SHAMK //a bit rewd to put that knoife in me chest innit bruv? //oi oi oi yeaouh wanka, wots ol this then? Ye got a loicense for gettin' stabbed? //I got me a loicense fer stabbin' right 'ere, //~ B Y T H E Q U E E N ~ //Well, a loicense is a loicense. Sorry mate, can't interfeah. //Bloody Hell. //Bit sad, innit? Mission { Objective Spy Where spawnbot_mission_spy CooldownTime 45 InitialCooldown 30 DesiredCount 3 BeginAtWave 4 RunForThisManyWaves 1 TFBot { Template T_TFBot_Scout_Knife Action Spy AddCond { Index 64 Delay 0.5 Duration 60 } } } //Wave 1 - Vanilla bots swarming you! //Subwave 1: Stock //- Super Scout + Super Bonk! Scout //- Scattergun Scout //- Bat Scout (crits; single spawn from tank spawn) //Subwave 2: Sandman //- Giant Armor League Scout + Major League Scout //- Hyper League Scout (crits) //- FaN Scout //Subwave 3: Jumping Sandman & Shortstop //- Giant Jumper League Scout (no damage bonus) //- Shortstop Scouts //Support: Force-a-Nature Scouts (no extra stats. vanilla enough.) Wave { StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } WaveSpawn { Name "wave1a1" Where spawnbot_tank WaitBetweenSpawnsAfterDeath 1 TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 50 TFBot { Template T_TFBot_Giant_Scout_Fast } } WaveSpawn { Name "wave1a1b" WaitForAllDead "wave1a1" Where flankers TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 50 TFBot { Template T_TFBot_Giant_Scout_Bonk Name "Giant Bonk! Scout" //WHY do they not have this name by DEFAULT ClassIcon scout_bonk_nys } } WaveSpawn { Name "wave1a" WaitForAllDead "wave1a1" Where spawnbot WaitBeforeStarting 1 WaitBetweenSpawnsAfterDeath 1 TotalCount 2 MaxActive 1 SpawnCount 1 TotalCurrency 150 TFBot { Template T_TFBot_Giant_Scout_Fast } } WaveSpawn { Name "wave1a1b" WaitForAllSpawned "wave1a" Where flankers TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 50 TFBot { Template T_TFBot_Giant_Scout_Bonk ClassIcon scout_bonk_nys CharacterAttributes { "move speed penalty" 0.9 } } } WaveSpawn { Name "wave1a2" Where spawnbot WaitBeforeStarting 0.5 WaitBetweenSpawns 2 TotalCount 48 MaxActive 24 SpawnCount 8 TotalCurrency 48 TFBot { Template T_TFBot_Scout_Scatter } } WaveSpawn { Name "wave1a2" Where spawnbot_tank WaitBeforeStarting 8 WaitBetweenSpawns 2 TotalCount 8 MaxActive 8 SpawnCount 8 TotalCurrency 8 TFBot { Template T_TFBot_Scout_Bat Attributes AlwaysCrit } } WaveSpawn { Name "wave1a2" Where spawnbot WaitBeforeStarting 10 WaitBetweenSpawns 2 TotalCount 40 MaxActive 16 SpawnCount 4 TotalCurrency 40 TFBot { Template T_TFBot_Scout_Bat Attributes AlwaysCrit } } WaveSpawn { Name "wave1a2_allspawn" WaitForAllSpawned "wave1a2" FirstSpawnOutput { Target bignet Action "RunScriptCode" Param "EntFire(`spawnbot`,`Disable`) EntFire(`spawnbot`,`Enable`,``,10)" } } WaveSpawn { Name "wave1a2_alldead" WaitForAllDead "wave1a2" DoneOutput { Target bignet Action "RunScriptCode" Param "EntFire(`spawnbot`,`Enable`)" } } WaveSpawn { Name "wave1b" WaitForAllSpawned "wave1a2" Where spawnbot WaitBeforeStarting 2 WaitBetweenSpawns 10 TotalCount 4 MaxActive 3 SpawnCount 2 TotalCurrency 200 Squad { NoFormation 1 TFBot { Template T_TFBot_Giant_Scout_Baseball_Armored } TFBot { Template T_TFBot_Giant_Scout_Baseball } } } WaveSpawn { Name "wave1b2" WaitForAllSpawned "wave1a2" Where spawnbot_tank WaitBeforeStarting 2 WaitBetweenSpawns 0.4 TotalCount 48 MaxActive 16 SpawnCount 1 TotalCurrency 48 TFBot { Template T_TFBot_Scout_Sandman_FastCharge Attributes AlwaysCrit } } WaveSpawn { Name "wave1b3" WaitForAllSpawned "wave1b2" Where spawnbot Where flankers WaitBetweenSpawns 3 TotalCount 48 MaxActive 16 SpawnCount 4 TotalCurrency 48 TFBot { Class Scout Skill Normal AimTrackingInterval 0.4 ClassIcon scout_fan Name "Force-a-Nature Scout" Item "The Bolt Boy" Item "The Force-a-Nature" MaxVisionRange 600 } } WaveSpawn { Name "wave1c" WaitForAllDead "wave1b" Where spawnbot WaitBeforeStarting 2 WaitBetweenSpawns 8 TotalCount 20 MaxActive 8 SpawnCount 4 TotalCurrency 208 Squad { NoFormation 1 TFBot { Template T_TFBot_Giant_Scout_Jumping_Sandman Name "Giant Jumper League Scout" AutoJumpMin 7 AutoJumpMax 7 ItemAttributes { ItemName "The Sandman" "damage bonus" 1 } } NextSpawnerClone 3 TFBot { Template T_TFBot_Scout_Shortstop } } } } // Wave 2 - Basic Custom bots ftw //Subwave 1: MvM DPS Experts - threat //- Giant Shortstop Scout (armored) //- Cola Popper Scouts //Subwave 2: Mann Up + Comp - support & bomb pressure, low threat //- Super Pocket Pistol Scout //- Milk 'n Mark Scout //- Armored Burst Fire Scout (SLOW!) //Subwave 3: //- Giant Winger Scout (armored+crit, SLOW fire rate) + Conch FaN Scout //Support: Homewrecker Scouts (hyperfocus sentries) Wave { InitWaveOutput { Target "bignet" Action "RunScriptCode" Param "IncludeScript(`seel_runtime.nut`,getroottable())" } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } WaveSpawn { Name "wave2a" Where spawnbot_tank TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 90 TFBot { Template T_TFBot_Giant_Scout_Shortstop_Burst } } WaveSpawn { Name "wave2a3" Where spawnbot WaitBeforeStarting 12 TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 90 TFBot { Template T_TFBot_Giant_Scout_Shortstop_Burst } } WaveSpawn { Name "wave2a4" WaitForAllDead "wave2a" Where spawnbot TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 90 TFBot { Template T_TFBot_Giant_Scout_Shortstop_Burst } } WaveSpawn { Name "wave2a2" Where spawnbot WaitBeforeStarting 1 TotalCount 45 MaxActive 15 SpawnCount 5 TotalCurrency 90 TFBot { Template T_TFBot_Scout_SodaPopper } } WaveSpawn { Name "wave2b" WaitForAllDead "wave2a" WaitForAllSpawned "wave2a3" Where spawnbot WaitBeforeStarting 10 WaitBetweenSpawnsAfterDeath 6 TotalCount 3 MaxActive 1 SpawnCount 1 TotalCurrency 90 TFBot { Template T_TFBot_Giant_Scout_PocketPistol } } WaveSpawn { Name "wave2b2" WaitForAllDead "wave2a" Where flankers WaitBetweenSpawns 0.1 TotalCount 100 MaxActive 10 SpawnCount 1 TotalCurrency 100 TFBot { Template T_TFBot_Scout_MilkMark } } WaveSpawn { Name "wave2b3" WaitForAllSpawned "wave2a2" Where spawnbot WaitBeforeStarting 4 WaitBetweenSpawns 6 TotalCount 18 MaxActive 9 SpawnCount 3 TotalCurrency 90 TFBot { Template T_TFBot_Scout_Burst_Armored } } WaveSpawn { Name "wave2c" WaitForAllDead "wave2b" Where flankers TotalCount 8 MaxActive 5 SpawnCount 4 TotalCurrency 80 Squad { TFBot { Template T_TFBot_Giant_Scout_Winger } TFBot { Template T_TFBot_Scout_FaN_Conch } TFBot { Template T_TFBot_Scout_FaN_Conch } TFBot { Template T_TFBot_Scout_FaN_Conch } } } WaveSpawn { Name "wave2c" WaitForAllDead "wave2b3" Where spawnbot TotalCount 8 MaxActive 5 SpawnCount 4 TotalCurrency 80 Squad { TFBot { Template T_TFBot_Giant_Scout_Winger } TFBot { Template T_TFBot_Scout_FaN_Conch } TFBot { Template T_TFBot_Scout_FaN_Conch } TFBot { Template T_TFBot_Scout_FaN_Conch } } } WaveSpawn { Name "Support" Where flankers WaitBeforeStarting 10 WaitBetweenSpawnsAfterDeath 1 TotalCount 10 MaxActive 1 SpawnCount 1 TotalCurrency 0 Support 1 TFBot { Template T_TFBot_Scout_Homewrecker } } } // Wave 3 - Deeper customs, first boss(es)! //Subwave 1: Fire, fire, fire //- Giant Sun-Tossing Scout //- Giant Flare-Scatter Scout //- Melting Laser Scout (Manmelter spammer) //- Spellcaster Scout (Fireball) [Mobber] //Subwave 2: Bombs! I want it! //- Major Bomber League Scout (burst demo) //- Demolition League Scout (armored demo) //- Bomber League Scout (demo) //Subwave 2: Lasery Bosses //- Chief Atomic Annihilator (Bison) //- Chief Molecular Mangler (Mangler) //- Chief Subatomic Smasher (Pomson) //Support: //- Batsaber Scout [Mobber] SpawnTemplate PT_Text_HumanMobbers Wave { InitWaveOutput { Target "bignet" Action "RunScriptCode" Param "IncludeScript(`seel_ins.nut`,getroottable()) IncludeScript(`seel_runtime.nut`,getroottable()) //Cleanup existing thinkent for (local ent; ent = Entities.FindByName(ent,`_thinkent_bomballs`);) ent.Kill() SeelRuntime.hBombTF <- SpawnEntityFromTable(`logic_script`,{ targetname = `_thinkent_bomballs` }) SeelRuntime.hBombTF.ValidateScriptScope() SeelRuntime.hBombTF.GetScriptScope().Balls2BombsThink <- SeelRuntime.BallsToBombsThink AddThinkToEnt(SeelRuntime.hBombTF, `Balls2BombsThink`) " } StartWaveOutput { Target "wave_start_relay" Action Trigger } DoneOutput { Target "wave_finished_relay" Action Trigger } WaveSpawn { Name "wave3a2" Where spawnbot_invasion WaitBeforeStarting 5 WaitBetweenSpawns 0.05 TotalCount 12 MaxActive 12 SpawnCount 1 TotalCurrency 12 StartWaveOutput { Target "mobber_infotext" Action Show Delay 0.1 } TFBot { Template T_TFBot_Scout_Manmelter } } WaveSpawn { Name "wave3a" Where spawnbot WaitBeforeStarting 3.5 WaitBetweenSpawns 12 TotalCount 3 MaxActive 3 SpawnCount 1 TotalCurrency 120 TFBot { Template T_TFBot_Giant_Scout_Sun_Tosser } } WaveSpawn { Name "wave3a" Where spawnbot WaitBeforeStarting 9.5 WaitBetweenSpawns 12 TotalCount 3 MaxActive 3 SpawnCount 1 TotalCurrency 120 TFBot { Template T_TFBot_Giant_Scout_Flare } } WaveSpawn { Name "wave3a2" Where spawnbot WaitBeforeStarting 4 WaitBetweenSpawns 2 TotalCount 60 MaxActive 12 SpawnCount 4 TotalCurrency 120 TFBot { Template T_TFBot_Scout_Manmelter } } WaveSpawn { Name "wave3a2" //3 Where flankers WaitBeforeStarting 5 WaitBetweenSpawns 6 TotalCount 8 MaxActive 4 SpawnCount 1 TotalCurrency 80 TFBot { Template T_TFBot_Scout_Spell } } // WaveSpawn // { // Name "wave3a2" // WaitForAllSpawned "wave3a3" // Where spawnbot // WaitBeforeStarting 4.5 // WaitBetweenSpawns 2 // TotalCount 8 // MaxActive 4 // SpawnCount 1 // TotalCurrency 40 // TFBot // { // Template T_TFBot_Scout_Spell // } // } WaveSpawn { Name "wave3b1" WaitForAllDead "wave3a" Where spawnbot_chief WaitBetweenSpawns 10 TotalCount 4 MaxActive 3 SpawnCount 1 TotalCurrency 66 TFBot { Template T_TFBot_Giant_Scout_BomberLeague } } WaveSpawn { Name "wave3b2" WaitForAllDead "wave3a2" Where flankers WaitBeforeStarting 6 WaitBetweenSpawns 6 TotalCount 15 MaxActive 6 SpawnCount 3 TotalCurrency 30 TFBot { Template T_TFBot_Scout_BomberLeague_Armored } } WaveSpawn { Name "wave3b2" WaitForAllDead "wave3a2" Where spawnbot WaitBeforeStarting 5 WaitBetweenSpawns 4 TotalCount 42 MaxActive 12 SpawnCount 6 TotalCurrency 42 TFBot { Template T_TFBot_Scout_BomberLeague } } WaveSpawn { Name "wave3c" WaitForAllSpawned "wave3b2" Where spawnbot WaitBeforeStarting 2 TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 100 TFBot { Template T_TFBot_Chief_Scout_Laser_Mangler } } WaveSpawn { Name "wave3c" WaitForAllSpawned "wave3b2" Where flankers WaitBeforeStarting 3 TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 100 TFBot { Template T_TFBot_Chief_Scout_Laser_Pomson } } WaveSpawn { Name "wave3c" WaitForAllSpawned "wave3b2" Where spawnbot WaitBeforeStarting 4 TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 100 TFBot { Template T_TFBot_Chief_Scout_Laser_Bison } } WaveSpawn { Name "Support" WaitForAllSpawned "wave3b2" Where spawnbot_invasion WaitBeforeStarting 3 WaitBetweenSpawns 5 TotalCount 10 MaxActive 15 SpawnCount 5 TotalCurrency 10 Support 1 RandomChoice { TFBot { Template T_TFBot_Scout_Batsaber_Mobber ItemAttributes { ItemName "Batsaber" "set item tint rgb" 6016762 //blue } } TFBot { Template T_TFBot_Scout_Batsaber_Mobber ItemAttributes { ItemName "Batsaber" "set item tint rgb" 16017797 //pink } } TFBot { Template T_TFBot_Scout_Batsaber_Mobber ItemAttributes { ItemName "Batsaber" "set item tint rgb" 6016762 //white } } } } WaveSpawn { Name "Icon For Precaching So It Gets Downloaded Properly" // WaitForAllDead "wave3b" TotalCount 1 MaxActive 1 SpawnCount 1 HideIcon 1 Support Limited Squad { TFBot { Class Scout Health 5 ClassIcon engineer_pomson_v2 } TFBot { Class Scout Health 5 ClassIcon soldier_bison_spammer } TFBot { Class Scout Health 5 ClassIcon soldier_mangler_burst } } } } // Wave 4 - The Engineer Wave(tm), with extras! //Subwave 1: First Teleporter //- Giant Teleporter Scout //Telein: //- Super Pocket Pistol Scout //- Giant Sentry-Slinger Scout //- Pomson Scout (crit) //Subwave 2: Double Teleporter //- Giant Teleporter Scout //Telein: //- Rocketstop Scouts //- Giant Teleporter Scout //Telein: //- Giant Dispenser Scout + Rocketstop Scouts //- Giant Dispenser Scout + Rocketstop Scouts //- Burst Fire Scouts (not armored!) //Subwave 3: Stacked Builders //- Giant Rapid Pomson Scout x2 + Giant Sentry-Slinger Scout + Giant Dispenser Scout //Support: //- Shanker Scout (spy spawns) Wave { InitWaveOutput { Target "bignet" Action "RunScriptCode" Param " IncludeScript(`seel_runtime.nut`,getroottable()) " } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } WaveSpawn { Name "wave4a1" Where spawnbot TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 0 TFBot { Template T_TFBot_Giant_Scout_Teleporter } } WaveSpawn { Name "wave4a1b" WaitForAllDead "wave4a1" WaitBeforeStarting 2 Where spawnbot_chief TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 20 TFBot { Template T_TFBot_Giant_Scout_PocketPistol } } WaveSpawn { Name "wave4a2" WaitForAllDead "wave4a1" Where spawnbot_chief WaitBeforeStarting 2.5 WaitBetweenSpawns 0.5 TotalCount 8 MaxActive 8 SpawnCount 2 TotalCurrency 80 TFBot { Template T_TFBot_Scout_Pomson Attributes AlwaysCrit } } WaveSpawn { Name "wave4a" Where spawnbot WaitForAllDead "wave4a1" WaitBetweenSpawns 12 TotalCount 3 MaxActive 3 SpawnCount 1 TotalCurrency 120 TFBot { Template T_TFBot_Giant_Scout_Sentry_Spawner } } WaveSpawn { Name "wave4a3" WaitForAllDead "wave4a1b" WaitBeforeStarting 12 WaitBetweenSpawnsAfterDeath 20 Where spawnbot_tank TotalCount 2 MaxActive 1 SpawnCount 1 TotalCurrency 40 TFBot { Template T_TFBot_Giant_Scout_PocketPistol } } WaveSpawn { Name "wave4a2" WaitForAllDead "wave4a1" WaitBeforeStarting 5 Where spawnbot_invasion WaitBetweenSpawns 4 TotalCount 60 MaxActive 18 SpawnCount 6 TotalCurrency 60 TFBot { Template T_TFBot_Scout_Pomson Attributes AlwaysCrit } } WaveSpawn { Name "wave4b1" WaitForAllDead "wave4a" Where spawnbot TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 0 TFBot { Template T_TFBot_Giant_Scout_Teleporter } } WaveSpawn { Name "wave4b1b" WaitForAllDead "wave4b1" WaitBeforeStarting 2 Where spawnbot_chief TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 0 TFBot { Template T_TFBot_Giant_Scout_Teleporter } } WaveSpawn { Name "wave4b2" WaitForAllDead "wave4b1" WaitBeforeStarting 2.4 WaitBetweenSpawns 0.4 Where spawnbot_chief TotalCount 6 MaxActive 6 SpawnCount 1 TotalCurrency 60 TFBot { Template T_TFBot_Scout_RocketStop } } WaveSpawn { Name "wave4b" WaitForAllDead "wave4b1b" WaitBeforeStarting 2 Where spawnbot_chief TotalCount 4 MaxActive 4 SpawnCount 4 TotalCurrency 120 Squad { TFBot { Template T_TFBot_Giant_Scout_Dispenser } TFBot { Template T_TFBot_Scout_RocketStop } TFBot { Template T_TFBot_Scout_RocketStop } TFBot { Template T_TFBot_Scout_RocketStop } } } WaveSpawn { Name "wave4b" WaitForAllDead "wave4b1" WaitBeforeStarting 5 Where spawnbot TotalCount 4 MaxActive 4 SpawnCount 4 TotalCurrency 120 Squad { TFBot { Template T_TFBot_Giant_Scout_Dispenser } TFBot { Template T_TFBot_Scout_RocketStop } TFBot { Template T_TFBot_Scout_RocketStop } TFBot { Template T_TFBot_Scout_RocketStop } } } WaveSpawn { Name "wave4b2" WaitForAllDead "wave4a2" WaitForAllSpawned "wave4b1b" Where spawnbot WaitBetweenSpawns 5 TotalCount 30 MaxActive 9 SpawnCount 3 TotalCurrency 120 TFBot { Template T_TFBot_Scout_Burst } } WaveSpawn { Name "wave4c" WaitForAllDead "wave4b" Where spawnbot_tank TotalCount 4 MaxActive 4 SpawnCount 4 TotalCurrency 160 Squad { ShouldPreserveSquad 1 TFBot { Template T_TFBot_Giant_Scout_Dispenser } TFBot { Template T_TFBot_Giant_Scout_Pomson } TFBot { Template T_TFBot_Giant_Scout_Pomson } TFBot { Template T_TFBot_Giant_Scout_Sentry_Spawner } } } } // Wave 5 - Soda Wave ft. the Squad //Subwave 1: The Lads //- Sweaty Scout Squad //- Giant Bonk! Scout (crit?) //- Cola Popper Scouts //Subwave 2: Power-up! //- Giant Regen Bonk! Scout //- Hasty Bomber League Scouts (Rapid fire, no temp buff?) //Subwave 3: HIS GLORIOUS RETURN //- Jeremessiah 2.0 //- Giant Bonk! Scout //- Bonch! Scout //Support: //- Shanker Scout (spy spawns) Wave { SpawnTemplate "PT_Text_SweatyScoutSquad" InitWaveOutput { Target "bignet" Action "RunScriptCode" Param "IncludeScript(`seel_runtime.nut`,getroottable()) AddThinkToEnt(self,`BallsToBombsThink`)" } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } WaveSpawn { Name "wave5a" WaitBeforeStarting 14 WaitBetweenSpawnsAfterDeath 10 Where spawnbot TotalCount 3 MaxActive 1 SpawnCount 1 TFBot { Template T_TFBot_Giant_Scout_Bonk ClassIcon scout_bonk_nys } } WaveSpawn { Name "wave5a2" WaitBeforeStarting 16 WaitBetweenSpawns 4 Where spawnbot Where flankers TotalCount 45 MaxActive 15 SpawnCount 5 TFBot { Template T_TFBot_Scout_SodaPopper_Cola } } WaveSpawn { Name "wave5a3" Where spawnbot TotalCount 1 MaxActive 1 SpawnCount 1 FirstSpawnOutput { Target "wcq_text_relay" Action Trigger Delay 0.5 } DoneOutput { Target "bignet" Action "RunScriptCode" Param "EntFire(`!activator`,`RunScriptCode`,`DeathPrint_1()`,1,self) function DeathPrint_1() { ClientPrint(null,3,`\x07FCECCB*DEAD* \x0799CCFFJeremy, Arrogant Attacker \x07FCECCB: Oh my god, you all suck`) }" } TFBot { Template T_TFBot_Player_Scout_Jeremy } } WaveSpawn { Name "wave5a3" Where spawnbot TotalCount 1 MaxActive 1 SpawnCount 1 DoneOutput { Target "bignet" Action "RunScriptCode" Param " EntFire(`!activator`,`RunScriptCode`,`DeathPrint_2()`,1,self) EntFire(`!activator`,`RunScriptCode`,`DeathPrint_2b()`,1,self) function DeathPrint_2() { ClientPrint(null,3,`\x07FCECCB*DEAD* \x0799CCFFKING JEREMIAH \x07FCECCB: INVADER BANISHED`) } function DeathPrint_2b() { ClientPrint(null,3,`\x07FCECCBKING JEREMIAH left the game (Returned to their world.)`) }" } TFBot { Template T_TFBot_Player_Scout_Flare } } WaveSpawn { Name "wave5a3" Where spawnbot TotalCount 1 MaxActive 1 SpawnCount 1 DoneOutput { Target "bignet" Action "RunScriptCode" Param "EntFire(`!activator`,`RunScriptCode`,`DeathPrint_3()`,1,self) EntFire(`!activator`,`RunScriptCode`,`DeathPrint_3b()`,2.7,self) EntFire(`!activator`,`RunScriptCode`,`DeathPrint_3b()`,3.7,self) function DeathPrint_3() { ClientPrint(null,3,`\x07FCECCB*DEAD* \x0799CCFFJeremius the Blood-oath Lord \x07FCECCB: FUCK OFF!!!!!!`) } function DeathPrint_3b() { ClientPrint(null,3,`\x07FCECCB*DEAD* \x0799CCFFJeremius the Blood-oath Lord \x07FCECCB: ugh whtvr i;m not wasting any time on thsi trash`) } function DeathPrint_3c() { ClientPrint(null,3,`\x07FCECCBJeremius the Blood-oath Lord left the game (Disconnect by user.)`) }" } TFBot { Template T_TFBot_Player_Scout_ShortstopCleaver } } WaveSpawn { Name "wave5a3" Where spawnbot TotalCount 1 MaxActive 1 SpawnCount 1 DoneOutput { Target "bignet" Action "RunScriptCode" Param "EntFire(`!activator`,`RunScriptCode`,`DeathPrint_4()`,1,self) function DeathPrint_4() { ClientPrint(null,3,`\x07FCECCB*DEAD* \x0799CCFFJester Jerome \x07FCECCB: n1`) }" } TFBot { Template T_TFBot_Player_Scout_BackScatter } } WaveSpawn { Name "wave5a3" Where spawnbot TotalCount 1 MaxActive 1 SpawnCount 1 DoneOutput { Target "bignet" Action "RunScriptCode" Param "EntFire(`!activator`,`RunScriptCode`,`DeathPrint_5()`,1,self) EntFire(`!activator`,`RunScriptCode`,`DeathPrint_5b()`,2.5,self) SeelRuntime.DeathPrint_5 <- function() { ClientPrint(null,3,`\x07FCECCB*DEAD* \x0799CCFFThe Festive Jeremix \x07FCECCB: hehe`) } SeelRuntime.DeathPrint_5b <- function() { ClientPrint(null,3,`\x07FCECCB*DEAD* \x0799CCFFThe Festive Jeremix \x07FCECCB: fan+bonk go brrrr`) }" } TFBot { Template T_TFBot_Player_Scout_FAN_Bonk } } WaveSpawn { Name "wave5a3" Where spawnbot TotalCount 1 MaxActive 1 SpawnCount 1 DoneOutput { Target "bignet" Action "RunScriptCode" Param " EntFire(`!activator`,`RunScriptCode`,`DeathPrint_6()`,1,self) EntFire(`!activator`,`RunScriptCode`,`DeathPrint_6b()`,3,self) function DeathPrint_6() { ClientPrint(null,3,`\x07FCECCB*DEAD* \x0799CCFFYour Savior: Jeremessiah \x07FCECCB: idiots`) } function DeathPrint_6b() { ClientPrint(null,3,`\x07FCECCB*DEAD* \x0799CCFFYour Savior: Jeremessiah \x07FCECCB: im literally carrying you`) }" } TFBot { Template T_TFBot_Player_Scout_TheBastard } } } Wave { InitWaveOutput { Target "bignet" Action "RunScriptCode" Param " IncludeScript(`seel_runtime.nut`,getroottable()) SINS.ChangeIconFlags(`tf2_lite`,1) " } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } WaveSpawn { Name "TEST" Where spawnbot WaitBetweenSpawns 5 TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 10 Squad { TFBot { Template T_TFBot_Chief_Scout_Soda Health 125 CharacterAttributes { "damage penalty" 0 } } } } WaveSpawn { Name "TEST" Where spawnbot WaitBetweenSpawns 2.5 TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 0 TFBot { Class Scout Attributes IgnoreEnemies Attributes MiniBoss Health 5 CharacterAttributes { "health regen" -5 } } } WaveSpawn { Name "TEST2" WaitForAllDead "TEST" Where spawnbot_hatch WaitBetweenSpawns 2.5 TotalCount 3 MaxActive 1 SpawnCount 1 TotalCurrency 10 TFBot { Class Scout WeaponRestrictions MeleeOnly Action Mobber Scale 1.75 UseHumanModel 2 Item "Bastard's Hat" Item "Prick's Shirt" Item "Jerk's Boots" Item "Employee Badge A" DesiredAttackRange 750 ClassIcon scout_bonch ItemAttributes { ItemName "Employee Badge A" "custom item model" "models/weapons/c_models/c_shogun_warbanner/c_shogun_warbanner.mdl" "attachment name" "prop_bone" "attachment scale" 0 "attachment angles" "120 -90 -30" } AddAttribute { Item "Employee Badge A" Name "attachment offset" Value "-45 40 10" Delay 0.1 Repeats 1 } AddAttribute { Item "Employee Badge A" Name "attachment scale" Value "1.25" Delay 0 Repeats 1 IfHealthBelow 101 } FireInput { Target "!self" Action "$GiveItem" Param "Bonch!" Delay 1.5 } ItemAttributes { ItemName "TF_WEAPON_BAT" "provide on active" 1 "no_attack" 1 "move speed penalty" 0.35 } } } } }