#base robot_giant.pop #base robot_standard.pop WaveSchedule { StartingCurrency 5000 RespawnWaveTime 3 CanBotsAttackWhileInSpawnRoom no FixedRespawnWaveTime Yes EventPopfile Halloween CustomUpgradesFile mvm_upgrades_tomboy3.txt PointTemplates { CustomCanteensSetup { OnSpawnOutput { Target "@c@!activator" Action "$SetProp$m_usNumCharges" Param 0 Delay 0 } OnSpawnOutput { Target "!activator" Action "$SetVar$currentCustomCanteenCharges" Param 0 Delay 0 } } CustomCanteens { OnSpawnOutput { Target "canteen_input" Action "FireUser1" Delay 0.1 } OnSpawnOutput { Target "!activator" Action "$SetVar$currentCustomCanteenCharges" Param 0 Delay 0 } OnSpawnOutput { Target "@c@!activator" Action "$SetProp$m_usNumCharges" Param 0 Delay 0 } logic_branch { //bool for if player has vanilla canteen "targetname" "vanilla_canteens_bool" "InitialValue" "0" "OnTrue" "!activator,$SetVar$currentCustomCanteenCharges,0,-1" } logic_compare { //check if player owns any vanilla canteen incase a vanilla canteen is bought with a custom canteen equipped //in which case, remove all current current canteens charges "targetname" "vanilla_canteens_check" "CompareValue" "1988" "OnNotEqualTo" "vanilla_canteens_bool,SetValue,1,0,-1" } logic_compare { //check if m_usNumCharges is different from currentCustomCanteenCharges variable "targetname" "canteen_input_used_check" "CompareValue" "69420" //to be set later "OnLessThan" "canteen_owned_check,TestActivator,,0,-1" } logic_compare { "targetname" "sanitize_canteen_input" "CompareValue" "6900" //"OnLessThan" "player,$DisplayTextChat,,0,-1" "OnLessThan" "canteen_input_used_check,SetCompareValue,$$=!activator.currentCustomCanteenCharges,0,-1" "OnLessThan" "canteen_input_used_check,SetValueCompare,,0.01,-1" } logic_relay { "targetname" "canteen_input" //since $getprop with @c@ work like an index loop doing the applied output on every child and default to a set value if the prop index doesn't exist //I can hook it to a logic_compare and see if the input is different from the default value "OnUser1" "@c@!activator,$GetProp$m_usNumCharges,sanitize_canteen_input|SetValueCompare|6900,0,-1" "OnUser1" "vanilla_canteens_bool,SetValue,0,0,-1" //reset for this cycle //try vanilla cans test "OnUser1" "!activator,$GetItemAttribute,9|critboost|vanilla_canteens_check|SetValueCompare|1988,0,-1" "OnUser1" "!activator,$GetItemAttribute,9|ubercharge|vanilla_canteens_check|SetValueCompare|1988,0,-1" "OnUser1" "!activator,$GetItemAttribute,9|refill_ammo|vanilla_canteens_check|SetValueCompare|1988,0,-1" "OnUser1" "!activator,$GetItemAttribute,9|recall|vanilla_canteens_check|SetValueCompare|1988,0,-1" "OnUser1" "!activator,$GetItemAttribute,9|building instant upgrade|vanilla_canteens_check|SetValueCompare|1988,0,-1" "OnUser1" "vanilla_canteens_bool,Test,,0.01,-1" "OnUser1" "!self,FireUser1,,0.1,-1" } logic_compare { //check if canteen count is at 0 "targetname" "canteen_is_empty" "CompareValue" "0" //"OnEqualTo" "player,$DisplayTextChat,empty,0,-1" "OnEqualTo" "on_canteen_empty,Trigger,,0,-1" "OnUser1" "!activator,$GetVar$currentCustomCanteenCharges,canteen_is_empty|SetValueCompare|-1,0,-1" // "OnUser2" "!activator,$RemoveItemAttribute,refill_ammo|9,0,-1" // "OnUser2" "!activator,$RemoveItemAttribute,special item description|9,0,-1" // "OnUser2" "!activator,$SetVar$canteenIndex,-1,0,-1" } logic_relay { //triggered after a successful custom canteen use "targetname" "canteen_input_success" "spawnflags" "2" "OnTrigger" "!activator,$SetVar$currentCustomCanteenCharges,$$=!activator.currentCustomCanteenCharges - 1,0,-1" "OnTrigger" "@c@!activator,$SetProp$m_usNumCharges,$$=!activator.currentCustomCanteenCharges - 1,0,-1" "OnTrigger" "canteen_is_empty,FireUser1,,0.01,-1" } $filter_variable { //check if player has any remaining canteen charges "targetname" "canteen_owned_check" "$name" "currentCustomCanteenCharges" "$value" "0" "$compare" "greater than" "Negated" "0" "OnPass" "canteen_effect,TestActivator,,0,-1" } logic_case { //change custom charge attribute to sync with upgrade station "targetname" "custom_charge_decrease" "case16" "%|%" "case01" "none" "case02" "0" "ondefault" "!activator,$AddPlayerAttribute,,0,-1" //using !self here will break things randomly btw. turbo autism but I'm used to that by now "OnUser1" "custom_charge_decrease,$SetKey$case01,$$=!activator.currentCustomCanteenAttribute,0,-1" "OnUser1" "custom_charge_decrease,$SetKey$case02,$$=!activator.currentCustomCanteenCharges - 1,0,-1" "OnUser1" "custom_charge_decrease,$Format,,0.1,-1" //resync "OnUser2" "custom_charge_decrease,$SetKey$case01,$$=!activator.currentCustomCanteenAttribute,0,-1" "OnUser2" "custom_charge_decrease,$SetKey$case02,$$=!activator.currentCustomCanteenCharges,0,-1" "OnUser2" "custom_charge_decrease,$Format,,0.1,-1" } $filter_variable { "targetname" "canteen_effect" //speed boost canteen "$value" "1" "$name" "canteenIndex" "$compare" "equal" "Negated" "0" //"OnPass" "player,$DisplayTextChat,success,0,-1" "OnPass" "canteen_input_success,Trigger,,0,-1" "OnPass" "custom_charge_decrease,FireUser1,,0,-1" "OnPass" "player,$DisplayTextChat,{red}{activator}{reset} has used their {9BBF4D}SPEED BOOST {reset}Power Up Canteen!,0,-1" "OnPass" "!activator,$AddCond,32,0,-1" "OnPass" "!activator,$RemoveCond,32,5,-1" } filter_activator_tfteam { "targetname" "filter_is_blue" "Negated" "0" "TeamNum" "3" } $filter_sendprop { "targetname" "filter_is_not_giant" "$name" "m_bIsMiniBoss" "$value" "0" "$compare" "equal" "Negated" "0" } filter_multi { "targetname" "filter_can_be_sapped" "Negated" "0" "FilterType" "0" "Filter01" "filter_is_blue" "Filter02" "filter_is_not_giant" } trigger_multiple { "targetname" "reprogram_canteen_apply" "origin" "0 0 0" "mins" "-300.0 -300.0 -300.0" "maxs" "300.0 300.0 300.0" "spawnflags" "1" "StartDisabled" "1" "filtername" "filter_can_be_sapped" "OnStartTouch" "!activator,$AddPlayerAttribute,receive friendly fire|1,0,-1" "OnStartTouch" "!activator,$AddCond,43,0,-1" "OnStartTouch" "!activator,$AddCond,50,0,-1" "OnStartTouch" "!activator,$RemovePlayerAttribute,receive friendly fire,8,-1" "OnStartTouch" "!activator,$RemoveCond,43,8,-1" "OnStartTouch" "!activator,$RemoveCond,50,8,-1" "OnStartTouch" "!activator,$Suicide,50,8,-1" //self-destruct bot after done reprogramming "OnUser1" "!self,Enable,,0,-1" "OnUser1" "!self,Disable,,0.01,-1" } info_particle_system { "targetname" "sapper_effect" "effect_name" "Explosion_ShockWave_01" "flag_as_weather" "0" "start_active" "0" } $filter_variable { "targetname" "canteen_effect" //reprogram canteen "$value" "2" "$name" "canteenIndex" "$compare" "equal" "Negated" "0" "OnPass" "canteen_input_success,Trigger,,0,-1" "OnPass" "custom_charge_decrease,FireUser1,,0,-1" "OnPass" "player,$DisplayTextChat,{red}{activator}{reset} has used their {9BBF4D}REPROGRAM {reset}Power Up Canteen!,0,-1" "OnPass" "sapper_effect,Stop,,0,-1" "OnPass" "sapper_effect,Start,,0.01,-1" "OnPass" "reprogram_canteen_apply,FireUser1,,0,-1" } $filter_variable { "targetname" "canteen_effect" //berserk canteen "$value" "3" "$name" "canteenIndex" "$compare" "equal" "Negated" "0" "OnPass" "canteen_input_success,Trigger,,0,-1" "OnPass" "custom_charge_decrease,FireUser1,,0,-1" "OnPass" "player,$DisplayTextChat,{red}{activator}{reset} has used their {9BBF4D}BERSERK {reset}Power Up Canteen!,0,-1" //force minigun to stop reving/sniper unscope "OnPass" "!activator,$AddItemAttribute,alt-fire disabled|1|0,0,-1" "OnPass" "!activator,$Addcond,41,0,-1" "OnPass" "!activator,$Addcond,46,0,-1" "OnPass" "!activator,$WeaponSwitchSlot,2,0.01,-1" "OnPass" "!activator,$AddPlayerAttribute,CARD: damage bonus|1.25,0,-1" //"OnPass" "!activator,$AddItemAttribute,fists have radial buff|1|2,0,-1" //"OnPass" "!activator,$AddPlayerAttribute,melee range multiplier|1.1,0,-1" "OnPass" "!activator,$AddPlayerAttribute,melee attack rate bonus|0.8,0,-1" "OnPass" "!activator,$WeaponSwitchSlot,2,1.5,-1" //for revved up miniguns "OnPass" "!activator,$RemoveItemAttribute,alt-fire disabled|0,5,-1" "OnPass" "!activator,$Removecond,46,5,-1" "OnPass" "!activator,$RemovePlayerAttribute,CARD: damage bonus,5,-1" //"OnPass" "!activator,$RemoveItemAttribute,fists have radial buff|2,5,-1" //"OnPass" "!activator,$RemovePlayerAttribute,melee range multiplier,5,-1" "OnPass" "!activator,$RemovePlayerAttribute,melee attack rate bonus,5,-1" "OnPass" "!activator,$Removecond,41,5,-1" } $filter_variable { "targetname" "canteen_effect" //adrenaline canteen "$value" "4" "$name" "canteenIndex" "$compare" "equal" "Negated" "0" "OnPass" "canteen_input_success,Trigger,,0,-1" "OnPass" "custom_charge_decrease,FireUser1,,0,-1" "OnPass" "player,$DisplayTextChat,{red}{activator}{reset} has used their {9BBF4D}ADRENALINE {reset}Power Up Canteen!,0,-1" "OnPass" "!activator,$Addcond,46,0,-1" "OnPass" "!activator,$AddPlayerAttribute,CARD: damage bonus|1.5,0,-1" "OnPass" "!activator,$AddPlayerAttribute,CARD: move speed bonus|1.2,0,-1" "OnPass" "!activator,$AddPlayerAttribute,CARD: health regen|5,0,-1" "OnPass" "!activator,$Addcond,46,0,-1" "OnPass" "!activator,$Removecond,46,5,-1" "OnPass" "!activator,$RemovePlayerAttribute,CARD: damage bonus,5,-1" "OnPass" "!activator,$RemovePlayerAttribute,CARD: move speed bonus,5,-1" "OnPass" "!activator,$RemovePlayerAttribute,CARD: health regen,5,-1" //fatigue "OnPass" "!activator,$Addcond,15,5,-1" "OnPass" "!activator,$AddPlayerAttribute,damage penalty|0.7,5,-1" "OnPass" "!activator,$AddPlayerAttribute,move speed penalty|0.8,5,-1" "OnPass" "!activator,$Removecond,15,10,-1" "OnPass" "!activator,$RemovePlayerAttribute,damage penalty,10,-1" "OnPass" "!activator,$RemovePlayerAttribute,move speed penalty,10,-1" } logic_relay { //proxy relay to deapply stealth, deapplication is cancelled upon using a new stealth canteen to prevent overlap "targetname" "stealth_can_duration" "spawnflags" "2" "OnTrigger" "!activator,$Removecond,64,14.9,-1" } $filter_variable { "targetname" "canteen_effect" //stealth canteen "$value" "5" "$name" "canteenIndex" "$compare" "equal" "Negated" "0" "OnPass" "canteen_input_success,Trigger,,0,-1" "OnPass" "custom_charge_decrease,FireUser1,,0,-1" "OnPass" "player,$DisplayTextChat,{red}{activator}{reset} has used their {9BBF4D}STEALTH {reset}Power Up Canteen!,0,-1" "OnPass" "stealth_can_duration,$CancelPending,,0,-1" "OnPass" "!activator,$Addcond,64,0,-1" "OnPass" "stealth_can_duration,Trigger,,0.1,-1" } trigger_multiple { "targetname" "piss_apply" "origin" "0 0 0" "mins" "-1000.0 -1000.0 -1000.0" "maxs" "1000.0 1000.0 1000.0" "spawnflags" "1" "StartDisabled" "1" "filtername" "filter_is_blue" "OnStartTouch" "!activator,$AddCond,24,0,-1" "OnStartTouch" "!activator,$RemoveCond,24,15,-1" "OnUser1" "!self,Enable,,0,-1" "OnUser1" "!self,Disable,,0.01,-1" } info_particle_system { "targetname" "piss_effect" "effect_name" "eyeboss_death" "flag_as_weather" "0" "start_active" "0" } $filter_variable { "targetname" "canteen_effect" //piss canteen "$value" "6" "$name" "canteenIndex" "$compare" "equal" "Negated" "0" "OnPass" "canteen_input_success,Trigger,,0,-1" "OnPass" "custom_charge_decrease,FireUser1,,0,-1" "OnPass" "player,$DisplayTextChat,{red}{activator}{reset} has used their {9BBF4D}PISSPLOSION {reset}Power Up Canteen!,0,-1" "OnPass" "piss_effect,Stop,,0,-1" "OnPass" "piss_effect,Start,,0.01,-1" "OnPass" "piss_apply,FireUser1,,0,-1" } $filter_variable { "targetname" "canteen_effect" //knockback immunity canteen "$value" "69" "$name" "canteenIndex" "$compare" "equal" "Negated" "0" "OnPass" "canteen_input_success,Trigger,,0,-1" "OnPass" "custom_charge_decrease,FireUser1,,0,-1" "OnPass" "player,$DisplayTextChat,{red}{activator}{reset} has used their {9BBF4D}KNOCKBACK IMMUNITY {reset}Power Up Canteen!,0,-1" "OnPass" "!activator,$Addcond,20,0,-1" "OnPass" "!activator,$AddPlayerAttribute,damage force reduction|0.001,0,-1" "OnPass" "!activator,$Removecond,20,5,-1" "OnPass" "!activator,$RemovePlayerAttribute,damage force reduction,5,-1" } } CanteenPurchase { NoFixup 1 logic_relay { "targetname" "canteen_count_update" "spawnflags" "2" "$OnUser5" "@c@!activator,$SetProp$m_usNumCharges,,0,-1" "$OnUser5" "!activator,$SetVar$currentCustomCanteenCharges,,0,-1" } logic_relay { "targetname" "on_canteen_empty" "spawnflags" "2" "OnTrigger" "!activator,$RemoveItemAttribute,refill_ammo|9,0,-1" "OnTrigger" "!activator,$RemoveItemAttribute,special item description|9,0,-1" "OnTrigger" "!activator,$SetVar$canteenIndex,-1,0,-1" } } } SpawnTemplate CanteenPurchase PlayerSpawnTemplate { Name CustomCanteens Origin "0 0 0" } PlayerSpawnOnceTemplate { Name CustomCanteensSetup Origin "0 0 0" } //todo: handle wave restore ExtendedUpgrades { //canteens speed_can { Name "Speed Boost Canteen" //random attribute, preferably one that doesn't do anything nor show up on the player, basically just meant to index //remember to edit output to apply this attribute as currentCustomCanteenAttribute so that it can automatically be formatted Attribute "mvm completed challenges bitmask" Cap 5 Increment 1 Cost 5 UIGroup 2 AllowedWeapons { Classname "tf_powerup_bottle" } DisallowedUpgrade {Upgrade re_can} DisallowedUpgrade {Upgrade add_can} DisallowedUpgrade {Upgrade ber_can} DisallowedUpgrade {Upgrade cloak_can} DisallowedUpgrade {Upgrade piss_can} OnUpgrade { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Gain a speed boost for 5 seconds|9,0" Output "!activator,$SetVar$canteenIndex,1,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,mvm completed challenges bitmask,0" } OnApply { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Gain a speed boost for 5 seconds|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,mvm completed challenges bitmask,0" Output "!activator,$SetVar$canteenIndex,1,0" } OnDowngrade { Output "canteen_count_update,$FireUser5," Output "on_canteen_empty,Trigger,,0" } OnRestore { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Gain a speed boost for 5 seconds|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,mvm completed challenges bitmask,0" Output "!activator,$SetVar$canteenIndex,1,0" } } re_can { Name "Reprogram Canteen" Attribute "limited quantity item" Cap 3 Increment 1 Cost 5 Description "Reprogram non-giant enemies in a radius" UIGroup 2 AllowedWeapons { Classname "tf_powerup_bottle" } DisallowedUpgrade {Upgrade speed_can} DisallowedUpgrade {Upgrade add_can} DisallowedUpgrade {Upgrade ber_can} DisallowedUpgrade {Upgrade cloak_can} DisallowedUpgrade {Upgrade piss_can} OnUpgrade { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Reprogram non-giant enemies in a radius|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,limited quantity item,0" Output "!activator,$SetVar$canteenIndex,2,0" } OnApply { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Reprogram non-giant enemies in a radius|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,limited quantity item,0" Output "!activator,$SetVar$canteenIndex,2,0" } OnDowngrade { Output "canteen_count_update,$FireUser5," Output "on_canteen_empty,Trigger,,0" } OnRestore { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Reprogram non-giant enemies in a radius|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,limited quantity item,0" Output "!activator,$SetVar$canteenIndex,2,0" } } ber_can { Name "Berserk Canteen" Attribute "throwable healing" Cap 5 Increment 1 Cost 5 Description "Locked to melee for 5 seconds, greatly increased melee power" UIGroup 2 AllowedWeapons { Classname "tf_powerup_bottle" } DisallowedUpgrade {Upgrade re_can} DisallowedUpgrade {Upgrade speed_can} DisallowedUpgrade {Upgrade add_can} DisallowedUpgrade {Upgrade cloak_can} DisallowedUpgrade {Upgrade piss_can} OnUpgrade { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Lock to melee but increase melee power|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,throwable healing,0" Output "!activator,$SetVar$canteenIndex,3,0" } OnApply { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Lock to melee but increase melee power|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,throwable healing,0" Output "!activator,$SetVar$canteenIndex,3,0" } OnDowngrade { Output "canteen_count_update,$FireUser5," Output "on_canteen_empty,Trigger,,0" } OnRestore { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Lock to melee but increase melee power|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,throwable healing,0" Output "!activator,$SetVar$canteenIndex,3,0" } } add_can { Name "Adrenaline Canteen" Attribute "throwable damage" Cap 3 Increment 1 Cost 5 Description "Gain various buffs for 5 seconds, become weakened for a duration afterward" UIGroup 2 AllowedWeapons { Classname "tf_powerup_bottle" } DisallowedUpgrade {Upgrade re_can} DisallowedUpgrade {Upgrade speed_can} DisallowedUpgrade {Upgrade ber_can} DisallowedUpgrade {Upgrade cloak_can} DisallowedUpgrade {Upgrade piss_can} OnUpgrade { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Gain various buffs for 5 seconds and become fatigue briefly after duration|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,throwable damage,0" Output "!activator,$SetVar$canteenIndex,4,0" } OnApply { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Gain various buffs for 5 seconds and become fatigue briefly after duration|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,throwable damage,0" Output "!activator,$SetVar$canteenIndex,4,0" } OnDowngrade { Output "canteen_count_update,$FireUser5," Output "on_canteen_empty,Trigger,,0" } OnRestore { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Gain various buffs for 5 seconds and become fatigue briefly after duration|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,throwable damage,0" Output "!activator,$SetVar$canteenIndex,4,0" } } cloak_can { Name "Stealth Canteen" Attribute "throwable particle trail only" Cap 5 Increment 1 Cost 5 Description "Cloak for up to 15 seconds, cloak is cancelled when attacking" UIGroup 2 AllowedWeapons { Classname "tf_powerup_bottle" } DisallowedUpgrade {Upgrade re_can} DisallowedUpgrade {Upgrade speed_can} DisallowedUpgrade {Upgrade ber_can} DisallowedUpgrade {Upgrade add_can} DisallowedUpgrade {Upgrade knock_can} DisallowedUpgrade {Upgrade piss_can} OnUpgrade { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Cloak for up to 15 seconds|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,throwable particle trail only,0" Output "!activator,$SetVar$canteenIndex,5,0" } OnApply { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Cloak for up to 15 seconds|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,throwable particle trail only,0" Output "!activator,$SetVar$canteenIndex,5,0" } OnDowngrade { Output "canteen_count_update,$FireUser5," Output "on_canteen_empty,Trigger,,0" } OnRestore { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Cloak for up to 15 seconds|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,throwable particle trail only,0" Output "!activator,$SetVar$canteenIndex,5,0" } } piss_can { Name "Pissplosion Canteen" Attribute "decoded by itemdefindex" Cap 3 Increment 1 Cost 5 Description "Apply Jarate to enemies within a large radius" UIGroup 2 AllowedWeapons { Classname "tf_powerup_bottle" } DisallowedUpgrade {Upgrade re_can} DisallowedUpgrade {Upgrade speed_can} DisallowedUpgrade {Upgrade ber_can} DisallowedUpgrade {Upgrade add_can} DisallowedUpgrade {Upgrade cloak_can} DisallowedUpgrade {Upgrade knock_can} OnUpgrade { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Apply Jarate to enemies within a large radius|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,decoded by itemdefindex,0" Output "!activator,$SetVar$canteenIndex,6,0" } OnApply { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Apply Jarate to enemies within a large radius|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,decoded by itemdefindex,0" Output "!activator,$SetVar$canteenIndex,6,0" } OnDowngrade { Output "canteen_count_update,$FireUser5," Output "on_canteen_empty,Trigger,,0" } OnRestore { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Apply Jarate to enemies within a large radius|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,decoded by itemdefindex,0" Output "!activator,$SetVar$canteenIndex,6,0" } } knock_can { Name "Knockback Immunity Canteen" Attribute "elevate quality" Cap 69 Increment 1 Cost 5 Description "fuck the last subwave" UIGroup 2 AllowedWeapons { Classname "tf_powerup_bottle" } DisallowedUpgrade {Upgrade re_can} DisallowedUpgrade {Upgrade speed_can} DisallowedUpgrade {Upgrade ber_can} DisallowedUpgrade {Upgrade add_can} DisallowedUpgrade {Upgrade cloak_can} DisallowedUpgrade {Upgrade piss_can} OnUpgrade { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Knockback resistance for 5 seconds|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,elevate quality,0" Output "!activator,$SetVar$canteenIndex,69,0" } OnApply { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Knockback resistance for 5 seconds|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,elevate quality,0" Output "!activator,$SetVar$canteenIndex,69,0" } OnDowngrade { Output "canteen_count_update,$FireUser5," Output "on_canteen_empty,Trigger,,0" } OnRestore { Output "canteen_count_update,$FireUser5," Output "!activator,$AddItemAttribute,special item description|Consumable: Knockback resistance for 5 seconds|9,0" Output "!activator,$SetVar$currentCustomCanteenAttribute,elevate quality,0" Output "!activator,$SetVar$canteenIndex,69,0" } } } Mission // sentry buster { Objective DestroySentries InitialCooldown 120 Where spawnbot BeginAtWave 1 RunForThisManyWaves 1 CooldownTime 120 TFBot { Template T_TFBot_SentryBuster } } Mission // Spy - wave 1 { Objective Spy InitialCooldown 180 Where spawnbot_mission_spy BeginAtWave 1 RunForThisManyWaves 1 CooldownTime 180 DesiredCount 2 TFBot { Class Spy Skill Expert Name Spy } } Mission // Sniper - wave 1 { Objective Sniper InitialCooldown 120 Where spawnbot_mission_sniper BeginAtWave 1 RunForThisManyWaves 1 CooldownTime 210 DesiredCount 2 TFBot { Class Sniper Skill Hard Name Sniper MaxVisionRange 3000 } } Wave { StartWaveOutput { Target wave_start_relay_666 Action Trigger } Checkpoint Yes //STAGE 01 //Currency 700 /////////////////////////////////////////////////////////////////////////////////////////////////////// WaveSpawn //WAVE 01a: 60 total, 10 active, Scout (bonk) { Name "wave01" Where spawnbot TotalCount 30 MaxActive 10 SpawnCount 10 WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 300 TFBot { Template T_TFBot_Scout_Bonk Attributes AlwaysCrit Item "Point and Shoot" } } WaveSpawn //WAVE 01b: 32 total, 8 active, Pyro (always fire) { Name "wave01" Where spawnbot TotalCount 32 MaxActive 8 SpawnCount 8 WaitBeforeStarting 3 WaitBetweenSpawns 7 TotalCurrency 200 TFBot { Class Pyro Skill Easy Attributes AlwaysFireWeapon Item "Old Guadalajara" } } WaveSpawn //WAVE 01c: [GIANT] 12 total, 4 active, Demoman (demoknight) { Name "wave01" Where spawnbot TotalCount 12 MaxActive 4 SpawnCount 4 WaitBeforeStarting 5 WaitBetweenSpawns 5 TotalCurrency 200 TFBot { Template T_TFBot_Giant_DemoMan_PrinceTavish Attributes AlwaysCrit Item "Spine-Chilling Skull" } } //STAGE 02 //Currency 400 /////////////////////////////////////////////////////////////////////////////////////////////////////// WaveSpawn //WAVE 02a: [GIANT] 10(20) total, 10(20) active, Soldier (slow crit + uber medic) { Name "wave02" Where spawnbot TotalCount 20 MaxActive 20 SpawnCount 4 WaitForAllDead "wave01" WaitBeforeStarting 5 WaitBetweenSpawns 2 TotalCurrency 400 Squad { TFBot { Template T_TFBot_Giant_Soldier_Crit Item "Idiot box" Item "Shoestring Budget" } TFBot { Template T_TFBot_Medic_QuickUber Item "The Warsworn Helmet" } } } //STAGE 03 //Currency 1000 /////////////////////////////////////////////////////////////////////////////////////////////////////// WaveSpawn //WAVE 03a: 40 total, 10 active, Soldier { Name "wave03" Where spawnbot TotalCount 40 MaxActive 10 SpawnCount 5 WaitForAllDead "wave02" WaitBeforeStarting 8 WaitBetweenSpawns 2 TotalCurrency 300 TFBot { Class Soldier Skill Easy Item "Defiant Spartan" } } WaveSpawn //WAVE 03b: 40 total, 10 active, Heavyweapons { Name "wave03" Where spawnbot TotalCount 40 MaxActive 10 SpawnCount 5 WaitForAllDead "wave02" WaitBeforeStarting 8 WaitBetweenSpawns 2 TotalCurrency 300 TFBot { Class Heavyweapons Skill Easy Item "The Crone's Dome" } } WaveSpawn //WAVE 03c: [GIANT] 5 total, 2 active, Soldier { Name "wave03" Where spawnbot TotalCount 5 MaxActive 2 SpawnCount 1 WaitForAllDead "wave02" WaitBeforeStarting 8 WaitBetweenSpawns 30 TotalCurrency 200 TFBot { Template T_TFBot_Giant_Soldier_Spammer Item "Idiot box" Item "Shoestring Budget" } } WaveSpawn //WAVE 03d: [GIANT] 5 total, 2 active, Heavyweapons { Name "wave03" Where spawnbot TotalCount 5 MaxActive 2 SpawnCount 1 WaitForAllDead "wave02" WaitBeforeStarting 8 WaitBetweenSpawns 30 TotalCurrency 200 TFBot { Template T_TFBot_Giant_Heavyweapons Item "The Crone's Dome" } } //STAGE 04 //Currency 1200 /////////////////////////////////////////////////////////////////////////////////////////////////////// WaveSpawn //WAVE 04a: 80 total, 10 active, Scout { Name "wave04" Where spawnbot_scattered RandomSpawn 1 TotalCount 80 MaxActive 10 SpawnCount 5 WaitForAllDead "wave03" WaitBeforeStarting 10 WaitBetweenSpawns 8 TotalCurrency 600 TFBot { Class Scout Skill Easy Attributes AlwaysCrit Item "Point and Shoot" } } WaveSpawn //WAVE 04b: [3 TANKS] { Name "wave04" TotalCount 3 WaitForAllDead "wave03" WaitBeforeStarting 0 WaitBetweenSpawns 50 TotalCurrency 600 FirstSpawnOutput { Target boss_spawn_relay Action Trigger } Tank { Health 35000 Speed 75 Name "tankboss" StartingPathTrackNode "boss_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } //STAGE 05 //Currency 1000 /////////////////////////////////////////////////////////////////////////////////////////////////////// WaveSpawn //WAVE 05a: [GIANT] 40 total, 15 active, Demoman { Name "wave05" Where spawnbot TotalCount 40 MaxActive 10 SpawnCount 5 WaitForAllDead "wave04" WaitBeforeStarting 10 WaitBetweenSpawns 10 TotalCurrency 500 TFBot { Template T_TFBot_Giant_Demo_RapidFire Item "Spine-Chilling Skull" } } WaveSpawn //WAVE 05b: 40 total, 5 active, Demoman (Eyelander + Charge N Targe) { Name "wave05" Where spawnbot TotalCount 40 MaxActive 5 SpawnCount 5 WaitForAllDead "wave04" WaitBeforeStarting 30 WaitBetweenSpawns 8 TotalCurrency 500 TFBot { Template T_TFBot_Demoman_Knight Attributes AlwaysCrit Item "Spine-Chilling Skull" } } WaveSpawn //WAVE 05c: [TANK] { Name "wave05" TotalCount 1 WaitForAllDead "wave04" WaitBeforeStarting 55 WaitBetweenSpawns 0 TotalCurrency 600 FirstSpawnOutput { Target boss_spawn_relay Action Trigger } Tank { Health 40000 Speed 75 Name "tankboss" StartingPathTrackNode "boss_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } //STAGE 06 //Currency 700 /////////////////////////////////////////////////////////////////////////////////////////////////////// WaveSpawn //WAVE 06a: 40 total, 20 active, Soldier (Direct hit, buff banner) { Name "wave06a" Where spawnbot_scattered RandomSpawn 1 TotalCount 40 MaxActive 20 SpawnCount 10 WaitForAllDead "wave05" WaitBeforeStarting 15 WaitBetweenSpawns 2 TotalCurrency 300 TFBot { Class Soldier Skill Expert WeaponRestrictions PrimaryOnly Item "The Direct Hit" Item "The Buff Banner" Item "Defiant Spartan" Attributes SpawnWithFullCharge ItemAttributes { ItemName "The Direct Hit" "damage bonus" 2.0 } CharacterAttributes { "increase buff duration" 9.0 } } } WaveSpawn //WAVE 06b: [GIANT] 4(8) total, 4(8) active, Heavyweapons (Always Crit + Giant medic) { Name "wave06b" Where spawnbot TotalCount 8 MaxActive 8 SpawnCount 2 WaitForAllSpawned "wave06a" WaitBeforeStarting 0 WaitBetweenSpawns 30 TotalCurrency 400 Squad { TFBot { Template T_TFBot_Giant_Heavyweapons_Deflector Attributes AlwaysCrit Item "The Crone's Dome" } TFBot { Template T_TFBot_Giant_Medic Item "The Warsworn Helmet" } } } //STAGE 07 //Currency 1300 /////////////////////////////////////////////////////////////////////////////////////////////////////// WaveSpawn //WAVE 07a: [4 TANKS] { Name "wave07" TotalCount 4 WaitForAllDead "wave06b" WaitBeforeStarting 10 WaitBetweenSpawns 30 TotalCurrency 1100 FirstSpawnOutput { Target boss_spawn_relay Action Trigger } Tank { Health 42000 Speed 75 Name "tankboss" StartingPathTrackNode "boss_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn //WAVE 07b: 96 total, 16 active, Spy { Name "wave07" Where spawnbot TotalCount 96 MaxActive 16 SpawnCount 8 WaitForAllDead "wave06b" WaitBeforeStarting 40 WaitBetweenSpawns 5 TotalCurrency 200 TFBot { Class Spy Skill Expert } } //STAGE 08 //Currency 1400 /////////////////////////////////////////////////////////////////////////////////////////////////////// WaveSpawn //WAVE 08a: 75 total, 20 active, Sniper (Huntsman) { Name "wave08a" Where spawnbot_scattered RandomSpawn 1 TotalCount 75 MaxActive 20 SpawnCount 5 WaitForAllDead "wave07" WaitBeforeStarting 10 WaitBetweenSpawns 1 TotalCurrency 300 TFBot { Template T_TFBot_Sniper_Huntsman Skill Expert Item "Larrikin Robin" Attributes AlwaysCrit ItemAttributes { ItemName "The Huntsman" "damage bonus" 1.5 "faster reload rate" 0.2 } } } WaveSpawn //WAVE 08b: 75 total, 20 active, Soldier (Always Crit) { Name "wave08b" Where spawnbot_scattered RandomSpawn 1 TotalCount 75 MaxActive 20 SpawnCount 5 WaitForAllSpawned "wave08a" WaitBeforeStarting 10 WaitBetweenSpawns 1 TotalCurrency 300 TFBot { Class Soldier Skill Expert Attributes AlwaysCrit Item "Defiant Spartan" ItemAttributes { ItemName "TF_WEAPON_ROCKETLAUNCHER" "damage bonus" 2.0 "faster reload rate" -0.8 "fire rate bonus" 0.6 } } } WaveSpawn //WAVE 08c: 75 total, 20 active, Demoman (Always Crit) { Name "wave08c" Where spawnbot_scattered RandomSpawn 1 TotalCount 75 MaxActive 20 SpawnCount 5 WaitForAllSpawned "wave08b" WaitBeforeStarting 5 WaitBetweenSpawns 1 TotalCurrency 200 TFBot { Class Demoman Skill Expert Attributes AlwaysCrit Item "Spine-Chilling Skull" ItemAttributes { ItemName "TF_WEAPON_GRENADELAUNCHER" "damage bonus" 2.0 "faster reload rate" -0.8 "Projectile speed increased" 2.0 } } } WaveSpawn //WAVE 08d: 75 total, 20 active, Pyro (Always Crit) { Name "wave08d" Where spawnbot_scattered RandomSpawn 1 TotalCount 75 MaxActive 20 SpawnCount 5 WaitForAllSpawned "wave08c" WaitBeforeStarting 10 WaitBetweenSpawns 1 TotalCurrency 200 TFBot { Class Pyro Skill Expert Attributes AlwaysCrit Item "Old Guadalajara" ItemAttributes { ItemName "TF_WEAPON_FLAMETHROWER" "damage bonus" 2.0 } CharacterAttributes { "move speed bonus" 1.5 } } } WaveSpawn //WAVE 08e: 75 total, 20 active, Scout (Always Crit) { Name "wave08e" Where spawnbot_scattered RandomSpawn 1 TotalCount 75 MaxActive 20 SpawnCount 5 WaitForAllSpawned "wave08d" WaitBeforeStarting 5 WaitBetweenSpawns 1 TotalCurrency 200 TFBot { Class Scout Skill Expert Attributes AlwaysCrit Item "Point and Shoot" } } WaveSpawn //WAVE 08f: 48 total, 22 active, Heavyweapons (Always Crit + Uber medic) { Name "wave08f" Where spawnbot_scattered RandomSpawn 1 TotalCount 48 MaxActive 22 SpawnCount 4 WaitForAllSpawned "wave08e" WaitBeforeStarting 5 WaitBetweenSpawns 1 TotalCurrency 200 Squad { TFBot { Class Heavyweapons Skill Expert Attributes AlwaysCrit Item "The Crone's Dome" ItemAttributes { ItemName "TF_WEAPON_MINIGUN" "damage bonus" 1.5 } } TFBot { Template T_TFBot_Medic_QuickUber Item "The Warsworn Helmet" } } } WaveSpawn //WAVE 08g: [FINAL TANK] { Name "wave08g" TotalCount 1 WaitForAllDead "wave08d" WaitBeforeStarting 20 WaitBetweenSpawns 0 TotalCurrency 0 FirstSpawnOutput { Target boss_spawn_relay Action Trigger } Tank { Health 60000 Speed 75 Name "tankboss" Skin 1 StartingPathTrackNode "boss_path_1" OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } } }