//Arbitrary Aggrievocation, by Seelpit //Extra credits: //- lite and washy: various PointTemplates, such as the capture points //- royal: Fixing up the Carbinewacka template, general insanity. //- Eve: custom capture area model and general PointTemplates inspiration //- PigPig: originally made the map //- Braindawg: majority of logic to make the map suited for reverse //- Hellblade: boss inspiration and advice, + being super cute //Somewhat difficult? //An extremely dumb expert that is actually a normal mission with global weapon nerfs. //haha just kidding it's an engie-only reverse mission yeehaw //Main gimmicks: //- Engie-only. Custom upgrades only. //- Each wave gets a different objective, or a slight twist on it. //- Objectives may include: // - Standard bomb deploy, with a VIP // - Gate capture, followed by bomb deploy. May be replacing the control point instead. // - Tank escort // - VIP protection //ORDER: //The opposite "side" is used for the intended path, as this flows moderately better. //wave 1: Gate skip. VIP escort. -- red path //wave 2: Point capture, VIP gate + escort. -- blue path //wave 3: Point capture, VIP gate + escort. -- red path //wave 4: Gate capture, tank escort. -- red path //wave 5: TIMED BOSS BATTLE: FR-33/M4-N -- main spawn, use blue path to start. //wave 6: protect a boss...as red bots! -- SIDE: red spawn! //spawnbot names: //spawnbot: "front" random //spawnbot_front_left: "blue" side, front //spawnbot_right: blue side //spawnbot_front_right: "red" side, front //spawnbot_left: red side //yes this is dumb //relay names: //wave_finished_nextwave_random ; finished relay + set path to == random //wave_finished_nextwave_random_consistent ; "" + set path to == "", and be consistent after wave fail //wave_finished_nextwave_right ; "" + set path to == blue side //wave_finished_nextwave_left ; "" + set path to == red side //required tags: //bomb_carrier ; for bomb-aimed bots, aka all blue bots //nav_prefer_gate_flank ; for gatebots //extra things //- engiebots at fake locs; spawn a sentry, then InterruptAction the engies to target it. They'll revert to base behavior w/o sentry, so make them mobber! //- sniper bots at fake locs; force them to go to target, prevent jump, force a mouse2 input, -100% aim move speed, use Focus w inf duration to stay scoped, target closest player. //- Chief Milk-splosion Demo! //- wrangler engies with sentries on top of them //- Robo-Freeman! //- King-buffing ally bot (titan?) //New-new structure! Please test. //- Part 1: capture point, play to engie's defensive role //Dynamic aspect: slightly change where the "point" spawns. //Can be near choke, in garage, etc. //- Part 2: capture gate with summoned gatebots //- Part 3: capture bomb! //BONUS: do not apply for all current waves! can keep wave 1. //Blue side is a bit too long for this to work properly. //Testing notes: TODO //- COnsider payouts all to 350$ //- Nerf pistol --DONE //- maybe buff building upgrades slightly? //W1 //- Start was strongest, consider making rest a bit more? Re-test without OP pistol. //W2 //- Pace was noticably off. Consider better spawning mechanisms for reserves as well? //W3 //- Puff-n-Sting Pyros were oppressive, maybe lower spawncounts slightly //- Or Flare Rain Pyros. Either way, too much! //W4 //- Nerf Giant Pyro to minigiant; lives too long, does too much --DONE //- Consider buffing up bots at this point; too fragile to deal enough damage to tank // - Carbinewacka buffed //W5 //- Needs retest to see how Jeremy performs //- Boss may be too weak for this point //W6 //- Retest required. Double-check if blimps work correctly! --Blimps work now //- Disable relay for 43'ing during finale --done //Changelog: //- Upgrades: // - Runner: now also boosts jump height by 10% // - Pistol: no more headshots. Damage nerfed to 25%|100%, cost up to 100$ // - Drain: now exclusively restores health on kill; up to 20%|80%. // - Sentry: damage increased to 20%|80%. // - Dispenser: radius increased to 100%|400%. // - All "special" upgrades (pene, headshot, homing) are now locked until wave 3 // - Healthup: tier 2 and 3 are now locked until wave 3 and 5, respectively //- W1 -> //- W2 -> //- W3 -> //- W5 -> more functional //- W6 -> more functional, still needs check for bosses and blu_special #base robot_standard.pop #base robot_giant.pop #base robot_gatebot.pop #base robot_giant_red.pop //Braindawg-made, RED variants of Valve bots #base robot_standard_red.pop //Usage: T_TFBot_Red_Template_Name #base robot_gatebot_red.pop //f.e. T_TFBot_Red_Soldier (NOTE: uses UseBestWeapon) //alternatively, add Template RedBot to it - adds on Action Mobber and the reprogram addcond popuwashyon { StartingCurrency 300 CanBotsAttackWhileInSpawnRoom Yes RespawnWaveTimeBlue 4 FixedRespawnWaveTimeBlue 1 TextPrintTime 0 BonusRatioHalf 1.1 BonusRatioFull 1.1 //Copied from Braindawg's reverse; "fixes". NoMvMDeathTune 1 SniperAllowHeadshots 1 //change if required SentryBusterFriendlyFire 0 ImprovedAirblast 0 //NO!!!! SendBotsToSpectatorImmediately 1 //Moar fixes NoRedBotsRandomCrit 1 //get fucked //Player mods NoReanimators 1 ReverseWinConditions 1 BluHumanFlagCapture 0 //engies don't cap flags, dummy BluHumanFlagPickup 0 AllowJoinTeamBlueMax 6 AllowJoinTeamBlue 1 HumansMustJoinTeam blue BluPlayersAreRobots 1 SetCreditTeam 3 BluHumanInfiniteAmmo 0 //give dispensers more reason to exist BluHumanSpawnNoShoot 0 //lets you test yer guns NoBluHumanFootsteps 1 //New addition from raf, since 09-06-'22! MaxTotalPlayers 6 //ya RobotLimit 26 //yes yes yes BluHumanBotTeleporter 0 //perhaps restrict to only Eureka? BotsUsePlayerTeleporters 0 //prevent weirdness FlagEscortCountOffset 10 //adds onto it, from 4 AllowFlagCarrierToFight 1 //thonk? ExtendedUpgradesOnly 1 //a very [specil] deal //Announcer sounds disabled //All dead; DisableSound "Announcer.MVM_All_Dead" //Bomb responses; DisableSound "Announcer.MVM_Bomb_Alert_Entered" DisableSound "Announcer.MVM_Bomb_Alert_Near_Hatch" DisableSound "Announcer.MVM_Bomb_Alert_Deploying" //Tank responses; DisableSound "Announcer.MVM_Tank_Planted" DisableSound "Announcer.MVM_Tank_Alert_Spawn" DisableSound "Announcer.MVM_Tank_Alert_Another" DisableSound "Announcer.MVM_Tank_Alert_Multiple" DisableSound "Announcer.MVM_Tank_Alert_Halfway" DisableSound "Announcer.MVM_Tank_Alert_Halfway_Multiple" DisableSound "Announcer.MVM_Tank_Alert_Near_Hatch" DisableSound "Announcer.MVM_Tank_Alert_Deploying" //cool models PrecacheModel "models/props_mvm/mvm_upgrade_blu_center.mdl" PrecacheModel "models/props_mvm/mvm_upgrade_blu_tools.mdl" PrecacheModel "models/props_mvm/no_entry.mdl" PrecacheModel "models/bots/sniper_boss/bot_sniper_boss.mdl" PrecacheModel "models/props_gameplay/cap_square_256.mdl" PrecacheModel "models/props_gameplay/cap_square_512.mdl" PrecacheModel "models/bots/boss_bot/boss_blimp.mdl" PrecacheModel "models/weapons/c_models/c_cratesmasher/c_cratesmasher_1.mdl" PrecacheModel "models/weapons/c_models/c_rapidfire/c_rapidfire_1.mdl" PrecacheModel "models/props_mvm/reversemvm_redbot_wall.mdl" PrecacheModel "models/props_mvm/reversemvm_redwall_112x152.mdl" PrecacheModel "models/props_mvm/reversemvm_redwall_112x248.mdl" PrecacheModel "models/props_mvm/reversemvm_redwall_112x320.mdl" PrecacheModel "models/props_mvm/reversemvm_redwall_176x120.mdl" PrecacheModel "models/props_mvm/reversemvm_redwall_176x152.mdl" PrecacheModel "models/props_mvm/reversemvm_redwall_256x288.mdl" PrecacheModel "models/props_mvm/reversemvm_redwall_352x196.mdl" PrecacheModel "models/props_mvm/reversemvm_redwall_384x224.mdl" PrecacheModel "models/props_mvm/reversemvm_redwall_512x320.mdl" PrecacheModel "models/props_mvm/reversemvm_redwall_640x300.mdl" PrecacheModel "models/props_mvm/reversemvm_redwall_640x418.mdl" PrecacheModel "models/props_mvm/reversemvm_redwall_696x337.mdl" PrecacheModel "models/props_mvm/reversemvm_redwall.mdl" //epic music PrecacheSound "HLAlyx_AntiCitizen.mp3" PrecacheSound "LukHash_H8U2_v2.mp3" // "OnTrigger" "!parent,AddOutput,OnHealthBelow90Percent !self:SetSpeed:85:0:-1,0,-1" // apparently you can do this ^ with triggers, for addoutput // Seems to be "Output Target:Action:Param:Time:Repeats" // bluesidedoor_0 thru 2: front // 3 thru 5: leads from factory to hatch bridge PointTemplates { //Taken directly from Braindawg, edited as seen fit. corelogic { NoFixup 1 //win logic game_round_win { "targetname" "bots_win_red" "origin" "-1611.31 4748.55 169.35" "TeamNum" "2" "switch_teams" "0" "force_map_reset" "1" "classname" "game_round_win" } //trigger this relay to make red win logic_relay { "targetname" "redwin_relay" "origin" "266.305756 514.122192 103.214890" "OnTrigger" "bots_win_red,RoundWin,,0,-1" "OnTrigger" "pit_explosion_wav,PlaySound,,0,-1" "OnTrigger" "player,setforcedtauntcam,1,0.1,-1" } logic_relay { "targetname" "mainrelay" //Disable the spy spawns, set their team to red, re-enable them "OnSpawn" "spawnbot_mission_spy*,Disable,,0,-1" "OnSpawn" "spawnbot_mission_spy*,SetTeam,2,0.01,-1" "OnSpawn" "spawnbot_mission_spy*,Enable,,10,-1" "OnSpawn" "func_tfbot_hint,Disable,,0,-1" // Remove filters for bombhat and red team // Remove alarm of gatecap, radiowaves, and the gatecap stun // Disables ALL trigger pushes // Remove thing that keeps closing doors //blue_bombhat -> gatebots + is blue. Kept for waves that need it. // "OnSpawn" "filter_blue_bombhat,Kill,,0,-1" "OnSpawn" "filter_redteam,Kill,,0.05,-1" //kill jump-pad and grinder filter "OnSpawn" "robot_radio_waves_beep,Kill,,0.1,-1" "OnSpawn" "bot_stun_reprogram,Kill,,0.2,-1" "OnSpawn" "trigger_push,Disable,,0.25,-1" //this map loves anti exploit trigger_pushes "OnSpawn" "logic_timer,Kill,,0.3,-1" //keeps closing doors // Removal of decorations "OnSpawn" "upgradedoor*,Kill,,0.32,-1" "OnSpawn" "Secretroom*,Kill,,0.34,-1" "OnSpawn" "forward_resupply_music*,Kill,,0.36,-1" "OnSpawn" "resupply_music,Kill,,0.4,-1" "OnSpawn" "grinder*,Kill,,0.42,-1" //these 3 alone are almost 100 edicts! "OnSpawn" "roof_chimneys,Kill,,0.44,-1" "OnSpawn" "move_rope,Kill,,0.46,-1" "OnSpawn" "keyframe_rope,Kill,,0.48,-1" //Once again Yiresa decides that left = RED and right = BLU... //When blu caps RED point: open red door; disable bot blocker; disable bombpath arrows //play sound; override the bot spawn pausing; change hudhint to mention bomb bots instead. "OnSpawn" "gate_left_capturezone,AddOutput,OnCapTeam2 redsidedoor*:Open::0:-1,0.5,-1" "OnSpawn" "gate_left_capturezone,AddOutput,OnCapTeam2 LeftSide_Door_blockbots:Disable::0:-1,0.52,-1" //bot blocker normally persists until stun ends "OnSpawn" "gate_left_capturezone,AddOutput,OnCapTeam2 bombpath_arrows_left_left:Disable::0.1:-1,0.54,-1" "OnSpawn" "gate_left_capturezone,AddOutput,OnCapTeam2 Free_robot_Sound:PlaySound::5:-1,0.56,-1" "OnSpawn" "gate_left_capturezone,AddOutput,OnCapTeam2 point_populator_interface:UnpauseBotSpawning::0.8:-1,0.56,-1" //I plan to use non-reset flag either way. // "OnSpawn" "gate_left_capturezone,AddOutput,OnCapTeam2 intel_new:Enable:0:-1" // "OnSpawn" "gate_right_capturezone,AddOutput,OnCapTeam2 intel_new2:Enable:0:-1" //When blue caps BLU point: Disable bot blocker. //Enable intel_new2 "OnSpawn" "gate_right_capturezone,AddOutput,OnCapTeam2 point_populator_interface:UnpauseBotSpawning::0.8:-1,0.56,-1" "OnSpawn" "gate_right_capturezone,AddOutput,OnCapTeam2 RightSide_Door_blockbots:Disable::0:-1,0.58,-1" // "OnSpawn" "RightSide_Door,AddOutput,OnOpen endright:Trigger::0:-1,0.6,-1" // "OnSpawn" "LeftSide_Door,AddOutput,OnOpen endleft:Trigger::0:-1,0.62,-1" // "OnSpawn" "RightSide_Door,AddOutput,OnOpen shopcollision:DisableCollision:0:-1" //nocollide the upgrade station on right gate // "OnSpawn" "intel*,AddOutput,OnPickupTeam1 intel*:ForceDrop:0:-1" //red shouldn't have that //Remove the stupid and annoying forced teleports out of everywhere. I dislike them greatly. "OnSpawn" "redside_teleport_out,Disable,,0.6,-1" "OnSpawn" "blueside_teleport_out,Disable,,0.61,-1" //Disable the "main" spawnbot. This spawns players in random spots, which is dumb. //It gets re-enabled sometimes, so this also ensures that it'll just re-disable it as well. "OnSpawn" "spawnbot,Disable,,0.62,-1" "OnSpawn" "disable_forward_spawns,AddOutput,OnTrigger spawnbot:Disable::0.05:-1,0.63,-1" //On wave start, open up anything named barrier*, and enable the nospawnshoot trigger "OnSpawn" "wave_start_relay,AddOutput,OnTrigger barrier*:DisableCollision::0:-1,0.64,-1" "OnSpawn" "wave_start_relay,AddOutput,OnTrigger barrier*:Disable::0:-1,0.66,-1" "OnSpawn" "wave_start_relay,AddOutput,OnTrigger no_spawnshoot:Enable::0:-1,0.68,-1" //And on wave finish, re-disable it. "OnSpawn" "wave_finished_relay,AddOutput,OnTrigger no_spawnshoot:Disable::0:-1,0.68,-1" //Because the timers are spawned in the wave, they don't properly add the output //to wave_start*. Therefore this is needed. "OnSpawn" "wave_start*,addoutput,ontrigger realtimer:trigger::0:-1,0,-1" // "OnSpawn" "wave_start_relay,AddOutput,OnTrigger bluesidedoor*:Close:0:-1" // "OnSpawn" "wave_start_relay,AddOutput,OnTrigger redsidedoor*:Close:0:-1" } //Re-enabling the logic for door closing based on side. //The respective triggers are en/disabled depending on which side is picked! logic_relay { "targetname" "door_picker" "OnSpawn" "wave_start_relay,AddOutput,OnTrigger door_picker:Trigger::0:-1,0.68,-1" "OnTrigger" "door_delay_blue,Trigger,,0.02,-1" "OnTrigger" "door_delay_red,Trigger,,0.02,-1" } // Caps the left point, red side logic_relay { "origin" "-1611.31 4748.55 169.35" "targetname" "forcecapleft" "OnTrigger" "gate_capturepoint,SetOwner,3,0.15,-1" "OnTrigger" "gate_capturepoint,SetOwner,3,0.1,-1" "OnTrigger" "gate_capturepoint,SetOwner,3,0,-1" "OnTrigger" "gate_prerequisite_door_left,Disable,,0.15,-1" "OnTrigger" "spawnbot*,Disable,,0.1,-1" "OnTrigger" "barrierteleleft,Disable,,0,-1" "OnTrigger" "LeftSide_Door,Open,,0.15,-1" "OnTrigger" "point_populator_interface,ChangeBotAttributes,RevertGateBotsBehavior,0.15,-1" "OnTrigger" "point_populator_interface,ChangeDefaultEventAttributes,RevertGateBotsBehavior,0.15,-1" "OnTrigger" "movespawns_left,Trigger,,0,-1" "OnTrigger" "intel_new2,Enable,,0,-1" "OnTrigger" "intel*,ForceReset,,0.5,-1" "OnTrigger" "redside_engineer_pastpoint,Enable,,0,-1" "OnTrigger" "redside_engineer,Disable,,0,-1" "OnTrigger" "LeftSide_Door_blockbots,Disable,,2,-1" "OnTrigger" "wave_finished_relay,CancelPending,,0,-1" } //Caps the right point, blue side logic_relay { "origin" "-1611.31 4748.55 169.35" "targetname" "forcecapblue" "OnTrigger" "gate_capturepoint,SetOwner,3,0.15,-1" "OnTrigger" "gate_capturepoint,SetOwner,3,0.1,-1" "OnTrigger" "gate_capturepoint,SetOwner,3,0,-1" "OnTrigger" "gate_prerequisite_door_right,Disable,,0.15,-1" "OnTrigger" "wave_start_relay,AddOutput,OnTrigger opengateright:Enable:0.1:-1,0,-1" // "OnTrigger" "barrierteleright,Disable,,0,-1" "OnTrigger" "RightSide_Door,Open,,0.15,-1" "OnTrigger" "point_populator_interface,ChangeBotAttributes,RevertGateBotsBehavior,0.15,-1" "OnTrigger" "point_populator_interface,ChangeDefaultEventAttributes,RevertGateBotsBehavior,0.15,-1" "OnTrigger" "movespawns_right,Trigger,,0,-1" "OnTrigger" "tele_bluegate_to_blue,Disable,,0,-1" "OnTrigger" "tele_bluegate_to_red,Disable,,0,-1" "OnTrigger" "tele_blue_to_bluegate,Enable,,0.01,-1" // "OnTrigger" "intel_new2,Enable,,0,-1" // "OnTrigger" "intel*,ForceReset,,0.5,-1" "OnTrigger" "bombpath_arrows_right_right,Enable,,0,-1" "OnTrigger" "bombpath_arrows_right_right,Disable,,22,-1" "OnTrigger" "blueside_engineer_pastpoint,Enable,,0,-1" "OnTrigger" "blueside_engineer,Disable,,0,-1" "OnTrigger" "RightSide_Door_blockbots,Disable,,5,-1" "OnTrigger" "wave_finished_relay,CancelPending,,0,-1" } //Forces right path logic_relay { "origin" "-1611.31 4748.55 169.35" "targetname" "forceright" "OnTrigger" "blueside_teleport_out,Enable,,1,-1" "OnTrigger" "bluesidedoor*,Close,,1,-1" "OnTrigger" "bot_bombpath_rightSidePick,Trigger,,1,-1" } //Forces left path logic_relay { "origin" "-1611.31 4748.55 169.35" "targetname" "forceleft" "OnTrigger" "blueside_teleport_out,Enable,,1,-1" "OnTrigger" "bluesidedoor*,Close,,1,-1" "OnTrigger" "bot_bombpath_leftSidePick,Trigger,,1,-1" } logic_relay { "origin" "-1611.31 4748.55 169.35" "targetname" "secondbarrier" "OnTrigger" "tempbarrierB*,Disable,,0,-1" "OnTrigger" "tankcapdoor_opener,Open,,0,-1" "OnTrigger" "left_tankdoor,Open,,0,-1" "OnTrigger" "right_tankdoor,Open,,0,-1" } //Opens red and tankdoors logic_relay { "origin" "-1611.31 4748.55 169.35" "targetname" "opentankdoors" "OnTrigger" "frontline_tankdoor_clock,Kill,,0,-1" "OnTrigger" "opentankdoor_frontline*,Trigger,,0.01,-1" "OnTrigger" "opentankdoor_frontline*,Trigger,,0.01,-1" "OnTrigger" "redsidedoor*,Open,,0.01,-1" } //Closes blue side doors logic_relay { "origin" "-1611.31 4748.55 169.35" "targetname" "closerightdoors" "OnTrigger" "game_playerkill,Enable,,0.1,-1" "OnTrigger" "bluesidedoor*,Close,,0.1,-1" } //Opens blue side doors and tank doors logic_relay { "origin" "0 0 0" "targetname" "openrightdoors" "OnTrigger" "bluesidedoor*,Open,,1,-1" "OnTrigger" "game_player*,Kill,,0,-1" "OnTrigger" "_leftrrrfrontline_tankdoor,Open,,1,-1" "OnTrigger" "tankcapdoor_opener,Open,,0.1,-1" } //Close tank doors; set the skin of alarm to "off". logic_relay { "origin" "-1611.31 4748.55 169.35" "targetname" "closetankdoors" "OnTrigger" "frontline_tankdoor,Close,,0,-1" "OnTrigger" "gatealarm_fartted,StopSound,,0,-1" "OnTrigger" "Tankdoor_prop_frontline,SetAnimation,1,0,-1" "OnTrigger" "Tankdoor_prop_frontline,Skin,1,0,-1" "OnTrigger" "tempbarrierA*,Enable,,0.01,-1" } //Nav towards hatch func_nav_prerequisite { "targetname" "hatchnav" "mins" "-8000 -8000 -8000" "maxs" "8000 8000 8000" "Entity" "hatchspawn" "filtername" "filter_hatchspawn" "origin" "268 510 129" "spawnflags" "1" "start_disabled" "0" "StartDisabled" "0" "Task" "2" "Value" "-1" } filter_tf_bot_has_tag { "Negated" "0" "require_all_tags" "1" "tags" "bot_hatchspawn" "targetname" "filter_hatchspawn" } //A fix for people who try to be sneaky when the map gets loaded. //This isn't needed anymore once the map is done loading, so it gets disabled after a few moments. trigger_multiple { "targetname" "please_just_be_engineer" "StartDisabled" "0" "spawnflags" "4097" "origin" "-6388 -2592 4" //blue side "mins" "-300 -300 -200" "maxs" "300 300 200" "filtername" "filter_blueteam" "OnStartTouch" "!activator,$GetVar$m_iClass,$$=?(!activator.m_iClass == 6,'','!activator|$SwitchClass|6'),0,-1" "OnStartTouch" "!self,Disable,,5,-1" } } respawnrooms { NoFixup 1 //Blue gate respawnroom extension. //Stretches from -4125, -3410, -40 // to -3500, -3550, 40 //diff is 625, 140, 80 //become 313, -313; 70, -70; 40, -40 //into -3813, -3480, 0 func_respawnroom { "targetname" "bluegate_resproom" "mins" "-313 -120 -40" "maxs" "313 70 40" "origin" "-3813 -3480 0" "TeamNum" "3" } //Blue side respawnroom extension. //Stretches from -5994 -2622 4 // to -5880 -3222 -84 // diff is 114 -600 -88 //become 57, -57; 300, -300; 44, -44 //into -5937, -2922, -40 //Added 100s to X size for safekeeping func_respawnroom { "targetname" "blue_resproom" "mins" "-157 -600 -44" "maxs" "157 600 44" "origin" "-5937 -2922 -40" "TeamNum" "3" } //Resupply cabinets for blue gate prop_dynamic { "targetname" "resupply_prop_bluegate" "origin" "-4072 -3404 -34" "angles" "0 0 0" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "fadescale" "0" "maxanimtime" "10" "minanimtime" "5" "model" "models/props_gameplay/resupply_locker.mdl" "pressuredelay" "0" "randomanimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "skin" "0" "solid" "6" "spawnflags" "0" "StartDisabled" "0" } //floor is at 36 - 68 = -32, put at -32 + 56 = 24 func_regenerate { "targetname" "resupply_bluegate" "associatedmodel" "resupply_prop_bluegate" "TeamNum" "3" "origin" "-4072 -3380 24" "mins" "-40 -48 -56" "maxs" "40 48 56" } //Resupply cabinets for blue side; Y = +24, Z = -58 prop_dynamic { "targetname" "resupply_prop_blue" "origin" "-5990 -2691 -66" "angles" "0 180 0" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "fadescale" "0" "maxanimtime" "10" "minanimtime" "5" "model" "models/props_gameplay/resupply_locker.mdl" "pressuredelay" "0" "randomanimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "skin" "0" "solid" "6" "spawnflags" "0" "StartDisabled" "0" } //floor is at 4 - 68 = -64, put at -64 + 56 = -8 func_regenerate { "targetname" "resupply_blue" "associatedmodel" "resupply_prop_blue" "TeamNum" "3" "origin" "-5990 -2715 -8" "mins" "-40 -48 -56" "maxs" "40 48 56" } //Resupply cabinets for red side; Y = +24, Z = -58 prop_dynamic { "targetname" "resupply_prop_red" "origin" "-8780 76 -2" "angles" "0 90 0" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "fadescale" "0" "maxanimtime" "10" "minanimtime" "5" "model" "models/props_gameplay/resupply_locker.mdl" "pressuredelay" "0" "randomanimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "skin" "0" "solid" "6" "spawnflags" "0" "StartDisabled" "0" } //floor is at 68 - 68 = 0, put at 0 + 56 = 56 func_regenerate { "targetname" "resupply_red" "associatedmodel" "resupply_prop_red" "TeamNum" "3" "origin" "-8780 100 56" "mins" "-40 -48 -56" "maxs" "40 48 56" } //Prevents spawn-shooting trigger_multiple { //From -7040 -1415 562 //to -5930 -2169 -50 // 1110 754 612 // 555 377 306 //O -6485 1792 256 "targetname" "no_spawnshoot" "origin" "-6485 -1792 256" "mins" "-555 -377 -306" "maxs" "555 472 306" "filtername" "filter_blueteam" "OnStartTouch" "!activator,$AddPlayerAttribute,no_attack|1,0,-1" "OnEndTouch" "!activator,$RemovePlayerAttribute,no_attack,0,-1" "OnEndTouch" "!activator,$RemovePlayerAttribute,no_attack,0.01,-1" "OnEndTouch" "!activator,$RemovePlayerAttribute,no_attack,0.1,-1" //just in case... "spawnflags" 64 } } hud_hints { NoFixup 1 //Logic for the hudhint per wave! //wave_start_relay enable the hint; it gets hidden after 10s, then unhidden after 30s //wave_finished_relay then disables the hint. logic_relay //objective display { "targetname" "hudhintloop" "OnTrigger" "hudhint,ShowHudHint,,2,-1" "OnTrigger" "hudhint,HideHudHint,,10,-1" "OnTrigger" "hudhintloop,Trigger,,30,-1" } logic_relay { "targetname" "hudhintloop2" "OnTrigger" "hudhintloop,Trigger,,0,-1" "OnSpawn" "wave_start_relay,AddOutput,OnTrigger hudhintloop:Trigger::1:-1,1,-1" "OnSpawn" "wave_finished_relay,AddOutput,OnTrigger hudhintloop:CancelPending::0:-1,0,-1" } env_hudhint { "targetname" "hudhint" "message" "OBJECTIVE: Escort your gatebot to the gate to capture it!" "spawnflags" "1" } } //Special spawn teleporters, to accomodate them changing while players are alive. spawn_teleporters { NoFixup 1 // Teleports to blue side spawn, from red side spawn trigger_teleport { "targetname" "tele_red_to_blue" "StartDisabled" "1" "spawnflags" "3" "target" "spawnbot_front_left" //blue side "origin" "-8800 336 70" //red side "mins" "-300 -300 -200" "maxs" "300 300 200" "filtername" "filter_blueteam" } // Teleports to red side spawn, from blue side spawn trigger_teleport { "targetname" "tele_blue_to_red" "StartDisabled" "1" "spawnflags" "3" "target" "spawnbot_front_right" //red side "origin" "-6388 -2592 4" //blue side "mins" "-300 -300 -200" "maxs" "300 300 200" "filtername" "filter_blueteam" } //Redgate: -3450 2838 64 // -2800 3678 324 // 650 840 260 // 325 420 130 // -3125 3258 194 // Teleports to blue side spawn, from red & blue gate. trigger_teleport { "targetname" "tele_redgate_to_blue" "StartDisabled" "1" "target" "spawnbot_front_left" "spawnflags" "3" "origin" "-3125 3258 194" "mins" "-325 -420 -130" "maxs" "325 420 130" "filtername" "filter_blueteam" } //Bluegate: // -4150 -2940 -32 // -3520 -3520 92 // 630 580 120 // 315 290 60 // -3835 -3230 32 trigger_teleport { "targetname" "tele_bluegate_to_blue" "StartDisabled" "0" "target" "spawnbot_front_left" "spawnflags" "3" "origin" "-3835 -3230 32" "mins" "-315 -290 -60" "maxs" "315 290 60" "filtername" "filter_blueteam" } // Teleports to red side spawn, from red & blue gate. trigger_teleport { "targetname" "tele_redgate_to_red" "StartDisabled" "1" "target" "spawnbot_front_right" "spawnflags" "3" "origin" "-3125 3258 194" "mins" "-325 -420 -130" "maxs" "325 420 130" "filtername" "filter_blueteam" } trigger_teleport { "targetname" "tele_bluegate_to_red" "StartDisabled" "0" "target" "spawnbot_front_right" "spawnflags" "3" "origin" "-3835 -3230 32" "mins" "-315 -290 -60" "maxs" "315 290 60" "filtername" "filter_blueteam" } // Teleport to blue gate, from red & blue side trigger_teleport { "targetname" "tele_red_to_bluegate" "StartDisabled" "1" "spawnflags" "3" "target" "spawnbot_right" //blue gate "origin" "-8800 336 70" //red side "mins" "-300 -300 -200" "maxs" "300 300 200" "filtername" "filter_blueteam" } trigger_teleport { "targetname" "tele_blue_to_bluegate" "StartDisabled" "1" "spawnflags" "3" "target" "spawnbot_right" //blue gate "origin" "-6388 -2592 4" //blue side "mins" "-300 -300 -200" "maxs" "300 300 200" "filtername" "filter_blueteam" } // Teleport to red gate, from red & blue side trigger_teleport { "targetname" "tele_red_to_redgate" "StartDisabled" "1" "spawnflags" "3" "target" "spawnbot_left" //blue gate "origin" "-8800 336 70" //red side "mins" "-300 -300 -200" "maxs" "300 300 200" "filtername" "filter_blueteam" } trigger_teleport { "targetname" "tele_blue_to_redgate" "StartDisabled" "1" "spawnflags" "3" "target" "spawnbot_left" //blue gate "origin" "-6388 -2592 4" //blue side "mins" "-300 -300 -200" "maxs" "300 300 200" "filtername" "filter_blueteam" } //Per wave: //wave 1 - start blue, end redgate //wave 2 - start red, end bluegate; need redgate -> red //wave 3 - start blue, end redgate; bluegate -> blue //wave 4 - start blue, end bluegate; redgate -> blue //wave 5 - start red, end red; bluegate -> red //wave 6 - start blue, end player-red; red -> blue //Moves spawns, enables teleports. //From red gate to blue: used in wave 2 logic_relay { "targetname" "movespawns_redgate_to_red" "OnTrigger" "spawnbot_right,Disable,,0.01,-1" //Right is blue "OnTrigger" "spawnbot_left,Disable,,0.01,-1" //Left is red "OnTrigger" "spawnbot_front_right,Enable,,0.01,-1" //Front Right is red "OnTrigger" "spawnbot_front_left,Disable,,0.01,-1" //Front Left is blue //Disable tp's to redgate. "OnTrigger" "tele_blue_to_redgate,Disable,,0.01,-1" "OnTrigger" "tele_red_to_redgate,Disable,,0.01,-1" //Enable tp from redgate, to red. "OnTrigger" "tele_redgate_to_red,Enable,,0.01,-1" } //From blue gate to blue: used in wave 3 logic_relay { "targetname" "movespawns_bluegate_to_blue" "OnTrigger" "spawnbot_right,Disable,,0.01,-1" //Right is blue "OnTrigger" "spawnbot_left,Disable,,0.01,-1" //Left is red "OnTrigger" "spawnbot_front_right,Disable,,0.01,-1" //Front Right is red "OnTrigger" "spawnbot_front_left,Enable,,0.01,-1" //Front Left is blue //Disable tp's to bluegate. "OnTrigger" "tele_blue_to_bluegate,Disable,,0.01,-1" "OnTrigger" "tele_red_to_bluegate,Disable,,0.01,-1" //Enable tp from bluegate or red, to blue. "OnTrigger" "tele_bluegate_to_blue,Enable,,0.01,-1" "OnTrigger" "tele_red_to_blue,Enable,,0.01,-1" } //From red gate to blue: used in wave 4 logic_relay { "targetname" "movespawns_redgate_to_blue" "OnTrigger" "spawnbot_right,Disable,,0.01,-1" //Right is blue "OnTrigger" "spawnbot_left,Disable,,0.01,-1" //Left is red "OnTrigger" "spawnbot_front_right,Disable,,0.01,-1" //Front Right is red "OnTrigger" "spawnbot_front_left,Enable,,0.01,-1" //Front Left is blue //Disable tp's to redgate. Disable tp from redgate to red. "OnTrigger" "tele_blue_to_redgate,Disable,,0.01,-1" "OnTrigger" "tele_red_to_redgate,Disable,,0.01,-1" "OnTrigger" "tele_redgate_to_red,Disable,,0.01,-1" //Enable tp from redgate, to red. "OnTrigger" "tele_redgate_to_blue,Enable,,0.01,-1" } //From blue to red: logic_relay { "targetname" "movespawns_blue_to_red" "OnTrigger" "spawnbot_front_left,Disable,,0.01,-1" //Front Left is blue "OnTrigger" "spawnbot_right,Disable,,0.01,-1" //Right is blue "OnTrigger" "spawnbot_front_right,Enable,,0.01,-1" //Front Right is red "OnTrigger" "spawnbot_left,Disable,,0.01,-1" //Left is red //Disable tp's from red and to other spawns. "OnTrigger" "tele_red_to_blue,Disable,,0.01,-1" "OnTrigger" "tele_red_to_bluegate,Disable,,0.01,-1" "OnTrigger" "tele_bluegate_to_blue,Disable,,0.01,-1" //Enable tp from blue + bluegate, to red. "OnTrigger" "tele_blue_to_red,Enable,,0.01,-1" "OnTrigger" "tele_bluegate_to_red,Enable,,0.01,-1" } } noengie { logic_case { "OnSpawn" "!self,Kill,,1.2,-1" "OnSpawn" "!parent,$GetProp$m_iClass,!self|InValue,0.02,-1" "Case01" "6" "OnDefault" "!parent,$SwitchClass,6,0.04,-1" } } //Custom sniper spots! Start out disabled. Re-enable them mid-wave! sniperspots { NoFixup 1 func_tfbot_hint { "targetname" "sniper_blu_front" "hint" "0" //0 - sniper spot, 1 - sentry gun spot "TeamNum" "2" "StartDisabled" "1" "origin" "-4440 545 140" } func_tfbot_hint { "targetname" "sniper_blu_mid" "hint" "0" "TeamNum" "2" "StartDisabled" "0" "origin" "-490 -2400 -30" } func_tfbot_hint { "targetname" "sniper_blu_mid2" "hint" "0" "TeamNum" "2" "StartDisabled" "0" "origin" "-1740 -2470 180" } func_tfbot_hint { "targetname" "sniper_blu_base" "hint" "0" "TeamNum" "2" "StartDisabled" "0" "origin" "385 -195 116" } func_tfbot_hint { "targetname" "sniper_red_front" "hint" "0" //0 - sniper spot, 1 - sentry gun spot "TeamNum" "2" "StartDisabled" "1" "origin" "-5800 1100 -30" } func_tfbot_hint { "targetname" "sniper_red_mid" "hint" "0" "TeamNum" "2" "StartDisabled" "1" "origin" "-3550 2000 135" } func_tfbot_hint { "targetname" "sniper_red_base" "hint" "0" "TeamNum" "2" "StartDisabled" "1" "origin" "-600 1400 196" } } engiespot { bot_hint_engineer_nest {} bot_hint_sentrygun {} bot_hint_teleporter_exit {} } //Bots sometimes nav here erroneously. This is a Quick-Fix. hatchspawn_fix { NoFixup 1 OnSpawnOutput { Target !self Action Enable Delay 0.5 } trigger_push { //245 1120 130 //325 1010 200 //80 110 70 //40 55 35 //285 1065 165 "targetname" "hatch_push" "origin" "285 1065 165" "mins" "-40 -55 -35" "maxs" "40 55 35" "speed" "100" "pushdir" "-10 -85 0" "spawnflags" 1 } } RocketShoot { NoFixup 1 OnSpawnOutput { Target "rocketshooter" Action $SetOwner Param !parent Delay 0.1 } logic_relay { "targetname" "firer" "spawnflags" "2" "OnSpawn" "firer,Trigger,,16,-1" "OnTrigger" "rocketshooter*,FireOnce,,0,-1" "OnTrigger" "rocketshooter*,FireOnce,,0.2,-1" "OnTrigger" "rocketshooter*,FireOnce,,0.4,-1" "OnTrigger" "rocketshooter*,FireOnce,,0.6,-1" "OnTrigger" "rocketshooter*,FireOnce,,0.8,-1" "OnTrigger" "firer2,Trigger,,1,-1" } logic_relay { "targetname" "firer2" "OnTrigger" "firer,Trigger,,1,-1" } tf_point_weapon_mimic { "targetname" "rocketshooter" //X+ = in front, Y+ = left, Z+ = up(?) "origin" "-35 50 850" "angles" "-50 0 0" "teamnum" "2" //red "Crits" "0" "Damage" "90" "ModelScale" "1" "SpeedMax" "440" "SpeedMin" "440" "SplashRadius" "144" "SpreadAngle" "5" "WeaponType" "0" "$weaponname" "Homing Launcher" } } //Dimensions are measured "from this side, to this side". // 0-------- 80 -------0 <- // 0======================0 | // 0======================0 | // 0======================0 | // 0======================0 | // 0======================0 | // 0======================0 | // 0======================0 117 // 0======================0 | // 0======================0 | // 0======================0 | // 0======================0 | // 0======================0 | // 0======================0 | // 0-------- 80 -------0 <- // and 180 high. //Tank dimensions: X (front-back): 117; Y (left-right): 80; Z (bottom-top): 180 TankHints { NoFixup 1 info_target { "targetname" "tank_def_front" "origin" "70 0 0" } info_target { "targetname" "tank_def_back" "origin" "-70 0 0" } info_target { "targetname" "tank_def_side" "origin" "0 60 0" } info_target { "targetname" "tank_def_side" "origin" "0 -60 0" } } //Timer for 6 mins, by lite! textualtimer_6mins { OnSpawnOutput { Param 5 // change the value for minutes Target minutehand Action SetValue } OnSpawnOutput { Param 60 // change the value for seconds Target secondhand Action SetValue } logic_relay { "targetname" "loserelay" "startdisabled" "1" "ontrigger" "redwin_relay,Trigger,,2,-1" "ontrigger" "realtimer,cancelpending,,2,-1" "onspawn" "wave_start*,addoutput,ontrigger realtimer:trigger::0:-1,0,-1" "onspawn" "wave_finish*,addoutput,ontrigger realtimer:cancelpending::0:-1,0,-1" "onspawn" "wave_finish*,addoutput,ontrigger loserelay:cancelpending::0:-1,0,-1" } NoFixup 1 math_counter { "targetname" "minutehand" "max" "9999" "outvalue" "timerformat,$setkey$case01,,0,-1" "onhitmin" "loserelay,enable,,1,-1" } math_counter { "targetname" "secondhand" "max" "60" "outvalue" "timerformat,$setkey$case02,,0,-1" "outvalue" "zerocompare,setvaluecompare,,0,-1" "onhitmin" "loserelay,trigger,,0,-1" "onhitmin" "!self,setvalue,60,1,-1" "onhitmin" "minutehand,subtract,1,1,-1" } logic_compare { "targetname" "zerocompare" "comparevalue" "9" "onequalto" "timerformat,$setkey$case16,%:0%,0,-1" "ongreaterthan" "timerformat,$setkey$case16,%:%,0,-1" } logic_case { "targetname" "timerformat" "case16" "%:%" "ondefault" "timertext,$setkey$message,,0,-1" "ondefault" "timertext,display,0,0,-1" } game_text { "targetname" "timertext" "color" "65 155 255" "holdtime" "2" "spawnflags" "1" "x" "0.1" "y" "0.2" } logic_relay { "targetname" "realtimer" "spawnflags" "2" "ontrigger" "timerformat,$format,,0.01,-1" "ontrigger" "secondhand,subtract,1,0,-1" "ontrigger" "!self,trigger,,1,-1" } } //Ditto, for 4. textualtimer_4mins { OnSpawnOutput { Param 3 // change the value for minutes Target minutehand Action SetValue } OnSpawnOutput { Param 60 // change the value for seconds Target secondhand Action SetValue } logic_relay { "targetname" "loserelay" "startdisabled" "1" "ontrigger" "redwin_relay,Trigger,,2,-1" "ontrigger" "realtimer,cancelpending,,2,-1" "onspawn" "wave_start*,addoutput,ontrigger realtimer:trigger::0:-1,0,-1" "onspawn" "wave_finish*,addoutput,ontrigger realtimer:cancelpending::0:-1,0,-1" "onspawn" "wave_finish*,addoutput,ontrigger loserelay:cancelpending::0:-1,0,-1" } NoFixup 1 math_counter { "targetname" "minutehand" "max" "9999" "outvalue" "timerformat,$setkey$case01,,0,-1" "onhitmin" "loserelay,enable,,1,-1" } math_counter { "targetname" "secondhand" "max" "60" "outvalue" "timerformat,$setkey$case02,,0,-1" "outvalue" "zerocompare,setvaluecompare,,0,-1" "onhitmin" "loserelay,trigger,,0,-1" "onhitmin" "!self,setvalue,60,1,-1" "onhitmin" "minutehand,subtract,1,1,-1" } logic_compare { "targetname" "zerocompare" "comparevalue" "9" "onequalto" "timerformat,$setkey$case16,%:0%,0,-1" "ongreaterthan" "timerformat,$setkey$case16,%:%,0,-1" } logic_case { "targetname" "timerformat" "case16" "%:%" "ondefault" "timertext,$setkey$message,,0,-1" "ondefault" "timertext,display,0,0,-1" } game_text { "targetname" "timertext" "color" "65 155 255" "holdtime" "2" "spawnflags" "1" "x" "-0.8" "y" "0.9" } logic_relay { "targetname" "realtimer" "spawnflags" "2" "ontrigger" "timerformat,$format,,0.01,-1" "ontrigger" "secondhand,subtract,1,0,-1" "ontrigger" "!self,trigger,,1,-1" } } gatebothint { NoFixup 1 OnSpawnOutput { Target "gatebot_text" Action Show Delay 0.1 } training_annotation { "targetname" "lastbot_text" "display_text" "Escort your gatebot to the gate!" "lifetime" "4" "origin" "0 0 0" } } lastbotlogic { NoFixup 1 OnSpawnOutput { Target "lastbot_text" Action Show Delay 0.1 } training_annotation { "targetname" "lastbot_text" "display_text" "This is your last bot! Deploy the bomb, or lose!" "lifetime" "4" "origin" "0 0 0" } } controlpoint_blue { NoFixup 1 prop_dynamic { "model" "models/props_gameplay/cap_point_base.mdl" "targetname" "cap_base" "solid" "6" "skin" "1" //set to 0 for neutral, 1 for red, 2 for blu "angles" "0 0 2" } prop_dynamic { "model" "models/props_gameplay/cap_square_512.mdl" "targetname" "cap_base2" "solid" "6" "skin" "0" //set to 0 for neutral, 1 for red, 2 for blu "angles" "0 0 2.5" "origin" "0 0 10" } trigger_capture_area { "targetname" "cap_area" "classname" "trigger_capture_area" "area_cap_point" "cap_point" "area_time_to_cap" "15" //multiply this number by 2 to get the capture duration in seconds, raising "team_numcap_3" and "team_numcap_2" will also increase the time taken by a factor of the value (e.g. raising it to 2 will multiply the duration by 2) "StartDisabled" "0" "team_cancap_2" "0" //setting this number to 0 disables red team from recapturing, 1 enables red team to recapture "team_cancap_3" "1" //1 enables blu team to cap "team_numcap_2" "1" //changing this number will change the number of red players required to stand on the point to finish capturing "team_numcap_3" "1" //changing this number will change the number of blu players required to stand on the point to finish capturing "team_spawn_2" "0" "team_spawn_3" "0" "team_startcap_2" "1" //changing this number will change the number of red players required to stand on the point to begin capturing "team_startcap_3" "1" //changing this number will change the number of blu players required to stand on the point to begin capturing "mins" "-256 -256 -256" "maxs" "256 256 256" "origin" "0 0 256" "spawnflags" "1" "OnCapTeam2" "cap_base,Skin,2,0,-1" ////////////////////////////////////////////editable outputs//////////////////////////////////////////// OnStartTeam1,OnBreakTeam1,OnCapTeam1,OnStartTeam2,OnBreakTeam2.OnCapTeam2,OnStartCap,OnBreakCap,OnEndCap,OnNumCappersChanged,OnNumCappersChanged2 //add your outputs here using "OnCapTeam2" for blu team capture, or "OnCapTeam1" for red team capture //Changing cap area colour "OnCapTeam2" "cap_base2,Skin,2,0,-1" //set the first number to 0 for neutral, 1 for red, 2 for blu //Enable bot tele "OnCapTeam2" "spawnbot_red_special,Enable,,0.02,-1" "OnCapTeam2" "tp,Show,,0.01,-1" "OnCapTeam2" "tp,Enable,,0.05,-1" //Disable front spawns "OnCapTeam2" "spawnbot_blu_fence*,Disable,,0,-1" "OnCapTeam2" "spawnbot_blu_hall*,Disable,,0,-1" "OnCapTeam2" "spawnbot_blu_front*,Disable,,0,-1" //Enable mid part spawns, and allow access "OnCapTeam2" "spawnbot_blu_tankdoor,Enable,,0,-1" "OnCapTeam2" "spawnbot_blu_gate,Enable,,0,-1" "OnCapTeam2" "bluesidedoor_0,Open,,0,-1" "OnCapTeam2" "bluesidedoor_1,Open,,0,-1" "OnCapTeam2" "bluesidedoor_2,Open,,0,-1" "OnCapTeam2" "tf_point_nav_interface,RecomputeBlockers,,0.03,-1" // "OnCapTeam2" "realtimer,CancelPending,,0,-1" "OnCapTeam2" "hudhint,$SetKey$message,OBJECTIVE: Escort your gatebots to the gate!,0,-1" } team_control_point { "targetname" "cap_point" "classname" "team_control_point" "angles" "0 0 0" "point_default_owner" "2" //this is the team that the control point will spawn in, set this number to 0 for neutral, 2 for red, 3 for blu "point_group" "0" "point_index" "4" //if you plan on having multiple control points at once, you must give each one a unique "point_index", spawning more than 8 control points on the map will crash the server "point_printname" "Entrance" //this is the name of the control point that will show up in the kill feed "point_start_locked" "0" "point_warn_on_cap" "0" "point_warn_sound" "ControlPoint.CaptureWarn" "random_owner_on_restart" "0" "spawnflags" "4" "team_bodygroup_0" "3" "team_bodygroup_2" "1" "team_bodygroup_3" "1" "team_icon_0" "sprites/obj_icons/icon_obj_neutral" //this is the image shown on the hud icon "team_icon_2" "sprites/obj_icons/icon_obj_red" "team_icon_3" "sprites/obj_icons/icon_obj_blu_mannhattan" "team_model_0" "models/effects/cappoint_hologram.mdl" //this is the model of the hologram that appears above the control point "team_model_2" "models/effects/cappoint_hologram.mdl" "team_model_3" "models/effects/cappoint_hologram.mdl" "team_previouspoint_3_0" "cap_point" //if you want to create a sequence of control points similar to an attack/defense map, this keyvalue determines the order in which they can be captured //it represents the names of the previous control points that must be owned by blu team before this point can be unlocked, if this is the first control point on the map, it must refer to itself or else it will be locked //"team_previouspoint_3_1" "0" //"team_previouspoint_3_2" "0" //"team_previouspoint_2_0" "cap_point" //this allows red to recapture if "team_cancap_2" is set to 1 in the trigger_capture_area //"team_previouspoint_2_1" "0" //"team_previouspoint_2_2" "0" "team_timedpoints_2" "0" "team_timedpoints_3" "0" "origin" "0 0 4" } team_control_point_master { "classname" "team_control_point_master" "cpm_restrict_team_cap_win" "1" //this makes it so the wave does not end when all the points are owned by a team, set this to 0 for neither team (this will end the wave on capture), 1 to restrict both teams, 2 to restrict red team winning, and 3 to restrict blu team winning "custom_position_x" "0.4" //you can change the number here to move the control points on the hud if something is blocking it, accepted values are from 0 to 1 and is expressed as a percentage of the screen from left to right, 0.5 or "-1" will center the hud "custom_position_y" "-1" "partial_cap_points_rate" "0" //this gives points on the scoreboard for partially capturing a point, it has nothing to do with the rate at which the control point is captured "play_all_rounds" "0" "score_style" "0" "StartDisabled" "0" "switch_teams" "0" "targetname" "cap_master" "team_base_icon_2" "sprites/obj_icons/icon_base_red" "team_base_icon_3" "sprites/obj_icons/icon_base_blu" } training_annotation { "targetname" "cap_text" "display_text" "Capture the control point!" "lifetime" "10" "origin" "0 0 50" } OnSpawnOutput { Target cap_text Action Show Delay 0.1 } OnSpawnOutput //very important to keep this output otherwise the control point will not function { Target cap_area Action SetControlPoint Param cap_point } OnSpawnOutput //i believe this output is optional but it is kept here for debugging purposes, if you do not restrict a team from winning and the control point spawned owned by red or blu, it will automatically end the wave so make sure you set the restriction { Target cap_master Action RoundSpawn } } //Special controlpoint logic for "capturing" a bot! controlpoint_bot { NoFixup 1 prop_dynamic { "model" "models/props_gameplay/cap_square_512.mdl" "targetname" "cap_base2" "solid" "6" "skin" "0" //set to 0 for neutral, 1 for red, 2 for blu "angles" "0 0 2.5" "origin" "0 0 -40" } trigger_capture_area { "targetname" "cap_area" "classname" "trigger_capture_area" "area_cap_point" "cap_point" "area_time_to_cap" "20" //multiply this number by 2 to get the capture duration in seconds, raising "team_numcap_3" and "team_numcap_2" will also increase the time taken by a factor of the value (e.g. raising it to 2 will multiply the duration by 2) "StartDisabled" "0" "team_cancap_2" "0" //setting this number to 0 disables red team from recapturing, 1 enables red team to recapture "team_cancap_3" "1" //1 enables blu team to cap "team_numcap_2" "1" //changing this number will change the number of red players required to stand on the point to finish capturing "team_numcap_3" "1" //changing this number will change the number of blu players required to stand on the point to finish capturing "team_spawn_2" "0" "team_spawn_3" "0" "team_startcap_2" "1" //changing this number will change the number of red players required to stand on the point to begin capturing "team_startcap_3" "1" //changing this number will change the number of blu players required to stand on the point to begin capturing "mins" "-256 -256 -256" "maxs" "256 256 256" "origin" "0 0 256" "spawnflags" "1" ////////////////////////////////////////////editable outputs//////////////////////////////////////////// OnStartTeam1,OnBreakTeam1,OnCapTeam1,OnStartTeam2,OnBreakTeam2.OnCapTeam2,OnStartCap,OnBreakCap,OnEndCap,OnNumCappersChanged,OnNumCappersChanged2 //add your outputs here using "OnCapTeam2" for blu team capture, or "OnCapTeam1" for red team capture "OnCapTeam2" "cap_base2,Skin,2,0,-1" //set the first number to 0 for neutral, 1 for red, 2 for blu "OnCapTeam2" "cap_stunner,FireUser1,,0.01,-1" "OnCapTeam2" "spawnbot_hatch_def,Enable,,0,-1" "OnCapTeam2" "spawnbot_hatch_alt,Enable,,0,-1" "OnCapTeam2" "realtimer,CancelPending,,0,-1" "OnCapTeam2" "hudhint,$SetKey$message,OBJECTIVE: Escort your gatebots to the gate!,0,-1" } team_control_point { "targetname" "cap_point" "classname" "team_control_point" "angles" "0 0 0" "point_default_owner" "2" //this is the team that the control point will spawn in, set this number to 0 for neutral, 2 for red, 3 for blu "point_group" "0" "point_index" "4" //if you plan on having multiple control points at once, you must give each one a unique "point_index", spawning more than 8 control points on the map will crash the server "point_printname" "Entrance" //this is the name of the control point that will show up in the kill feed "point_start_locked" "0" "point_warn_on_cap" "0" "point_warn_sound" "ControlPoint.CaptureWarn" "random_owner_on_restart" "0" "spawnflags" "4" "team_bodygroup_0" "3" "team_bodygroup_2" "1" "team_bodygroup_3" "1" "team_icon_0" "sprites/obj_icons/icon_obj_neutral" //this is the image shown on the hud icon "team_icon_2" "sprites/obj_icons/icon_obj_red" "team_icon_3" "sprites/obj_icons/icon_obj_blu_mannhattan" "team_model_0" "models/effects/cappoint_hologram.mdl" //this is the model of the hologram that appears above the control point "team_model_2" "models/effects/cappoint_hologram.mdl" "team_model_3" "models/effects/cappoint_hologram.mdl" "team_previouspoint_3_0" "cap_point" //if you want to create a sequence of control points similar to an attack/defense map, this keyvalue determines the order in which they can be captured //it represents the names of the previous control points that must be owned by blu team before this point can be unlocked, if this is the first control point on the map, it must refer to itself or else it will be locked //"team_previouspoint_3_1" "0" //"team_previouspoint_3_2" "0" //"team_previouspoint_2_0" "cap_point" //this allows red to recapture if "team_cancap_2" is set to 1 in the trigger_capture_area //"team_previouspoint_2_1" "0" //"team_previouspoint_2_2" "0" "team_timedpoints_2" "0" "team_timedpoints_3" "0" "origin" "0 0 4" } team_control_point_master { "classname" "team_control_point_master" "cpm_restrict_team_cap_win" "1" //this makes it so the wave does not end when all the points are owned by a team, set this to 0 for neither team (this will end the wave on capture), 1 to restrict both teams, 2 to restrict red team winning, and 3 to restrict blu team winning "custom_position_x" "0.4" //you can change the number here to move the control points on the hud if something is blocking it, accepted values are from 0 to 1 and is expressed as a percentage of the screen from left to right, 0.5 or "-1" will center the hud "custom_position_y" "-1" "partial_cap_points_rate" "0" //this gives points on the scoreboard for partially capturing a point, it has nothing to do with the rate at which the control point is captured "play_all_rounds" "0" "score_style" "0" "StartDisabled" "0" "switch_teams" "0" "targetname" "cap_master" "team_base_icon_2" "sprites/obj_icons/icon_base_red" "team_base_icon_3" "sprites/obj_icons/icon_base_blu" } training_annotation { "targetname" "cap_text" "display_text" "Capture the giant!" "lifetime" "10" "origin" "0 0 50" } OnSpawnOutput { Target cap_text Action Show Delay 0.1 } OnSpawnOutput { Target cap_stunner Action Trigger Delay 0.1 } logic_relay { "targetname" "cap_stunner" "OnTrigger" "!parent,$AddCond,71,0,-1" "OnUser1" "!parent,$RemoveCond,71,0,-1" } OnSpawnOutput //very important to keep this output otherwise the control point will not function { Target cap_area Action SetControlPoint Param cap_point } OnSpawnOutput //i believe this output is optional but it is kept here for debugging purposes, if you do not restrict a team from winning and the control point spawned owned by red or blu, it will automatically end the wave so make sure you set the restriction { Target cap_master Action RoundSpawn } } //LOGIC LAYOUT //wave1logic - wave1_spawner: logic only. Activated once the wave is initialized. //It may contain a path picker, but this is generally done at the start of the prior wave. //Path pickers already contain wave_finished_relay! //wave1props - individual names: props only. Spawned at the start of the mission. //wave1starter - wave1_start: logic only. Spawned at the start of a wave. //Must contain wave_start_relay. //TODO: //- Cover up holes around blue gate spawn - MOSTLY DONE //- Add prop to weird clipping part in blue gate, next to upgrade station //- Add push to weird clipping part in blue gate //wave 1: Gate skip. VIP escort. -- red path, blue spawn wave1logic { NoFixup 1 logic_relay { "targetname" "wave1_spawner" //Trigger on wave load //Enable blue spawn only, disable red front spawn. "OnTrigger" "tele_red_to_blue,Enable,,0.01,-1" //Just in case. "OnTrigger" "tele_bluegate_to_blue,Enable,,0.01,-1" "OnTrigger" "tele_redgate_to_blue,Enable,,0.01,-1" //leftSidePick is the "red" side. //Had to copy this instead of wave_finished_nextwave_left, //bc otherwise wave_finished_relay gets called. "OnTrigger" "bot_bombpath_leftSidePick,Trigger,,1.15,-1" "OnTrigger" "global_rightround,TurnOff,,0,-1" "OnTrigger" "global_leftround,TurnOn,,0,-1" "OnTrigger" "global_randomround,TurnOff,,0,-1" "OnTrigger" "bot_bombpath_resetall,Trigger,,1,-1" //Stop being active >:C "OnTrigger" "spawnbot_front_right,Disable,,1.2,-1" "OnTrigger" "spawnbot_left,Disable,,1.2,-1" "OnTrigger" "spawnbot_right,Disable,,1.2,-1" "OnTrigger" "gate_left_capturezone,AddOutput,OnCapTeam2 wave1_start_relay:Trigger::0:-1" //Enable sniper spots. "OnTrigger" "sniper_red_*,Enable,,0.05,-1" } } //Spawnpoints when attacking from the blue spawn, towards red side. wave1props { NoFixup 1 } wave1starter { NoFixup 1 logic_relay { "targetname" "wave1_start_relay" "OnUser1" "redsidedoor_1,Close,,0,-1" "OnUser1" "redsidedoor_2,Close,,0,-1" "OnUser1" "redsidedoor_4,Close,,0,-1" //not letting you flank all the way to hatch "OnUser1" "tf_point_nav_interface,RecomputeBlockers,,1,-1" //Triggered by capturing the point //Enable mid spawns, change tele "OnTrigger" "tele_redgate_to_red,Disable,,0.03,-1" "OnTrigger" "tele_redgate_to_blue,Disable,,0.03,-1" "OnTrigger" "tele_redgate_to_red,Disable,,0.1,-1" "OnTrigger" "tele_redgate_to_blue,Disable,,0.1,-1" "OnTrigger" "tele_blue_to_redgate,Enable,,0.03,-1" "OnTrigger" "spawnbot_red_special,Disable,,0,-1" "OnTrigger" "redsidedoor*,Open,,0,-1" "OnTrigger" "hudhint,$SetKey$message,OBJECTIVE: Escort your bomb carrier to the hatch to win!,0,-1" "OnTrigger" "tf_point_nav_interface,RecomputeBlockers,,0.1,-1" //First set of spawn indicators "OnUser2" "spawnbot_red_front*,Disable,,0,-1" "OnUser2" "spawnbot_red_tankdoor*,Disable,,0,-1" "OnUser2" "spawnbot_red_garage*,Disable,,0,-1" //Second set, excluding gate, since that gets auto-disabled by the giant demo anyway. "OnUser3" "spawnbot_red_pastgate*,Disable,,0,-1" "OnUser3" "spawnbot_red_boxesdoor*,Disable,,0,-1" } } //wave 2: Gate skip. VIP escort. -- blue path, red spawn //InitWaveOutput disables red path wave2logic { NoFixup 1 logic_relay { "targetname" "wave2_spawner" // "OnTrigger" "movespawns_bluegate_to_blue,Trigger,,0,-1" //Enable red (front_right), disable blue (front_left) //Enable blue -> red tele, disable blue -> red tele. "OnTrigger" "spawnbot_front_right,Enable,,0,-1" "OnTrigger" "spawnbot_front_left,Disable,,0,-1" "OnTrigger" "tele_blue_to_red,Enable,,0.01,-1" "OnTrigger" "tele_bluegate_to_red,Enable,,0.01,-1" "OnTrigger" "tele_redgate_to_red,Enable,,0.01,-1" "OnTrigger" "tele_red_to_blue,Disable,,0.01,-1" //leftSidePick is the "red" side. //rightSidePick is the "blue" side. "OnTrigger" "bot_bombpath_rightSidePick,Trigger,,1.15,-1" "OnTrigger" "global_rightround,TurnOn,,0,-1" "OnTrigger" "global_leftround,TurnOff,,0,-1" "OnTrigger" "global_randomround,TurnOff,,0,-1" "OnTrigger" "bot_bombpath_resetall,Trigger,,1,-1" "OnTrigger" "hudhint,$SetKey$message,OBJECTIVE: Capture the point to activate the teleporter!,0,-1" //Front part: gates closing "OnTrigger" "bluesidedoor*,Close,,1,-1" "OnTrigger" "tf_point_nav_interface,RecomputeBlockers,,1.5,-1" //Spawn disabling "OnTrigger" "spawnbot_blu_tankdoor,Disable,,0,-1" "OnTrigger" "spawnbot_blu_gate,Disable,,0,-1" "OnTrigger" "spawnbot_blu_bighall,Disable,,0,-1" "OnTrigger" "spawnbot_blu_sidehall*,Disable,,0,-1" "OnTrigger" "spawnbot_hatch*,Disable,,0,-1" //Spawn re-enabling on point cap //Do this on entity spawned during this wave only, prevents weirdness later "OnTrigger" "gate_right_capturezone,AddOutput,OnCapTeam2 wave2_midwave_opener:Trigger::0:-1" //TESTING ONLY // "OnSpawn" "stuffworks,Show,,0.01,-1" } } wave2starter { NoFixup 1 logic_relay { //Triggered when the gate is captured "targetname" "wave2_midwave_opener" //Stop the time "OnTrigger" "realtimer,CancelPending,,0,-1" //Open doorway "OnTrigger" "w2blockers*,Kill,,0,-1" //Enable mid spawns, change tele "OnTrigger" "tele_bluegate_to_red,Disable,,0.03,-1" "OnTrigger" "tele_bluegate_to_blue,Disable,,0.03,-1" "OnTrigger" "tele_red_to_bluegate,Enable,,0.03,-1" "OnTrigger" "spawnbot_red_special,Disable,,0,-1" "OnTrigger" "bluesidedoor*,Open,,0,-1" "OnTrigger" "spawnbot_blu_gate*,Disable,,0,-1" "OnTrigger" "spawnbot_blu_tankdoor*,Disable,,0,-1" "OnTrigger" "spawnbot_blu_bighall*,Enable,,0,-1" "OnTrigger" "spawnbot_blu_sidehall*,Enable,,0,-1" "OnTrigger" "spawnbot_hatch_def,Enable,,0,-1" "OnTrigger" "hudhint,$SetKey$message,OBJECTIVE: Escort your bomb carrier to the hatch to win!,0,-1" "OnTrigger" "tf_point_nav_interface,RecomputeBlockers,,0.1,-1" "OnUser1" "bluesidedoor*,Close,,0.5,-1" } } wave2props { NoFixup 1 //Gate barriers: large entrance. func_forcefield { "targetname" "w2blockers_large" "mins" "-60 -180 -230" "maxs" "60 220 230" "origin" "-2968 -1626 230" "TeamNum" "2" "disablereceiveshadows" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" //Don't render. "StartDisabled" "0" } prop_dynamic { "targetname" "w2blockers_large" "origin" "-3028 -1606 190" "angles" "0 180 0" "modelscale" "0.85" "fademindist" "128" "fademaxdist" "512" "disablereceiveshadows" "1" "model" "models/props_mvm/no_entry.mdl" "disableshadows" "1" "solid" "0" "StartDisabled" "0" } //Small entrance. func_forcefield { "targetname" "w2blockers_small" "mins" "-60 -96 -230" "maxs" "60 96 230" "origin" "-3095 -1128 190" "TeamNum" "2" "disablereceiveshadows" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" "StartDisabled" "0" } prop_dynamic { "targetname" "w2blockers_small" "origin" "-3095 -1168 200" "angles" "0 180 0" "modelscale" "0.7" "fademindist" "128" "fademaxdist" "1024" "disablereceiveshadows" "1" "model" "models/props_mvm/no_entry.mdl" "disableshadows" "1" "solid" "0" "StartDisabled" "0" } } //wave 3: Gate capture, VIP escort. -- red path, blue spawn wave3logic { NoFixup 1 logic_relay { "targetname" "wave3_spawner" "OnTrigger" "spawnbot_front_right,Disable,,0,-1" "OnTrigger" "tele_blue_to_red,Disable,,0.01,-1" "OnTrigger" "tele_red_to_blue,Enable,,0.01,-1" //Just in case. "OnTrigger" "tele_bluegate_to_blue,Enable,,0.01,-1" "OnTrigger" "tele_redgate_to_blue,Enable,,0.01,-1" //leftSidePick is the "red" side. //Had to copy this instead of wave_finished_nextwave_left, //bc otherwise wave_finished_relay gets called. "OnTrigger" "bot_bombpath_leftSidePick,Trigger,,1.15,-1" "OnTrigger" "global_rightround,TurnOff,,0,-1" "OnTrigger" "global_leftround,TurnOn,,0,-1" "OnTrigger" "global_randomround,TurnOff,,0,-1" "OnTrigger" "bot_bombpath_resetall,Trigger,,1,-1" "OnTrigger" "spawnbot_hatch,Disable,,0,-1" //alt stays active for hatch guard "OnTrigger" "spawnbot_red_boxesdoor,Disable,,0,-1" "OnTrigger" "spawnbot_red_pastgate,Disable,,0,-1" "OnTrigger" "hudhint,$SetKey$message,OBJECTIVE: Escort your gatebots to the gate!,0,-1" //Changing the cap to do stuff. "OnTrigger" "gate_left_capturezone,AddOutput,OnCapTeam2 wave3_midwave_opener:Trigger::0:-1" } } wave3starter { NoFixup 1 //Triggered when the gate is captured logic_relay { "targetname" "wave3_midwave_opener" //Move spawns after 1st subwave's giants die. "OnUser1" "spawnbot_red_garage*,Disable,,0,-1" "OnUser1" "spawnbot_red_front*,Disable,,0,-1" "OnUser1" "spawnbot_red_pastgate*,Enable,,0,-1" "OnUser1" "spawnbot_red_boxesdoor*,Enable,,0,-1" //Stop the time "OnTrigger" "realtimer,CancelPending,,0,-1" //Open doorway "OnTrigger" "w3blockers*,Kill,,0,-1" //Enable mid spawns, change tele "OnTrigger" "tele_redgate_to_red,Disable,,0.03,-1" "OnTrigger" "tele_redgate_to_blue,Disable,,0.03,-1" "OnTrigger" "tele_blue_to_redgate,Enable,,0.03,-1" "OnTrigger" "spawnbot_red_special,Disable,,0,-1" "OnTrigger" "redsidedoor*,Open,,0,-1" "OnTrigger" "spawnbot_hatch*,Enable,,0,-1" "OnTrigger" "hudhint,$SetKey$message,OBJECTIVE: Escort your bomb carrier to the hatch to win!,0,-1" "OnTrigger" "tf_point_nav_interface,RecomputeBlockers,,0.1,-1" "OnUser2" "spawnbot_red_pastgate*,Disable,,0,-1" "OnUser2" "spawnbot_red_boxesdoor*,Disable,,0,-1" } } wave3props { NoFixup 1 //Bombpath //From: -2620 1450 64 //To: -3440 1378 564 // -820 -72 500 // -410 -36 250 // -3030 1414 314 func_forcefield { "targetname" "w3blockers_large" "mins" "-410 -36 -250" "maxs" "410 36 250" "origin" "-3030 1414 314" "TeamNum" "2" "disablereceiveshadows" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" //Don't render. "StartDisabled" "0" } prop_dynamic { "targetname" "w3blockers_large" "origin" "-2875 1415 175" //approx 35 away from the forcefield "angles" "0 90 0" "modelscale" "0.85" "fademindist" "128" "fademaxdist" "512" "disablereceiveshadows" "1" "model" "models/props_mvm/no_entry.mdl" "disableshadows" "1" "solid" "0" "StartDisabled" "0" } //Tankdoor //From: -3040 650 240 //To: -3340 720 570 //Diff: -300 70 330 // -150 35 165 func_forcefield { "targetname" "w3blockers_small" "mins" "-150 -35 -165" "maxs" "150 35 165" "origin" "-3190 685 405" "TeamNum" "2" "disablereceiveshadows" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" //Don't render. "StartDisabled" "0" } prop_dynamic { "targetname" "w3blockers_small" "origin" "-3260 720 305" //lower than wall to account for readability "angles" "0 90 0" "modelscale" "0.7" "fademindist" "128" "fademaxdist" "512" "disablereceiveshadows" "1" "model" "models/props_mvm/no_entry.mdl" "disableshadows" "1" "solid" "0" "StartDisabled" "0" } } //wave 4: Gate capture, tank escort. -- blue path, blue spawn wave4logic { NoFixup 1 logic_relay { "targetname" "wave4_spawner" //Enable blue (front_left), disable red (front_right) //Enable red -> blue tele, disable red -> blue tele. "OnTrigger" "spawnbot_front_right,Disable,,0,-1" //front right is red "OnTrigger" "tele_blue_to_red,Disable,,0.01,-1" "OnTrigger" "tele_red_to_blue,Enable,,0.01,-1" "OnTrigger" "tele_bluegate_to_blue,Enable,,0.01,-1" "OnTrigger" "tele_redgate_to_blue,Enable,,0.01,-1" "OnTrigger" "tele_blue_to_bluegate,Disable,,0.01,-1" //Just in case. //leftSidePick is the "red" side. //rightSidePick is the "blue" side. "OnTrigger" "bot_bombpath_rightSidePick,Trigger,,1.15,-1" "OnTrigger" "global_rightround,TurnOn,,0,-1" "OnTrigger" "global_leftround,TurnOff,,0,-1" "OnTrigger" "global_randomround,TurnOff,,0,-1" "OnTrigger" "bot_bombpath_resetall,Trigger,,1,-1" "OnTrigger" "intel*,Disable,,0.01,-1" //NO intelligence "OnTrigger" "tutorial_relay,CancelPending,,0.01,-1" //Hints are no longer needed "OnTrigger" "tutorial_relay2,CancelPending,,0.01,-1" //Hints are no longer needed "OnTrigger" "hints*,Disable,,0.01,-1" //Hints are no longer needed "OnTrigger" "hudhint,$SetKey$message,OBJECTIVE: Escort the tank to the hatch to win!,0,-1" "OnTrigger" "spawnbot_blu*,Disable,,0,-1" "OnTrigger" "spawnbot_hatch,Disable,,0,-1" "OnTrigger" "spawnbot_blu_front,Enable,,0.1,-1" "OnTrigger" "spawnbot_blu_station,Enable,,0.1,-1" "OnTrigger" "boss_path_14,AddOutput,OnPass spawnbot_blu_front*:Disable::0:-1,0,-1" "OnTrigger" "boss_path_14,AddOutput,OnPass spawnbot_blu_station*:Disable::0:-1,0,-1" "OnTrigger" "boss_path_14,AddOutput,OnPass spawnbot_blu_hall*:Enable::0:-1,0,-1" "OnTrigger" "boss_path_14,AddOutput,OnPass spawnbot_blu_fence*:Enable::0:-1,0,-1" // "OnTrigger" "boss_path_14,AddOutput,OnPass player:$DisplayTextChat:hey:0:-1,0,-1" "OnTrigger" "boss_path_17,AddOutput,OnPass spawnbot_blu_hall*:Disable::0:-1,0,-1" "OnTrigger" "boss_path_17,AddOutput,OnPass spawnbot_blu_fence*:Disable::0:-1,0,-1" "OnTrigger" "boss_path_17,AddOutput,OnPass spawnbot_blu_gate*:Enable::0:-1,0,-1" "OnTrigger" "boss_path_17,AddOutput,OnPass spawnbot_blu_sidehall*:Enable::0:-1,0,-1" "OnTrigger" "boss_path_24,AddOutput,OnPass spawnbot_blu_gate*:Disable::0:-1,0,-1" "OnTrigger" "boss_path_24,AddOutput,OnPass spawnbot_blu_bridge*:Enable::0:-1,0,-1" "OnTrigger" "boss_path_40,AddOutput,OnPass spawnbot_blu_sidehall*:Disable::0:-1,0,-1" "OnTrigger" "boss_path_40,AddOutput,OnPass spawnbot_blu_hatch*:Enable::0:-1,0,-1" "OnTrigger" "boss_path_32,AddOutput,OnPass spawnbot_blu_bridge*:Disable::0:-1,0,-1" "OnTrigger" "boss_path_21,AddOutput,OnPass forcecapblue:Trigger::0:-1,0,-1" "OnTrigger" "boss_path_46,AddOutput,OnPass opentankdoors_blu:Trigger::0:-1,0,-1" // "OnTrigger" "boss_path_35,AddOutput,OnPass tankstopper:FireUser1::0:-1,0,-1" } //Tank path plan: //- on passing nodes close to spawnpoints, disable those and enable next (TODO) // - groups: front/station: 14, hall/fence: 17, gate: 24, sidehall: 40, bridge: 32, hatch //- on pass node 46, capture gate //DEPRECATED //- on pass node 35 (FINAL PRE-HATCH), stop and wait for continue. //- Spawns: // - Start with station and front // - Afterwards, sidehall and fence // - spawnbot_blu_tankhall: -2290 -1180 64 for prop //Tank things! // logic_relay // { // "targetname" "tankstopper" // "spawnflags" "2" // "OnUser1" "tank_speedsetter,Disable,,0,-1" // "OnUser1" "tankboss*,SetSpeed,0,0,-1" // "OnUser2" "tank_speedsetter,Enable,,0,-1" // "OnUser2" "tank_speedsetter,Trigger,,0.1,-1" // } logic_relay { "targetname" "opentankdoors_blu" //Open the doors, play the light's animation and set its skin: "OnTrigger" "_bigboypantsopentankdoor_frontline_left,Trigger,,0.1,-1" //For now, this opens like "normal" // "OnTrigger" "right_tankdoor,Open,,0.1,-1" //Fix the nav so bots will go through those big ol' doors // "OnTrigger" "tankdoor_perfernav_right,Enable,,0,-1" // "OnTrigger" "nav_rightroom_prefer,Disable,,0,-1" //The door parts actually close themselves after some time, //so I set the wait to -1 to never happen. //Could also Kill them instead. "OnTrigger" "_leftrrrfrontline_tankdoor*,$SetKey$wait,-1,2,-1" //And shut off the light, anim, and sound afterwards. "OnTrigger" "_bigboypantsgatealarm_fartted,StopSound,,4,-1" "OnTrigger" "_bigboypantstankdoor_prop_frontline,AddOutput,skin 1,10,-1" "OnTrigger" "_bigboypantstankdoor_prop_frontline,SetAnimation,Idle,10,-1" } logic_relay { "targetname" "tankdoor_silencer" "OnTrigger" "gatealarm_fartted,StopSound,,0,-1" "OnTrigger" "Tankdoor_prop_frontline,SetAnimation,1,0,-1" "OnTrigger" "Tankdoor_prop_frontline,Skin,1,0,-1" } } wave4props { NoFixup 1 } wave4starter { NoFixup 1 logic_relay { "targetname" "wave4_starter" } } //wave 5 - TIMED BOSS BATTLE: FR-33/M4-N -- main spawn, use blue path to start. wave5logic { NoFixup 1 logic_relay { "targetname" "wave5_spawner" //Same path as w4! //Enable blue (front_left), disable red (front_right) //Enable red -> blue tele, disable red -> blue tele. "OnTrigger" "spawnbot_front_right,Disable,,0,-1" //front right is red "OnTrigger" "tele_blue_to_red,Disable,,0.01,-1" "OnTrigger" "tele_blue_to_bluegate,Disable,,0.01,-1" "OnTrigger" "tele_red_to_blue,Enable,,0.01,-1" //Just in case. "OnTrigger" "tele_bluegate_to_blue,Enable,,0.01,-1" "OnTrigger" "tele_redgate_to_blue,Enable,,0.01,-1" //leftSidePick is the "red" side. //rightSidePick is the "blue" side. "OnTrigger" "bot_bombpath_rightSidePick,Trigger,,1.15,-1" "OnTrigger" "global_rightround,TurnOn,,0,-1" "OnTrigger" "global_leftround,TurnOff,,0,-1" "OnTrigger" "global_randomround,TurnOff,,0,-1" "OnTrigger" "bot_bombpath_resetall,Trigger,,1,-1" "OnTrigger" "tutorial_relay,CancelPending,,0.01,-1" //Hints are no longer needed "OnTrigger" "tutorial_relay2,CancelPending,,0.01,-1" //Hints are no longer needed "OnTrigger" "hints*,Disable,,0.01,-1" //Hints are no longer needed "OnTrigger" "spawnbot_blu_hall*,Enable,,0,-1" "OnTrigger" "spawnbot_blu_fence*,Enable,,0,-1" "OnTrigger" "spawnbot_blu_special,Disable,,0.1,-1" "OnTrigger" "intel*,Disable,,0,-1" "OnTrigger" "hudhint,$SetKey$message,OBJECTIVE: Destroy the Freeman-bot!,0,-1" } } wave5starter { NoFixup 1 logic_relay { "targetname" "wave5_starter" "OnUser1" "spawnbot_red_special,Enable,,0,-1" "OnUser2" "spawnbot_blu_special,Enable,,0,-1" "OnUser2" "!activator,$PlaySequence,taunt_drg_melee,0,-1" "OnUser2" "!activator,$AddCond,87 2.5,0,-1" "OnUser4" "spawnbot_blu_station,Enable,,0.01,-1" "OnUser4" "spawnbot_blu_fence,Enable,,0.01,-1" "OnUser4" "spawnbot_blu_hall,Enable,,0.01,-1" "OnUser4" "wave5_starter,FireUser1,,10,-1" //in case something STILL goes wrong "OnUser4" "wave5_starter_alt,Disable,,0,-1" //haha yes "$OnUser5" "hudhint,$SetKey$message,OBJECTIVE: Eliminate all remaining enemies.,0,-1" } logic_relay { "targetname" "wave5_starter_alt" "OnUser1" "spawnbot_blu_fence,Disable,,0,-1" "OnUser1" "spawnbot_blu_hall,Disable,,0,-1" } } //Contains: //- Cool barriers wave5props { NoFixup 1 func_forcefield { // Ranges from -5580 615 -96 // Ranges to -5420 -700 1522 // diff 160 -1315 1618 // becomes... 80 658 809 // on... -5500 -42 713 "origin" "-5500 -42 713" "targetname" "prop_barrier_w5" "rendermode" "10" "TeamNum" "2" "maxs" "80 658 809" "mins" "-80 -658 -809" "StartDisabled" "0" } prop_dynamic { "targetname" "prop_barrier_w5" "origin" "-5580 -12 50" "angles" "0 90 0" "modelscale" "0.85" "fademindist" "-1" "fademaxdist" "0" "disablereceiveshadows" "1" "model" "models/props_mvm/reversemvm_redwall_512x320.mdl" "disableshadows" "1" "solid" "0" "StartDisabled" "0" } } //wave 6: protect a boss...as red bots! -- SIDE: player spawn! //On boss death: //- Play death sound (in wavespawn) //- Stun players //- Return players to blue (use negated tag with @f@!!!) //- Redwin relay //On all main blu death: //- PauseBotSpawning //- Force-kill blue bots (use relay with filter?) //- Stun players //- Return players to blue (use negated tag with @f@!!!) //- Bluewin relay wave6logic { NoFixup 1 logic_relay { "targetname" "wave6_spawner" "OnTrigger" "hudhint,$SetKey$message,OBJECTIVE: Destroy.,0,-1" //Yeet some stuff at hatch we don't want. Takes a while before they get enabled. "OnTrigger" "tele_blue_to_red,Enable,,0,-1" "OnTrigger" "tele_red_to_blue,Disable,,0,-1" "OnTrigger" "tele_red_to_bluegate,Disable,,0,-1" "OnTrigger" "tele_red_to_redgate,Disable,,0,-1" "OnTrigger" "tele_blue_to_red,Enable,,0,-1" "OnTrigger" "spawn_bluesign_black*,Disable,,2,-1" "OnTrigger" "spawn_redsign_black*,Disable,,2,-1" "OnTrigger" "blue_tellme*,Disable,,2,-1" "OnTrigger" "red_tellme*,Disable,,2,-1" //Picks blue side. "OnTrigger" "bot_bombpath_rightSidePick,Trigger,,1.15,-1" "OnTrigger" "global_rightround,TurnOn,,0,-1" "OnTrigger" "global_leftround,TurnOff,,0,-1" "OnTrigger" "global_randomround,TurnOff,,0,-1" "OnTrigger" "bot_bombpath_resetall,Trigger,,1,-1" "OnTrigger" "tutorial_relay,CancelPending,,0.01,-1" //Hints are no longer needed "OnTrigger" "tutorial_relay2,CancelPending,,0.01,-1" //Hints are no longer needed "OnTrigger" "hints*,Disable,,0.01,-1" //Hints are no longer needed "OnTrigger" "intel*,Disable,,0,-1" "OnTrigger" "spawnbot_hatch_def,Disable,,0,-1" //on wave loss, this would otherwise stay paused...maybe. "OnTrigger" "point_populator_interface,UnPauseBotSpawning,,0.01,-1" //Big icon switch thing! //129 bots total now "OnUser1" "tf_objective_resource,$SetProp$m_nMannVsMachineWaveEnemyCount,129,0.45,-1" //Blue bot icons -> main "OnUser1" "tf_objective_resource,$SetProp$m_nMannVsMachineWaveClassFlags$3,9,0.5,-1" //giant heavy "OnUser1" "tf_objective_resource,$SetProp$m_nMannVsMachineWaveClassFlags$4,1,0.5,-1" //wrangler "OnUser1" "tf_objective_resource,$SetProp$m_nMannVsMachineWaveClassFlags$5,1,0.5,-1" //flare "OnUser1" "tf_objective_resource,$SetProp$m_nMannVsMachineWaveClassFlags$6,9,0.5,-1" //giant barrage "OnUser1" "tf_objective_resource,$SetProp$m_nMannVsMachineWaveClassFlags$7,1,0.5,-1" //popper "OnUser1" "tf_objective_resource,$SetProp$m_nMannVsMachineWaveClassFlags$8,1,0.5,-1" //milkmark "OnUser1" "tf_objective_resource,$SetProp$m_nMannVsMachineWaveClassFlags$9,9,0.5,-1" //blimp, giant "OnUser1" "tf_objective_resource,$SetProp$m_nMannVsMachineWaveClassFlags$10,9,0.5,-1" //giant king "OnUser1" "tf_objective_resource,$SetProp$m_nMannVsMachineWaveClassFlags$11,1,0.5,-1" //soldier "OnUser1" "tf_objective_resource,$SetProp$m_nMannVsMachineWaveClassFlags2$0,9,0.5,-1" //giant milk "OnUser1" "tf_objective_resource,$SetProp$m_nMannVsMachineWaveClassFlags2$1,9,0.5,-1" //giant heat //Widowmaker and Player Buster are inf support so they don't count } filter_multi { "targetname" "filter_blue_player" "filtertype" "0" "Filter01" "filter_blueteam" "Filter02" "filter_giant_exclude" "Negated" "0" } logic_relay { "targetname" "player_to_otherteam_relay" "spawnflags" "2" "OnTrigger" "player_to_otherteam_relay_rep,Trigger,,0,-1" "OnTrigger" "@f@filter_blue_player@player,$AddCond,43,0.02,-1" } logic_relay { "targetname" "player_to_otherteam_relay_rep" "spawnflags" "2" "OnTrigger" "player_to_otherteam_relay,Trigger,,0.5,-1" } trigger_multiple { //From 1900 1465 78 //To 900 585 360 // 1000 880 282 // 500 440 141 // 1400 1025 219 "targetname" "player_to_otherteam" "StartDisabled" "1" "origin" "-8800 336 70" //red side "mins" "-2100 -500 -200" "maxs" "600 700 400" "filtername" "filter_blueteam" "OnTrigger" "!activator,AddCond,43,0,-1" //anyone on blue -> red "spawnflags" "64" //Anything can trigger me! } filter_multi { "targetname" "filter_red_player" "filtertype" "0" "Filter01" "filter_red_new" "Filter02" "filter_giant_exclude" "Negated" "0" } //Sets up the basis for either outcome logic_relay { "targetname" "w6_end_relay" "OnTrigger" "boss_music,FadeOut,1.5,0,-1" "OnTrigger" "player_to_otherteam_relay_rep,CancelPending,,0,-1" "OnTrigger" "point_populator_interface,PauseBotSpawning,,0.01,-1" "OnTrigger" "player,SetHudVisibility,0,0,-1" "OnTrigger" "player,$ForceRespawnDead,,0.01,-1" "OnTrigger" "@f@filter_blueteam@player,$Suicide,,0.03,-1" "OnTrigger" "firer,CancelPending,,0.03,-1" "OnTrigger" "firer2,CancelPending,,0.03,-1" "OnTrigger" "rocketshooter,CancelPending,,0.03,-1" "OnTrigger" "player,$ForceRespawnDead,,0.06,-1" "OnTrigger" "player,SetHudVisibility,0,0.06,-1" "OnTrigger" "player,$AddCond,87 4,0.06,-1" //No, the reds may not move either. } logic_relay { "targetname" "player_win_relay" "OnTrigger" "boss_music,FadeOut,1.5,3,-1" "OnTrigger" "w6_end_relay,Trigger,,0,-1" "OnTrigger" "boss_fade_out,Fade,,0,-1" "OnTrigger" "boss_fade_in,Fade,,1,-1" "OnTrigger" "boss_cam3,$EnableAll,,1,-1" "OnTrigger" "player_win_particle,Start,,2,-1" "OnTrigger" "pit_explosion_wav,PlaySound,,2,-1" "OnTrigger" "@f@filter_red_player@player,$AddCond,43,3.95,-1" //exclude all reds except players! "OnTrigger" "player,SetHudVisibility,1,4,-1" "OnTrigger" "boss_cam3,$DisableAll,,4,-1" "OnTrigger" "bots_win,RoundWin,,4,-1" } logic_relay { "targetname" "player_lose_relay" "OnTrigger" "w6_end_relay,Trigger,,0,-1" "OnTrigger" "@f@filter_giant_include@player,$AddCond,87,0.01,-1" "OnTrigger" "boss_fade_out,Fade,,0,-1" "OnTrigger" "boss_fade_in,Fade,,1,-1" "OnTrigger" "boss_cam2,$EnableAll,,1,-1" "OnTrigger" "player_lose_particle,Start,,2.1,-1" "OnTrigger" "cap_hatch_glasswindow,Break,,2.1,-1" "OnTrigger" "cap_hatch_destroy_delete_prop,Kill,,2.1,-1" "OnTrigger" "cap_hatch_destroy_animated_prop,Enable,,2.1,-1" "OnTrigger" "pit_explosion_wav,PlaySound,,2.15,-1" "OnTrigger" "@f@filter_red_player@player,$AddCond,43,3.7,-1" //exclude all reds except players! "OnTrigger" "player,SetHudVisibility,1,3.75,-1" "OnTrigger" "boss_cam2,$DisableAll,,3.75,-1" "OnTrigger" "redwin_relay,Trigger,,3.75,-1" } } //Contains: //- Starting prop for Misha //- Cosmetic props //- Big-ass explosion for lose wave6props { NoFixup 1 prop_dynamic { "targetname" "boss_cinematic" "DefaultAnim" "competitive_winnerstate_idle" "angles" "0 180 0" "origin" "-400 550 50.85" "DisableBoneFollowers" 1 "disableshadows" 0 "SetBodyGroup" 0 "StartDisabled" 1 // keep hidden until cinematic starts "model" "models/player/heavy.mdl" "solid" "0" } //War Goggles are only for the cutscene to prevent white eyes. prop_dynamic_ornament { "targetname" "boss_cosmetics" "InitialOwner" "boss_cinematic" "spawnflags" "256" "DisableBoneFollowers" "1" "disableshadows" "1" "solid" "0" "model" "models/workshop/player/items/heavy/sbox2014_war_goggles/sbox2014_war_goggles.mdl" } prop_dynamic_ornament { "targetname" "boss_cosmetics" "InitialOwner" "boss_cinematic" "spawnflags" "256" "DisableBoneFollowers" "1" "disableshadows" "1" "solid" "0" "model" "models/workshop/player/items/heavy/fall17_siberian_tigerstripe/fall17_siberian_tigerstripe.mdl" } prop_dynamic_ornament { "targetname" "boss_cosmetics" "InitialOwner" "boss_cinematic" "spawnflags" "256" "DisableBoneFollowers" "1" "disableshadows" "1" "solid" "0" "model" "models/player/items/mvm_loot/heavy/robo_ushanka.mdl" } prop_dynamic_ornament { "targetname" "boss_cosmetics" "InitialOwner" "boss_cinematic" "spawnflags" "256" "DisableBoneFollowers" "1" "disableshadows" "1" "solid" "0" "model" "models/workshop/player/items/heavy/sbox2014_war_pants/sbox2014_war_pants.mdl" } prop_dynamic_ornament { "targetname" "boss_cosmetics" "InitialOwner" "boss_cinematic" "spawnflags" "256" "DisableBoneFollowers" "1" "disableshadows" "1" "solid" "0" "model" "models/weapons/c_models/c_minigun/c_minigun.mdl" } prop_dynamic_ornament { "targetname" "boss_cosmetics" "InitialOwner" "boss_cinematic" "spawnflags" "256" "DisableBoneFollowers" "1" "disableshadows" "1" "solid" "0" "model" "models/player/items/mvm_loot/heavy/fob_h_minigun_diamond.mdl" } //Covers red spawn, since blue -> red will be active trigger_teleport { "targetname" "tele_all_to_redbase" "target" "RedSpawn" "filtername" "filter_giant_exclude" "StartDisabled" "1" "spawnflags" "3" "origin" "-8800 336 70" //red side "mins" "-2100 -500 -200" "maxs" "600 700 400" } training_annotation { "targetname" "boss_hint" "display_text" "Protect your titan!" "lifetime" "5.5" "origin" "264 512 600" } info_particle_system { "targetname" "player_lose_particle" "start_active" "0" "effect_name" "cinefx_goldrush" //shit's hyper, yo "origin" "264 512 60" //around the hatch } info_particle_system { "targetname" "player_win_particle" "angles" "0 60 0" "start_active" "0" "effect_name" "fireSmoke_collumn" //kinda blows outwards "origin" "-9312 -288 176" //inside redside carrier tank } } //Order: //- Yeet HUD //- Fade out into black //- Camera cut, fade in. //- Voiceline plays //- Camera changes perspective //- Voicelines play, one-by-one //- Fade out //- Camera disabled //- Fade out, red //- Players teleported during fade out: set pos, playsound, add cond, add attribute //- Fade in, now @ spawn. //- Boss text shown //- Boss music starts //Possibly: //https://www.youtube.com/watch?v=RP9mzkG8uMU wave6boss { NoFixup 1 logic_relay { "targetname" "boss_start_relay" "OnTrigger" "bluesidedoor*,Close,,0,-1" //Remove HUD; respawn any suiciders; stop MOVING "OnTrigger" "player,SetHudVisibility,0,0,-1" "OnTrigger" "player,$ForceRespawnDead,,0.01,-1" "OnTrigger" "player,$ForceRespawnDead,,0.03,-1" "OnTrigger" "player,$AddCond,87 13,0.01,-1" "OnTrigger" "boss_fadesound,PlaySound,0.02,-1" //Fade to black/Fade out of black; enable models; cut to shot "OnTrigger" "boss_fade_out,Fade,,0,-1" "OnTrigger" "boss_fade_in,Fade,,1,-1" "OnTrigger" "boss_cinematic,Enable,,0.8,-1" "OnTrigger" "boss_cosmetics,TurnOn,,0.8,-1" "OnTrigger" "boss_cam,$EnableAll,,1,-1" "OnTrigger" "boss_prespawn,PlaySound,,1.5,-1" "OnTrigger" "boss_shake,StartShake,,4.57,-1" "OnTrigger" "spawnbot_hatch_def,Enable,,4.57,-1" "OnTrigger" "boss_cam2,$EnableAll,,4.6,-1" "OnTrigger" "boss_spawn2,PlaySound,,4.6,-1" "OnTrigger" "boss_postspawn1,PlaySound,,5,-1" "OnTrigger" "boss_postspawn2,PlaySound,,7,-1" "OnTrigger" "boss_postspawn3,PlaySound,,9.5,-1" "OnTrigger" "boss_fade_out,Fade,,10.5,-1" "OnTrigger" "boss_fade_in,Fade,,11.5,-1" "OnTrigger" "player,SetHudVisibility,1,11.5,-1" "OnTrigger" "boss_cam2,$DisableAll,,11.45,-1" "OnTrigger" "boss_cam,$DisableAll,,11.45,-1" "OnTrigger" "boss_cinematic,Kill,,12,-1" "OnTrigger" "boss_cosmetics,TurnOff,,12,-1" "OnTrigger" "player_to_otherteam,Enable,,11.5,-1" "OnTrigger" "player_to_otherteam_relay,Trigger,,11.5,-1" "OnTrigger" "boss_teleport,PlaySound,,11.51,-1" "OnTrigger" "boss_music,PlaySound,,11.51,-1" "OnTrigger" "tele_all_to_redbase,Enable,,11.51,-1" //teleport trigger at spawns AND teleporters!!! "OnTrigger" "boss_fade_red,Fade,,11.5,-1" //starts after fadein "OnTrigger" "spawnbot_blu_special,Enable,,14,-1" "OnTrigger" "spawnbot_red_special,Enable,,14,-1" "OnTrigger" "spawnbot_mid_special,Enable,,14,-1" "OnTrigger" "upper_text,Display,,14,-1" "OnTrigger" "middle_text,Display,,14.2,-1" //Just in case someone SOMEHOW still gets stuck in it... "OnTrigger" "boss_cam2,$DisableAll,,12,-1" "OnTrigger" "boss_cam,$DisableAll,,12,-1" "OnTrigger" "boss_cam2,$DisableAll,,16,-1" "OnTrigger" "boss_cam,$DisableAll,,16,-1" "OnTrigger" "boss_cam2,$DisableAll,,20,-1" "OnTrigger" "boss_cam,$DisableAll,,20,-1" "OnUser1" "player_win_relay,Trigger,,0,-1" "OnUser2" "player_lose_relay,Trigger,,0,-1" } env_fade { "targetname" "boss_fade_out" "duration" "1" //take 1 sec to go to full black, then hold for a bit... "holdtime" "0.25" "rendercolor" "0 0 0" } env_fade { "targetname" "boss_fade_in" "duration" "1" //...and take 1sec to fade in again. "rendercolor" "0 0 0" "spawnflags" "1" //fade FROM the color } env_fade { "targetname" "boss_fade_red" "duration" "1" //...and take 1sec to fade in again. "rendercolor" "255 0 0" "renderamt" "100" //slightly easier on the eyes, probably "spawnflags" "1" //from red } point_viewcontrol { "targetname" "boss_cam" "spawnflags" "0" "wait" "16" "origin" "-485 480 120" //misha view "angles" "5 36 0" } point_viewcontrol { "targetname" "boss_cam2" "spawnflags" "0" "wait" "16" //I disable these anyway, but this ensures that even if that fails, they'll release you in time "origin" "-785 560 115" //titan view "angles" "-30 0 0" } point_viewcontrol { "targetname" "boss_cam3" "spawnflags" "0" "wait" "15" "origin" "-7100 800 720" //carrier view "angles" "13 -160 0" } //Extra lines, played in order. //2.5 secs, 2 sec, 2 sec, then about 3 sec //Total: about 10 seconds ambient_generic { "message" "#*misc\hologram_stop.wav" "health" "10" "radius" "20" "spawnflags" "49" //play everywhere, start silent, don't loop. "targetname" "boss_fadesound" } ambient_generic { "message" "#*vo\compmode\cm_heavy_pregamelostlast_07.mp3" "health" "10" "radius" "20" "spawnflags" "49" //play everywhere, start silent, don't loop. "targetname" "boss_prespawn" } ambient_generic { "message" "#*misc\doomsday_cap_open_start.wav" "health" "8" "radius" "20" "spawnflags" "49" //play everywhere, start silent, don't loop. "targetname" "boss_spawn1" } ambient_generic { "message" "#*misc\doomsday_lift_stop.wav" "health" "12" "radius" "20" "spawnflags" "49" //play everywhere, start silent, don't loop. "targetname" "boss_spawn2" } ambient_generic { "message" "#*vo\mvm\norm\heavy_mvm_revenge02.mp3" "health" "10" "radius" "20" "spawnflags" "49" "targetname" "boss_postspawn1" } ambient_generic { "message" "#*vo\mvm\norm\heavy_mvm_revenge03.mp3" "health" "10" "radius" "20" "spawnflags" "49" "targetname" "boss_postspawn2" } ambient_generic { "message" "#*vo\mvm\norm\heavy_mvm_revenge04.mp3" "health" "10" "radius" "20" "spawnflags" "49" "targetname" "boss_postspawn3" } ambient_generic { "message" "#*mvm/mvm_tele_deliver.wav" "health" "10" "radius" "20" "spawnflags" "49" "targetname" "boss_teleport" } ambient_generic { "message" "#LukHash_H8U2_v2.mp3" "health" "10" "radius" "20" "spawnflags" "49" "targetname" "boss_music" } //big boi causes big shake env_shake { "targetname" "boss_shake" "spawnflags" "1" //everyone shakes! "amplitude" "8" "duration" "1" "frequency" "20" } //Title cards I stole from royal with permission. //In that sense, it's no longer stealing! game_text { "origin" "1984 1984 99999" "targetname" "upper_text" "message" "FINAL LINE OF DEFENSE, ABSOLUTE OVERRIDE UNIT" "x" "-1" "y" "0.4" "spawnflags" "1" "effect" "2" "channel" "2" "color" "255 255 255" "fxtime" "0.2" "fadeout" "1" //"fadein" "0" "holdtime" "5" } game_text { "origin" "1984 1984 99999" "targetname" "middle_text" "message" "SHUTDOWN PROTOCOL" "x" "-1" "y" "0.45" "channel" "0" "spawnflags" "1" "color" "255 255 255" "fadein" "0.2" "fadeout" "1" "holdtime" "4.8" } } tempbarriers { NoFixup 1 func_forcefield { "origin" "0 0 0" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" "TeamNum" "2" "targetname" "tempbarrierA1" "parentname" "tempbarrierA" "mins" "-300 -100 -3000" "maxs" "300 100 3000" "StartDisabled" "0" } prop_dynamic { "targetname" "tempbarrierA" "DisableBoneFollowers" "1" "disablereceiveshadows" "1" "model" "models/props_vehicles/train_flatcar_container.mdl" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "modelscale" "1.5" "renderamt" "0" "renderfx" "16" //"rendermode" "0" "skin" "1" "CollisionGroup" "1" "solid" "0" "StartDisabled" "0" "origin" "0 0 0" } } tempbarriers2 { NoFixup 1 func_forcefield { "origin" "0 0 0" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" "TeamNum" "2" "targetname" "tempbarrierB1" "parentname" "tempbarrierB" "mins" "-300 -100 -300" "maxs" "300 100 300" "StartDisabled" "0" } prop_dynamic { "targetname" "tempbarrierB" "DisableBoneFollowers" "1" "disablereceiveshadows" "1" "model" "models/props_vehicles/train_flatcar_container.mdl" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "modelscale" "1.5" "renderamt" "0" "renderfx" "16" //"rendermode" "0" "skin" "1" "CollisionGroup" "1" "solid" "0" "StartDisabled" "0" "origin" "0 0 0" } } station { NoFixup 1 func_upgradestation //upgrade station entity { "mins" "-100 -140 0" "maxs" "100 140 242" "solid" "0" } prop_dynamic { "angles" "0 0 0" "model" "models\props_mvm\mvm_upgrade_blu.mdl" "modelscale" "1.0" "rendercolor" "255 255 255" "solid" "0" "targetname" "station" "origin" "0 0 0" } func_forcefield //because solid options are just really...funky. { "origin" "0 0 0" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" "TeamNum" "2" "targetname" "station_clip" "mins" "-55 -140 0" "maxs" "55 140 242" "StartDisabled" "0" } } station_nocollision { NoFixup 1 func_upgradestation //upgrade station entity { "mins" "-100 -140 0" "maxs" "100 140 242" "solid" "0" } prop_dynamic { "targetname" "station" "angles" "0 0 0" "model" "models\props_mvm\mvm_upgrade_blu.mdl" "modelscale" "1.0" "rendercolor" "255 255 255" "solid" "0" "origin" "0 0 0" } } station_rotated_90n { NoFixup 1 func_upgradestation //upgrade station entity { "targetname" "station_func_90n" "mins" "-105 -100 0" "maxs" "105 100 242" "solid" "0" } func_forcefield //because solid options are just really...funky. { "origin" "0 0 0" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" "TeamNum" "2" "targetname" "station_clip_90n" "maxs" "115 80 242" "mins" "-115 -80 0" "StartDisabled" "0" } prop_dynamic { "model" "models\props_mvm\mvm_upgrade_blu.mdl" "modelscale" "1.0" "rendercolor" "255 255 255" "solid" "0" "targetname" "station_90n" "origin" "0 0 0" "angles" "0 -90 0" } } station_rotated_90p { NoFixup 1 func_upgradestation //upgrade station entity { "targetname" "station_func_90p" "mins" "-105 -100 0" "maxs" "105 100 242" "solid" "0" } func_forcefield //because solid options are just really...funky. { "origin" "0 0 0" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" "TeamNum" "2" "targetname" "station_clip_90p" "maxs" "138 80 242" "mins" "-130 -80 0" "StartDisabled" "0" } prop_dynamic { "model" "models\props_mvm\mvm_upgrade_blu.mdl" "modelscale" "1.0" "rendercolor" "255 255 255" "solid" "0" "targetname" "station_90p" "origin" "0 0 0" "angles" "0 90 0" } } station_rotated_65 { NoFixup 1 func_upgradestation //upgrade station entity { "mins" "-105 -100 0" "maxs" "105 100 242" "solid" "0" } prop_dynamic //because func_forcefield is funky. { "targetname" "station_clip_60" "origin" "0 30 0" "angles" "0 65 0" // "modelscale" "1.4" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "model" "models/props_2fort/sniper_fence01.mdl" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" "solid" "6" } prop_dynamic //because func_forcefield is funky. { "targetname" "station_clip_60_2" "origin" "100 -30 0" "angles" "0 65 0" // "modelscale" "1.4" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "model" "models/props_2fort/sniper_fence01.mdl" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" "solid" "6" } prop_dynamic { "model" "models\props_mvm\mvm_upgrade_blu.mdl" "modelscale" "1.0" "rendercolor" "255 255 255" "solid" "0" "targetname" "station_65" "origin" "0 0 0" "angles" "0 65 0" } } barriers_bluside { NoFixup 1 // OnSpawnOutput // { // Target "tf_point_nav_interface" // Action "RecomputeBlockers" // Delay 1 // } func_forcefield { "targetname" "w3_barrierf" //-5590 -220 -90 //-5580 640 1450 //Diff: //10 860 1540 //5 430 770 "origin" "-5585 210 680" "mins" "-15 -930 -770" "maxs" "5 430 770" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" "TeamNum" "2" "StartDisabled" "0" } func_nobuild { "targetname" "w3_barrierb" "origin" "-5585 210 680" "mins" "-15 -930 -770" "maxs" "75 430 770" "TeamNum" "3" } prop_dynamic { "targetname" "w3_barrier" "origin" "-5490 30 -110" "angles" "0 90 0" "DisableBoneFollowers" "1" "disablereceiveshadows" "1" "model" "models/props_vehicles/train_flatcar_container.mdl" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "modelscale" "1.5" "renderamt" "0" "renderfx" "16" //"rendermode" "0" "skin" "1" "CollisionGroup" "1" "solid" "1" "StartDisabled" "0" } } barrier_redspawn { NoFixup 1 // func_forcefield // { // "targetname" "redspawn_forcefield" // "origin" "-8971 66 80" // "mins" "-121 -101 -80" // "maxs" "121 51 80" // "rendercolor" "255 255 255" // "renderfx" "0" // "rendermode" "10" // "TeamNum" "2" // "StartDisabled" "0" // } prop_dynamic { "targetname" "redspawn_prop" "origin" "-8950 80 36" "angles" "0 70 90" "disableshadows" "1" "fademaxdist" "1000" "fademindist" "500" "model" "models/props_gameplay/resupply_locker.mdl" "renderfx" "0" "rendermode" "10" "solid" "6" } prop_dynamic { "targetname" "redspawn_prop2" "origin" "-8950 80 96" "angles" "0 70 90" "disableshadows" "1" "fademaxdist" "1000" "fademindist" "500" "model" "models/props_gameplay/resupply_locker.mdl" "renderfx" "0" "rendermode" "10" "solid" "6" } prop_dynamic { "targetname" "redspawn_prop3" "origin" "-9060 180 36" "angles" "0 30 90" "disableshadows" "1" "fademaxdist" "1000" "fademindist" "500" "model" "models/props_gameplay/resupply_locker.mdl" "renderfx" "0" "rendermode" "10" "solid" "6" } prop_dynamic { "targetname" "redspawn_prop4" "origin" "-9060 180 96" "angles" "0 30 90" "disableshadows" "1" "fademaxdist" "1000" "fademindist" "500" "model" "models/props_gameplay/resupply_locker.mdl" "renderfx" "0" "rendermode" "10" "solid" "6" } //Blocks the stuck-getting thing. Can only be reached with Rocket Ranger. prop_dynamic { "targetname" "redspawn_prop5" "origin" "-9150 -100 20" "angles" "-90 -100 90" "disableshadows" "1" "fademaxdist" "1000" "fademindist" "500" "model" "models/props_gameplay/resupply_locker.mdl" "renderfx" "0" "rendermode" "10" "solid" "6" } prop_dynamic { "targetname" "redspawn_prop5" "origin" "-9260 -80 36" "angles" "-90 -100 90" "disableshadows" "1" "fademaxdist" "1000" "fademindist" "500" "model" "models/props_gameplay/resupply_locker.mdl" "renderfx" "0" "rendermode" "10" "solid" "6" } } barrier_prop { NoFixup 1 prop_dynamic { "targetname" "barrierbuilding" "disableshadows" "1" "fademaxdist" "0" "fademindist" "0.0001" "model" "models\props_buildings\building_002a.mdl" "renderfx" "1" "rendermode" "0" "solid" "6" "origin" "0 0 0" } } //Special barriers to cover up holes in blue gate spawn. barrier_prop_bluegate { NoFixup 1 //Rightmost side prop_dynamic { "targetname" "prop_barrier_bluegate" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "model" "models/props_hydro/metal_barrier01.mdl" "renderfx" "0" "rendermode" "0" "solid" "6" "origin" "-3580 -2647 0" "angles" "18.5 270 0" } prop_dynamic { "targetname" "prop_barrier_bluegate" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "model" "models/props_hydro/metal_barrier01.mdl" "renderfx" "0" "rendermode" "0" "solid" "6" "origin" "-3580 -2647 218" //only barely overlap with 218 between "angles" "18.5 270 0" } //Leftmost side prop_dynamic { "targetname" "prop_barrier_bluegate" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "model" "models/props_hydro/metal_barrier01.mdl" "renderfx" "0" "rendermode" "0" "solid" "6" "origin" "-4418 -2647 0" "angles" "18.5 270 0" } prop_dynamic { "targetname" "prop_barrier_bluegate" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "model" "models/props_hydro/metal_barrier01.mdl" "renderfx" "0" "rendermode" "0" "solid" "6" "origin" "-4418 -2647 218" //only barely overlap with 218 between "angles" "18.5 270 0" } //Top part prop_dynamic { "targetname" "prop_barrier_bluegate" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "model" "models/props_hydro/metal_barrier02.mdl" "modelscale" "0.8" "renderfx" "0" "rendermode" "0" "solid" "6" "origin" "-3705 -2627 254" "angles" "0 288.5 90" //270 + 18.5 } prop_dynamic { "targetname" "prop_barrier_bluegate" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "model" "models/props_hydro/metal_barrier02.mdl" "modelscale" "0.8" "renderfx" "0" "rendermode" "0" "solid" "6" "origin" "-3843 -2627 254" //119 distance now "angles" "0 288.5 90" //270 + 18.5 } prop_dynamic { "targetname" "prop_barrier_bluegate" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "model" "models/props_hydro/metal_barrier02.mdl" "modelscale" "0.8" "renderfx" "0" "rendermode" "0" "solid" "6" "origin" "-3981 -2627 254" //138 distance now "angles" "0 288.5 90" //270 + 18.5 } prop_dynamic { "targetname" "prop_barrier_bluegate" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "model" "models/props_hydro/metal_barrier02.mdl" "modelscale" "0.8" "renderfx" "0" "rendermode" "0" "solid" "6" "origin" "-4119 -2627 254" //138 distance now "angles" "0 288.5 90" //270 + 18.5 } prop_dynamic { "targetname" "prop_barrier_bluegate" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "model" "models/props_hydro/metal_barrier02.mdl" "modelscale" "0.8" "renderfx" "0" "rendermode" "0" "solid" "6" "origin" "-4257 -2627 254" //138 distance now "angles" "0 288.5 90" //270 + 18.5 } //Leftmost part: final cover-up prop_dynamic { "targetname" "prop_barrier_bluegate" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "model" "models/props_hydro/metal_barrier01.mdl" "renderfx" "0" "rendermode" "0" "solid" "6" "origin" "-4329 -2637 246" //only barely overlap with 218 between "angles" "18.5 300 0" } } decoration { NoFixup 1 prop_dynamic { "targetname" "rocc" "disableshadows" "1" "fademaxdist" "0" "fademindist" "-1" "model" "models\bots\boss_bot\boss_tank_part1_destruction.mdl" "renderfx" "0" //"rendermode" "0" "solid" "6" "origin" "0 0 0" } } //Spawnpoints when attacking from the red spawn, towards blue side. //Names are spawnbot_name + _prop spawn_indicators_blupath { NoFixup 1 //Near the large packs. //spawnbot_blu_front prop_dynamic { "targetname" "spawnbot_blu_front_prop" "model" "models/props_mvm/robot_spawnpoint.mdl" "origin" "-6100 300 -114" "defaultanim" "idle" "disableshadows" "1" "skin" "0" // Skin 0 for Red, Skin 1 for Blue, Skin 2 for Gray, and Skin 3 to disable the hologram } //Next to the upgrade station. //spawnbot_blu_station prop_dynamic { "targetname" "spawnbot_blu_station_prop" "model" "models/props_mvm/robot_spawnpoint.mdl" "origin" "-5450 -440 -64" "defaultanim" "idle" "disableshadows" "1" "skin" "0" } //Closed-off hall next to bombpath. //spawnbot_blu_hall prop_dynamic { "targetname" "spawnbot_blu_hall_prop" "model" "models/props_mvm/robot_spawnpoint.mdl" "origin" "-4220 700 96" "defaultanim" "idle" "disableshadows" "1" "skin" "0" } //Side of first choke, behind fences. //spawnbot_blu_fence prop_dynamic { "targetname" "spawnbot_blu_fence_prop" "model" "models/props_mvm/robot_spawnpoint.mdl" "origin" "-4700 -180 96" "defaultanim" "idle" "disableshadows" "1" "skin" "3" } //Up the stairs near gate. //spawnbot_blu_gate prop_dynamic { "targetname" "spawnbot_blu_gate_prop" "model" "models/props_mvm/robot_spawnpoint.mdl" "origin" "-3333 -1880 96" "defaultanim" "idle" "disableshadows" "1" "skin" "0" } //Behind the tankdoor. //spawnbot_blu_tankdoor prop_dynamic { "targetname" "spawnbot_blu_tankdoor_prop" "model" "models/props_mvm/robot_spawnpoint.mdl" "origin" "-3333 -1880 96" "defaultanim" "idle" "disableshadows" "1" "skin" "0" } //Side hallway, exit to gate side. //spawnbot_blu_sidehall prop_dynamic { "targetname" "spawnbot_blu_sidehall_prop" "model" "models/props_mvm/robot_spawnpoint.mdl" "origin" "-1900 -2800 -96" "defaultanim" "idle" "disableshadows" "1" "skin" "0" } //Side hallway, exit to hatch side //spawnbot_blu_sidehall prop_dynamic { "targetname" "spawnbot_blu_sidehall_prop" "model" "models/props_mvm/robot_spawnpoint.mdl" "origin" "-925 -2800 -96" "defaultanim" "idle" "disableshadows" "1" "skin" "0" } //Side hallway entrance, next to bridge. //spawnbot_blu_bighall prop_dynamic { "targetname" "spawnbot_blu_bighall_prop" "model" "models/props_mvm/robot_spawnpoint.mdl" "origin" "-1050 -1450 64" "defaultanim" "idle" "disableshadows" "1" "skin" "0" } //Next to bridge, away from hatch. //spawnbot_blu_bridge prop_dynamic { "targetname" "spawnbot_blu_bridge_prop" "model" "models/props_mvm/robot_spawnpoint.mdl" "origin" "80 -1050 64" "defaultanim" "idle" "disableshadows" "1" "skin" "0" } } //Spawnpoints when attacking from the blue spawn, towards red side. spawn_indicators_redpath { NoFixup 1 //Front, slightly behind the tiny building //spawnbot_red_front prop_dynamic { "targetname" "spawnbot_red_front_prop" "model" "models/props_mvm/robot_spawnpoint.mdl" "origin" "-6260 300 -105" "defaultanim" "idle" "disableshadows" "1" "skin" "0" // Skin 0 for Red, Skin 1 for Blue, Skin 2 for Gray, and Skin 3 to disable the hologram } //Inside the garage, next to the side entrance //spawnbot_red_garage prop_dynamic { "targetname" "spawnbot_red_garage_prop" "model" "models/props_mvm/robot_spawnpoint.mdl" "origin" "-6350 1430 -64" "defaultanim" "idle" "disableshadows" "1" "skin" "0" } //spawnbot_red_tankdoor //Behind the large pack shed prop_dynamic { "targetname" "spawnbot_red_tankdoor_prop" "model" "models/props_mvm/robot_spawnpoint.mdl" "origin" "-4280 1470 -94" "defaultanim" "idle" "disableshadows" "1" "skin" "0" } //Boxes near 2nd tankdoor / flank path //spawnbot_red_boxesdoor prop_dynamic { "targetname" "spawnbot_red_boxesdoor_prop" "model" "models/props_mvm/robot_spawnpoint.mdl" "origin" "-3200 1020 96" "defaultanim" "idle" "disableshadows" "1" "skin" "0" } //Corridor past gate //spawnbot_red_pastgate prop_dynamic { "targetname" "spawnbot_red_pastgate_prop" "model" "models/props_mvm/robot_spawnpoint.mdl" "origin" "-2550 2000 128" "defaultanim" "idle" "disableshadows" "1" "skin" "0" } //Slightly before gate //spawnbot_red_gate prop_dynamic { "targetname" "spawnbot_red_gate_prop" "model" "models/props_mvm/robot_spawnpoint.mdl" "origin" "-3560 2300 64" "defaultanim" "idle" "disableshadows" "1" "skin" "0" } } AirTeleport { NoFixup 1 filter_tf_bot_has_tag { "Negated" "0" "require_all_tags" "1" "tags" "airtp" //add this tag to the bot you want to teleport "targetname" "filter_airtp" } trigger_teleport { "origin" "700 1275 200" //locate this where the bot will spawn: spawnbot "mins" "-500 -500 -200" "maxs" "500 500 200" "spawnflags" "1" "filtername" "filter_airtp" "target" "destination" //Where to teleport the bot to } info_target //Will serve as the destination { "targetname" "destination" "origin" "-6680 -600 1050" //Where the bot goes } } annotation_airdrop { NoFixup 1 OnSpawnOutput { Target "airdropped" Action Show Delay 0.5 } training_annotation { "targetname" "airdropped" "display_text" "An aerial attack! Look up!" "lifetime" "5" "origin" "0 0 0" } } annotation_tank_req { NoFixup 1 OnSpawnOutput { Target "airdropped" Action Show Delay 0.5 } training_annotation { "targetname" "tankmessage" "display_text" "Kill the glowing giant to progress!" "lifetime" "5" "origin" "0 0 0" } } powerup_logic { OnParentKilledOutput { Target "item_powerup_rune" Action Kill Delay 0 } } Teleporter_Blu { NoFixup 1 OnSpawnOutput //make teleporter non solid, otherwise the bots might get stuck on it { Target "tp" Action "addoutput" Param "solid 0" Delay 0.1 } OnSpawnOutput //hide it, can't have anything targeting this. { Target "tp" Action "Disable" Delay 0.04 } OnSpawnOutput //hide it, can't have anything targeting this. { Target "tp" Action "Hide" Delay 0.06 } obj_teleporter { "targetname" "tp" "spawnflags" "2" "teamnum" "3" "TeleportWhere" "spawnbot_red_special" "origin" "0 0 0" "solid" "0" } } Teleporter_w6 { obj_teleporter { "targetname" "tp_r" "spawnflags" "2" "teamnum" "3" "TeleportWhere" "spawnbot_red_special" "origin" "-1775 2500 128" "solid" "0" } obj_teleporter { "targetname" "tp_m" "spawnflags" "2" "teamnum" "3" "TeleportWhere" "spawnbot_mid_special" "origin" "-1600 0 64" "solid" "0" } obj_teleporter { "targetname" "tp_b" "spawnflags" "2" "teamnum" "3" "TeleportWhere" "spawnbot_blu_special" "origin" "-1275 -850 64" "solid" "0" } } //Repairing-the-tank relays! //Instant heal for bots with tag bot_repair (but also suicide), //and more constant but weaker heal for players TankRepair { NoFixup 1 info_target { "targetname" "tankshere" } filter_tf_bot_has_tag { "targetname" "filter_repair" "tags" "bot_repair" "require_all_tags" "1" "Negated" "0" } filter_multi { "targetname" "filter_repairnot" "filtertype" "1" //both must fail! thanks, negated OR logic. "Filter01" "filter_red_new" "Filter02" "filter_repair" "Negated" "1" } // trigger_multiple // { // "targetname" "trigger_repair" // "mins" "-119 -100 -150" // "maxs" "119 100 150" // "filtername" "filter_repair" // "OnTrigger" "tankboss*,AddHealth,$$=!parent.health_max*0.05,0.02,-1" //heals 5% of max hp // "OnTrigger" "tankdamage_relay,Trigger,,0.04,-1" // "OnTrigger" "!activator,SetHealth,-1,0.2,-1" //kill the activator // "spawnflags" "64" //Anything can trigger me! // } trigger_multiple { "targetname" "trigger_repairnot" "mins" "-139 -120 -150" "maxs" "139 120 150" "filtername" "filter_repairnot" "wait" "1" "OnTrigger" "w4_tank,AddHealth,$$=test(w4_tank.m_iHealth/float(w4_tank.health_max) > 0.5,float(w4_tank.health_max*0.01),float(w4_tank.health_max*0.02)),0.02,-1" //heals more if below half "OnTrigger" "tankdamage_relay,Trigger,,0.04,-1" "spawnflags" "64" } //Deals 1 damage to tank logic_relay { "targetname" "tankdamage_relay" "spawnflags" 2 "OnTrigger" "w4_tank,$TakeDamage,1,0,-1" } } //Relay for checking if the tank hp is below a certain amount TankHeal { //Take the max hitpoints, multiply by value, store in variable as "health threshold". //Ditto, then store as "health to heal". //Continually grab Current hitpoints, compare with threshold. //On threshold hit, heal for given amount. logic_relay { "onspawn" "!parent,$getkey$health,!parent|$setvar$health_maxim,0,-1" "onspawn" "!parent,$setvar$health_heal,$$=!parent.health_maxim * 0.3,0,-1" "onspawn" "!parent,$getkey$health,tankcompare|setcomparevalue|0,0.01,-1" } logic_timer { "refiretime" "0.1" "ontimer" "!parent,$getdata$m_iHealth,tankcompare|setvaluecompare|0,0,-1" } logic_compare { "targetname" "tankcompare" "onlessthan" "!parent,$getvar$health_heal,!parent|AddHealth|,0,-1" "onlessthan" "!self,Disable,,0,-1" } } //The NEW Cooler tankspeed relays, by me. TankDynamicSpeed { OnSpawnOutput { Target tankhint1 Action Show Delay 0.2 } OnSpawnOutput { Target tankhint2 Action Show Delay 4.3 } OnSpawnOutput { Target tank_speedsetter Action SetParent Param !activator } OnSpawnOutput { Target tank_speedsetter_assist Action SetParent Param !activator } NoFixup 1 //Take the max hitpoints, store in var. //Continually grab Current hitpoints, divide by max, round up, multiply by speed, and set speed. logic_relay { "targetname" "tank_speedsetter_assist" "OnSpawn" "w4_tank,$SetVar$health_max,$$=w4_tank.m_iHealth,0.01,-1" "OnSpawn" "tank_speedsetter,Trigger,,0.02,-1" "OnTrigger" "tank_speedsetter,Trigger,,0.02,-1" } logic_relay { "targetname" "tank_speedsetter" "spawnflags" 2 "OnTrigger" "w4_tank,SetSpeed,$$=ceil(w4_tank.m_iHealth/float(w4_tank.health_max)*10)*7.5,0,-1" "OnTrigger" "tank_speedsetter_assist,Trigger,,0.1,-1" } training_annotation { "targetname" "tankhint1" "display_text" "The tank will slow down as its health decreases!" "lifetime" "4" } training_annotation { "targetname" "tankhint2" "display_text" "Stay close to it to repair it!" "lifetime" "3" } } //tankspeed relays, by lite tankspeed { NoFixup 1 logic_relay { "onspawn" "!parent,$getkey$health,healthcounter_high|sethitmax|0,0,-1" "onspawn" "!parent,$getkey$health,healthcounter_high|setvalue|0,0.01,-1" "onspawn" "!parent,$getkey$health,healthcounter_low|sethitmax|0,0,-1" "onspawn" "!parent,$getkey$health,healthcounter_low|setvalue|0,0.01,-1" } //70% logic_relay { "onspawn" "healthcounter_high,multiply,0.7,0.02,-1" } math_counter { "targetname" "healthcounter_high" "outvalue" "tankcompare_high,setcomparevalue,,0,-1" } logic_timer { "refiretime" "0.1" "ontimer" "!parent,$getdata$m_iHealth,tankcompare_high|setvaluecompare|0,0,-1" } logic_compare { "targetname" "tankcompare_high" "ongreaterthan" "!parent,setspeed,75,0,-1" "onlessthan" "!parent,$getdata$m_iHealth,tankcompare_low|setvaluecompare|0,0,-1" } //40% logic_relay { "onspawn" "healthcounter_low,multiply,0.4,0.02,-1" } math_counter { "targetname" "healthcounter_low" "outvalue" "tankcompare_low,setcomparevalue,,0,-1" } logic_compare { "targetname" "tankcompare_low" "ongreaterthan" "!parent,setspeed,50,0,-1" "onlessthan" "!parent,setspeed,15,0,-1" } } BlimpExplode_Blue { NoFixup 1 OnSpawnOutput { Target blimp_path_blue_4 Action AddOutput Param "OnPass !activator:DestroyIfAtCapturePoint:1:0.1:-1" } OnSpawnOutput { Target blimp_path_blue_4 Action AddOutput Param "OnPass blimp_blast_blue:Enable::0:-1" } trigger_hurt { "targetname" "blimp_blast_blue" "origin" "0 0 0" "damage" "18000" //15% of max health "damagetype" "0" //generic "damagemodel" "0" //normal "spawnflags" "64" "StartDisabled" "1" "nodmgforce" "1" //Tank dimensions: X (front-back): 117; Y (left-right): 80; Z (bottom-top): 180 //This stretches out horizontally, but not vertically "mins" "-317 -480 -90" "maxs" "317 480 90" } } BlimpExplode_Red { NoFixup 1 OnSpawnOutput { Target blimp_path_red_4 Action AddOutput Param "OnPass !activator:DestroyIfAtCapturePoint:1:0.1:-1" } OnSpawnOutput { Target blimp_path_red_4 Action AddOutput Param "OnPass blimp_blast_red:Enable::0:-1" } trigger_hurt { "targetname" "blimp_blast_red" "origin" "0 0 0" "damage" "18000" //15% of max health "filtername" "filter_red_new" "damagetype" "0" //generic "damagemodel" "0" //normal "spawnflags" "64" "StartDisabled" "1" "nodmgforce" "1" //Tank dimensions: X (front-back): 117; Y (left-right): 80; Z (bottom-top): 180 //This stretches out horizontally, but not vertically "mins" "-217 -280 -90" "maxs" "217 280 90" } } ApplyCondIfCond { NoFixup 1 //Test if this works, if you wanna use this. OnSpawnOutput { Target filter_hascond Action SetParent Param !activator } filter_tf_condition { "targetname" "filter_hascond" "condition" 11 "Negated" 0 "OnFail" "!parent,$RemoveCond,113,0,-1" "OnPass" "!parent,$AddCond,113,0,-1" } logic_relay { "targetname" "applycond" "OnTrigger" "applycond,Trigger,,0.2,-1" //checks every 0.2 seconds "OnTrigger" "filter_hascond,TestActivator,!parent,0,-1" //Tests filter on the parent } } //I shamelessly stole this from royal //thank you tomboy enjoyer Combo_Pyro { NoFixup 1 logic_relay { "targetname" "combo_primary_to_secondary" "spawnflags" "2" "OnTrigger" "!self,EnableRefire,,0,-1" "OnTrigger" "!activator,$RemoveItemAttribute,fire input on hit|0,0,-1" "OnTrigger" "!activator,$WeaponSwitchSlot,1,0,-1" "OnTrigger" "!activator,$AddPlayerAttribute,disable weapon switch|1,0.01,-1" "OnTrigger" "!activator,$RemovePlayerAttribute,disable weapon switch,0.6,-1" "OnTrigger" "!activator,$WeaponSwitchSlot,0,0.61,-1" "OnTrigger" "!activator,$AddItemAttribute,fire input on hit|combo_primary_to_secondary^Trigger^|0,0.62,-1" } } SentryHat { NoFixup 1 OnSpawnOutput { Target sentryhat Action SetBuilder Param !parent Delay 0.01 } // OnSpawnOutput // { // Target sentryhat // Action $SetKey$angles // Param "0 0 0" // Delay 0.02 // } obj_sentrygun { "targetname" "sentryhat" "teamnum" 3 "spawnflags" 10 //inv, inf ammo "solid" 0 "angles" "0 0 0" "origin" "0 35 -15" "rendermode" 0 //10 if needed to be invis } } DispenserPocket { NoFixup 1 OnSpawnOutput { Target dispenserpocket Action SetBuilder Param !parent Delay 0.01 } obj_dispenser { "targetname" "dispenserpocket" "angles" "90 -100 105" "origin" "55 0 30" "teamnum" 3 //blu "spawnflags" 2 //inv, inf ammo "solid" 0 "defaultupgrade" 0 //"rendermode" 10 if needed to be invis } } Carbinewacka { NoFixup 1 OnSpawnOutput { Target combo_secondary_to_melee Action Trigger } OnSpawnOutput { Target "!activator" Action "$AddPlayerAttribute" Param "disable weapon switch|1" } filter_tf_condition { "targetname" "filter_minicrits" "condition" "19" //minicrits from Carbine effect "Negated" "0" "OnPass" "!activator,$RemovePlayerAttribute,disable weapon switch,0,-1" "OnPass" "!activator,$WeaponSwitchSlot,2,0.01,-1" "OnPass" "!activator,$AddPlayerAttribute,disable weapon switch|1,0.011,-1" "OnFail" "!activator,$RemovePlayerAttribute,disable weapon switch,0,-1" "OnFail" "!activator,$WeaponSwitchSlot,1,0.01,-1" "OnFail" "!activator,$AddPlayerAttribute,disable weapon switch|1,0.011,-1" } logic_relay { "targetname" "combo_secondary_to_melee" "spawnflags" "2" "OnTrigger" "!self,Trigger,,0.5,-1" //checks every 0.5 seconds "OnTrigger" "filter_minicrits,TestActivator,,0,-1" //Tests filter on activator } } //Teleports to the front door. W1_TeleToFront { NoFixup 1 trigger_teleport { "targetname" "w1tele" "filtername" "filter_w1tele" "Origin" "0 0 0" "spawnflags" "64" "target" "target_blu_front" "StartDisabled" "0" "mins" "-100 -100 -100" "maxs" "100 100 100" } filter_tf_bot_has_tag { "targetname" "filter_w1tele" "tags" "w1tele_front" "require_all_tags" "1" "Negated" "0" } OnSpawnOutput { Target "w1tele" Action "Disable" Delay 0.5 } } //Attribute changer attribute_changer { NoFixup 1 point_populator_interface { "targetname" "pop_interface_seel" } //Defensive positioning logic_relay { "targetname" "bot_attr_mid" "OnTrigger" "pop_interface_seel,ChangeBotAttributes,Mid,0.1,-1" "OnTrigger" "pop_interface_seel,ChangeDefaultEventAttributes,Mid,0.1,-1" } logic_relay { "targetname" "bot_attr_base" "OnTrigger" "pop_interface_seel,ChangeBotAttributes,Base,0.1,-1" "OnTrigger" "pop_interface_seel,ChangeDefaultEventAttributes,Base,0.1,-1" } //Offensive change logic_relay { "targetname" "bot_attr_attack" "OnTrigger" "pop_interface_seel,ChangeBotAttributes,Attack,0.1,-1" "OnTrigger" "pop_interface_seel,ChangeDefaultEventAttributes,Attack,0.1,-1" } } //Points used for defensive positioning. //Origin must be specified seperately due to multiple things being spawned. defendpoints { NoFixup 1 //Blue side //Container choke info_target { "targetname" "target_blu_front" "origin" "-5560 15 -30" } //On the gate info_target { "targetname" "target_blu_gate" "origin" "-4065 -2450 -10" } //Up the stairs info_target { "targetname" "target_blu_mid2" "origin" "-3330 -1570 170" } //Underneath indoor bridge info_target { "targetname" "target_blu_mid" "origin" "-1580 -2350 -28" } //At the end of outdoor bridge info_target { "targetname" "target_blu_base" "origin" "-75 -495 117" } // func_flagdetectionzone //bomb is past front, go to mid // { // origin "-2640 -1875 125" // targetname "bombdetector_blu_front" // TeamNum 3 // mins "-256 -32 -256" // maxs "256 32 256" // "OnStartTouchFlag" "bot_attr_mid,Trigger,,0,-1" // "OnStartTouchFlag" "bombdetector_blu_front,Disable,,0.2,-1" // "OnStartTouchFlag" "spawnbot_midcheck,Enable,,0,-1" // } // func_flagdetectionzone //bomb is past mid, go to base // { // origin "-750 -1560 125" // targetname "bombdetector_blu_mid" // TeamNum 3 // mins "-256 -32 -256" // maxs "256 32 256" // "OnStartTouchFlag" "bot_attr_base,Trigger,,0,-1" // "OnStartTouchFlag" "bombdetector_blu_mid,Disable,,0.2,-1" // } //When a bot with the right filter touches this, it will try to follow the task. //In this case, well, move to itself. func_nav_prerequisite //tells bots with a tag to defend this area, like telling gatebots to stay at the gate { "targetname" "nav_redgate" //3560 2260 64 //3130 2690 274 //430 430 210 //215 215 105 //3345 2475 169 "mins" "-215 -215 -105" "maxs" "215 215 105" "Entity" "nav_redgate" "filtername" "filter_gatebot_red" "origin" "3345 2475 169" "spawnflags" "1" "start_disabled" "0" "StartDisabled" "0" "Task" "2" "Value" "-1" } filter_multi { "targetname" "filter_gatebot_red" "filtertype" "0" //all must pass! "Filter01" "filter_red_new" "Filter02" "filter_gatebot" "Negated" "0" } filter_activator_tfteam { "targetname" "filter_red_new" "TeamNum" "2" "Negated" "Allow entities that match criteria" } func_nav_prerequisite //tells bots with a tag to defend this area, like telling gatebots to stay at the gate { "targetname" "ToHatchNav" "mins" "-350 -1000 -1000" "maxs" "350 1000 1800" "Entity" "HatchNav" "filtername" "filter_hatch" "origin" "1500 -2000 500" "spawnflags" "1" "start_disabled" "0" "StartDisabled" "0" "Task" "2" "Value" "-1" } //Bridge outdoors, blue side info_target { "targetname" "target_blu_bridge1" "origin" "-680 -1310 133" } info_target { "targetname" "target_blu_bridge1" "origin" "-940 -970 133" } //Red side info_target { "targetname" "target_red_front" "origin" "-5260 850 5" } //Near point, flank route part info_target { "targetname" "target_red_mid" "origin" "-3000 1580 75" } //On point info_target { "targetname" "target_red_gate" "origin" "-3360 2530 132" } //On barrels, container info_target { "targetname" "target_red_bridge" "origin" "-1180 2200 310" } //At ramp towards grinder info_target { "targetname" "target_red_bridge2" "origin" "-1275 1800 195" } //Facing far side. info_target { "targetname" "target_red_base" "origin" "20 880 117" } //Facing middle bridge info_target { "targetname" "target_red_base2" "origin" "-160 520 117" } } //Yes, I took this right from Bauernhof. //It's a good template, you know? tutorial { NoFixup 1 logic_relay { "spawnflags" "2" "targetname" "tutorial_relay" "OnSpawn" "wave_start_relay,AddOutput,OnTrigger tutorial_relay2:Disable::0:-1,0,-1" "OnSpawn" "wave_start_relay,AddOutput,OnTrigger tutorial_relay:CancelPending::0:-1,0,-1" "OnSpawn" "tutorial_relay2,Trigger,,0,-1" // "OnSpawn" "wave_finished_relay,AddOutput,OnTrigger tutorial_relay:Trigger::1:-1,0,-1" "OnTrigger" "hints_1,Show,,0.05,-1" "OnTrigger" "hints_2,Show,,6,-1" "OnTrigger" "hints_3,Show,,12,-1" "OnTrigger" "hints_4,Show,,18,-1" "OnTrigger" "hints_5,Show,,24,-1" "OnTrigger" "tutorial_relay2,Trigger,,30,-1" // "OnUser1" "hints_1,Hide,,0,-1" // "OnUser1" "hints_2,Hide,,0,-1" // "OnUser1" "hints_3,Hide,,0,-1" // "OnUser1" "hints_4,Hide,,0,-1" // "OnUser1" "tutorial_relay,CancelPending,,0.01,-1" // "OnUser1" "tutorial_relay2,CancelPending,,0,-1" // "OnUser1" "tutorial_relay2,Disable,,0.01,-1" } logic_relay { "spawnflags" "2" "targetname" "tutorial_relay2" "OnTrigger" "tutorial_relay,Trigger,,0,-1" } training_annotation { "targetname" "hints_1" "display_text" "You are robots! Win the waves by letting your allies deploy the bomb!" "lifetime" "5.5" "origin" "-6500 -2100 5" } training_annotation { "targetname" "hints_2" "display_text" "Buildings start out locked to level 1!" "lifetime" "5.5" "origin" "-6500 -2100 5" } training_annotation { "targetname" "hints_3" "display_text" "You can buy an upgrade to increase it!" "lifetime" "5.5" "origin" "-6400 -2840 5" } training_annotation { "targetname" "hints_4" "display_text" "Teleporters CANNOT be built." "lifetime" "5.5" "origin" "-6500 -2100 5" } training_annotation { "targetname" "hints_5" "display_text" "Use !missioninfo to find extra information." "lifetime" "5.5" "origin" "-6500 -2100 5" } } } // SpawnTemplate // { // Name "decoration" // "origin" "-6195.264160 -3040.455078 -80" // "angles" "0 0 20" // } // SpawnTemplate // { // Name "decoration" // "origin" "-6746.156250 -2891.279297 -80.912525" // "angles" "0 75 20" // } //Blimp paths for finale ExtraTankPath { Name "blimp_path_blue" //name of starting path node prefix; First node name is name_1 Node "-1540 -1850 900" Node "-1070 -1350 900" Node "260 -250 600" Node "260 -40 600" } ExtraTankPath { Name "blimp_path_red" //name of starting path node prefix; First node name is name_1 Node "-750 3000 300" //_1 Node "-750 2500 650" Node "-750 1300 650" Node "-150 950 650" //_4 } ExtraSpawnPoint { Name "spawnbot_hatch" //Spawns at red spawn's "A" doorway, red side TeamNum 2 //3 is for all bots X 700 Y 1430 Z 200 } ExtraSpawnPoint { Name "spawnbot_hatch" //Spawns at red spawn's "B" doorway, red side TeamNum 2 X 730 Y 1110 Z 200 } ExtraSpawnPoint { Name "spawnbot_hatch_alt" //Spawns at red spawn's "A" doorway, red side TeamNum 2 //3 is for all bots X 700 Y 1430 Z 200 } ExtraSpawnPoint { Name "spawnbot_hatch_alt" //Spawns at red spawn's "B" doorway, red side StartDisabled 1 TeamNum 2 X 730 Y 1110 Z 200 } ExtraSpawnPoint { Name "spawnbot_blugate" TeamNum 2 X -3330 Y -1570 Z 170 } ExtraSpawnPoint { Name "spawnbot_hatch_def" TeamNum 2 X 263 Y 500 Z 140 } //Red side spawns //SPECIAL: for teleporter ExtraSpawnPoint { Name "spawnbot_red_special" StartDisabled 1 TeamNum 3 X -8630 Y 555 Z 45 } //Front, slightly behind the tiny building ExtraSpawnPoint { Name "spawnbot_red_front" TeamNum 2 X -6260 Y 300 Z -105 } //Inside the garage, next to the side entrance ExtraSpawnPoint { Name "spawnbot_red_garage" TeamNum 2 X -6350 Y 1430 Z -60 } //Behind the large pack shed ExtraSpawnPoint { Name "spawnbot_red_tankdoor" TeamNum 2 X -4280 Y 1470 Z -85 } //Slightly before gate ExtraSpawnPoint { Name "spawnbot_red_gate" TeamNum 2 X -3560 Y 2300 Z 75 } //Corridor past gate ExtraSpawnPoint { Name "spawnbot_red_pastgate" TeamNum 2 X -2550 Y 2000 Z 135 } //Boxes near 2nd tankdoor / flank path ExtraSpawnPoint { Name "spawnbot_red_boxesdoor" TeamNum 2 X -3200 Y 1020 Z 110 } //SPECIAL: for w6 teleporter, as a seperate spawn for players c: ExtraSpawnPoint { Name "spawnbot_mid_special" StartDisabled 1 TeamNum 3 X -6380 Y -2544 Z -15 } //Blu side spawns //SPECIAL: for teleporter. ExtraSpawnPoint { Name "spawnbot_blu_special" StartDisabled 1 TeamNum 3 X -6380 Y -2544 Z -15 } //Next to packs ExtraSpawnPoint { Name "spawnbot_blu_front" TeamNum 2 X -6100 Y -300 Z -100 } //At the upgrade station ExtraSpawnPoint { Name "spawnbot_blu_station" TeamNum 2 X -5450 Y 440 Z -50 } //Hall between sides, with packs ExtraSpawnPoint { Name "spawnbot_blu_hall" TeamNum 2 X -4220 Y 700 Z 110 } //Behind the fence, right of the path ExtraSpawnPoint { Name "spawnbot_blu_fence" TeamNum 2 X -4700 Y -180 Z 110 } ExtraSpawnPoint { Name "spawnbot_blu_gate" TeamNum 2 X -3333 Y -1880 Z 110 } ExtraSpawnPoint { Name "spawnbot_blu_tankdoor" TeamNum 2 X -2875 Y -770 Z 64 } ExtraSpawnPoint { Name "spawnbot_blu_sidehall" TeamNum 2 X -1900 Y -2800 Z -80 } ExtraSpawnPoint { Name "spawnbot_blu_sidehall" TeamNum 2 X -925 Y -2800 Z -80 } ExtraSpawnPoint { Name "spawnbot_blu_bighall" TeamNum 2 X -1050 Y -1450 Z 80 } ExtraSpawnPoint { Name "spawnbot_blu_bridge" TeamNum 2 X 80 Y -1050 Z 80 } ClassLimit { Scout 0 Soldier 0 Pyro 0 Demoman 0 Heavyweapons 0 // Engineer 6 apparently this has to NOT be defined, pemsive Medic 0 Sniper 0 Spy 0 } //Map takes a bit to properly load, someone needs to spawn in before class limits activate. //So I force-change your class if you're not engie. PlayerSpawnTemplate { Name "noengie" Origin "0 0 0" } //Base changes PlayerAttributes { Engineer { "SET BONUS: max health additive bonus" 25 "maxammo metal increased" 1.5 "mod teleporter cost" 12.02 // "ammo regen" 0.3 } } //Item changes //V1: Only touch items that are going to be problematic - either OP or broken //V2: Touch on items that may be underwhelming, even with good upgrades. //TODO: finish this. ItemAttributes { ItemName "The Pomson 6000" "reload time increased hidden" 0.9 "fire rate bonus hidden" 0.8 "projectile speed increased" 1.3 "special item description" "+10% reload rate, +20% fire rate, and +30% projectile speed." } //Wrench roles: //Stock: averages across-the-board. //Jag: fast setup. //Southern Hospitality: strong maintenance. //Eureka Effect: strong but slow? //Gunslinger: fast, shotgun-oriented. //SC: could be too strong versus projectile bots when spammed from a distance. //NEW TECH: homing makes ball stay stationary. //Role: safeguard user on the spot from projectiles; can be used vs rocket wall. //Cannot be used as a quick-switch-from, must be used with intent. ItemAttributes { ItemName "The Short Circuit" "provide on active" 1 "mod projectile heat seek power" 1 "single wep holster time increased" 2 "special item description" "Projectile does not move." } //Eureka: can't exactly use tp's consistently, so needs to be changed. //Must be something unique, not through ExtendedUpgrades. //"Power" wrench. Instant max sentry fire rate, but the slower build and metal gain will hurt. ItemAttributes { ItemName "The Eureka Effect" "special item description" "No longer allows teleporting. Metal just ain't human enough!" "alt fire teleport to spawn" 0 "special taunt" 0 "engy sentry fire rate increased" 0.65 //every 6 ticks "metal_pickup_decreased" 0.5 } //Hospitality: Provides stronger maintenance. //Sacrifices some sentry damage. ItemAttributes { ItemName "The Southern Hospitality" "mult dispenser rate" 1.4 "engy sentry damage bonus" 0.8 "dmg taken from fire increased" 1 } //PDA: required for upgrade to function. ItemAttributes { ClassName "TF_WEAPON_PDA_ENGINEER_BUILD" "building max level" 1 } //TODO: finish this ExtendedUpgrades { //Body upgrades //10% move speed, cap of 40% (420 HU/s) //and jump height, to move better 8) movespeed { Name "Robo-Runner" Description "+10% move speed and jump height" Attribute "move speed bonus" Cost 50 Cap 1.4 Increment 0.1 PlayerUpgrade 1 SecondaryAttributes { "increased jump height" 0.1 } } //10% ammo regen, cap of 30% //50 metal regen, cap of 150 movespeed { Name "Scrap Generator" Description "+10% ammo and +50 metal regen" //Switch speed? Attribute "ammo regen" Cost 50 Cap 0.4 Increment 0.1 PlayerUpgrade 1 SecondaryAttributes { "metal regen" 50 } } //Less knockback, passive regen kbackregen { Name "Anchor Down" Description "+20% knockback reduction, +4 health regen" Attribute "damage force reduction" Cost 50 Cap 0 Increment -0.20 PlayerUpgrade 1 SecondaryAttributes { "airblast vulnerability multiplier" -0.20 "health regen" 4 } } //+25/30/35 hp, cap of +50, +140, +270 (500 HP) //Limits of 2 for w1, 6 for w2, 10 for w3 healthup1 { Name "Armored Casing I" Description "+25 max health" Attribute "max health additive bonus" Cost 50 Cap 50 //2 ticks, total: 200 hp Increment 25 PlayerUpgrade 1 } healthup2 { Name "Armored Casing II" Description "+30 max health" Attribute "max health additive bonus" Cost 50 Cap 140 //3 ticks, total: 290 hp Increment 30 PlayerUpgrade 1 RequiredUpgrade { Upgrade "healthup1" Level 2 } AllowedMinWave 3 } healthup3 { Name "Armored Casing III" Description "+35 max health" Attribute "max health additive bonus" Cost 50 Cap 260 Increment 35 PlayerUpgrade 1 RequiredUpgrade { Upgrade "healthup2" Level 3 } AllowedMinWave 5 } //Crits when below % health //+10%, cap of 40% //Primary Upgrades //Total caps: 50% fire rate, 80% reload rate, 150% damage //All primaries: fire rate + damage (+ ammo cap for all but Pomson) //Cap of 6 ups, 30% fire rate. dps { Name "Power Module" Description "+25% damage, +5% fire rate, +20% max ammo." Attribute "damage bonus" Cap 2.5 Increment 0.25 Cost 100 AllowedWeapons { Slot "Primary" } DisallowedWeapons { ItemName "The Pomson 6000" } AllowedMinWave 1 SecondaryAttributes { "fire rate bonus" -0.05 "maxammo primary increased" 0.2 } } //All primaries: fire rate + damage. //Cap of 6 ups, 30% fire rate. //Pomson gets projectile speed instead of ammo! dpsforpomson { Name "Power Module" Description "+25% damage, +5% fire rate." Attribute "damage bonus" Cap 2.5 Increment 0.25 Cost 100 AllowedWeapons { ItemName "The Pomson 6000" } AllowedMinWave 1 SecondaryAttributes { "fire rate bonus" -0.05 } } //Not you, Widowmaker: reload rate. //Cap of 4 ups, 80% reload rate, 20% fire rate, 200% clip size bullets { Name "Restock Module" Description "+20% reload rate, +5% fire rate, +50% clip size." Attribute "faster reload rate" Cap 0.2 Increment -0.2 Cost 100 AllowedWeapons { Slot "Primary" } DisallowedWeapons { ItemName "The Widowmaker" } AllowedMinWave 1 SecondaryAttributes { "fire rate bonus" -0.1 "clip size bonus upgrade" 0.5 } } //Regen 20% of dmg as health, max 100%; get 15% max hp back on kill, max 75%. //More powerful if you also buy max health! dmgregen { Name "Self-Repair Module" Description "Heal for 20% max health on kill." Attribute "restore health on kill" Cap 1 Increment 0.2 Cost 100 AllowedWeapons { Slot "Primary" Slot "Secondary" } DisallowedWeapons { ItemName "The Wrangler" } } //Penetration! Could be nice to have, eh? dmgregen { Name "Piercing Module" Description "Shots pierce through enemies." Attribute "projectile penetration" Cap 1 Increment 1 Cost 100 AllowedMinWave 3 AllowedWeapons { Slot "Primary" } DisallowedWeapons { ItemName "The Pomson 6000" ItemName "Rocket Ranger" } } //RR + Pistol: Headshots //MIGHT be too strong on pistols? --yeah, yeeted rangerhs { Name "Headshot Module" Description "Deal crits on headshot." Attribute "can headshot" Cap 1 Increment 1 Cost 100 AllowedMinWave 3 AllowedWeapons { ItemName "The Rescue Ranger" } DisallowedWeapons { ItemName "The Short Circuit" ItemName "The Geiger Counter" ItemName "The Wrangler" } } //Pomson: weak homing pomsonhom { Name "Heat-seeker Module" Attribute "mod projectile heat seek power" Description "Projectile homes in on enemies." Cap 50 Increment 50 Cost 50 AllowedMinWave 3 AllowedWeapons { ItemName "The Pomson 6000" } SecondaryAttributes { "mod projectile heat seek error" 15 "mod projectile heat seek time" 2 "mod projectile heat no predict target speed" 1 } } //Secondary Upgrades //Pistol: fire rate + clip + reload, damage + accuracy pistolspeed { Name "Rapid Fire Module" Attribute "fire rate bonus" Description "+10% fire and reload rate, +50% clip size." Cap 0.6 Increment -0.1 //4 ticks Cost 50 AllowedWeapons { ClassName tf_weapon_pistol } SecondaryAttributes { "clip size bonus" 0.5 //+6 clip, max 36 "faster reload rate" -0.1 } } pistolpower { Name "Power Module" Attribute "damage bonus" Description "+25% damage bonus, +10% more accurate." Cap 2 Increment 0.25 //4 ticks Cost 100 AllowedWeapons { ClassName tf_weapon_pistol } SecondaryAttributes { "weapon spread bonus" -0.1 //+60% } } //Wrangler: none lol //Short Circuit: damage. yeah. //Melee Upgrades //All melees: swing speed + build rate, upgrade level (lvl 2 -> w3, lvl 3 -> w5), //Gunslinger: banned? swinger { Name "Construction Expert" Attribute "melee attack rate bonus" Cap 0.6 Increment -0.1 Cost 100 Description "10% faster swing speed, +50% build rate." AllowedWeapons { Slot "Melee" } AllowedMinWave 1 SecondaryAttributes { "Construction rate increased" 0.5 } } levelup2 { Name "Operator's Blueprints" Attribute "building max level" AllowedMinWave 3 Description "Allows you to upgrade your buildings up to level 2." Cap 2 Increment 2 Cost 100 AllowedWeapons { Slot "PDA" } DisallowedWeapons { ItemName "Ulti Wrench" } } levelup3 { Name "Foreman's Blueprints" Attribute "building max level" AllowedMinWave 5 Description "Allows you to upgrade your buildings up to level 3." Cap 3 Increment 1 Cost 100 AllowedWeapons { Slot "PDA" } DisallowedWeapons { ItemName "Ulti Wrench" } RequiredUpgrade { Upgrade levelup2 Level 1 } } //DEPRECATED //+10 metal per upgrade swing: //25 -> 8 hits; 8 * 25 = 200 //35 -> 6 hits; 6 * 35 = 180 + 30 = 210 //45 -> 5 hits; 5 * 45 = 200 (+ 25) //55 -> 4 hits; 4 * 55 = 200 (+ 20) //now: 1 tick for double the rate. upgrader { Name "Upgrade Update" Attribute "upgrade rate decrease" AllowedMinWave 3 Cap 2 Increment 1 Cost 100 Description "+100% upgrade rate." AllowedWeapons { Slot "Melee" } DisallowedWeapons { ItemName "Ulti Wrench" } } //PDA Upgrades //Sentry damage + radius //Building health //Disp rate + radius sentryexp { Name "Destruction Expert" Attribute "engy sentry damage bonus" Cap 1.8 Increment 0.2 //4 ticks Cost 100 Description "+20% sentry damage and target radius." AllowedMinWave 1 SecondaryAttributes { // "mult firerocket rate" -0.1 "engy sentry radius increased" 0.2 } AllowedWeapons { Slot "PDA" } RequiredUpgrade { Upgrade levelup1 Level 1 } DisallowedWeapons { ItemName "Ulti Wrench" } } buildexp { Name "Maintenance Mastery" Attribute "engy building health bonus" Cap 3 Increment 0.5 //4 ticks Cost 100 Description "+50% building health, +25% repair rate." AllowedMinWave 1 SecondaryAttributes { "repair rate increased" 0.25 } AllowedWeapons { Slot "PDA" } RequiredUpgrade { Upgrade levelup1 Level 1 } DisallowedWeapons { ItemName "Ulti Wrench" } } dispexp { Name "Provision Proficiency" Attribute "engy dispenser radius increased" Cap 5 Increment 1 //4 ticks Cost 100 Description "+100% dispenser range, +50% supply power (health, metal, ammo)." AllowedMinWave 1 SecondaryAttributes { "mult dispenser rate" 0.5 } AllowedWeapons { Slot PDA } DisallowedWeapons { ItemName "Ulti Wrench" } } // pickupintel //Joke. Testing only. // { // Name "Carrier" // Attribute "cannot pick up intelligence" // Cap 0 // Increment -1 // Cost 500 // Description "You can now pick up the bomb." // } } CustomWeapon //Allows you to use an alias for items with custom attributes { "Ulti Wrench" // The name you would use in Item key in TFBot { OriginalItemName "Golden Wrench" // The item used as a base "special item description" "Magnetic: cannot use other weapons. Powers up every wave." "provide on active" 1 "is australium item" 1 "building cost reduction" 14 "disable weapon switch" 1 "critboost on kill" 1 "restore health on kill" 10 "dmg taken increased" 0.9 "damage bonus" 1.55 } "Homing Launcher" { OriginalItemName "TF_WEAPON_ROCKETLAUNCHER" "mod projectile heat seek power" 95 "mod projectile heat aim error" 360 "mod projectile heat aim time" 1.5 //more imperfect aim "mod projectile heat no predict target speed" 1 "projectile speed decreased" 0.3 "projectile acceleration" 900 "projectile acceleration start time" 1 "projectile acceleration time" 0.5 "blast dmg to self increased" 0 "penetrate teammates" 1 // "projectile trail particle" eyeboss_projectile "projectile spread angle penalty" 15 } } CustomWeapon //Allows you to use an alias for items with custom attributes { "Rocket Ranger" { OriginalItemName "The Rescue Ranger" "special item description" "Fires rockets that deal no self damage with moderate knockback." "paintkit_proto_def_index" 214 "override projectile type" 2 "fire rate penalty" 1.5 "CARD: damage bonus" 1.25 //this gets kinda wild with rocket specialist but that's not here atm "reload time increased" 1.2 //initial: 1.2 sec, 0.6 for each after that "rocket jump damage reduction" 0 "self dmg push force increased" 1.2 "maxammo primary reduced" 0.75 "centerfire projectile" 1 } } ExtraLoadoutItems // Extra loadout items available after typing !missionitems in chat { AllowEquipOutsideSpawn 0 // Allow equipping items outside spawn Engineer // Class { Primary "Rocket Ranger" Melee // Item slot to use { Item "Ulti Wrench" // Item name, custom weapon names are available Cost 0 // Cost of weapon AllowedMinWave 1 //wave at which weapon is enabled (default: 1) AllowRefund 1 //Allow refunding of weapon (default: 1) // Output fired when upgrade is applied, aka: // bought, player changing classes, or weapons // Format: target,action,parameter,delay // If parameter is empty, the upgrade level is passed instead as parameter OnApply { Output "!activator,$WeaponSwitchSlot,2,0.1,-1" Output "!activator,$WeaponStripSlot,0,0.1,-1" Output "!activator,$WeaponStripSlot,1,0.1,-1" Output "!activator,$WeaponStripSlot,3,0.1,-1" Output "!activator,$WeaponStripSlot,4,0.1,-1" Output "!activator,$DisplayTextChat,$$='{9ACDFF}'..string(!activator.m_szNetname)..'{FBECCB} has bought the {E7B53B}Ulti Wrench.',0.1,-1" } } } } Templates { //////////////////////////////////////////////////////////////////////////// ///////////////////// Reusable templates //////////////////////// //////////////////////////////////////////////////////////////////////////// //Turns bots red and adds IgnoreFlag. Nothing else. RedBot { Attributes IgnoreFlag AddCond { Name "TF_COND_REPROGRAMMED" } } //Turns bots red + forces them to focus on any tank. RedBot_Tank { Attributes IgnoreFlag AddCond { Name "TF_COND_REPROGRAMMED" } InterruptAction { Target "tank_boss" AimTarget "tank_boss" KillAimTarget 1 Cooldown 5 Duration 0 Delay 3 //lets it doot } } //Turns bots red + adds mobber behavior. RedBot_Hunt { Attributes DisableDodge Action Mobber AddCond { Name "TF_COND_REPROGRAMMED" } } //Turns bots red; goes to bomb. RedBot_Bomb { InterruptAction { Target "intel*" Delay 0.1 Cooldown 1 Duration 1.1 } AddCond { Name "TF_COND_REPROGRAMMED" } } RedBot_DynamicPos_Blue { Attributes IgnoreFlag AddCond { Name "TF_COND_REPROGRAMMED" } EventChangeAttributes { Default { InterruptAction { Target "target_blu_front" Delay 0.1 Cooldown 1 Duration 1.1 } } Mid { InterruptAction { Target "target_blu_mid" Delay 0.1 Cooldown 1 Duration 1.1 } } Base { InterruptAction { Target "target_blu_base" Delay 0.1 Cooldown 1 Duration 1.1 } } } } RedBot_OnAttack { EventChangeAttributes { Default { InterruptAction { Target "target_blu_front" Delay 0.1 Cooldown 1 Duration 1.1 } } Attack { } } } AttackTank { InterruptAction { Target "tank_boss" Cooldown 1 Duration 0 Delay 0.1 } } AttackTank_Only { InterruptAction { Target "tank_boss" AimTarget "tank_boss" KillAimTarget 1 Cooldown 5 Duration 0 Delay 3 //lets it doot } } AttackTank_Only_Side { InterruptAction { Target "tank_def_side" AimTarget "tank_boss" KillAimTarget 1 Cooldown 5 Duration 0 Delay 1 } } AttackTank_Only_Back { InterruptAction { Target "tank_def_back" AimTarget "tank_boss" KillAimTarget 1 Cooldown 5 Duration 0 Delay 1 } } //////////////////////////////////////////////////////////////////////////// /////////////////////// Common red bots //////////////////////// //////////////////////////////////////////////////////////////////////////// T_TFBot_Red_Scout_ColaPop_T { Name "Cola Popper Scout" Class Scout Skill Normal //this can VERY easily get out of hand!!! Item "The Soda Popper" Item "Crit-a-Cola" Item "The Bottle Cap" ClassIcon scout_cola_nys Template RedBot_Tank ItemAttributes { ItemName "Crit-a-Cola" "mod_mark_attacker_for_death" 0 //I think this maybe just does nothing "effect bar recharge rate increased" 0.4 } ItemAttributes { ItemName "The Bottle Cap" "item style override" 1 } } T_TFBot_Red_Scout_FaN_Armored_H { Name "Armored Force-a-Nature Scout" Skill Hard Class Scout Scale 1.3 Health 350 Item "The Force-a-Nature" Item "The Bolt Boy" ClassIcon scout_fan_armored_red Template RedBot_Hunt ItemAttributes { ItemName "The Force-a-Nature" "reload time increased" 1.3 //they're a bit too dps-y otherwise. } } //A dangerous RPG soldier! Beware its homing rockets! T_TFBot_Red_Soldier_RPG { Class Soldier Name "RPG Soldier" WeaponRestrictions PrimaryOnly Item "Upgradeable TF_WEAPON_ROCKETLAUNCHER" Item "The Cross-Comm Crash Helmet" ClassIcon soldier_homing_nys Template RedBot_Hunt Attributes HoldFireUntilFullReload ItemAttributes { ItemName "Upgradeable TF_WEAPON_ROCKETLAUNCHER" "fire rate bonus" 2 "projectile spread angle penalty" 1 "damage penalty" 0.75 "projectile speed decreased" 0.05 //0.05 * 1100 = 55 HU/s "projectile acceleration" 5500 //goes up to 1155 over 0.2 secs "projectile acceleration time" 0.2 "projectile acceleration start time" 1.4 "mod projectile heat aim time" 1.2 "mod projectile heat seek power" 150 "mod projectile heat follow crosshair" 1 "projectile trail particle" eyeboss_projectile } } //A whippin' soldier! Nothing new. T_TFBot_Red_Soldier_Whip { Class Soldier WeaponRestrictions MeleeOnly Name "Whip Soldier" Item "The Disciplinary Action" Item "The Mantreads" Item "Armored Authority" ClassIcon soldier_disciplinary Template RedBot_Bomb } //A Bison soldier that spams constant shots. T_TFBot_Red_Soldier_Bison_Rapid { Class Soldier Name "Bison Soldier" Item "The Righteous Bison" Item "Lord Cockswain's Pith Helmet" Skill Hard ClassIcon soldier_bison_spammer WeaponRestrictions SecondaryOnly Template RedBot_Tank ItemAttributes { ItemName "The Righteous Bison" "faster reload rate" 0 "fire rate bonus" 0.75 "dmg bonus vs buildings" 5 "set item tint rgb" 14204632 //pinkish } } //A Bison soldier that shoots out decent bursts of shots, with some spread! T_TFBot_Red_Soldier_Bison_Burst { Class Soldier Name "Bison Soldier" Item "The Righteous Bison" Item "Lord Cockswain's Pith Helmet" Skill Hard ClassIcon soldier_bison WeaponRestrictions SecondaryOnly Attributes SuppressFire Template RedBot_Tank ItemAttributes { ItemName "The Righteous Bison" "faster reload rate" 0.75 "fire rate bonus" 0.125 "dmg bonus vs buildings" 5 "clip size bonus upgrade" 2 "set item tint rgb" 15132390 //whitish } FireWeapon { Delay 0.1 Cooldown 2.9 //2.9 - 0.7 = 2.2, which is 0.92*0.75 + 0.4*0.75*5 for 6 reloading Repeats 0 IfSeeTarget 1 Duration 0.7 Type "Primary" } } //A Bison soldier that shoots out powerful crit shots! T_TFBot_Red_Soldier_Bison_Crit { Class Soldier Name "Charged Bison Soldier" Item "The Righteous Bison" Item "Lord Cockswain's Pith Helmet" Skill Hard ClassIcon soldier_bison_giant Attributes AlwaysCrit WeaponRestrictions SecondaryOnly Template RedBot_Tank ItemAttributes { ItemName "The Righteous Bison" "dmg penalty vs players" 1.25 "fire rate penalty" 1.5 "projectile speed decreased" 0.65 "dmg bonus vs buildings" 15 "set item tint rgb" 8626083 //blueish } } //A small Rapid Fire Soldier, with slightly decreased stats! T_TFBot_Red_Soldier_Spammer { Class Soldier Name "Rapid Fire Soldier" ClassIcon soldier_spammer Template RedBot_Hunt ItemAttributes { ItemName "TF_WEAPON_ROCKETLAUNCHER" "fire rate bonus" 0.8 "faster reload rate" 0 "projectile speed decreased" 0.75 } } //A bulky black box soldier. Doesn't fire instantly, but deals normal damage. T_TFBot_Red_Soldier_Bulwark_D { Template T_TFBot_Red_Soldier_RocketShotgun Name "Bulwark Box Soldier" Attributes DisableDodge Item "The Mantreads" Health 650 Scale 1.4 ItemAttributes { ItemName "The Black Box" "fire rate bonus" 0.7 "health on radius damage" 80 "heal on hit for rapidfire" 0 "blast radius increased" 1 "damage bonus" 1 } CharacterAttributes { "move speed bonus" 0.7 "health regen" 1 } } //A Degreaser-Flare, puff-n-sting pyro! //Uses a pre-existing logic_relay to switch weapons quickly. T_TFBot_Red_Pyro_Combo_H { Template T_TFBot_Red_Pyro ClassIcon pyro_degreaser_flare_red Name "Puff-n-Sting Pyro" Item "The Degreaser" Item "The Flare Gun" ItemAttributes { ItemName "The Degreaser" "fire input on hit" "combo_primary_to_secondary^Trigger^" "damage penalty" 0.75 } } //Gluon Pyros! Really, they're just Phlog Pyros. //No need to make things complex. T_TFBot_Red_Pyro_Gluon { Class Pyro ClassIcon pyro_phlog Name "Gluon Pyro" Item "The Phlogistinator" Item "Airtight Arsonist" Template RedBot_Hunt DesiredAttackRange 100 } //A Reserve Shooter pyro. Pairs well with blast-knockback bots! T_TFBot_Red_Pyro_Reserve_H { Class Pyro Name "Reserve Shooter Pyro" Item "The Reserve Shooter" ClassIcon shotgun_reserve_lite WeaponRestrictions SecondaryOnly Template RedBot_Hunt } //A good ol' Axtinguisher pyro. Nofin much here. T_TFBot_Red_Pyro_Axtinguisher_H { Class Pyro ClassIcon pyro_jug_axtinguisher_bright //this one is very pog Name "Axtinguisher Pyro" Item "The Axtinguisher" WeaponRestrictions MeleeOnly Attributes DisableDodge Template RedBot_Hunt } //A minigiant pyro with a powerful Dragon's Fury! T_TFBot_Red_Pyro_Fury_T { Class Pyro Name "Dragon's Fury Pyro" Health 600 Scale 1.4 MaxVisionRange 650 Skill Normal WeaponRestrictions PrimaryOnly Item "The Dragon's Fury" Item "Feathered Fiend" ClassIcon pyro_dragon_fury_swordstone Template RedBot_Tank } //A minigiant pyro that rains down flares! T_TFBot_Red_Pyro_Flare_Rain_H { Class Pyro Name "Flare Rain Pyro" Health 600 Scale 1.4 MaxVisionRange 1200 Skill Hard WeaponRestrictions SecondaryOnly Item "The Flare Gun" Item "The Firefly" ClassIcon pyro_flare_rain_red_nys AimAt Head //Comment out for Vanilla! ItemAttributes { ItemName "The Flare Gun" "fire rate bonus" 0.2 "projectile spread angle penalty" 3 "projectile speed decreased" 0.4 "health regen" 5 } Template RedBot_Hunt } T_TFBot_Red_Demoman_Sticky_B { Template RedBot_Bomb Class Demoman Skill Normal Name "Stickybomb Demo" ClassIcon demo_sticky_red_daan WeaponRestrictions SecondaryOnly Item "TF_WEAPON_PIPEBOMBLAUNCHER" Item "Broadband Bonnet" ItemAttributes { ItemName "TF_WEAPON_PIPEBOMBLAUNCHER" "projectile range increased" 0.35 "stickybomb charge rate" 0.001 "max pipebombs decreased" -7 "faster reload rate" 0.1 "fire rate penalty" 1.67 } ItemAttributes { ItemName "TF_WEAPON_GRENADELAUNCHER" "is_passive_weapon" 1 "fire rate penalty" 1357 "override projectile type" 29 } } T_TFBot_Red_Demoman_Sticky_H { Template RedBot_Hunt Class Demoman Skill Normal Name "Stickybomb Demo" ClassIcon demo_sticky_red_daan WeaponRestrictions SecondaryOnly Item "TF_WEAPON_PIPEBOMBLAUNCHER" Item "Broadband Bonnet" DesiredAttackRange 300 ItemAttributes { ItemName "TF_WEAPON_PIPEBOMBLAUNCHER" "projectile range increased" 0.35 "stickybomb charge rate" 0.001 "max pipebombs decreased" -7 "faster reload rate" 0.1 "fire rate penalty" 1.67 } ItemAttributes { ItemName "TF_WEAPON_GRENADELAUNCHER" "is_passive_weapon" 1 "fire rate penalty" 1357 "override projectile type" 29 } } T_TFBot_Red_Demoman_Cannon_H { Template RedBot_Hunt Class Demoman Skill Normal Name "Loose Cannon Demo" ClassIcon demo_cannon WeaponRestrictions PrimaryOnly Item "The Loose Cannon" Item "The Bolted Bicorne" ItemAttributes { ItemName "The Loose Cannon" "grenade launcher mortar mode" 0 "faster reload rate" 0.6 "fire rate bonus" 0.6 } } T_TFBot_Red_Demoman_IronClad { Template RedBot_Hunt Name "Iron-clad Demo" Class Demoman Skill Normal Scale 1.2 Health 250 ClassIcon demo_ironbomber_lite WeaponRestrictions PrimaryOnly Attributes HoldFireUntilFullReload Item "The Iron Bomber" Item "The Blast Blocker" Item "The Blast Defense" ItemAttributes { ItemName "The Iron Bomber" "grenade launcher mortar mode" 0 "faster reload rate" 0.6 "fire rate bonus" 0.6 } } T_TFBot_Red_Heavy_Champ_Steak { Template T_TFBot_Heavyweapons_Heavyweight_Champ Skill Hard Name "Buffaloweight Champ" Item "The Buffalo Steak Sandvich" ClassIcon heavy_champ_steak_red Attributes DisableDodge //Attributes AlwaysCrit //test if this may be needed Action FetchFlag // Action Mobber ItemAttributes { ItemName "The Buffalo Steak Sandvich" "alt-fire disabled" 1 //This should work with rafmod! "energy buff dmg taken multiplier" 0.75 } AddCond { Name "TF_COND_REPROGRAMMED" } } T_TFBot_Red_Heavy_Champ_Steak_H { Template T_TFBot_Heavyweapons_Heavyweight_Champ Skill Hard Name "Buffaloweight Champ" Item "The Buffalo Steak Sandvich" ClassIcon heavy_champ_steak_red Attributes DisableDodge //Attributes AlwaysCrit //test if this may be needed Action FetchFlag Action Mobber ItemAttributes { ItemName "The Buffalo Steak Sandvich" "alt-fire disabled" 1 //This should work with rafmod! "energy buff dmg taken multiplier" 0.75 "voice pitch scale" 0 //stop being so LOUD } AddCond { Name "TF_COND_REPROGRAMMED" } } T_TFBot_Red_Heavyweight_Champ_H { Template T_TFBot_Heavyweapons_Heavyweight_Champ Skill Hard ClassIcon heavy_champ_red Attributes DisableDodge AddTemplate RedBot_Hunt } T_TFBot_Red_Heavy_Laser_H { Class Heavyweapons Name "Laser Heavy" Skill Hard ClassIcon heavy_atomic Item "Upgradeable TF_WEAPON_MINIGUN" Item "Captain Space Mann" AddTemplate RedBot_Hunt ItemAttributes { ItemName "Upgradeable TF_WEAPON_MINIGUN" "paintkit_proto_def_index" 232 //Alien tech "set_item_texture_wear" 0 "override projectile type" 13 //Naturally makes proj deal Pomson damage. "projectile spread angle penalty" 1 "fire rate penalty" 4 "dmg penalty vs players" 0.6 } } T_TFBot_Red_Engineer_A { Class Engineer Health 275 ClassIcon engineer_ally Skill Easy Action Mobber NoCrouchButtonRelease 1 // No auto release crouch when bot's on ground InterruptAction { Target "sentryhere" AimTarget "sentry_a" WaitWhenDone 1 Delay 1 Repeats 1 Cooldown 5.1 Duration 0.1 OnDoneChangeAttributes "Crouch" } Attributes IgnoreFlag CharacterAttributes { "no_jump" 1 } AddCond { Name "TF_COND_REPROGRAMMED" } EventChangeAttributes { Crouch { WeaponRestrictions MeleeOnly InterruptAction { Target "sentryhere" AimTarget "sentry_a" WaitWhenDone 1 KillAimTarget 1 Delay 0.1 Repeats 1 Cooldown 5 Duration 0.1 OnDoneChangeAttributes "Attack" } FireWeapon { Delay 0.1 Cooldown 0.1 Repeats 0 IfSeeTarget 0 Duration 0.2 Type "Crouch" } } Attack { WeaponRestrictions PrimaryOnly } } } //QFix Medic that always ubers. //Heals at the same rate as a fully ramped-up QFix ubercharge! //But, it only heals itself half as fast! T_TFBot_Red_Medic_Superheal { Class Medic Name "Superheal Medic" Template RedBot Skill Expert Item "The Quick-Fix" Attributes SpawnWithFullCharge ClassIcon medic_infpop ItemAttributes { ItemName "The Quick-Fix" "heal rate bonus" 4.17 //Base 300 HP/sec heals "overheal penalty" 0.001 "health from healers reduced" 0.5 //150 HP/sec selfheal "uber duration bonus" -9 //Infinite uber duration } CharacterAttributes { "bot medic uber health threshold" 160 } } //An overhealing medic! Useful for making bots super-bulky. T_TFBot_Red_Medic_Overheal { Name "Overhealer Medic" Class Medic ClassIcon medic_overheal_uber Attributes SpawnWithFullCharge Item "dec2014 Surgeon's Shako" Template RedBot ItemAttributes { ItemName tf_weapon_medigun "ubercharge rate bonus" 4 //basically 2x "uber duration bonus" -3 "bot medic uber deploy delay duration" 2 "overheal expert" 2 "heal rate bonus" 5 } } //A syringe-shooting medic! Can be dangerous thanks to its clever aiming. T_TFBot_Red_Medic_Syringe_H { Class Medic Name "Syringe Medic" Health 150 Skill Hard ClassIcon medic_syringe WeaponRestrictions PrimaryOnly Item "Upgradeable TF_WEAPON_SYRINGEGUN_MEDIC" Item "Das Naggenvatcher" AimAt Body AimOffset "0 0 10" AimLeadProjectileSpeed 1100 //overaims slightly DesiredAttackRange 200 // How close to target bot moves when attacking Template RedBot_Hunt ItemAttributes { ItemName "Upgradeable TF_WEAPON_SYRINGEGUN_MEDIC" // "fire rate bonus" 0.75 "faster reload rate" 0.8 } } //A Blast Vacc medic. Very weak to red players, but unkillable for your supporting giant. T_TFBot_Red_Medic_Vacc_Blast { Class Medic Skill Expert Name "Blast Vaccinator Medic" ClassIcon medic_blast Attributes SpawnWithFullCharge Item "gentlemanne_medigun_coffinnail" Item "The Cloud Crasher" Template RedBot Attributes IgnoreFlag ItemAttributes { ItemName "gentlemanne_medigun_coffinnail" "heal rate bonus" 5 "medigun charge is resists" 4 "lunchbox adds minicrits" 3 //Fixes permabubbles "medigun blast resist passive" 1 "medigun blast resist deployed" 1 "ubercharge rate bonus" 200 "uber duration bonus" -5.5 "bot medic uber health threshold" 444 } } T_TFBot_Red_Sniper_Huntsman_Pene { Template T_TFBot_Red_Sniper_Huntsman Name "Penetrating Bowman" ClassIcon sniper_bow_penetrator ItemAttributes { ItemName "The Huntsman" "projectile penetration" 1 "damage bonus" 1 "sniper no headshots" 1 } } T_TFBot_Red_Sniper_Carbine_H { Class Sniper Name "Carbine Sniper" Template RedBot_Hunt Skill Normal //best not to give them great tracking WeaponRestrictions SecondaryOnly ClassIcon sniper_carbine Item "The Cleaner's Carbine" Item "Letch's LED" FireWeapon { Type "Secondary" Cooldown 0.1 Repeats 0 Delay 1 } } T_TFBot_Red_Sniper_Carbinewacka { Class Sniper Name "Carbinewacka Sniper" Health 350 Scale 1.3 Template RedBot_Hunt Skill Normal //best not to give them great tracking WeaponRestrictions SecondaryOnly ClassIcon sniper_carbinewacka Item "The Cleaner's Carbine" Item "The Bushwacka" Item "Ol' Snaggletooth" ItemAttributes { ItemName "The Bushwacka" "fire rate bonus" 0.8 } CharacterAttributes { "health regen" 1 } FireWeapon { Type "Secondary" Cooldown 0.1 Repeats 0 Delay 1 } SpawnTemplate Carbinewacka } T_TFBot_Red_Sniper_SMG_Armored { Class Sniper Name "Armored SMG Sniper" Scale 1.3 Health 350 Template RedBot_Hunt Skill Normal //best not to give them great tracking WeaponRestrictions SecondaryOnly ClassIcon sniper_smg_tind Item "Upgradeable TF_WEAPON_SMG" Item "The Doublecross-Comm" Item "The Triggerman's Tacticals" Item "Rifleman's Regalia" ItemAttributes { ItemName "Upgradeable TF_WEAPON_SMG" "item style override" 1 "damage bonus" 1.5 "fire rate penalty" 1.5 "weapon spread bonus" 0.5 "health regen" 1 } } T_TFBot_Red_Spy_Revolver_H { Class Spy Name "Revolver Spy" Skill Normal ClassIcon spy_revolver_lite Template RedBot_Hunt Item "Upgradeable TF_WEAPON_REVOLVER" WeaponRestrictions PrimaryOnly DesiredAttackRange 250 ItemAttributes { ItemName "Upgradeable TF_WEAPON_REVOLVER" "faster reload rate" 0.6 } CharacterAttributes { "cannot disguise" 1 } } //////////////////////////////////////////////////////////////////////////// /////////////////////// Giant red bots //////////////////////// //////////////////////////////////////////////////////////////////////////// //- Giant Homing RPG Soldier (homing + accel) //A Giant Soldier that shoots sappers! //Succesful hits will sap sentries on hit. //Sources to make this work: // https://developer.valvesoftware.com/wiki/Obj_attachment_sapper // https://sigwiki.potato.tf/index.php/Main_Page -> custom entities, entity additions, expressions // https://raw.githubusercontent.com/powerlord/tf2-data/master/datamaps.txt // https://raw.githubusercontent.com/powerlord/tf2-data/master/netprops.txt // https://github.com/sreechar/TF2-Source-Code/blob/master/tf2_src/game/server/tf/tf_obj_sapper.h // and maybe, if the one above doesn't have it all: // https://github.com/NicknineTheEagle/TF2-Base/blob/master/src/game/server/tf/tf_obj_sapper.cpp //Plan: //- fire input on hit to apply the sapper //- fire input on hit name restrict "obj_*" should only let it target buildings //- use m_bHasSapper + $SetKey$ to say building has a sapper //- use BuildingSpawnTemplate with target for all Sappers to spawn an entity; //- said entity sets soldier as owner, or fire input on hit does that //- soldier has RTR attribute. gets applied to sapper. T_TFBot_Red_Giant_Soldier_Sapper { Template T_TFBot_Giant_Soldier Name "Giant Sapper Soldier" ClassIcon soldier_redtape Item "Upgradeable TF_WEAPON_ROCKETLAUNCHER" Attributes IgnoreFlag AddCond { Name TF_COND_REPROGRAMMED } ItemAttributes { ItemName "Upgradeable TF_WEAPON_ROCKETLAUNCHER" "paintkit_proto_def_index" 241 //electroshocked! "add cond on hit" 71 "add cond on hit duration" 3 "projectile speed decreased" 0.6 "blast radius decreased" 0.6 "custom projectile model" "models/weapons/c_models/c_sapper/c_sapper.mdl" "disable buildings on hit" 4 //Temp disabled til I have time to figure it all out. // "fire input on hit" "!caller^$SetProp$m_bHasSapper^1" // "fire input on hit name restrict" "obj_*" } } T_TFBot_Red_Giant_Soldier_Spammer_Blast { Class Soldier Name "Giant Rapid Blast Soldier" Skill Hard Health 3800 ClassIcon soldier_infinite_blast Item "The Liberty Launcher" Item "Jumper's Jeepcap" Attributes MiniBoss Template RedBot ItemAttributes { ItemName "The Liberty Launcher" "damage blast push" 6.5 "faster reload rate" 0 "fire rate bonus" 0.85 "projectile spread angle penalty" 2 "projectile speed increased" 1 "projectile speed decreased" 0.9 //0.65 * 1.4 = 0.91 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.3 } } T_TFBot_Red_Giant_Soldier_RPG { Class Soldier Name "Giant RPG Soldier" Skill Hard Health 3800 ClassIcon soldier_homing_nys_giant Item "Upgradeable TF_WEAPON_ROCKETLAUNCHER" Attributes MiniBoss Attributes AlwaysCrit Template RedBot_Hunt ItemAttributes { ItemName "Upgradeable TF_WEAPON_ROCKETLAUNCHER" "faster reload rate" 0 "fire rate bonus" 2 "projectile spread angle penalty" 1 "damage penalty" 0.75 "projectile speed decreased" 0.05 //0.05 * 1100 = 55 HU/s "projectile acceleration" 5500 //goes up to 1155 over 0.2 secs "projectile acceleration time" 0.2 "projectile acceleration start time" 1.4 "mod projectile heat aim time" 1.4 "mod projectile heat seek power" 65 "mod projectile heat follow crosshair" 1 "projectile trail particle" eyeboss_projectile } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.3 } } T_TFBot_Red_Giant_Soldier_Stunner { Class Soldier Name "Giant Rapid Stunner Soldier" Skill Hard Health 3800 ClassIcon soldier_stun_infinite Item "concealedkiller_rocketlauncher_sandcannon" Attributes MiniBoss Template RedBot ItemAttributes { ItemName "concealedkiller_rocketlauncher_sandcannon" "rocket specialist" 1 "faster reload rate" 0 "fire rate bonus" 0.8 "projectile spread angle penalty" 1 "damage penalty" 0.8 //they get a bit too strong } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.3 } } T_TFBot_Red_Giant_Soldier_Healing { Class Soldier Name "Giant Black Box Soldier" Health 4000 Skill Expert ClassIcon soldier_heal Attributes MiniBoss WeaponRestrictions PrimaryOnly Template RedBot Item "The Black Box" Item "The Grenadier's Softcap" ItemAttributes { ItemName "The Black Box" "fire rate bonus" 1.75 //Fires every 2 seconds "damage bonus" 1.25 "health on radius damage" 2000 "Blast radius increased" 1.2 "faster reload rate" -0.8 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.3 } } T_TFBot_Red_Giant_Soldier_Bison_Buff { Class Soldier Name "Giant Buff Bison Soldier" Health 3800 Skill Expert ClassIcon soldier_bison_buff Attributes MiniBoss WeaponRestrictions SecondaryOnly Template RedBot Item "The Righteous Bison" Item "The Kringle Collection" //gets turned into flag Item "The Fortune Hunter" //gets turned into backpack Item "Lord Cockswain's Pith Helmet" ItemAttributes { ItemName "The Righteous Bison" "fire rate bonus" 0.75 "faster reload rate" 0 } ItemModel // Replaces item model { ItemName "The Kringle Collection" Model "models\weapons\c_models\c_buffbanner\c_buffbanner.mdl" } ItemAttributes { ItemName "The Kringle Collection" "attachment name" "back" } ItemModel { ItemName "The Fortune Hunter" Model "models/weapons/c_models/c_buffpack/c_buffpack.mdl" } ItemAttributes { ItemName "The Fortune Hunter" "attachment name" "back" } AddCond { Index 16 Delay 3 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.3 } } T_TFBot_Red_Giant_Soldier_Equalizer_Backup { Class Soldier Name "Giant Backup Equalizer Soldier" Health 3800 Skill Expert ClassIcon soldier_pickaxe_equalize_backup Attributes MiniBoss Attributes SpawnWithFullCharge WeaponRestrictions MeleeOnly Template RedBot Item "The Equalizer" Item "The Battalion's Backup" Item "The Grenadier's Softcap" ItemAttributes { ItemName "The Battalion's Backup" "increase buff duration" 4 "mod soldier buff range" 2 } ItemAttributes { ItemName "The Equalizer" "mult dmg with reduced health" 2 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.3 } } T_TFBot_Red_Giant_Pyro_ScorchRain { Class Pyro Name "Giant Scorch Rain Pyro" Health 3000 Skill Expert Attributes MiniBoss Attributes IgnoreFlag WeaponRestrictions SecondaryOnly ClassIcon pyro_flare_rain_red_nys Item "The Scorch Shot" Item "Skullbrero" Template RedBot ItemAttributes { ItemName "The Scorch Shot" "projectile speed decreased" 0.4 "fire rate bonus" 0.2 "damage penalty" 1 "projectile spread angle penalty" 8 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.3 } } T_TFBot_Red_Giant_Pyro_Fireball { Class Pyro Name "Giant Fireball Pyro" Skill Expert Health 3000 Attributes MiniBoss Attributes IgnoreFlag WeaponRestrictions SecondaryOnly ClassIcon pyro_dragon_fury_swordstone Item "The Flare Gun" Item "Skullbrero" Template RedBot_Hunt ItemAttributes { ItemName "The Flare Gun" "set damagetype ignite" 1 "projectile speed increased" 0.4 "mod projectile heat seek power" 60 "fire rate bonus" 0.5 "damage bonus" 1.5 "override projectile type" 2 //ty Hellblade <3 "projectile trail particle" "spell_fireball_small_red" "custom projectile model" "models/weapons/w_models/w_drg_ball.mdl" "custom kill icon" "spellbook_fireball" } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.3 } } //A Giant Pyro that uses the *old* Panic Attack! //Also has a sight pellet bonus for a damage penalty. T_TFBot_Red_Giant_Pyro_PanicAttack { Class Pyro Name "Giant Panic Attack Pyro" Skill Expert Health 3000 Attributes MiniBoss Attributes IgnoreFlag WeaponRestrictions SecondaryOnly ClassIcon shotgun_panic_lite Item "Panic Attack Shotgun" Item "dec2014 2014_pyromancer_hood" //What even is this name?! Template RedBot_Hunt ItemAttributes { ItemName "Panic Attack Shotgun" "auto fires full clip" 1 "auto fires when full" 1 "fire rate bonus" 0.7 "faster reload rate" 0.5 "damage bonus" 0.5 "bullets per shot bonus" 3 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.3 } } //Giant Demoknight that stays near bomb //hunts players if health gets low. Can be snuck up on for 1-time massive melee damage. T_TFBot_Red_Giant_Demo_Samurai_Dynamic { Class Demoman Name "Giant Samurai Demo" ClassIcon demoknight_samurai Health 3300 Action FetchFlag Item "Demo Kabuto" Item "The Half-Zatoichi" AddCond { Name "TF_COND_REPROGRAMMED" } ChangeAttributes { Name "Attack" Delay 0.1 Cooldown 10 Repeats 0 IfHealthBelow 1650 } ChangeAttributes { Name "Default" Delay 0.1 Cooldown 10 Repeats 0 IfHealthAbove 1651 } EventChangeAttributes { Default { Skill Expert WeaponRestrictions MeleeOnly Attributes MiniBoss Attributes DisableDodge ItemAttributes { ItemName "The Half-Zatoichi" "critboost on kill" 3 "restore health on kill" 25 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } } Attack { Skill Expert WeaponRestrictions MeleeOnly Attributes MiniBoss Attributes DisableDodge ItemAttributes { ItemName "The Half-Zatoichi" "critboost on kill" 3 "restore health on kill" 25 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "override footstep sound set" 4 } InterruptAction { Target ClosestPlayer AimTarget ClosestPlayer KillAimTarget 1 Cooldown 4 Duration 5 } } } } T_TFBot_Red_Giant_Engineer_Wrangler { Class Engineer Name "Giant Wrangler Engineer" Skill Hard Health 2500 WeaponRestrictions SecondaryOnly Attributes MiniBoss Item "The Wrangler" Item "Head Of Defense" Item "Sightliner" // DesiredAttackRange 400 AimAt Body Template RedBot ItemAttributes { ItemName "Head Of Defense" "item style override" 1 } ItemAttributes { ItemName "The Wrangler" "engy sentry fire rate increased" 1.33 //wrangler increases rate by 1.67, this neutralizes it a bit } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.2 } SpawnTemplate { Name "SentryHat" Bone "bip_head" } } //A Giant, burst-firing Carbine sniper! Can activate Crikey to become pretty scary! T_TFBot_Red_Giant_Sniper_Carbine { Class Sniper Name "Giant Burst Carbine Sniper" Health 2500 Skill Hard WeaponRestrictions SecondaryOnly Attributes MiniBoss ClassIcon sniper_carbine Item "The Cleaner's Carbine" Item "Letch's LED" UseCustomModel "models/bots/sniper_boss/bot_sniper_boss.mdl" Template RedBot_Bomb ItemAttributes { ItemName "The Cleaner's Carbine" "fire rate penalty" 1 "fire rate bonus" 0.4 "reload time increased" 1.5 } FireWeapon { Type "Secondary" Cooldown 0.1 Repeats 0 Delay 1 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.4 } } //////////////////////////////////////////////////////////////////////////// /////////////////// Chief red bots //////////////////// //////////////////////////////////////////////////////////////////////////// T_TFBot_Red_Chief_Scout_FaN { Class Scout Name "Chief Force-a-Nature Scout" Health 12000 Scale 1.8 Skill Expert ClassIcon scout_fan_armored_red Item "The Force-a-Nature" Item "The Bolt Boy" Item "Batter's Helmet" Attributes UseBossHealthbar Attributes MiniBoss Attributes DisableDodge Attributes IgnoreFlag BehaviorModifiers Push NoPushAway 1 AddTemplate RedBot ItemAttributes { ItemName "The Force-a-Nature" "damage blast push" 10 "mult dmg vs giants" 2 "scattergun has knockback" 0 "bullets per shot bonus" 2 "weapon spread bonus" 0.75 "damage penalty" 0.75 "reload time increased" 1.5 } ItemAttributes { ItemName "Batter's Helmet" "custom item model" "models/player/items/scout/pep_hat.mdl" //I'm GETTING this hat dammit } CharacterAttributes { "force distribute currency on death" 1 "health regen" 15 "damage force reduction" 0 "move speed bonus" 0.3 "no_jump" 1 } } T_TFBot_Red_Chief_Freeman { Name "FR-33/M4-N" Class Engineer Health 36000 Scale 1.2 Skill Expert Attributes MiniBoss Attributes UseBossHealthbar Item "The Virtual Viewfinder" Item "Iron Lung" //"Hardhat Hazmat" No creators.tf cosmetics be hittin' hard Item "Necro Smasher" Template RedBot_Hunt ClassIcon crowbar_red_lite AlwaysGlow 1 DeathSound "#misc/ks_tier_04_kill_01.wav" ItemAttributes { ItemName "Necro Smasher" "custom item model" "models/weapons/c_models/c_cratesmasher/c_cratesmasher_1.mdl" "fire rate bonus" 0.6 "dmg pierces resists absorbs" 1 //heck you, wrangler! } CharacterAttributes { "damage force reduction" 0.1 "move speed bonus" 1.1 //could catch up with you! } WeaponSwitch { Type "Melee" Cooldown 2 Delay 0 Repeats 0 IfHealthAbove 32001 } WeaponSwitch { Type "Melee" Cooldown 16 Delay 8 Repeats 0 IfHealthBelow 32000 IfHealthAbove 28000 } WeaponSwitch { Type "Primary" Cooldown 16 Delay 0 Repeats 0 IfHealthBelow 32000 } FireInput { Target wave5_starter Action "FireUser1" Delay 0 Repeats 1 IfHealthBelow 32000 } FireInput { Target wave5_starter Action "FireUser4" Delay 0 Repeats 1 IfHealthBelow 24000 } ChangeAttributes { Delay 0 Name "Tau" Repeats 1 IfHealthBelow 14000 } FireInput { Target wave5_starter Action "FireUser2" Delay 0 Repeats 1 IfHealthBelow 14000 } FireWeapon { IfHealthBelow 14000 Delay 2.4 Type "Action" Repeats 1 Delay 1 } EventChangeAttributes { Default { Item "Panic Attack Shotgun" ItemAttributes { ItemName "Panic Attack Shotgun" "custom item model" "models/weapons/c_models/c_rapidfire/c_rapidfire_1.mdl" "custom weapon fire sound" "=80|weapons\shotgun\shotgun_dbl_fire7.wav" // "bullets per shot bonus" 0.5 It's a double-fire, after all "auto fires full clip" 1 "auto fires when full" 1 //simulate full reload "damage bonus" 2.1 "fire rate penalty" 1.3 "faster reload rate" 0.6 "weapon spread bonus" 0.7 "clip size bonus" 1.3 } } Tau { DesiredAttackRange 50 Item "The Pomson 6000" Attributes SuppressFire ItemAttributes { ItemName "The Pomson 6000" "custom weapon fire sound" "=70|weapons\gauss\fire1.wav" "faster reload rate" 0 "fire rate bonus" 0.25 //0.2 sec between attacks "override projectile type" 1 "damage bonus" 1.25 //base damage: 75 "bullets per shot bonus" 0.1 "weapon spread bonus" 0.2 "dmg bonus vs buildings" 5 "sniper fires tracer" 1 } Item "Battery Canteens" ExtAttr SuppressCanteenUse ItemAttributes { ItemName "Battery Canteens" "critboost" 1 "powerup charges" 1 "powerup duration" 180 } FireWeapon { Type "Primary" Duration 1.2 Cooldown 2.2 Repeats 0 IfSeeTarget 1 } } } } //////////////////////////////////////////////////////////////////////////// /////////////////// Special red bots //////////////// //////////////////////////////////////////////////////////////////////////// //- Jeremy, Arrogant Attacker //Scout with sig upgrades, no canteens, and loves to taunt. //(damage boost, reload rate, resists, regen) T_TFBot_Red_Player_Scout { Class Scout Name "Jeremy, Arrogant Attacker" Skill Expert ClassIcon tf2_lite //fuck it this is a standard now UseHumanModel 1 AlwaysGlow 1 FastUpdate 1 DeathSound "=25|mvm/mvm_player_died.wav" Item "Upgradeable TF_WEAPON_SCATTERGUN" Item "The El Jefe" Item "Lucky No. 42" Item "Summer Shades" Attributes DisableDodge Attributes HoldFireUntilFullReload DesiredAttackRange 25 //he gets in deep Template RedBot_Hunt 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.35 "fire rate bonus" 0.7 "faster reload rate" 0.5 "dmg taken increased" 0.35 "health regen" 8 "move speed bonus" 1.3 "dmg taken from crit reduced" 0.1 } CharacterAttributes { "damage force reduction" 0.75 } Taunt //Taunts a bunch { Delay 12 Cooldown 16 Repeats 3 Name "Battin' a Thousand Taunt" IfHealthAbove 101 } VoiceCommand { Type "Cheers" Delay 4 Cooldown 10 Repeats 4 IfHealthAbove 120 } VoiceCommand { Type "Medic" Delay 0 Cooldown 15 Repeats 4 IfHealthBelow 119 //he's a WUSS } } Titan_Yiresa { Class Heavyweapons Name "Shutdown Protocol" Health 70000 Scale 10 Skill Expert Attributes IgnoreFlag Attributes MiniBoss Attributes UseBossHealthbar Attributes DisableDodge BehaviorModifiers Push Tag bot_hatchspawn ClassIcon heavy_head_red_nys Item "War Head" Item "Heavy Harness" Item "Iron Curtain" Item "The Fortune Hunter" NoPushAway 1 DeathSound "#misc\doomsday_missile_explosion.wav" SpawnTemplate "RocketShoot" AddCond { Index 43 } ItemModel { ItemName "The Fortune Hunter" Model "models/weapons/c_models/c_rocketlauncher/c_rocketlauncher.mdl" } ItemAttributes { Itemname "The Fortune Hunter" "attachment name" "head" "attachment angles" "-20 100 190" "attachment offset" "30 -60 -20" "attachment scale" 8 } CharacterAttributes { "move speed bonus" 0.3 "damage force reduction" 0 "no_jump" 1 } ItemAttributes { ItemName "Iron Curtain" "bullets per shot bonus" 2 "projectile penetration heavy" 3 // "mod projectile heat seek power" 45 // "mod projectile heat seek error" 180 // "mod projectile heat aim time" 1 //more imperfect aim // "projectile speed increased" 0.5 //0.65 with lvl 2 RS // "blast dmg to self increased" 0 // "projectile trail particle" eyeboss_projectile // "projectile spread angle penalty" 25 // "rocket specialist" 2 } ExtAttr SuppressCanteenUse //Canteens: //Emergency crits at 60k. Emergency uber at 30k and 10k. FireWeapon { Type "Action" Delay 0 IfHealthBelow 60001 Repeats 1 Duration 0.5 } RemoveAttribute { Item "Battery Canteens" Name "critboost" Repeats 1 Delay 0 IfHealthBelow 55000 } AddAttribute { Item "Battery Canteens" Name "ubercharge" Value 1 Repeats 1 IfHealthBelow 40000 //Well beforehand Delay 0 } FireWeapon { Type "Action" Delay 0 IfHealthBelow 30001 Repeats 1 Duration 0.5 } FireWeapon { Type "Action" Delay 0 IfHealthBelow 10001 Repeats 1 Duration 0.5 } Item "Battery Canteens" ItemAttributes { ItemName "Battery Canteens" "critboost" 1 "powerup charges" 3 } //Comms //Positive: VoiceCommand { Type "Battle Cry" Delay 8 Cooldown 45 IfHealthAbove 40000 Repeats 6 } VoiceCommand { Type "Incoming" Delay 0 IfHealthAbove 110000 Repeats 1 } VoiceCommand { Type "Thanks" Delay 220 IfHealthAbove 10000 Repeats 1 } VoiceCommand { Type "Good job" Delay 228 IfHealthAbove 10000 Repeats 1 } //Negative: VoiceCommand { Type "Dispenser here" Delay 2 Cooldown 55 IfHealthBelow 100000 Repeats 2 } VoiceCommand { Type "Help" Delay 0 IfHealthBelow 80000 Repeats 1 } VoiceCommand { Type "Help" Delay 0 IfHealthBelow 50000 Repeats 1 } VoiceCommand { Type "Negative" Delay 0 IfHealthBelow 20000 Repeats 1 } } //Lore: heavy player that equipped Mantreads as custom item, //has bot-mimic FoS with knockback, maxed SIG upgrades, //and 3 uber cans. T_TFBot_Red_Player_Heavy { Class Heavyweapons Name "Misha, Defiant Defender" Scale 1 Skill Expert ClassIcon tf2_lite //fuck it this is a standard now Item "Diamond Botkiller Minigun Mk.I" //"models/player/items/mvm_loot/heavy/fob_h_minigun_diamond.mdl" //and "models/weapons/c_models/c_minigun/c_minigun.mdl" Item "The Mantreads" Item "The Fists of Steel" Item "Battery Canteens" Item "Combat Slacks" //"models/workshop/player/items/heavy/sbox2014_war_pants/sbox2014_war_pants.mdl" Item "The U-clank-a" //"models/player/items/mvm_loot/heavy/robo_ushanka.mdl" Item "Siberian Tigerstripe" //"models/workshop/player/items/heavy/fall17_siberian_tigerstripe/fall17_siberian_tigerstripe.mdl" UseHumanModel 1 AlwaysGlow 1 Attributes MiniBoss //reduces buster damage to 600, further reduced to 150; a big chunk but livable. NoIdleSound 1 DeathSound "=25|mvm/mvm_player_died.wav" Template RedBot_Hunt ExtAttr IgnoreBuildings // Ignore the teles ExtAttr SuppressCanteenUse DesiredAttackRange 50 //Pretty much bodyblocking ItemAttributes { ItemName "Diamond Botkiller Minigun Mk.I" "damage bonus" 2.05 //1200$ ; 3 ticks "restore health on kill" 35 //200$ "projectile penetration heavy" 5 //400$, wow "attack projectiles" 2 //800$ "killstreak tier" 2 "killstreak idleeffect" 1 //team shine, cause he's a team player 8) } //Subtotal: 2600$ ItemAttributes { ItemName "The Fists of Steel" "damage causes airblast" 1 "damage bonus" 1.5 //Because of how OP it'd be, fire rate bonus is disabled for these. "heal on kill" 100 //400$ } //3000$ ItemAttributes { ItemName "Battery Canteens" "ubercharge" 1 "powerup charges" 3 //225$ } //3225$ CharacterAttributes { "move speed bonus" 1.45 //600$ "health regen" 12 //600$ "dmg taken from crit reduced" 0.1 //450$ "dmg taken increased" 0.25 //1200$ "cannot taunt" 1 "override footstep sound set" 0 } //Total cash spent: 6075$ WeaponSwitch { Type "Primary" IfHealthAbove 92 Repeats 0 Delay 0 Cooldown 0.1 } WeaponSwitch { Type "Melee" IfHealthBelow 81 Repeats 0 Delay 3 Cooldown 4 } InterruptAction { Target "obj_dispenser" Delay 0.1 IfHealthBelow 81 Cooldown 10 Duration 6 } FireWeapon { Type "Action" Delay 0 IfHealthBelow 101 Repeats 3 Duration 0.5 Cooldown 6.5 } VoiceCommand { Type "Battle Cry" Delay 4 Cooldown 45 Repeats 2 IfHealthAbove 200 } VoiceCommand { Type "Help" Delay 0 Cooldown 15 Repeats 4 IfHealthBelow 150 } } //////////////////////////////////////////////////////////////////////////// /////////////////// Blue gatebots //////////////////// //////////////////////////////////////////////////////////////////////////// GateBot_Scout_Popper { ClassIcon scout_pop Name "Soda Popper Scout" Class Scout EventChangeAttributes { Default { BehaviorModifiers Push Tag bot_gatebot Tag nav_prefer_gate_flank Attributes IgnoreFlag Attributes DisableDodge WeaponRestrictions PrimaryOnly Skill Expert MaxVisionRange 1600 Item "The Soda Popper" Item "MvM GateBot Light Scout" ItemAttributes { ItemName "The Soda Popper" "damage bonus" 0.45 "bullets per shot bonus" 3 "faster reload rate" 1.5 "fire rate bonus" 1.5 } } RevertGateBotsBehavior { Skill Expert MaxVisionRange 1600 WeaponRestrictions PrimaryOnly Item "The Soda Popper" Item "MvM GateBot Light Scout" ItemAttributes { ItemName "The Soda Popper" "damage bonus" 0.45 "bullets per shot bonus" 3 "faster reload rate" 1.5 "fire rate bonus" 1.5 } ItemAttributes { ItemName "MvM GateBot Light Scout" "item style override" 1 } } } } GateBot_Pyro_Flaregun { ClassIcon pyro_flare Name "Flare Pyro" Class Pyro EventChangeAttributes { Default { BehaviorModifiers Push Tag bot_gatebot Tag nav_prefer_gate_flank Attributes IgnoreFlag Attributes DisableDodge Skill Hard WeaponRestrictions SecondaryOnly Item "The Flare Gun" Item "MvM GateBot Light Pyro" } RevertGateBotsBehavior { Skill Hard WeaponRestrictions SecondaryOnly Item "The Flare Gun" Item "MvM GateBot Light Pyro" ItemAttributes { ItemName "MvM GateBot Light Pyro" "item style override" 1 } } } } GateBot_Engineer_Pistol { Class Engineer Name "Pistol Engineer" Health 275 WeaponRestrictions SecondaryOnly Attributes DisableDodge ClassIcon scout_pistol_nys Action FetchFlag NoBombUpgrades 1 Tag bomb_carrier // Item "The Galvanized Gibus" VoiceCommand { Delay 4 Cooldown 50 Repeats 3 IfHealthAbove 250 Type "Battle Cry" } VoiceCommand { Delay 6 Cooldown 15 Repeats 0 IfHealthBelow 125 Type "Help" } //This is literally the best I can do until raf can make Action work inside of this :< EventChangeAttributes { Default { BehaviorModifiers Push Tag bot_gatebot Tag nav_prefer_gate_flank Attributes IgnoreFlag Item "MvM GateBot Light Engineer" InterruptAction { Target gate_left_capturezone Duration 0 Cooldown 3 Repeats 0 Delay 0.1 } } RevertGateBotsBehavior { Item "MvM GateBot Light Engineer" ItemAttributes { ItemName "MvM GateBot Light Engineer" "item style override" 1 } } } } GateBot_Sniper_SMG_Burst { ClassIcon sniper_smg Name "Burst SMG Sniper" Class Sniper EventChangeAttributes { Default { BehaviorModifiers Push Tag bot_gatebot Tag nav_prefer_gate_flank Attributes IgnoreFlag Attributes DisableDodge Skill Hard WeaponRestrictions SecondaryOnly Item "teufort_smg_teamsprayer" ItemAttributes { ItemName "teufort_smg_teamsprayer" "fire rate bonus" 0.5 "reload time increased" 1.3 } Item "MvM GateBot Light Sniper" } RevertGateBotsBehavior { Skill Hard WeaponRestrictions SecondaryOnly Item "teufort_smg_teamsprayer" ItemAttributes { ItemName "teufort_smg_teamsprayer" "fire rate bonus" 0.5 "reload time increased" 1.3 } Item "MvM GateBot Light Sniper" ItemAttributes { ItemName "MvM GateBot Light Sniper" "item style override" 1 } } } } //The *hackiest* gatebot you've ever seen. //Spawns with the bomb, targets the gate, then returns to regular fetchflag behavior. GateBot_Giant_Engineer_Widowmaker { Name "Giant Widowmaker Engineer" Health 2500 Class Engineer ClassIcon engineer_widowmaker_nys Action FetchFlag EventChangeAttributes { Default { BehaviorModifiers Push Tag bot_gatebot Tag bot_giant Tag nav_prefer_gate_flank Attributes IgnoreFlag Item "MvM GateBot Light Engineer" Attributes MiniBoss Attributes DisableDodge Skill Expert Item "The Widowmaker" ItemAttributes { ItemName "The Widowmaker" "damage bonus" 1.25 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.4 } InterruptAction { Target gate_left_capturezone Delay 0.1 Duration 0 Cooldown 3 Repeats 0 } } RevertGateBotsBehavior { Tag bot_giant Item "MvM GateBot Light Engineer" ItemAttributes { ItemName "MvM GateBot Light Engineer" "item style override" 1 } Attributes MiniBoss Skill Expert Item "The Widowmaker" ItemAttributes { ItemName "The Widowmaker" "damage bonus" 1.25 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.4 } } } } GateBot_Giant_Engineer_Widowmaker_Last { Name "Giant Widowmaker Engineer" Health 2500 Class Engineer ClassIcon engineer_widowmaker_nys Action FetchFlag SpawnTemplate lastbotlogic EventChangeAttributes { Default { Tag bot_gatebot Tag bot_giant Tag nav_prefer_gate_flank Item "MvM GateBot Light Engineer" Attributes IgnoreFlag Attributes MiniBoss Attributes DisableDodge Skill Expert Item "The Widowmaker" ItemAttributes { ItemName "The Widowmaker" "damage bonus" 1.25 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.4 } // InterruptAction // { // Target "target_blu_gate" // Delay 0 // Duration 3 // Cooldown 2.5 // Repeats 0 // } } RevertGateBotsBehavior { Tag bot_giant Item "MvM GateBot Light Engineer" ItemAttributes { ItemName "MvM GateBot Light Engineer" "item style override" 1 } Attributes MiniBoss Skill Expert Item "The Widowmaker" ItemAttributes { ItemName "The Widowmaker" "damage bonus" 1.25 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.4 } } } } //////////////////////////////////////////////////////////////////////////// /////////////////////// Common blue bots //////////////////// //////////////////////////////////////////////////////////////////////////// //A typical 2Cities scout that doesn't have a Scattergun. :^3 T_TFBot_Scout_MilkMark { Class Scout Name "Milk 'n Mark Scout" ClassIcon scout_fanowar_milk Item "Mad Milk" Item "The Fan O'War" StripItemSlot 0 //removes primary Action Mobber ItemAttributes { ItemName "Mad Milk" "effect bar recharge rate increased" 0.6 } } T_TFBot_Scout_Popper { ClassIcon scout_pop Name "Soda Popper Scout" Class Scout Skill Expert MaxVisionRange 1600 WeaponRestrictions PrimaryOnly Item "The Soda Popper" Item "MvM GateBot Light Scout" Action Mobber ItemAttributes { ItemName "The Soda Popper" "damage bonus" 0.45 "bullets per shot bonus" 3 "faster reload rate" 1.5 "fire rate bonus" 1.5 } ItemAttributes //yes this is on purpose { ItemName "MvM GateBot Light Scout" "item style override" 1 } } //A smaller version of the Giant Rapid Fire Soldier. T_TFBot_Soldier_Spammer { Name "Rapid Fire Soldier" Class Soldier Skill Hard ClassIcon soldier_spammer WeaponRestrictions PrimaryOnly Tag bot_giant Action Mobber ItemAttributes { ItemName "tf_weapon_rocketlauncher" "faster reload rate" -0.8 "fire rate bonus" 0.625 "Projectile speed increased" 0.83 } } T_TFBot_Soldier_Kritz { Class Soldier Name "Kritz Banner Soldier" Item "The Buff Banner" ClassIcon soldier_critbuff Attributes SpawnWithFullCharge Attributes AlwaysCrit Action Mobber ItemAttributes { ItemName "The Buff Banner" "effect cond override" 33 "mod soldier buff range" 1.5 "increase buff duration" 3 } } //A minigiant pyro that rains down flares! T_TFBot_Pyro_Flare_Rain { Class Pyro Name "Flare Rain Pyro" Health 600 Scale 1.4 MaxVisionRange 1200 Skill Hard WeaponRestrictions SecondaryOnly Item "The Flare Gun" Item "The Firefly" ClassIcon pyro_flare_rain_nys Tag bot_giant AimAt Head //Comment out for Vanilla! Action Mobber ItemAttributes { ItemName "The Flare Gun" "fire rate bonus" 0.2 "projectile spread angle penalty" 3 "projectile speed decreased" 0.4 "health regen" 5 } } //A not-so-giant Spread Fire Pyro! Delightfully copied from Bazooks' Brain Taker c: //Albeit with slightly worse stats, for balance reasons. T_TFBot_Pyro_BigFire_T { Class Pyro Name "Spread Fire Pyro" ClassIcon pyro_bigfire Skill Expert Health 650 Scale 1.4 WeaponRestrictions PrimaryOnly Attributes AlwaysFireWeapon Action Mobber Template AttackTank Tag bot_repair Item "Firewall Helmet" Item "The Backburner" VoiceCommand { Delay 4 Cooldown 50 Repeats 3 IfHealthAbove 600 Type "Battle Cry" } VoiceCommand { Delay 1 Cooldown 15 Repeats 3 IfHealthBelow 301 Type "Medic" } ItemAttributes { ItemName "The Backburner" "flame_drag" 4.25 //double range "flame_spread_degree" 5.6 //double spread } CharacterAttributes { "health regen" 1 "move speed bonus" 0.8 "damage force reduction" 0.6 "health from healers reduced" 2 } } T_TFBot_Engineer_Widowmaker { Class Engineer Name "Widowmaker Engineer" Skill Hard WeaponRestrictions PrimaryOnly Item "The Widowmaker" ClassIcon engineer_widowmaker_nys AimAt Body Action Mobber } T_TFBot_Engineer_Wrangler_H { Class Engineer Name "Mobile Wrangler Engineer" Skill Expert AimTrackingInterval 0.5 //between normal and easy bc wrangler aim assist is nutty WeaponRestrictions SecondaryOnly Item "The Wrangler" Item "Head Of Defense" ClassIcon engineer_wrangler_lite DesiredAttackRange 400 AimAt Body Action Mobber Attributes DisableDodge Attributes SuppressFire FireWeapon { Type "Primary" Delay 0.1 IfSeeTarget 1 Duration 1 Cooldown 1.8 } ItemAttributes { ItemName "The Wrangler" // "engy sentry fire rate increased" 1.67 "engy building health increased" 3 // "disable wrangler shield" 1 //wrangler increases rate by 1.67, this neutralizes that } SpawnTemplate { Name "SentryHat" Bone "bip_neck" } } //////////////////////////////////////////////////////////////////////////// /////////////////////// Giant blue bots //////////////////////// //////////////////////////////////////////////////////////////////////////// //Colonel Barrage taken a step down. T_TFBot_Giant_Soldier_Barrage { Name "Giant Barrage Soldier" Class Soldier Skill Expert Health 4000 Attributes MiniBoss Attributes HoldFireUntilFullReload ClassIcon soldier_barrage Action Mobber ItemAttributes { ItemName "tf_weapon_rocketlauncher" "faster reload rate" 0.4 //V2 has .3 "clip size upgrade atomic" 11 "fire rate bonus" 0.2 "Projectile speed increased" 0.5 //V2 has .6 "projectile spread angle penalty" 5 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.4 "airblast vulnerability multiplier" 0.4 "override footstep sound set" 3 } } //A Demo that gives a fire rate buff to bots in its vicinity! T_TFBot_Giant_Demo_King { Class Demoman Name "Giant King Demoman" Health 3200 //gets +100 from the powerup anyhow Skill Expert Attributes MiniBoss ClassIcon powerup_king_lite Attributes IgnoreFlag Item "Prince Tavish's Crown" Tag bot_giant Action Mobber SpawnTemplate powerup_logic AddCond { Index 109 } ItemAttributes { ItemName "TF_WEAPON_GRENADELAUNCHER" "faster reload rate" 0 "fire rate bonus" 0.75 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.5 "override footstep sound set" 4 } } //A Giant Burst Demo that can heal itself even faster than the small variant! T_TFBot_Giant_Demo_Burst_Heal { Name "Giant Healing Burst Demo" Class Demoman Skill Expert Health 3300 ClassIcon Demo_burst_heal Tag bot_giant Attributes MiniBoss Attributes HoldFireUntilFullReload WeaponRestrictions PrimaryOnly ItemAttributes { ItemName "tf_weapon_grenadelauncher" "faster reload rate" 0.65 "fire rate bonus" 0.1 "clip size upgrade atomic" 6 "projectile spread angle penalty" 4 "Projectile speed increased" 1.1 } CharacterAttributes { "heal on hit for rapidfire" 100 "move speed bonus" 0.5 "damage force reduction" 0.4 "airblast vulnerability multiplier" 0.4 "override footstep sound set" 4 } } T_TFBot_Demo_PlayerBuster { Class Demoman Name "Player Buster" Health 2500 Attributes MiniBoss Attributes DisableDodge Item "The Ullapool Caber" ClassIcon sentry_buster Action SuicideBomber UseBusterModel 1 //Use buster model CharacterAttributes { "move speed bonus" 1.3 "damage force reduction" 0.1 } } T_TFBot_Giant_Heavy_Dispenser { Class Engineer Name "Giant Dispenser Heavy" Skill Expert Health 5000 Attributes MiniBoss WeaponRestrictions PrimaryOnly Action Mobber UseCustomModel "models/bots/heavy_boss/bot_heavy_boss.mdl" //It's the Ground Zero trick! ClassIcon heavy_dispenser Item "Upgradeable TF_WEAPON_MINIGUN" Item "Provisions Cap" Item "Battery Canteens" ItemAttributes { ItemName "Upgradeable TF_WEAPON_MINIGUN" "damage bonus" 1.5 } ItemAttributes { ItemName "Battery Canteens" "powerup charges" 1 "building instant upgrade" 1 } CharacterAttributes { "mult dispenser rate" 4 "engy dispenser radius increased" 5 "engy building health bonus" 6 "move speed bonus" 0.5 "damage force reduction" 0.25 "override footstep sound set" 2 "voice pitch scale" 0 } SpawnTemplate { Name "DispenserPocket" Bone bip_spine_2 } } T_TFBot_Giant_Engineer_Widowmaker { Name "Giant Widowmaker Engineer" Health 2500 Class Engineer Skill Expert ClassIcon engineer_widowmaker_nys Action FetchFlag Attributes MiniBoss Item "The Widowmaker" ItemAttributes { ItemName "The Widowmaker" "damage bonus" 1.25 } CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.4 } } //////////////////////////////////////////////////////////////////////////// /////////////////////// Chief blue bots //////////////////////// //////////////////////////////////////////////////////////////////////////// T_TFBot_Chief_Demo_Milky { Class Demoman Name "Chief Milk-splosion Demo" Health 40000 Scale 1.8 ClassIcon demo_milky Item "Upgradeable TF_WEAPON_GRENADELAUNCHER" Item "The Milkman" Attributes HoldFireUntilFullReload Attributes UseBossHealthbar Attributes MiniBoss Attributes DisableDodge Action Mobber NoPushAway 1 Tag bot_giant // AddTemplate RedBot ItemAttributes { ItemName "Upgradeable TF_WEAPON_GRENADELAUNCHER" "paintkit_proto_def_index" 130 //bovine blazemaker bc I am very funny "set_item_texture_wear" 0 "add cond on hit" 27 "add cond on hit duration" 4 "grenade explode on impact" 1 "custom projectile model" "models\weapons\c_models\c_madmilk\c_madmilk.mdl" "explosion particle" "peejar_impact_milk" "projectile trail particle" "peejar_trail_red" "fire rate bonus" 0.1 "faster reload rate" 0.35 "clip size upgrade atomic" 11 "blast radius decreased" 0.6 } CharacterAttributes { "force distribute currency on death" 1 "health regen" 20 "damage force reduction" 0 "move speed bonus" 0.3 "no_jump" 1 } } T_TFBot_Chief_Heavy_Overheat { Template T_TFBot_Giant_Heavyweapons Name "Chief Overheat Heavy" Health 45000 Attributes UseBossHealthbar ClassIcon heavy_critcan Item "Upgradeable TF_WEAPON_MINIGUN" Item "Der Maschinensoldaten-Helm" Item "Die Regime-Panzerung" Action Mobber ItemAttributes { ItemName "Upgradeable TF_WEAPON_MINIGUN" "paintkit_proto_def_index" 296 "set_item_texture_wear" 0 "minigun spinup time increased" 1.2 "damage bonus" 1.5 } AddCond { Index 71 Duration 5 IfHealthBelow 40000 } FireInput { Target player Action $PlaySoundToSelf Param "=35|mvm/mvm_used_powerup.wav" Delay 0 Repeats 1 IfHealthBelow 30000 } Message { Name "{blue}Chief Overheat Heavy {FBECCB}has used their {blue}PERMANENT CRITS {FBECCB}Power Up Canteen!" Delay 0 Repeats 1 IfHealthBelow 30000 } AddCond { Index 33 Duration 999 IfHealthBelow 30000 } AddCond { Index 71 Duration 5 IfHealthBelow 25000 } FireInput { Target player Action $PlaySoundToSelf Param "=35|mvm/mvm_used_powerup.wav" Delay 0 Repeats 1 IfHealthBelow 10000 } Message { Name "{blue}Chief Overheat Heavy {FBECCB}has used their {blue}LAST STAND {FBECCB}Power Up Canteen! Damage and resistance increased!" Delay 0 Repeats 1 IfHealthBelow 10000 } AddCond { Index 42 //bomb buff effect Duration 999 IfHealthBelow 10000 } AddAttribute { Item "Active" Name "damage bonus" Value "3" Delay 0 IfHealthBelow 10000 Repeats 1 } } } Mission { Objective Sniper Where spawnbot_hatch BeginAtWave 1 RunForThisManyWaves 1 DesiredCount 1 InitialCooldown 10 CooldownTime 25 TFBot { Template T_TFBot_Red_Sniper Name "Machina Sniper" Item "The Machina" ClassIcon sniper_machina_2 } } Mission { Objective Spy Where spawnbot_hatch_alt BeginAtWave 3 RunForThisManyWaves 1 DesiredCount 1 InitialCooldown 30 CooldownTime 45 TFBot { Class Spy Name "Uber Canteen Spy" Skill Expert Action Spy ClassIcon spy_ubercan Template RedBot Item "Battery Canteens" ExtAttr SuppressCanteenUse ItemAttributes { ItemName "Battery Canteens" "ubercharge" 1 "powerup charges" 1 "powerup duration" 3 } FireWeapon { IfHealthBelow 100 Type "Action" Repeats 1 Delay 1 } } } //PROPS //Spawn barriers SpawnTemplate //right side { Name "barrier_prop" "origin" "-6439.902344 -1635.442871 1062.62023" "angles" "0 0 0" } SpawnTemplate //left side { Name "barrier_prop" "origin" "-7837.259277 605.864136 723.93450" "angles" "0 0 0" } //Special props to block access to self-blocking thing SpawnTemplate "barrier_redspawn" //Upgrade stations SpawnTemplate //red side (left when looking towards hatch) { Name "station" "origin" "-9100 334 0" } SpawnTemplate //blue side { Name "station_rotated_90p" "origin" "-6461.757813 -2983.834473 -66.347286" } //Collision ranges from: // "mins" "-55 -140 0" // "maxs" "55 140 242" //-3376 3389 70 //-3486 3669 312 //Spawnbot_right can vary- base is: //-3632 -3405.21 -8.382 //technically not possible to get stuck in? unless +/- modifier for spawn is >150 //best bet is to yeet this one's collision SpawnTemplate //red gate { Name "station_nocollision" "origin" "-3431.968750 3529.504639 70" "angles" "0 0 0" } SpawnTemplate //blue gate { Name "station_rotated_90n" "origin" "-3644.874512 -3163.577881 -23" "angles" "0 0 0" } //The main logic for getting additional fluff to work, such as disabling spawns, //yeeting some edicts, etc. SpawnTemplate "corelogic" // SpawnTemplate "attribute_changer" //Defendpoints for set-position bots. SpawnTemplate "defendpoints" //Respawnroom fixes and resupply cabinets. SpawnTemplate "respawnrooms" //Quick-Fix for bots getting stuck on something at spawn. SpawnTemplate "hatchspawn_fix" //Barriers for inside the blue gate, to cover up holes. SpawnTemplate barrier_prop_bluegate //Teleporters for swapping spawns more effectively. "Disable" is just annoying sometimes. SpawnTemplate spawn_teleporters //The tutorial on whatcha gotta do. Wave 1 only. SpawnTemplate "tutorial" SpawnTemplate wave1logic SpawnTemplate wave2logic SpawnTemplate wave3logic SpawnTemplate wave4logic SpawnTemplate wave5logic SpawnTemplate wave6logic // WAVE 1 - Intro to map, reverse, and getting used to stuff // Gate skip. VIP escort: red path, blue spawn // Objective: escort a (weak) set of bomb carriers. // Their "power" will increase slightly as you lose them. // Obstacle: defending giants; bomb-attacking bots; hunting bots. // Path: through the blue part. No gate cap yet. // Tasks: defending engies must minimize intial horde, prevent hunters from reaching too far. // Attacking engies must remove nearby threats and focus down giants. //Carriers: //This wave can dish out a fair bit of damage quite quickly. //For forgiveness, the carriers are slightly bulkier, and can //fight back just a bit. //- Pistol Engineer //- Giant Widowmaker Engineer //Subwave 1: initial wave of bots; attempt to break first push. //Spawn at _1 spawns. //- Defend: Giant Demoman (no weapon changes) //- Hunt: Sticky Demo + Quick-Fix Medic (max 2 pairs) //- H: Syringe Medic //Subwave 2: bomb moved up. Send in bomb attackers. //Spawn at _2 spawns, around gate. //- Bomb: Giant Demoman (ditto) //- H: Armored FaN Scouts //- H: Steakweight Champs //Subwave 3: bomb nears hatch. Concentrate firepower, station flank defenders, //defend bomb at all costs. //Spawn at hatch. //- B: Giant Burst Carbine Sniper //- B: Sticky Demos //- D: Black Box Soldiers (minigiant, around "bridge", on container) //- Rest support, H: Whip Soldiers //- Support: Snipers (around long hall) Wave { //Closes a few doors, then recomputes blockers. Triggered in the wave. SpawnTemplate wave1starter // SpawnTemplate wave1props //Spawn indicators for the red-side path. SpawnTemplate spawn_indicators_redpath Explanation { Line "{FDC078}Control {9ACDFF}: Attention, engie-bots! You have been REPROGRAMMED FOR MANN CO." Line "{9ACDFF}Now that our own bots turned on us and took over the facility, we're making you, the last remaining {blue}BLU {9ACDFF}bots, BLOW THEM TO PIECES." Line "{9ACDFF}You {red}cannot upgrade buildings{9ACDFF} yet, but we'll get that sorted later." Line "{9ACDFF}Now do what you were built to do: make your bots deploy that bomb!" } InitWaveOutput { Target wave1_spawner Action Trigger } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name "NoEnd" WaitBeforeStarting 9999 } WaveSpawn { Name "wave1_start" WaitBeforeStarting 1 FirstSpawnOutput { Target wave1_start_relay Action FireUser1 } } WaveSpawn { Name "Icon" Support Limited TFBot { Class Pyro ClassIcon pathred } } WaveSpawn { Name "Icon" Support Limited TFBot { Class Pyro ClassIcon blu2_lite } } WaveSpawn { Name "Support 1" Where spawnbot_front_left WaitBeforeStarting 0 TotalCount 1 MaxActive 1 SpawnCount 1 Support Limited TFBot { Template GateBot_Engineer_Pistol } } WaveSpawn { Name "Support 1" Where spawnbot_front_left Where spawnbot_left WaitBeforeStarting 14 WaitBetweenSpawnsAfterDeath 5 TotalCount 11 MaxActive 1 SpawnCount 1 Support Limited TFBot { Template GateBot_Engineer_Pistol } } //Support that brings in the bomb. Should only spawn once gate's capped! WaveSpawn { Name "Support 3" Where spawnbot_left WaitBeforeStarting 1 WaitBetweenSpawnsAfterDeath 5 TotalCount 11 MaxActive 1 SpawnCount 1 Support Limited TFBot { Class Engineer Name "Pistol Engineer" Health 275 WeaponRestrictions SecondaryOnly Attributes DisableDodge ClassIcon scout_pistol_nys Action FetchFlag NoBombUpgrades 1 Tag bomb_carrier // Item "The Galvanized Gibus" VoiceCommand { Delay 4 Cooldown 50 Repeats 3 IfHealthAbove 250 Type "Battle Cry" } VoiceCommand { Delay 6 Cooldown 15 Repeats 0 IfHealthBelow 125 Type "Help" } } } WaveSpawn { Name "Support 2" WaitForAllDead "Support 1" Where spawnbot_front_left Where spawnbot_left WaitBeforeStarting 10 WaitBetweenSpawns 4 TotalCount 1 MaxActive 1 SpawnCount 1 Support Limited DoneOutput { Target redwin_relay Action Trigger } TFBot { Template GateBot_Giant_Engineer_Widowmaker SpawnTemplate lastbotlogic } } //Subwave 1: initial wave of bots; attempt to break first push. //Spawn at _1 spawns. //- Defend: Giant Demoman (no weapon changes) //- Hunt: Sticky Demo + Quick-Fix Medic (max 2 pairs) //- H: Syringe Medic WaveSpawn { Name "wave1a" Where spawnbot_red_front Where spawnbot_red_garage WaitBeforeStarting 0.5 WaitBetweenSpawns 8 TotalCount 8 MaxActive 4 SpawnCount 2 Squad { TFBot { Template T_TFBot_Red_Demoman_Sticky_H } TFBot { Template T_TFBot_Red_Medic_QuickFix } } } WaveSpawn { Name "wave1a2" WaitBeforeStarting 0.5 WaitBetweenSpawns 4 Where spawnbot_red_garage Where spawnbot_red_tankdoor TotalCount 24 MaxActive 8 SpawnCount 2 TFBot { Template T_TFBot_Red_Medic_Syringe_H } } //Door giant, opens up flank part for easier attacking on death. WaveSpawn { Name "wave1a3" Where spawnbot_red_tankdoor TotalCount 1 MaxActive 1 SpawnCount 1 DoneOutput { Target redsidedoor_2 Action Open } TFBot { Template T_TFBot_Red_Giant_Demo_RapidFire Attributes DisableDodge UseMeleeThreatPrioritization 1 NoPushAway 1 ItemAttributes { ItemName "TF_WEAPON_GRENADELAUNCHER" "fire rate bonus" 1 } InterruptAction { Target target_red_front Delay 0 Cooldown 1 Duration 2 IfHealthAbove 2000 } } } WaveSpawn { Name "wave1a_all" WaitForAllSpawned "wave1a" } WaveSpawn { Name "wave1a_all" WaitForAllSpawned "wave1a2" } WaveSpawn { Name "wave1a_disable" WaitForAllSpawned "wave1a_all" FirstSpawnOutput { Target "wave1_start_relay" Action FireUser2 } } //Subwave 2: bomb moved up. Send in bomb attackers. //Spawn at _2 spawns, around gate. //- Bomb: Giant Demoman (ditto) //- H: Armored FaN Scouts //- H: Steakweight Champs WaveSpawn { Name "wave1b1" WaitForAllDead "wave1a3" Where spawnbot_red_gate TotalCount 1 MaxActive 1 SpawnCount 1 FirstSpawnOutput { Target spawnbot_red_gate_prop Action Disable } TFBot { Template T_TFBot_Red_Giant_Demo_RapidFire ItemAttributes { ItemName "TF_WEAPON_GRENADELAUNCHER" "fire rate bonus" 1 } Action FetchFlag } } WaveSpawn { Name "wave1b" WaitForAllDead "wave1b1" Where spawnbot_red_pastgate TotalCount 1 MaxActive 1 SpawnCount 1 TFBot { Template T_TFBot_Red_Giant_Demo_RapidFire ItemAttributes { ItemName "TF_WEAPON_GRENADELAUNCHER" "fire rate bonus" 1 } Action FetchFlag } } WaveSpawn { Name "wave1b2" WaitForAllDead "wave1a" Where spawnbot_red_boxesdoor Where spawnbot_red_pastgate WaitBetweenSpawns 5 TotalCount 12 MaxActive 3 SpawnCount 1 TFBot { Template T_TFBot_Red_Scout_FaN_Armored_H } } WaveSpawn { Name "wave1b2" WaitForAllDead "wave1a2" WaitBeforeStarting 16 Where spawnbot_red_boxesdoor WaitBetweenSpawns 6 TotalCount 16 MaxActive 8 SpawnCount 4 TFBot { Template T_TFBot_Red_Heavy_Champ_Steak_H } } WaveSpawn { Name "wave1b_all" WaitForAllSpawned "wave1b" } WaveSpawn { Name "wave1b_all" WaitForAllSpawned "wave1b2" } WaveSpawn { Name "wave1b_disable" WaitForAllSpawned "wave1b_all" FirstSpawnOutput { Target "wave1_start_relay" Action FireUser3 } } //Subwave 3: bomb nears hatch. Concentrate firepower, station flank defenders, //defend bomb at all costs. //Spawn at hatch. //- B: Giant Burst Carbine Sniper //- H: Sticky Demos (slow fire) //- D: Black Box Soldiers (minigiant, around "bridge", on container) //- D: Giant Demoman (hatch) //- Rest support, H: Whip Soldiers WaveSpawn { Name "wave1c" WaitForAllDead "wave1b" Where spawnbot_hatch WaitBetweenSpawns 18 TotalCount 2 MaxActive 2 SpawnCount 1 TFBot { Template T_TFBot_Red_Giant_Sniper_Carbine } } WaveSpawn { Name "wave1c2" WaitForAllDead "wave1b2" Where spawnbot_hatch WaitBetweenSpawns 5 TotalCount 12 MaxActive 4 SpawnCount 2 TFBot { Template T_TFBot_Red_Demoman_Sticky_B } } WaveSpawn { Name "wave1c3" WaitForAllDead "wave1b" Where spawnbot_hatch TotalCount 2 MaxActive 1 SpawnCount 1 TFBot { Template T_TFBot_Red_Soldier_Bulwark_D InterruptAction { Target "target_red_bridge" Cooldown 2 Duration 2.1 Duration 1 Repeats 0 } } } WaveSpawn { Name "wave1c3" WaitForAllDead "wave1b2" Where spawnbot_hatch TotalCount 2 MaxActive 1 SpawnCount 1 TFBot { Template T_TFBot_Red_Soldier_Bulwark_D InterruptAction { Target "target_red_bridge2" Cooldown 2 Duration 2.1 Duration 1 Repeats 0 } } } WaveSpawn { Name "wave1d" WaitForAllSpawned "wave1b" Where spawnbot_hatch_def TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 250 TFBot { Template T_TFBot_Giant_Demo_RapidFire Attributes DisableDodge Attributes IgnoreFlag BehaviorModifiers Push NoPushAway 1 Tag bot_hatchspawn CharacterAttributes { "force distribute currency on death" 1 "damage force reduction" 0 } AddTemplate RedBot } } WaveSpawn { Name "Icon" Support Limited TFBot { Class Pyro ClassIcon red2_lite } } WaveSpawn { Name "Support" WaitForAllSpawned "wave1c2" Where spawnbot_hatch WaitBetweenSpawns 2 TotalCount 111 MaxActive 5 SpawnCount 1 Support 1 TFBot { Template T_TFBot_Red_Soldier_Whip } } } // WAVE 2 - Other path, new VIPs...with a twist! // Point gets capped to activate VIP. Gate is then capped. VIP escort: blue path // Objective: activate gatebots, capture the gate to get bomb carrier, and deploy the bomb. // Bomb carriers complement engineer's defensiveness with decent bulk, but slow move speed. // So, stuff like charged soldier, giant shotty, high burst damage stuff. // Gatebots will be moderately fast to prevent stalling out. // They won't be too bulky nor deadly, but they won't be useless either. // Stuff like Burst SMG Snipers, Demoknights, Flare Gun variants, that kinda deal. // For this wave: Giant Widowmaker Engineer (after gate) // Gatebots: Burst SMG Sniper, Flare Gun Pyro // Obstacle: bots that can interrupt captures. Fast, kinda strong. // TIMER: 3 minutes to capture point. Timer gets paused after capture. // Path: blue side, red spawn. //Subwave 1 - Blocking capture of the giant. //- Giant Scorch Rain Pyros (covers large area, trickles down hp) //- Force-a-Nature Scouts //- Axtinguisher Pyros //Subwave 2 - Turn attention to gate //- D: Giant Rapid Blast Soldier (starts on point) //- H: Reserve Shooter Pyro //- H: Demo + Quick-Fix Medic //Subwave 3 - Final efforts //- D: Giant Rapid Stunner Soldier (hall / bridge / hatch?) //- B/H: Burst Shotgun Heavy //Support: Marker League Scouts, Brass Beast Heavy Wave { SpawnTemplate { Name "controlpoint_blue" "origin" "-6800 -300 -212" } SpawnTemplate { Name "Teleporter_Blu" "origin" "-6800 -240 -200" } SpawnTemplate wave2props SpawnTemplate wave2starter SpawnTemplate spawn_indicators_blupath SpawnTemplate textualtimer_4mins ItemAttributes { ItemName "Ulti Wrench" "critboost on kill" 1.2 "restore health on kill" 15 "dmg taken increased" 0.85 "move speed bonus" 1.05 } Explanation { Line "{FDC078}Control {9ACDFF}: Good news: turns out there were still {red}3{9ACDFF} unused {blue}giants{9ACDFF} lying around." Line "{9ACDFF}Bad news: they're stuck in the {blue}BLU gate." Line "{9ACDFF}We need to teleport in gatebots to capture it, and fast: we only have [{red}4 minutes{9ACDFF}] before they {red}lock{9ACDFF} the gate." Line "{9ACDFF}Once the gate is secured, use the giants to deploy the bomb!" } InitWaveOutput { Target wave2_spawner Action Trigger } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name "NoEnd" WaitBeforeStarting 9999 } WaveSpawn { Name "Icon" Support Limited TFBot { Class Pyro ClassIcon pathblu } } WaveSpawn { Name "Icon" Support Limited TFBot { Class Pyro ClassIcon blu2_lite } } WaveSpawn { Name "Support" Where spawnbot_red_special Where spawnbot_right WaitBeforeStarting 8 WaitBetweenSpawns 7 TotalCount 6 MaxActive 3 SpawnCount 1 Support 1 RandomChoice { TFBot { Template GateBot_Pyro_Flaregun } TFBot { Template GateBot_Sniper_SMG_Burst } } } WaveSpawn { Name "Support 1" Where spawnbot_right WaitBeforeStarting 8 WaitBetweenSpawnsAfterDeath 5 TotalCount 2 MaxActive 1 SpawnCount 1 Support Limited TFBot { Template T_TFBot_Giant_Engineer_Widowmaker } } WaveSpawn { Name "Support 2" WaitForAllDead "Support 1" Where spawnbot_right WaitBeforeStarting 6 TotalCount 1 MaxActive 1 SpawnCount 1 Support Limited DoneOutput { Target redwin_relay Action Trigger } TFBot { Template T_TFBot_Giant_Engineer_Widowmaker SpawnTemplate lastbotlogic } } //Subwave 1 - Blocking capture of the giant. //- Giant Scorch Rain Pyros (covers large area, trickles down hp) //- Force-a-Nature Scouts //- Axtinguisher Pyros WaveSpawn { Name "wave2a" Where spawnbot_blu_station WaitBetweenSpawnsAfterDeath 4 TotalCount 2 MaxActive 1 SpawnCount 1 FirstSpawnOutput { Target wave2_midwave_opener Action FireUser1 //closes doors so players can't infiltrate past the first part yet } TFBot { Template T_TFBot_Red_Giant_Pyro_ScorchRain InterruptAction { Target "cap_area" Delay 0 Cooldown 4 Duration 5 Repeats 0 } } } WaveSpawn { Name "wave2a2" Where spawnbot_blu_front Where spawnbot_blu_hall Where spawnbot_blu_gate Where spawnbot_blu_tankdoor Where spawnbot_blu_sidehall Where spawnbot_blu_bighall Where spawnbot_hatch WaitBetweenSpawns 2.5 TotalCount 24 MaxActive 8 SpawnCount 2 TFBot { Template T_TFBot_Red_Pyro_Axtinguisher_H } } WaveSpawn { Name "wave2a2" Where spawnbot_blu_front Where spawnbot_blu_hall Where spawnbot_blu_gate Where spawnbot_blu_tankdoor Where spawnbot_blu_sidehall Where spawnbot_blu_bighall Where spawnbot_hatch WaitBetweenSpawns 5 TotalCount 15 MaxActive 3 SpawnCount 3 TFBot { Class Scout Name "Force-a-Nature Scout" Item "The Force-a-Nature" Item "The Bolt Boy" ClassIcon scout_fan DesiredAttackRange 150 Template RedBot_Hunt } } //Subwave 2 - Turn attention to gate //- D: Giant Rapid Blast Soldier (starts on point, spawns in once point is capped) //- H: Reserve Shooter Pyro //- H: Demo + Quick-Fix Medic WaveSpawn { Name "wave2b" WaitBeforeStarting 10 Where spawnbot_blu_gate TotalCount 1 MaxActive 1 SpawnCount 1 TFBot { Template T_TFBot_Red_Giant_Soldier_Spammer_Blast UseMeleeThreatPrioritization 1 InterruptAction { Target "target_blu_gate" Delay 0 Duration 0 Cooldown 5 Repeats 0 } } } WaveSpawn { Name "wave2b2" WaitForAllDead "wave2a2" Where spawnbot_blu_fence Where spawnbot_blu_hall Where spawnbot_blu_gate Where spawnbot_blu_tankdoor Where spawnbot_blu_sidehall Where spawnbot_blu_bighall Where spawnbot_hatch WaitBetweenSpawns 2.5 TotalCount 20 MaxActive 5 SpawnCount 1 TFBot { Template T_TFBot_Red_Pyro_Reserve_H } } WaveSpawn { Name "wave2b3" WaitForAllDead "wave2a2" Where spawnbot_blu_fence Where spawnbot_blu_hall Where spawnbot_blu_gate Where spawnbot_blu_tankdoor Where spawnbot_blu_sidehall Where spawnbot_blu_bighall Where spawnbot_hatch WaitBetweenSpawns 6 TotalCount 10 MaxActive 4 SpawnCount 2 Squad { TFBot { Class Demoman Template RedBot_Hunt } TFBot { Template T_TFBot_Red_Medic_QuickFix } } } //Subwave 3 - Final efforts //- D: Giant Rapid Stunner Soldier (hall / pre-hatch) //- D: Giant Rapid Blast Soldier (hatch) //- B/H: Burst Shotgun Heavy //Support: Marker League Scouts, Brass Beast Heavy WaveSpawn { Name "wave2c" WaitForAllDead "wave2b" Where spawnbot_blu_bighall TotalCount 1 MaxActive 1 SpawnCount 1 DoneOutput { Target spawnbot_blu_bighall* Action Disable } TFBot { Template T_TFBot_Red_Giant_Soldier_Stunner InterruptAction { Target "target_blu_mid" Delay 0 Duration 0 Cooldown 2 Repeats 0 // IfHealthAbove 2400 } } } WaveSpawn { Name "wave2c" WaitForAllDead "wave2b" Where spawnbot_blu_sidehall TotalCount 1 MaxActive 1 SpawnCount 1 DoneOutput { Target spawnbot_blu_sidehall* Action Disable } TFBot { Template T_TFBot_Red_Giant_Soldier_Stunner InterruptAction { Target "target_blu_bridge1" Delay 0 Duration 0 Cooldown 2 Repeats 0 // IfHealthAbove 2400 } } } WaveSpawn { WaitForAllDead "wave2c" StartWaveOutput { Target spawnbot_hatch* Action Enable } } WaveSpawn { Name "wave2c2" Where spawnbot_blu_sidehall Where spawnbot_blu_bighall Where spawnbot_hatch WaitForAllDead "wave2b2" WaitBetweenSpawns 5 TotalCount 24 MaxActive 6 SpawnCount 2 RandomChoice { TFBot { Class Heavyweapons Template RedBot_Hunt Name "Burst Shotgun Heavy" WeaponRestrictions SecondaryOnly ClassIcon heavy_shotgun_red_burst ItemAttributes { ItemName "TF_WEAPON_SHOTGUN_HWG" "clip size penalty" 0.5 "damage penalty" 0.66 "auto fires full clip" 1 "auto fires when full" 1 "fire rate bonus" 0.2 "faster reload rate" 1.3 } } TFBot { Class Heavyweapons Template RedBot_Hunt Name "Burst Shotgun Heavy" WeaponRestrictions SecondaryOnly ClassIcon heavy_shotgun_red_burst ItemAttributes { ItemName "TF_WEAPON_SHOTGUN_HWG" "clip size penalty" 0.5 "damage penalty" 0.66 "auto fires full clip" 1 "auto fires when full" 1 "fire rate bonus" 0.2 "faster reload rate" 1.3 } } TFBot { Class Heavyweapons Template RedBot_Bomb Name "Burst Shotgun Heavy" WeaponRestrictions SecondaryOnly ClassIcon heavy_shotgun_red_burst ItemAttributes { ItemName "TF_WEAPON_SHOTGUN_HWG" "clip size penalty" 0.5 "damage penalty" 0.66 "auto fires full clip" 1 "auto fires when full" 1 "fire rate bonus" 0.2 "faster reload rate" 1.3 } } } } WaveSpawn { Name "wave2d" Where spawnbot_hatch_def WaitForAllSpawned "wave2b" WaitBeforeStarting 4 TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 250 TFBot { Template T_TFBot_Red_Giant_Soldier_Spammer_Blast Attributes DisableDodge Attributes IgnoreFlag BehaviorModifiers Push NoPushAway 1 Tag bot_hatchspawn CharacterAttributes { "force distribute currency on death" 1 "damage force reduction" 0 } } } WaveSpawn { Name "Icon" Support Limited TFBot { Class Pyro ClassIcon red2_lite } } WaveSpawn { Name "Support" Where spawnbot_blu_sidehall Where spawnbot_blu_bighall Where spawnbot_hatch WaitForAllSpawned "wave2b2" WaitBeforeStarting 5 WaitBetweenSpawns 14 TotalCount 24 MaxActive 2 SpawnCount 2 Support 1 TFBot { Template T_TFBot_Red_Scout_Sandman_FastCharge Name "Marker League Scout" ItemAttributes { ItemName "The Sandman" "mark for death" 1 } } } WaveSpawn { Name "Support" Where spawnbot_blu_sidehall Where spawnbot_blu_bighall Where spawnbot_hatch WaitForAllDead "wave2b2" WaitBetweenSpawns 8 TotalCount 24 MaxActive 2 SpawnCount 1 Support 1 TFBot { Class Heavyweapons Item "The Brass Beast" Name "Brass Beast Heavy" ClassIcon heavy_brass_nys Template RedBot_Bomb } } } // WAVE 3 - Capturing the gate, and deploying the bomb. // Gate capture, VIP escort: red path, blue spawn // Objective: Using gatebot commons to capture the gate (should be less frustrating with their speed). // Deploy with giants (more powerful). // Players have access to level 2 buildings now, up power level of bots a bit. // Obstacle: bots killing gatebots, preventing capture. Use bulky bots to prevent cap. // Gatebots: Soda Popper Scouts // Bombbots: Giant Burst Fire Soldier //Subwave 1: stopping them in their tracks //- D: Giant Burst Direct Soldier + Uber Medic (delay) //- H: Laser Heavies //Subwave 2: blocking the capture //- D: Giant Fireball Pyro ("flares" that use light homing and fireball projectile model) //- H: Flare Rain Pyro (minigiant) //- H: Combo Pyro //Subwave 3: final capture block attempt / giant killing mode //- B: Giant Pyro (attempts to get in excessively close) + Blast Vaccinator Medic //- D: Giant Healing Soldier (attempts to block) //- B: Deflector Heavy //- H: Combo Pyro //- Support: Uber Canteen Spy (yes I know), Syringe Medics Wave { SpawnTemplate wave3props SpawnTemplate wave3starter SpawnTemplate spawn_indicators_redpath SpawnTemplate textualtimer_4mins ItemAttributes { ItemName "Ulti Wrench" "critboost on kill" 1.4 "restore health on kill" 20 "dmg taken increased" 0.8 "move speed bonus" 1.1 } Explanation { Line "{FDC078}Control {9ACDFF}: Excellent. We've got more gatebots functional again." Line "{9ACDFF}With these, you can capture the {red}RED gate{9ACDFF} to bring the bomb forward." Line "{9ACDFF}Once that's done, use the remaining {blue}3 giants{9ACDFF} to deploy the bomb!" Line "{9ACDFF}However, you must act quickly. [{red}4 minutes{9ACDFF}] is all we have before they {red}lock{9ACDFF} the gate!" } InitWaveOutput { Target wave3_spawner Action Trigger } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name "NoEnd" WaitBeforeStarting 9999 } WaveSpawn { Name "Icon" Support Limited TFBot { Class Pyro ClassIcon pathred } } WaveSpawn { Name "Icon" Support Limited TFBot { Class Pyro ClassIcon blu2_lite } } // Gatebots: Soda Popper Scouts // Bombbots: Giant Burst Fire Soldier WaveSpawn { Name "Support 1" Where spawnbot_front_left Where spawnbot_left WaitBeforeStarting 1 WaitBetweenSpawns 5 TotalCount 18 MaxActive 3 SpawnCount 1 Support 1 TFBot { Template GateBot_Scout_Popper } } WaveSpawn { Name "Support 2" Where spawnbot_left TotalCount 2 MaxActive 1 SpawnCount 1 Support Limited TFBot { Template T_TFBot_Giant_Soldier_Spammer_Reload ClassIcon soldier_burstfire_crit } } WaveSpawn { Name "Support 3" WaitForAllDead "Support 2" Where spawnbot_left TotalCount 1 MaxActive 1 SpawnCount 1 Support Limited DoneOutput { Target redwin_relay Action Trigger } TFBot { Template T_TFBot_Giant_Soldier_Spammer_Reload ClassIcon soldier_burstfire_crit SpawnTemplate lastbotlogic } } //Subwave 1: stopping them in their tracks //- D: Giant Burst Direct Soldier + Uber Medic (delay) //- H: Laser Heavies WaveSpawn { Name "wave3a" Where spawnbot_red_garage TotalCount 4 MaxActive 2 SpawnCount 2 DoneOutput { Target wave3_midwave_opener Action FireUser1 } Squad { TFBot { Template T_TFBot_Red_Giant_Soldier_Spammer_Reload Name "Giant Burst Direct Soldier" Item "The Direct Hit" ItemAttributes { ItemName "The Direct Hit" "fire rate bonus" 0.1 "projectile speed increased" 1.1 //more or less 60% slower "faster reload rate" 0.6 "clip size upgrade atomic" 5 } CharacterAttributes { "move speed bonus" 0.5 //somehow this doesn't have it???? } InterruptAction { Target target_red_front Delay 0.1 Duration 2 Cooldown 1 Repeats 0 IfHealthAbove 2400 } } TFBot { Template T_TFBot_Red_Medic_SlowRecharge ItemAttributes { ItemName "TF_WEAPON_MEDIGUN" "uber duration bonus" -3 } } } } WaveSpawn { Name "wave3a2" Where spawnbot_red_garage Where spawnbot_red_front Where spawnbot_red_pastgate Where spawnbot_red_boxesdoor Where spawnbot_hatch WaitBetweenSpawns 4 TotalCount 24 MaxActive 8 SpawnCount 1 TFBot { Template T_TFBot_Red_Heavy_Laser_H } } //Subwave 2: blocking the capture //- D: Giant Fireball Pyro ("flares" that use light homing and fireball projectile model) + uber med + flare rain //- H: Flare Rain Pyro (minigiant) //- H: Combo Pyro WaveSpawn { Name "wave3b" //NB: this bot spawns at the gate immediately WaitBeforeStarting 1 Where spawnbot_red_gate TotalCount 4 MaxActive 4 SpawnCount 4 Squad { TFBot { Template T_TFBot_Red_Giant_Pyro_Fireball Tag bot_gatebot //is this gonna work??? no idea! // InterruptAction // { // Target target_red_gate // Delay 0.1 // Duration 2 // Cooldown 1 // Repeats 0 // } } TFBot { Template T_TFBot_Red_Medic_SlowRecharge } TFBot { Template T_TFBot_Red_Pyro_Flare_Rain_H } TFBot { Template T_TFBot_Red_Pyro_Flare_Rain_H } } } WaveSpawn { Name "wave3b" //NB: this bot DOES NOT spawn immediately WaitForAllDead "wave3a" Where spawnbot_red_pastgate TotalCount 2 MaxActive 2 SpawnCount 1 DoneOutput { Target wave3_midwave_opener Action FireUser2 } TFBot { Template T_TFBot_Red_Giant_Pyro_Fireball } } WaveSpawn { Name "wave3b2" WaitForAllDead "wave3a2" Where spawnbot_red_pastgate Where spawnbot_red_boxesdoor Where spawnbot_hatch WaitBetweenSpawns 4 TotalCount 12 MaxActive 3 SpawnCount 1 TFBot { Template T_TFBot_Red_Pyro_Flare_Rain_H } } WaveSpawn { Name "wave3b2" WaitForAllDead "wave3a2" Where spawnbot_red_pastgate Where spawnbot_red_boxesdoor Where spawnbot_hatch WaitBetweenSpawns 6 TotalCount 24 MaxActive 6 SpawnCount 2 TFBot { Template T_TFBot_Red_Pyro_Combo_H } } //Subwave 3: final capture block attempt / giant killing mode //- B: Giant Burst Fire Soldier (attempts to get in excessively close) + Blast Vaccinator Medic //- D: Chief Force-a-Nature Scout (attempts to knock back) //- B: Deflector Heavy //- H: Combo Pyro WaveSpawn { Name "wave3c" Where spawnbot_hatch TotalCount 2 MaxActive 2 SpawnCount 2 Squad { TFBot { Template T_TFBot_Red_Giant_Soldier_Spammer_Reload DesiredAttackRange 100 AddTemplate RedBot_Bomb } TFBot { Template T_TFBot_Red_Medic_Vacc_Blast } } } WaveSpawn { Name "wave3c2" WaitForAllSpawned "wave3b" Where spawnbot_hatch_alt TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 250 TFBot { Template T_TFBot_Red_Chief_Scout_FaN Tag bot_hatchspawn } } WaveSpawn { Name "Icon" Support Limited TFBot { Class Pyro ClassIcon red2_lite } } //- Support: Uber Canteen Spy (yes I know), Syringe Medics WaveSpawn { Name "Support" WaitForAllSpawned "wave3b2" Where spawnbot_hatch WaitBetweenSpawns 5 TotalCount 111 MaxActive 4 SpawnCount 1 Support 1 TFBot { Template T_TFBot_Red_Medic_Syringe_H } } } //WAVE 4 - The Obligatory Tank Wave. // Objective: escort a tank to win the round. // Obstacle: blockade around the blu path, red path is 100% off-limits. // Tank-targeting bots will spawn. // Tank-healing bots will also spawn. Tank will slow down with health. // Standing close to Tank will also heal it a little. // Path: blue side. // LOGIC: tank stops before trigger that opens door; kill bots to proceed. //Subwave 1: first area, before entering BLU side, up to door //- Tank: Giant Backup Equalizer Soldier //- T: Carbinewacka Snipers //- H: Loch-n-Load Demos //Subwave 2: after door, moving up to gate; //- T: Soda Scouts //- T: Minigiant Fury Pyros //- H: Giant Tri-Burst Panic Pyro (kill to proceed) //Subwave 3: last section! long stretch, excellent for... //- T: Giant Buff Bison Soldier //- Support, T: Rapid/Burst/Crit Bison Soldier //- Support, H: Loch-n-Load Demos Wave { SpawnTemplate wave4props SpawnTemplate wave4starter SpawnTemplate spawn_indicators_blupath SpawnTemplate textualtimer_4mins ItemAttributes { ItemName "Ulti Wrench" "critboost on kill" 1.6 "restore health on kill" 25 "dmg taken increased" 0.75 "move speed bonus" 1.15 } Explanation { Line "{FDC078}Control {9ACDFF}: Some kind of signal is interfering with our bots." Line "{9ACDFF}We hastily slammed a few functional ones together, but their base circuits are fried." Line "{9ACDFF}You'll have to rely on this {red}Tank{9ACDFF} to defeat this wave." Line "{9ACDFF}However, it m- not long be-" Line "{FF1111}** SIGNAL TERMINATED **" } InitWaveOutput { Target wave4_spawner Action Trigger } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name "NoEnd" WaitBeforeStarting 9999 } WaveSpawn { Name "Icon" Support Limited TFBot { Class Pyro ClassIcon pathblu } } WaveSpawn { Name "Icon" Support Limited TFBot { Class Pyro ClassIcon blu2_lite } } WaveSpawn { Name "Support 1" Where spawnbot_front_left Where spawnbot_right WaitBeforeStarting 10 WaitBetweenSpawnsAfterDeath 10 TotalCount 1 MaxActive 1 SpawnCount 1 Support 1 TFBot { Template T_TFBot_Pyro_BigFire_T } } WaveSpawn { Name "Tank" TotalCount 1 WaitBeforeStarting 0.5 TotalCurrency 350 DoneOutput { Target redwin_relay Action Trigger } Tank { Health 40000 Name "w4_tank" Speed 75 StartingPathTrackNode "boss_path_1" SpawnTemplate TankDynamicSpeed SpawnTemplate TankRepair SpawnTemplate TankHints OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } //Subwave 1: first area, before entering BLU side, up to door //- Tank: Giant Backup Equalizer Soldier //- T: Carbinewacka Snipers //- H: Loch-n-Load Demos WaveSpawn { Name "wave4a" Where spawnbot_blu_station Where spawnbot_blu_front Where spawnbot_blu_hall Where spawnbot_blu_fence Where spawnbot_blu_gate Where spawnbot_blu_sidehall Where spawnbot_blu_bridge Where spawnbot_hatch WaitBeforeStarting 1 TotalCount 2 MaxActive 1 SpawnCount 1 TFBot { Template T_TFBot_Red_Giant_Soldier_Equalizer_Backup AddTemplate AttackTank_Only } } WaveSpawn { Name "wave4a2" Where spawnbot_blu_station Where spawnbot_blu_front Where spawnbot_blu_hall Where spawnbot_blu_fence Where spawnbot_blu_gate Where spawnbot_blu_sidehall Where spawnbot_blu_bridge Where spawnbot_hatch WaitBeforeStarting 2 WaitBetweenSpawns 3 TotalCount 18 MaxActive 6 SpawnCount 2 TFBot { Template T_TFBot_Red_Sniper_Carbinewacka AddTemplate AttackTank } } WaveSpawn { Name "wave4a3" Where spawnbot_blu_station Where spawnbot_blu_front Where spawnbot_blu_hall Where spawnbot_blu_fence Where spawnbot_blu_gate Where spawnbot_blu_sidehall Where spawnbot_blu_bridge Where spawnbot_hatch WaitBeforeStarting 2 WaitBetweenSpawns 6 TotalCount 12 MaxActive 4 SpawnCount 2 TFBot { Template T_TFBot_Red_Demoman Name "Loch-n-Load Demo" Item "The Loch-n-Load" Item "Scotch Bonnet" ClassIcon demo_loch_nys ItemAttributes { ItemName "The Loch-n-Load" "projectile speed increased" 1.05 } } } //Subwave 2: after door, moving up to gate; //- T: Soda Scouts //- T: Minigiant Fury Pyros //- H: Giant Tri-Burst Panic Pyro WaveSpawn { Name "wave4b" WaitForAllDead "wave4a" Where spawnbot_blu_hall Where spawnbot_blu_fence Where spawnbot_blu_gate Where spawnbot_blu_sidehall Where spawnbot_blu_bridge Where spawnbot_hatch WaitBeforeStarting 2 WaitBetweenSpawns 6 TotalCount 12 MaxActive 3 SpawnCount 1 TFBot { Template T_TFBot_Red_Pyro_Fury_T } } WaveSpawn { Name "wave4b2" WaitForAllDead "wave4a2" Where spawnbot_blu_hall Where spawnbot_blu_fence Where spawnbot_blu_gate Where spawnbot_blu_sidehall Where spawnbot_blu_bridge Where spawnbot_hatch WaitBeforeStarting 2 WaitBetweenSpawns 3 TotalCount 24 MaxActive 6 SpawnCount 3 TFBot { Template T_TFBot_Red_Scout_ColaPop_T } } WaveSpawn { Name "wave4b3" WaitForAllDead "wave4a3" Where spawnbot_blu_fence Where spawnbot_blu_gate Where spawnbot_blu_sidehall Where spawnbot_blu_bridge Where spawnbot_hatch WaitBetweenSpawns 12 TotalCount 2 MaxActive 2 SpawnCount 1 TFBot { Template T_TFBot_Red_Giant_Pyro_PanicAttack } } //Subwave 3: last section! long stretch, excellent for... //- T: Giant Buff Bison Soldier //- Support, T: Rapid/Burst/Crit Bison Soldier //- Support, H: Loch-n-Load Demos WaveSpawn { Name "wave4c" Where spawnbot_blu_bridge Where spawnbot_hatch WaitBetweenSpawns 6 TotalCount 4 MaxActive 2 SpawnCount 1 TFBot { Template T_TFBot_Red_Giant_Soldier_Bison_Buff AddTemplate AttackTank_Only } } WaveSpawn { Name "Icon" Support Limited TFBot { Class Pyro ClassIcon red2_lite } } WaveSpawn { Name "wave4c2" WaitForAllDead "wave4b2" Where spawnbot_blu_bridge Where spawnbot_hatch WaitBeforeStarting 2 WaitBetweenSpawns 8 TotalCount 24 MaxActive 6 SpawnCount 3 Support 1 RandomChoice { TFBot { Template T_TFBot_Red_Soldier_Bison_Burst } TFBot { Template T_TFBot_Red_Soldier_Bison_Rapid } TFBot { Template T_TFBot_Red_Soldier_Bison_Burst } TFBot { Template T_TFBot_Red_Soldier_Bison_Rapid } TFBot { Template T_TFBot_Red_Soldier_Bison_Crit } } } } //WAVE 5 - To reinvent a saviour //Objective: Kill the FR-33/M4-N. //Obstacle: paths are off-limits. Starting area is fighting area. //Lose cond: run out of time - and let it be TIGHT. //Ally bots: Milk 'n Mark Scouts, //Phase 1: A legendary weapon (Crowbar only) //Phase 2: A little more gun (Crowbar/Shotgun) //Phase 3: The prototype's prototype! (Tau Cannon) //Pre-boss: //Enemy bots, only 2 brief subwaves, with subsequent support: //Subwave 1 //- Giant Homing RPG Soldier + uber medics (homing + accel) //- Armored SMG Sniper //- Revolver Spy //After boss is below 24k (66%): //Subwave 2 //- Jeremy, Arrogant Attacker (miniboss; Scout with (sigmod) upgrades, damage boost, reload rate, resists, regen) //- Iron-clad Demoman (iron bomber, lightly armored) //BGM: https://www.youtube.com/watch?v=u6IJnyZVbAc HL:A - Anti-Citizen //https://www.youtube.com/watch?v=jGqOG_gH3q4 - Arena Finale //Support: Gluon Pyros, RPG Soldier Wave { SpawnTemplate wave5props SpawnTemplate wave5starter SpawnTemplate textualtimer_4mins ItemAttributes { ItemName "Ulti Wrench" "critboost on kill" 1.8 "restore health on kill" 30 "dmg taken increased" 0.7 "move speed bonus" 1.2 } Explanation { Line "{FDC078}Control {9ACDFF}: Pardon the brief interruption. It has been resolved now." Line "{9ACDFF}The final enemy forces are approaching, and they are deploying a {F37B21}SPECIAL UNIT." Line "{9ACDFF}It appears human defectors have joined forces with them. Eliminate them as well." Line "{9ACDFF}Victory is in sight. Do not fail." } InitWaveOutput { Target wave5_spawner Action Trigger } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name "NoEnd" WaitBeforeStarting 9999 } WaveSpawn { Name "Icon" Support Limited TFBot { Class Pyro ClassIcon blu2_lite } } WaveSpawn { Name "Support" Where spawnbot_red_special WaitBetweenSpawns 8 TotalCount 7 MaxActive 2 SpawnCount 1 Support 1 TFBot { Template T_TFBot_Scout_MilkMark } } WaveSpawn { Name "Support" Where spawnbot_blu_special WaitBetweenSpawns 12 TotalCount 7 MaxActive 2 SpawnCount 1 Support 1 TFBot { Class Heavy Name "Natascha Heavy" Action Mobber Item "Natascha" ClassIcon heavy_natascha_nys ItemAttributes { ItemName "Natascha" "slow enemy on hit" 0 "slow enemy on hit major" 0.5 } } } WaveSpawn { Name "wave5a" Where spawnbot_blu_station TotalCount 6 MaxActive 4 //this is extremely clever trust me SpawnCount 3 Squad { TFBot { Template T_TFBot_Red_Giant_Soldier_RPG } TFBot { Template T_TFBot_Red_Medic_SlowRecharge } TFBot { Template T_TFBot_Red_Medic_SlowRecharge } } } WaveSpawn { Name "wave5a2" Where spawnbot_blu_fence Where spawnbot_blu_hall TotalCount 25 MaxActive 5 SpawnCount 5 TFBot { Template T_TFBot_Red_Spy_Revolver_H } } WaveSpawn { Name "wave5a2" Where spawnbot_blu_fence Where spawnbot_blu_hall WaitBetweenSpawns 4 TotalCount 15 MaxActive 3 SpawnCount 1 TFBot { Template T_TFBot_Red_Sniper_SMG_Armored } } WaveSpawn { WaitForAllSpawned "wave5a2" DoneOutput { Target wave5_starter_alt Action FireUser1 } } WaveSpawn { Name "The Boss" WaitForAllSpawned "wave5a" StartWaveWarningSound "HLAlyx_AntiCitizen.mp3" FirstSpawnWarningSound "vo/mvm/norm/engineer_mvm_dominationengineer_mvm01.mp3" //what even is this naming WaitBeforeStarting 15 Where spawnbot_blu_station TotalCount 1 MaxActive 1 SpawnCount 1 TotalCurrency 500 DoneOutput { Target wave5_starter Action $FireUser5 } TFBot { Template T_TFBot_Red_Chief_Freeman } } WaveSpawn { Name "wave5b" WaitForAllDead "wave5a" WaitForAllSpawned "wave5a2" DoneMessage "{FBECCB}Jeremy, Arrogant Attacker left the game (Disconnect by user.)" FirstSpawnWarningSound "vo\scout_dominationeng03.mp3" DoneWarningSound "vo\scout_invinciblenotready07.mp3" WaitBeforeStarting 4 Where spawnbot_blu_station TotalCount 1 MaxActive 1 SpawnCount 1 TFBot { Template T_TFBot_Red_Player_Scout } } WaveSpawn { Name "wave5b2" WaitForAllDead "wave5a2" WaitBeforeStarting 4 WaitBetweenSpawns 2.5 Where spawnbot_blu_fence Where spawnbot_blu_hall TotalCount 18 MaxActive 6 SpawnCount 1 TFBot { Template T_TFBot_Red_Demoman_IronClad } } WaveSpawn { Name "Icon" Support Limited TFBot { Class Pyro ClassIcon red2_lite } } WaveSpawn { Name "Support" WaitForAllSpawned "wave5b2" Where spawnbot_blu_fence Where spawnbot_blu_hall WaitBetweenSpawns 5 TotalCount 10 MaxActive 3 SpawnCount 1 Support 1 TFBot { Template T_TFBot_Red_Pyro_Gluon } } WaveSpawn { Name "wave5_alldead" WaitForAllDead "wave5a" } WaveSpawn { Name "wave5_alldead" WaitForAllDead "wave5a2" } WaveSpawn { Name "wave5_alldead" WaitForAllDead "wave5b" } WaveSpawn { Name "wave5_alldead" WaitForAllDead "wave5b2" } WaveSpawn { Name "wave5_alldead" WaitForAllDead "The Boss" } WaveSpawn { Name "wave5_over" WaitForAllDead "wave5_alldead" FirstSpawnOutput { Target bots_win Action RoundWin } } } //WAVE 6 - The grand reversal! //Objective: Kill...destroy...PROTECT the Titan! //Obstacle: Threats teleport in from all paths! //Subwave 1 - Building bots //- Giant Dispenser Heavy //- Mobile Wrangler Engineer //- Flare Rain Pyros //Subwave 2 - Power threats that were once your allies! //- Giant Barrage Soldier //- Soda Popper Scout //- Milk 'n Mark Scouts (try to stick with the soldier to help snipe) //Subwave 3 - Exploding blimps! //- Blimps; deal damage on reaching cap point! //- Giant King Demo + Rapid Fire Soldier //Subwave 4 - Counter-boss! //- Chief Milk-splosion Demo //- Chief Overclock Heavy - gets overheated when taking enough damage, then becomes extra vulnerable //also does the fancy weapon mimic thing :3 //Support: Player Buster, Widowmaker Engineer Wave { SpawnTemplate "Teleporter_w6" SpawnTemplate "wave6props" SpawnTemplate "wave6boss" Explanation { Line "{FDC078}Control {9ACDFF}: Destroy. Destroy. Destroy." } InitWaveOutput { Target wave6_spawner Action Trigger } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { FirstSpawnOutput { Target boss_start_relay Action Trigger } } WaveSpawn { Name "MainBoss" WaitBeforeStarting 2 Where spawnbot_hatch_def TotalCount 1 MaxActive 1 SpawnCount 1 DoneOutput { Target boss_start_relay Action FireUser2 } TFBot { Template Titan_Yiresa //$0 Tag bot_hatchspawn Tag bot_giant } } WaveSpawn { Name "SideBoss" WaitBeforeStarting 15 WaitBetweenSpawnsAfterDeath 40 //Ludicrous respawn time, but can't buy back in. Where RedSpawn TotalCount 1 MaxActive 1 SpawnCount 1 Support 1 TFBot { Template T_TFBot_Red_Player_Heavy //$1 Tag bot_giant } } WaveSpawn { Name "Icon" Support Limited TFBot { Class Pyro ClassIcon blu2_lite //$2 } } WaveSpawn { Name "NoEnd" WaitBeforeStarting 9999 } //Subwave 1 - Building bots //- Giant Dispenser Heavy //- Mobile Wrangler Engineer //- Flare Rain Pyros WaveSpawn { Name "wave6a" WaitBeforeStarting 17 FirstSpawnOutput { Target wave6_spawner Action FireUser1 } Where spawnbot_mid_special Where spawnbot_blu_special WaitBetweenSpawns 20 TotalCount 3 MaxActive 3 SpawnCount 1 Support Limited TFBot { Template T_TFBot_Giant_Heavy_Dispenser //$3 Tag bot_giant } } WaveSpawn { Name "wave6a2" WaitBeforeStarting 18 Where spawnbot_blu_special Where spawnbot_mid_special WaitBetweenSpawns 5 TotalCount 8 MaxActive 2 SpawnCount 1 Support Limited TFBot { Template T_TFBot_Pyro_BigFire_T //$4 Tag bot_giant } } WaveSpawn { Name "wave6a3" WaitBeforeStarting 18 Where spawnbot_blu_special Where spawnbot_mid_special WaitBetweenSpawns 7 TotalCount 16 MaxActive 4 SpawnCount 4 Support Limited TFBot { Template T_TFBot_Pyro_Flare_Rain //$5 } } //Subwave 2 - Power threats that were once your allies! //- Giant Barrage Soldier //- Soda Popper Scout //- Milk 'n Mark Scouts WaveSpawn { Name "wave6b" WaitForAllDead "wave6a" Where spawnbot_red_special Where spawnbot_mid_special WaitBetweenSpawns 12 TotalCount 4 MaxActive 2 SpawnCount 1 Support Limited TFBot { Template T_TFBot_Giant_Soldier_Barrage //$6 Tag bot_giant } } WaveSpawn { Name "wave6b2" WaitForAllDead "wave6a2" Where spawnbot_red_special WaitBetweenSpawns 5 TotalCount 15 MaxActive 3 SpawnCount 3 Support Limited TFBot { Template T_TFBot_Scout_Popper //$7 Tag bot_giant } } WaveSpawn { Name "wave6b2" WaitForAllDead "wave6a3" Where spawnbot_mid_special WaitBetweenSpawns 5 TotalCount 50 MaxActive 10 SpawnCount 5 Support Limited TFBot { Template T_TFBot_Scout_MilkMark //$8 Tag bot_giant } } //Subwave 3 - Exploding blimps! //- Blimps; deal damage on reaching cap point! //- Giant King Demo + Rapid Fire Soldier WaveSpawn { Name "wave6c" WaitForAllDead "wave6b" WaitBeforeStarting 0 TotalCount 1 Support Limited Tank { Health 10000 Name "tankboss" //$9 Speed 60 Skin 1 //finals ClassIcon blimp2_lite StartingPathTrackNode "blimp_path_red_1" SpawnTemplate BlimpExplode_Red DisableSmokestack 1 //honestly idk what this does but I'm gonna presume it's needed MaxTurnRate 35 Model "models/bots/boss_bot/boss_blimp.mdl" Gravity 0 //prevents it from yeeting itself down RotatePitch 0 //prevents it from turning upwards DisableTracks 1 //prevents its ghooooost tracks from making noise DisableChildModels 1 //HOPEFULLY prevents the bomb from sticking out EngineLoopSound "npc\combine_gunship\dropship_engine_distant_loop1.wav" PingSound "npc\combine_gunship\ping_search.wav" } } WaveSpawn { Name "wave6c" WaitForAllDead "wave6b" WaitBeforeStarting 10 TotalCount 1 Support Limited Tank { Health 10000 Name "tankboss" Speed 60 Skin 1 //finals ClassIcon blimp2_lite StartingPathTrackNode "blimp_path_blue_1" SpawnTemplate BlimpExplode_Blue DisableSmokestack 1 //honestly idk what this does but I'm gonna presume it's needed MaxTurnRate 35 Model "models/bots/boss_bot/boss_blimp.mdl" Gravity 0 //prevents it from yeeting itself down RotatePitch 0 //prevents it from turning upwards DisableTracks 1 //prevents its ghooooost tracks from making noise DisableChildModels 1 //HOPEFULLY prevents the bomb from sticking out EngineLoopSound "npc\combine_gunship\dropship_engine_distant_loop1.wav" PingSound "npc\combine_gunship\ping_search.wav" } } WaveSpawn { Name "wave6c" WaitForAllDead "wave6b2" WaitBeforeStarting 0 Where spawnbot_red_special TotalCount 4 MaxActive 4 SpawnCount 4 Support Limited Squad { TFBot { Template T_TFBot_Giant_Demo_King //$10 } TFBot { Template T_TFBot_Soldier_Spammer //$11 } TFBot { Template T_TFBot_Soldier_Spammer } TFBot { Template T_TFBot_Soldier_Spammer } } } WaveSpawn { Name "wave6c" WaitForAllDead "wave6b2" WaitBeforeStarting 1.5 Where spawnbot_mid_special TotalCount 4 MaxActive 4 SpawnCount 4 Support Limited Squad { TFBot { Template T_TFBot_Giant_Demo_King } TFBot { Template T_TFBot_Soldier_Spammer } TFBot { Template T_TFBot_Soldier_Spammer } TFBot { Template T_TFBot_Soldier_Spammer } } } WaveSpawn { Name "wave6c" WaitForAllDead "wave6b2" WaitBeforeStarting 3 Where spawnbot_blu_special TotalCount 4 MaxActive 4 SpawnCount 4 Support Limited Squad { TFBot { Template T_TFBot_Giant_Demo_King } TFBot { Template T_TFBot_Soldier_Spammer } TFBot { Template T_TFBot_Soldier_Spammer } TFBot { Template T_TFBot_Soldier_Spammer } } } //Subwave 4 - Counter-bosses! //- Chief Milk-splosion Demo //- Chief Overheat Heavy - gets overheated when taking enough damage, then becomes extra vulnerable //also does the fancy weapon mimic thing :3 WaveSpawn { Name "wave6d" WaitForAllDead "wave6c" Where spawnbot_blu_special TotalCount 1 MaxActive 1 SpawnCount 1 Support Limited TFBot { Template T_TFBot_Chief_Demo_Milky //2: $0 Action Mobber Tag bot_giant } } WaveSpawn { Name "wave6d" WaitForAllDead "wave6c" WaitBeforeStarting 3 Where spawnbot_mid_special TotalCount 1 MaxActive 1 SpawnCount 1 Support Limited TFBot { Template T_TFBot_Chief_Heavy_Overheat //2: $1 Action Mobber Tag bot_giant } } WaveSpawn { Name "Support" WaitForAllSpawned "SideBoss" Where spawnbot_red_special Where spawnbot_mid_special Where spawnbot_blu_special WaitBetweenSpawns 12 TotalCount 10 MaxActive 2 SpawnCount 2 Support 1 TFBot { Template T_TFBot_Engineer_Widowmaker //2: $2 Tag bot_giant } } WaveSpawn { Name "Support" WaitForAllDead "wave6c" Where spawnbot_red_special Where spawnbot_mid_special Where spawnbot_blu_special WaitBetweenSpawns 12 TotalCount 10 MaxActive 10 SpawnCount 5 Support 1 TFBot { Template T_TFBot_Engineer_Widowmaker //2: $2 Tag bot_giant } } WaveSpawn { Name "Support" WaitForAllSpawned "SideBoss" Where spawnbot_red_special Where spawnbot_mid_special Where spawnbot_blu_special WaitBeforeStarting 30 WaitBetweenSpawnsAfterDeath 45 TotalCount 10 MaxActive 1 SpawnCount 1 Support 1 TFBot { Template T_TFBot_Demo_PlayerBuster //2: $3 Tag bot_giant } } WaveSpawn { WaitForAllDead "wave6d" FirstSpawnOutput { Target player_win_relay Action Trigger } } } // Wave // { // SpawnTemplate "Teleporter_testing" // InitWaveOutput // { // Target wave5_spawner // Action Trigger // } // StartWaveOutput // { // Target wave_start_relay // Action Trigger // } // DoneOutput // { // Target wave_finished_relay // Action Trigger // } // WaveSpawn // { // Name "NoEnd" // WaitBeforeStarting 9999 // } // WaveSpawn // { // Name "Enabler" // WaitBeforeStarting 1 // FirstSpawnOutput // { // Target spawnbot_blu_special // Action Enable // } // } // WaveSpawn // { // Name "Enabler" // WaitBeforeStarting 1 // FirstSpawnOutput // { // Target spawnbot_red_special // Action Enable // } // } // WaveSpawn // { // Name "Enabler" // WaitBeforeStarting 1 // FirstSpawnOutput // { // Target spawnbot_mid_special // Action Enable // } // } // WaveSpawn // { // Name "wave6a" // WaitBeforeStarting 5 // Where spawnbot_blu_special // TotalCount 1 // MaxActive 1 // SpawnCount 1 // TFBot // { // Template T_TFBot_Giant_Heavy_Dispenser // Tag bot_giant // } // } // WaveSpawn // { // Name "wave6a" // WaitBeforeStarting 10 // Where spawnbot_mid_special // TotalCount 1 // MaxActive 1 // SpawnCount 1 // TFBot // { // Template T_TFBot_Giant_Heavy_Dispenser //$3 // Tag bot_giant // } // } // WaveSpawn // { // Name "wave6a" // WaitBeforeStarting 15 // Where spawnbot_red_special // TotalCount 1 // MaxActive 1 // SpawnCount 1 // TFBot // { // Template T_TFBot_Giant_Heavy_Dispenser // Tag bot_giant // } // } // WaveSpawn // { // Name "wave6b2" // WaitBeforeStarting 5 // Where spawnbot_red_special // Where spawnbot_mid_special // Where spawnbot_blu_special // WaitBetweenSpawns 5 // TotalCount 50 // MaxActive 12 // SpawnCount 3 // Support Limited // RandomChoice // { // TFBot // { // Template T_TFBot_Pyro_Flare_Rain //$8 // Tag bot_giant // } // TFBot // { // Template T_TFBot_Pyro_BigFire_T // } // } // } // } }