#base robot_standard.pop #base robot_giant.pop WaveSchedule { StartingCurrency 1984 CanBotsAttackWhileInSpawnRoom no RespawnWaveTime 0 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 "@c@!activator" Action "$SetProp$m_usNumCharges" Param "$$=!activator.currentCustomCanteenCharges" Delay 0 } OnSpawnOutput { Target "onspawn_sync" Action "Trigger" Delay 0.1 } logic_relay { //sync attribute with previous life before being reapplied because onapply doesn't sync with this properly "targetname" "onspawn_sync" "spawnflags" "2" "OnTrigger" "" } 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" "!self,FireUser1,,0.2,-1" } logic_compare { //check if canteen count is at 0 "targetname" "canteen_is_empty" "CompareValue" "0" //"OnEqualTo" "player,$DisplayTextChat,empty,0,-1" "OnEqualTo" "!activator,$RemoveItemAttribute,refill_ammo|9,0,-1" "OnEqualTo" "!activator,$RemoveItemAttribute,special item description|9,0,-1" "OnEqualTo" "!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" "!activator,$GetVar$currentCustomCanteenCharges,canteen_is_empty|SetValueCompare|-1,0.01,-1" //"OnTrigger" "player,$DisplayTextCenter,$$=!activator.currentCustomCanteenCharges - 1,0,-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_speed_boost" "case16" "mvm completed challenges bitmask|%" "case01" "0" "ondefault" "!activator,$AddPlayerAttribute,,0,-1" } $filter_variable { "targetname" "canteen_effect" //speed boost canteen "$value" "1" "$name" "canteenIndex" "$compare" "equal" "Negated" "0" "OnPass" "canteen_input_success,Trigger,,0,-1" "OnPass" "custom_charge_decrease_speed_boost,$SetKey$case01,$$=!activator.currentCustomCanteenCharges - 1,0,-1" "OnPass" "custom_charge_decrease_speed_boost,$Format,,0.1,-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" } logic_case { //change custom charge attribute to sync with upgrade station "targetname" "custom_charge_decrease_reprogram" "case16" "limited quantity item|%" "case01" "0" "ondefault" "!activator,$AddPlayerAttribute,,0,-1" } $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_reprogram,$SetKey$case01,$$=!activator.currentCustomCanteenCharges - 1,0,-1" "OnPass" "custom_charge_decrease_reprogram,$Format,,0.1,-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" } logic_case { //change custom charge attribute to sync with upgrade station "targetname" "custom_charge_decrease_ammo" "case16" "throwable fire speed|%" "case01" "0" "ondefault" "!activator,$AddPlayerAttribute,,0,-1" } $filter_variable { "targetname" "canteen_effect" //refill ammo canteen, doesn't do anything beside catching up "$value" "3" "$name" "canteenIndex" "$compare" "equal" "Negated" "0" "OnPass" "canteen_input_success,Trigger,,0,-1" "OnPass" "custom_charge_decrease_ammo,$SetKey$case01,$$=!activator.currentCustomCanteenCharges,0,-1" "OnPass" "custom_charge_decrease_ammo,$Format,,0.1,-1" } } CanteenPurchase { NoFixup 1 logic_relay { "targetname" "canteen_count_update" "spawnflags" "2" "$OnUser5" "!activator,$RemoveItemAttribute,refill_ammo|9,0" "$OnUser5" "@c@!activator,$SetProp$m_usNumCharges,,0,-1" "$OnUser5" "!activator,$SetVar$currentCustomCanteenCharges,,0,-1" } } } SpawnTemplate CanteenPurchase PlayerSpawnTemplate { Name CustomCanteens Origin "0 0 0" } PlayerSpawnOnceTemplate { Name CustomCanteensSetup Origin "0 0 0" } //todo: handle downgrade. maybe handle refund too but that's probably out of my paygrade maybeeee //todo: handle using up every canteens 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 add in another custom_charge_decrease when you add a new upgrade Attribute "mvm completed challenges bitmask" Cap 5 Increment 1 Cost 50 PlayerUpgrade 1 RequiredWeapons { Classname "tf_powerup_bottle" } RequiredWeaponsString "No canteen equipped" DisallowedUpgrade { Upgrade re_can Upgrade ammo_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,$AddCond,150,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$canteenIndex,1,0" // Output "!activator,$AddCond,150,0" } } re_can { Name "Reprogram Canteen" Attribute "limited quantity item" Cap 10 Increment 1 Cost 5 PlayerUpgrade 1 RequiredWeapons { Classname "tf_powerup_bottle" } RequiredWeaponsString "No canteen equipped" DisallowedUpgrade { Upgrade speed_can Upgrade ammo_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$canteenIndex,2,0" //Output "!activator,$AddCond,151,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$canteenIndex,2,0" //Output "!activator,$AddCond,151,0" } } ammo_can { Name "Ammo Refill Canteen" Attribute "throwable fire speed" Cap 6 //cap = cap + 1 since ???????? Increment 1 Cost 50 PlayerUpgrade 1 RequiredWeapons { Classname "tf_powerup_bottle" } RequiredWeaponsString "No canteen equipped" DisallowedUpgrade { Upgrade re_can Upgrade speed_can } OnUpgrade { Output "canteen_count_update,$FireUser5," Output "!activator,$AddPlayerAttribute,refill_ammo|1,0.1" Output "!activator,$AddItemAttribute,refill_ammo|1|9,0.1" Output "!activator,$SetVar$canteenIndex,3,0" //Output "!activator,$AddCond,152,0" } OnApply { Output "canteen_count_update,$FireUser5," Output "!activator,$AddPlayerAttribute,refill_ammo|1,0.1" Output "!activator,$AddItemAttribute,refill_ammo|1|9,0.1" Output "!activator,$SetVar$canteenIndex,3,0" //Output "!activator,$AddCond,152,0" } } } Wave { StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Where spawnbot TotalCount 5 MaxActive 5 SpawnCount 5 WaitBeforeStarting 0.1 WaitBetweenSpawns 0 TotalCurrency 0 TFBot { Class Heavyweapons Attributes SuppressFire } } WaveSpawn { Where spawnbot TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 0 TFBot { Template T_TFBot_Giant_Heavyweapons tag bot_giant Attributes SuppressFire } } } }