/////////////////////////////////// //Mechanical Magicians (Magitek?) (Technically Magicians) //Yakibomb //Sign Date: 20 April 2022 //First Test: 14 May 2022 /////////////////////////////////// //notes //onuser1 + onuser2 == enable / disable healing canteen //onuser3 == revive canteen //onuser4 == misc (name medigun, canteen, recalc decap stats) //onuser5 + onuser6 == enable / disable ghost mode 'scare' // Scout gets to use HYPE (infinite ammo + super movement for duration). // Soldier gets infinite banner range. (increased damage from rage?) // Pyro gets to throw Gas Passer EoI. (Fireballs?) // Demoman gets any sword can gain heads // Heavy gets knockback rage // Engineer gets to build // Medic gets a crossbow that buffs users on hit using Medigun's Uber type // Sniper gets bomb arrows (which can be ignited, causing blast to apply afterburn) // Spy gets... //#base robot_frostwynd.pop #base robot_giant.pop #base robot_standard.pop #base robot_standard_red.pop #base robot_giant_red.pop WaveSchedule { CustomUpgradesFile "mvm_upgrades_medieval_yaki_rev_testX.txt" //tied to PointTemplate "attributes_player_onspawn_once" OverrideSounds { "Announcer.MVM_First_Wave_Start" "music/SSBM_Adventure_Intro.wav" "Announcer.MVM_Wave_Start" "music/SSBM_Adventure_Intro.wav" "Announcer.MVM_All_Dead" "PSap.null" //Soldier Booze Banner // "Weapon_BattalionsBackup.HornRed" "Scout.DodgeCanDrink" //Sentrygun "Building_Sentrygun.Fire" "PSap.null" "Building_MiniSentrygun.Fire" "PSap.null" //Rescue Ranger "Weapon_RescueRanger.Single" "Weapon_CrusadersCrossbow.Single" "Weapon_RescueRanger.SingleCrit" "Weapon_CrusadersCrossbow.SingleCrit" //Ball O' Bats and Healing Aura VO's reversed here "scout_sf13_spell_uber01" "scout_sf13_spell_generic04" "scout_sf13_spell_generic04" "scout_sf13_spell_uber01" "soldier_sf13_spell_uber01" "soldier_sf13_spell_generic04" "soldier_sf13_spell_generic04" "soldier_sf13_spell_uber01" "pyro_sf13_spell_uber01" "pyro_sf13_spell_generic04" "pyro_sf13_spell_generic04" "pyro_sf13_spell_uber01" "demoman_sf13_spell_uber01" "demoman_sf13_spell_generic04" "demoman_sf13_spell_generic04" "demoman_sf13_spell_uber01" "heavy_sf13_spell_uber01" "heavy_sf13_spell_generic04" "heavy_sf13_spell_generic04" "heavy_sf13_spell_uber01" "engineer_sf13_spell_uber01" "engineer_sf13_spell_generic04" "engineer_sf13_spell_generic04" "engineer_sf13_spell_uber01" "medic_sf13_spell_uber01" "medic_sf13_spell_generic04" "medic_sf13_spell_generic04" "medic_sf13_spell_uber01" "sniper_sf13_spell_uber01" "sniper_sf13_spell_generic04" "sniper_sf13_spell_generic04" "sniper_sf13_spell_uber01" "spy_sf13_spell_uber01" "spy_sf13_spell_generic04" "spy_sf13_spell_generic04" "spy_sf13_spell_uber01" } PrecacheSound "vo/halloween_boo1.mp3" PrecacheSound "vo/halloween_boo2.mp3" PrecacheSound "vo/halloween_boo3.mp3" PrecacheSound "vo/halloween_boo4.mp3" PrecacheSound "vo/halloween_boo5.mp3" PrecacheSound "vo/halloween_boo6.mp3" PrecacheSound "vo/halloween_boo7.mp3" WaveStartCountdown 1 TextPrintTime 0 MedievalMode 0 ForceHoliday 2 MaxActiveSkeletons 999 NoSkeletonSplit 1 NoThrillerTaunt 1 NoCritPumpkin 1 // NoJoinMidwave 1 NoRomevisionCosmetics 1 NoHolidayPickups 1 BotsAreHumans 2 StandableHeads 1 FixHuntsmanDamageBonus 1 // NoReanimators 1 FixSetCustomModelInput 1 // RespecEnabled 0 RemoveGrapplingHooks 1.5 BonusRatioHalf 0.5 BonusRatioFull 0.5 NoMissionInfo 0 // BotPushaway 0 StuckTimeMultiplier 5 BodyPartScaleSpeed 10 StartingCurrency 1200 Advanced 1 CanBotsAttackWhileInSpawnRoom Yes RespawnWaveTimeBlue 5 FixedRespawnWaveTimeBlue 5 // Essential stuff ReverseWinConditions 1 AllowJoinTeamBlueMax 6 AllowJoinTeamBlue 1 HumansMustJoinTeam Blue SetCreditTeam 3 SniperAllowHeadshots 1 // Optional stuff BluHumanInfiniteCloak 0 RobotLimit 26 BluHumanInfiniteAmmo 0 BluHumanSpawnNoShoot 0 BluHumanSpawnProtection 0 FlagCarrierMovementPenalty 1 // (default: 0.5) BluHumanFlagCapture 1 BluHumanFlagPickup 1 BluPlayersAreRobots 0 NoRomevisionCosmetics 1 HealOnKillOverhealMelee 0 //turn off to fix my HoK overheal gimmick ForceRobotBleed 1 BotsRandomCrit 0 // SentryBusterFriendlyFire 0 // Precache all custom models and sounds PrecacheModel "models\props_mvm\mvm_upgrade_blu_center.mdl" PrecacheModel "models\props_mvm\mvm_upgrade_blu_tools.mdl" PrecacheModel "models\bots\boss_bot\boss_tankred.mdl" // PrecacheSound "combine_bank_alarm.mp3" PrecacheModel "models/props_medieval/flag_medieval_scroll/medieval_scroll_flag.mdl" PrecacheModel "models/props_gameplay/cap_square_768.mdl" //Healing Canteen heal zone PrecacheModel "models/props_gameplay/cap_circle_768.mdl" //VIP capture zone PrecacheModel "models/props_frostwynd/spawnfix/bluspawn_main_hill_v8.mdl" PrecacheModel "models/props_frostwynd/spawnfix/bluspawn_cliff_right_phys.mdl" PrecacheModel "models/props_frostwynd/spawnfix/bluspawn_cliff_left_phys.mdl" PrecacheModel "models/props_frostwynd/spawnfix/bluspawn_main_floor_v2.mdl" // Ghosts! o0o0o0o PrecacheModel "models/props_halloween/ghost_no_hat.mdl" PrecacheModel "models/props_halloween/ghost_no_hat_red.mdl" PrecacheParticle "env_snow_light_001" ItemWhitelist { ItemSlot "Melee" ItemSlot "Action" ItemSlot "PDA" ItemSlot "PDA2" ItemSlot "Head" ItemSlot "Misc" ItemSlot "Misc2" // Allowed "saxxy" // Allowed "tf_weapon_breakable_sign" // ItemName "Rocket Jumper" // ItemName "Stickybomb Jumper" Allowed "tf_weapon_lunchbox_drink" Allowed "tf_weapon_jar_milk" Allowed "tf_weapon_cleaver" // Allowed "tf_weapon_bat" // Allowed "tf_weapon_bat_wood" // Allowed "tf_weapon_bat_fish" // Allowed "tf_weapon_bat_giftwrap" Allowed "tf_weapon_buff_item" Allowed "tf_weapon_parachute" // Allowed "tf_weapon_shovel" // Allowed "tf_weapon_katana" // Allowed "tf_weapon_fireaxe" // Allowed "tf_weapon_slap" Allowed "tf_weapon_jar_gas" // Allowed "tf_weapon_flaregun" // Allowed "tf_weapon_flaregun_revenge" Allowed "tf_weapon_rocketpack" Allowed "tf_weapon_cannon" Allowed "tf_wearable_demoshield" // Allowed "tf_weapon_bottle" // Allowed "tf_weapon_sword" // Allowed "tf_weapon_stickbomb" Allowed "tf_weapon_lunchbox" // Allowed "tf_weapon_fists" // Allowed "tf_weapon_wrench" // Allowed "tf_weapon_robot_arm" Allowed "tf_weapon_shotgun_building_rescue" // Allowed "tf_weapon_mechanical_arm" // Allowed "tf_weapon_laser_pointer" // Allowed "tf_weapon_pda_engineer_build" // Allowed "tf_weapon_pda_engineer_destroy" Allowed "tf_weapon_builder" Allowed "tf_weapon_crossbow" // Allowed "tf_weapon_syringegun_medic" // Allowed "tf_weapon_bonesaw" Allowed "tf_weapon_compound_bow" Allowed "tf_weapon_jar" // Allowed "tf_weapon_club" // Allowed "tf_weapon_knife" // Allowed "tf_weapon_pda_spy" // Allowed "tf_weapon_invis" Allowed "tf_wearable" // Allowed "tf_powerup_bottle" // Allowed "tf_weapon_spellbook" Allowed "no_entity" //taunts //Unique. Used for rages and special abilities Allowed "tf_weapon_soda_popper" Allowed "tf_weapon_scattergun" Allowed "tf_weapon_handgun_scout_primary" Allowed "tf_weapon_pep_brawler_blaster" Allowed "tf_weapon_flamethrower" Allowed "tf_weapon_minigun" Allowed "tf_weapon_shotgun_primary" Allowed "tf_weapon_sentry_revenge" Allowed "tf_weapon_drg_pomson" Allowed "tf_weapon_medigun" } SpawnTemplate "corelogic" SpawnTemplate "initialize_logic" SpawnTemplate "logic_canteens" SpawnTemplate "moveto_nav_info_targets" SpawnTemplate "botspawn_handler" SpawnTemplate //BLU respawn room main exit gate { Name "blu_rr_exit_gate" Origin "-4738 -704 -26" } SpawnTemplate //final entrance { Name "gate_hatch" Origin "1018 -5 0" Angles "0 0 3" } SpawnTemplate //second entrance { Name "gate" Origin "2228 -1490 -640" Angles "0 90 2.5" } SpawnTemplate //first entrance { Name "gate" Origin "-374.359405 -1243.256225 -836.949157" Angles "0 90 2.5" } SpawnTemplate //tank entrance { Name "gate" Origin "-3464 -1436 -890" Angles "0 90 0" } SpawnTemplate { Name station Origin "-3700 900 -384" Angles "0 -90 0" } SpawnTemplate { Name station Origin "-5352 -194 -384" Angles "0 -90 0" //0 -45 0? } SpawnTemplate { Name station Origin "-4302 -3618 -383" Angles "0 0 0" } /////////////////// /// Map Details /// /////////////////// SpawnTemplate { Name "clipfix1" Origin "-3768 -1440 50" } SpawnTemplate { Name "phys_cliff_right" Origin "-4384 -1824 192" } SpawnTemplate { Name "phys_cliff_left" Origin "-4384 448 192" } SpawnTemplate { Name model_fix_bluspawn_main Origin "-5760 -56 -264" } SpawnTemplate { Name model_fix_bluspawn_main_hill_phys Origin "-4866 -647 -204" } SpawnTemplate { Name model_fix_bluspawn_main_rock1 Origin "-4928 -1088 -368.11" Angles "0 75 0" } SpawnTemplate { Name model_fix_bluspawn_main_rock2 Origin "-4800 216 -409.49" Angles "0 180 0" } SpawnTemplate { Name model_fix_bluspawn_main_rock2 Origin "-4800 -1692 -436.11" Angles "0 180 0" } SpawnTemplate { Name model_fix_bluspawn_main_rock2 Origin "-5696 -1360 -436" Angles "0 90 0" } SpawnTemplate { Name model_fix_bluspawn_main_skycard Origin "-6400 -672 -376" Angles "0 1 0" } // SpawnTemplate // { // Name model_fix_bluspawn_left // Origin "-3035 669 -456" // } // SpawnTemplate // { // Name model_fix_bluspawn_right // Origin "-4048 -3184 -304" // } SpawnTemplate { Name particle_snow_viaduct Origin "-5384 -709 43" } SpawnTemplate { Name model_fix_collision_rock07 Origin "-3720 -382 -654" } SpawnTemplate { Name model_fix_collision_rock02a Origin "-3950 -1604 -338" } SpawnTemplate //right spawn { Name model_fix_bluspawn_right_rock3 Origin "-3936 -2720 -226" Angles "0 101 0" } SpawnTemplate //left spawn { Name model_fix_bluspawn_left_rock4 Origin "-3552 480 -553.18" Angles "0 305 0" } ///Point_Viewcontrol SpawnTemplate "summon_pointviewcontrol" PointTemplates { summon_pointviewcontrol { NoFixUp 1 point_viewcontrol { "targetname" "summon_cam" "angles" "16 119 0" "acceleration" "200" "deceleration" "128" "moveto" "path_pointviewcontrol_1" "target" "spawn_summoned_robot" "speed" "0" "wait" "10" "spawnflags" "28" } env_fade { "targetname" "summon_fadein" "duration" "0.25" "holdtime" "1" "rendercolor" "255 255 255" "spawnflags" "0" } env_fade { "targetname" "summon_fadeout" "duration" "0.25" "holdtime" "0.5" "rendercolor" "255 255 255" "spawnflags" "9" } func_tracktrain { "targetname" "train_pointviewcontrol" "target" "path_pointviewcontrol_1" "angles" "16 119 0" "orientationtype" "3" "spawnflags" "522" "speed" "0" "startspeed" "0" "wheels" "50" } logic_measure_movement { "targetname" "measure_movement_pointviewcontrol" "MeasureReference" "train_pointviewcontrol" "MeasureTarget" "train_pointviewcontrol" "MeasureType" "0" "Target" "summon_cam" "TargetReference" "train_pointviewcontrol" "TargetScale" "1" } path_track { "targetname" "path_pointviewcontrol_1" "target" "path_pointviewcontrol_2" "origin" "-2560 -2193 -509" } path_track { "targetname" "path_pointviewcontrol_2" "origin" "-2893 -1436 -603" } } } ////////////////////////// /// Summon Robots Here /// ////////////////////////// ExtraSpawnPoint { Name "spawn_summoned_robot" StartDisabled 1 TeamNum 2 X "-3253" Y "-951" Z "-789" } ///details SpawnTemplate { Name candle Origin "-3177 -1046 -883" } SpawnTemplate { Name candle Origin "-3270 -1054 -881" } SpawnTemplate { Name candle Origin "-3338 -990 -876" } SpawnTemplate { Name candle Origin "-3318 -892 -872" } SpawnTemplate { Name candle Origin "-3229 -857 -872" } SpawnTemplate { Name candle Origin "-3150 -915 -877" } ///////////////////////// /// Enemy Spawnpoints /// ///////////////////////// ///////////// /// River /// ///////////// ////////// // left // ////////// SpawnTemplate { Name model_river_left_collision Origin "-2480 847 -961" Angles "0 15 0" } SpawnTemplate { Name model_river_left_collision_2 Origin "-1630 983 -964" Angles "0 90 0" } ExtraSpawnPoint //use for river_left { Name "spawnenemy_river_preteleport" TeamNum 2 X "1094" Y "-3549" Z "128" } ExtraSpawnPoint { Name "spawnenemy_river_left" TeamNum 2 X "-1697" Y "1346" Z "-937" } SpawnTemplate { Name blocker_river_left Origin "-1974 740 -961" } // right river, in cave ExtraSpawnPoint { Name "spawnenemy_river_right" TeamNum 2 X "-24" Y "-2850" Z "-610" } //////////// /// Cave /// //////////// ExtraSpawnPoint { Name "spawnenemy_cave_right" //dupe of spawnenemy_river_right TeamNum 2 X "-24" Y "-2850" Z "-610" } SpawnTemplate { Name blocker_cave_water //blocks water area so bots don't try to swim Origin "-79 -2858 -639" } //////////// /// Town /// //////////// ExtraSpawnPoint { Name "spawnenemy_town_rr_exit_right" TeamNum 2 X "1780" Y "-2889" Z "93" } ExtraSpawnPoint { //has two exits: moveto_town_bar_to_upperhill and moveto_town_bar_to_outlook Name "spawnenemy_town_bar" TeamNum 2 X "3454" Y "-191" Z "-98" } ///////////// /// Hatch /////////////// /// Red Respawn Rooms /// ///////////////////////// ExtraSpawnPoint { Name "spawnenemy_hatch_rr_exit_right" //dupe of spawnenemy_town_rr_exit_right TeamNum 2 X "1780" Y "-2889" Z "93" } ExtraSpawnPoint { Name "spawnenemy_hatch_rr_exit_left" TeamNum 2 X "452" Y "-2919" Z "93" } ///////////// /// Debug /// ///////////// ExtraSpawnPoint { Name "spawnbot_red_a1" TeamNum 2 X "-1299" Y "-150" Z "-798" } PointTemplates { botspawn_handler { NoFixup 1 OnSpawnOutput { Target "gate_destroyed_botspawn_handler" Action "Add" Param "1" } /// Each time a gate is destroyed, add 1 to me and send it to the logic_case to be evaluated math_counter { "targetname" "gate_destroyed_botspawn_handler" "min" "0" "max" "4" "OutValue" "gate_destroyed_botspawn_handler_case,InValue,,0,-1" // allows players to deploy bomb when VIP does, but only if past Cave area "OutValue" "gate_compare_summoned_robot_bomb_area,SetValue,,0,-1" "OnGetValue" "gate_compare_summoned_robot_bomb_area,Compare,,0,-1" } logic_case { "targetname" "gate_destroyed_botspawn_handler_case" "Case01" "1" //River "Case02" "2" //Cave "Case03" "3" //Town "Case04" "4" //Hatch "OnCase01" "spawnenemy_*,Disable,,0,-1" "OnCase01" "spawnenemy_river*,Enable,,0.1,-1" "OnCase02" "spawnenemy_river*,Disable,,0,-1" "OnCase02" "spawnenemy_cave*,Enable,,0,-1" "OnCase03" "spawnenemy_cave*,Disable,,0,-1" "OnCase03" "spawnenemy_town*,Enable,,0,-1" "OnCase04" "spawnenemy_town*,Disable,,0,-1" "OnCase04" "spawnenemy_hatch*,Enable,,0,-1" } logic_compare //allows players to deploy the bomb if VIP dies, but only if past Cave area { "targetname" "gate_compare_summoned_robot_bomb_area" "CompareValue" "2" //immediately lose if not past Cave area "OnEqualTo" "bots_win_red,RoundWin,,0,-1" "OnLessThan" "bots_win_red,RoundWin,,0,-1" "OnEqualTo" "summoned_robot_bomb*,Kill,,0,-1" "OnLessThan" "summoned_robot_bomb*,Kill,,0,-1" //allow deployment by players if past Cave area "OnGreaterThan" "bomb_annotation*,Show,,0,-1" //shows annotation if VIP dies to tell players still have a chance to win the game } } } Wave ///WAVE 1 { Explanation { Line "MISSION: {9ec34f}SUMMON THE GIANT ROBOT!{reset}" Line "➤ {yellow}Find and bring ingredients to the summoning circle{reset}." Line "➤ {red}You can only respawn with canteens and when you summon THE GIANT ROBOT." } SpawnTemplate { Name "summoning_circle_variant_1" Origin "-3253 -951 -873" } SpawnTemplate { Name "summoning_circle_properties" Origin "-3253 -951 -873" } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } Checkpoint Yes //////////////////////// /// VIP for the wave /// //////////////////////// WaveSpawn { Where spawn_summoned_robot Name "w1_vip" TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 0 TotalCurrency 0 TFBot { SpawnTemplate "summoned_robot_cp" SpawnTemplate "summoned_robot_flag" Template VIP_Mannvich_Monster } } //////////////////////// /// Actual WaveSpawn /// //////////////////////// WaveSpawn { Where spawnenemy_river_preteleport TotalCount 999 MaxActive 5 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 1 TotalCurrency 0 RandomChoice { TFBot { SpawnTemplate "teleport_river_left" Template "FW_Heavy_Eviction" } TFBot { SpawnTemplate "teleport_river_left" Template "FW_Heavy_Eviction" } TFBot { SpawnTemplate "teleport_river_left" Template "FW_Heavy_Eviction" } TFBot { SpawnTemplate "teleport_river_left" SpawnTemplate "equip_fake_teamflag" Item "Fake teamflag" Template "FW_Heavy_Eviction" } } } WaveSpawn { Where spawnenemy_river_right TotalCount 999 MaxActive 2 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 4 TotalCurrency 0 TFBot { SpawnTemplate "equip_fake_teamflag" Item "Fake teamflag" Template "FW_Heavy_Eviction" AddTemplate "moveto_cave_rightspawn" } } WaveSpawn { Where spawnenemy_river_right TotalCount 999 MaxActive 4 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 1 TotalCurrency 0 TFBot { Template "FW_Heavy_Eviction" AddTemplate "moveto_cave_rightspawn" } } /// When VIP has spawned... /// These are in addition to above enemies WaveSpawn { Where spawnenemy_river_preteleport WaitForAllSpawned "w1_vip" TotalCount 999 MaxActive 5 SpawnCount 1 WaitBeforeStarting 2 WaitBetweenSpawns 2 TotalCurrency 0 TFBot { SpawnTemplate "teleport_river_left" Template "FW_Heavy_Eviction" } } WaveSpawn { Where spawnenemy_river_right WaitForAllSpawned "w1_vip" TotalCount 999 MaxActive 5 SpawnCount 1 WaitBeforeStarting 2 WaitBetweenSpawns 2 TotalCurrency 0 TFBot { Template "FW_Heavy_Eviction" AddTemplate "moveto_cave_rightspawn" } } WaveSpawn { Where spawnenemy_cave_right TotalCount 999 MaxActive 15 SpawnCount 2 WaitBeforeStarting 5 WaitBetweenSpawns 2 TotalCurrency 0 RandomChoice { TFBot { Template "FW_Heavy_Eviction" AddTemplate "moveto_cave_to_town_exit" } TFBot { Template "FW_Heavy_Eviction" AddTemplate "moveto_cave_to_town_exit" } TFBot { SpawnTemplate "teleport_river_left" Template "FW_Heavy_Eviction" } } } WaveSpawn { Where spawnenemy_town_rr_exit_right Name "1a_a" TotalCount 999 MaxActive 12 SpawnCount 3 WaitBeforeStarting 1 WaitBetweenSpawns 2 TotalCurrency 0 TFBot { Template "FW_Heavy_Eviction" AddTemplate "moveto_town_right_outside_parapet" } } WaveSpawn { Where spawnenemy_town_bar Name "1a_a" TotalCount 999 MaxActive 12 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 1 TotalCurrency 0 RandomChoice { TFBot { Template "FW_Heavy_Eviction" AddTemplate "moveto_town_bar_to_upperhill" } TFBot { Template "FW_Heavy_Eviction" AddTemplate "moveto_town_bar_to_outlook" } } } WaveSpawn { Where spawnenemy_hatch_rr_exit_left Name "1a_a" TotalCount 999 MaxActive 12 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 1 TotalCurrency 0 TFBot { Template "FW_Heavy_Eviction" AddTemplate "moveto_hatch_rr_left_exit" } } } Wave ///WAVE 2 { Explanation { Line "MISSION: {9ec34f}SUMMON THE GIANT ROBOT!{reset}" Line "➤ {yellow}Find and bring ingredients to the summoning circle{reset}." Line "➤ {red}Try not to die so much. You can only respawn with canteens and when you summon THE GIANT ROBOT." Line "{red}(If you summon it, that is)" } SpawnTemplate { Name "summoning_circle_variant_2" Origin "-3253 -951 -873" } SpawnTemplate { Name "summoning_circle_properties" Origin "-3253 -951 -873" } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } Checkpoint Yes //////////////////////// /// VIP for the wave /// //////////////////////// WaveSpawn { Where spawn_summoned_robot Name "w1_summoning_circle" TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 0 TotalCurrency 0 TFBot { SpawnTemplate "summoned_robot_cp" SpawnTemplate "summoned_robot_flag" Template VIP_Boxing_Heavy } } //////////////////////// /// Actual WaveSpawn /// //////////////////////// WaveSpawn { Where spawnenemy_river_preteleport TotalCount 999 MaxActive 12 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 1 TotalCurrency 0 TFBot { SpawnTemplate "teleport_river_left" SpawnTemplate "equip_fake_teamflag" Item "Fake teamflag" Template "FW_Heavy_KGB" } } WaveSpawn { Where spawnenemy_river_right TotalCount 999 MaxActive 12 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 1 TotalCurrency 0 TFBot { SpawnTemplate "equip_fake_teamflag" Item "Fake teamflag" Template "FW_Heavy_KGB" AddTemplate "moveto_cave_rightspawn" } } WaveSpawn { Where spawnenemy_cave_right TotalCount 999 MaxActive 12 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 1 TotalCurrency 0 TFBot { SpawnTemplate "equip_fake_teamflag" Item "Fake teamflag" Template "FW_Heavy_KGB" AddTemplate "moveto_cave_to_town_exit" } } WaveSpawn { Where spawnenemy_town_rr_exit_right Name "1a_a" TotalCount 999 MaxActive 12 SpawnCount 3 WaitBeforeStarting 1 WaitBetweenSpawns 2 TotalCurrency 0 TFBot { SpawnTemplate "equip_fake_teamflag" Item "Fake teamflag" Template "FW_Heavy_KGB" AddTemplate "moveto_town_right_outside_parapet" } } WaveSpawn { Where spawnenemy_town_bar Name "1a_a" TotalCount 999 MaxActive 12 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 1 TotalCurrency 0 RandomChoice { TFBot { SpawnTemplate "equip_fake_teamflag" Item "Fake teamflag" Template "FW_Heavy_KGB" AddTemplate "moveto_town_bar_to_upperhill" } TFBot { SpawnTemplate "equip_fake_teamflag" Item "Fake teamflag" Template "FW_Heavy_KGB" AddTemplate "moveto_town_bar_to_outlook" } } } WaveSpawn { Where spawnenemy_hatch_rr_exit_left Name "1a_a" TotalCount 999 MaxActive 12 SpawnCount 1 WaitBeforeStarting 1 WaitBetweenSpawns 1 TotalCurrency 0 TFBot { SpawnTemplate "equip_fake_teamflag" Item "Fake teamflag" Template "FW_Heavy_KGB" AddTemplate "moveto_hatch_rr_left_exit" } } } PointTemplates { ////////////////// /// Main Logic /// ////////////////// corelogic { NoFixup 1 logic_auto { "OnMapSpawn" "func_flagdetectionzone,Kill,,0,-1" } logic_relay //trigger this to kill all players and buildings { "targetname" "kill_relay" "OnTrigger" "obj_dispenser,RemoveHealth,5000,0,-1" "OnTrigger" "obj_sentrygun,RemoveHealth,5000,0,-1" "OnTrigger" "obj_teleporter,RemoveHealth,5000,0,-1" "OnTrigger" "player,SetHealth,-10000,0,-1" } logic_relay //trigger this to lose { "targetname" "redwin_relay" "OnTrigger" "bots_win_red,RoundWin,,0,-1" "OnTrigger" "pit_explosion_wav,PlaySound,,0,-1" //map dependent "OnTrigger" "failuresound,PlaySound,,0,-1" //map dependent } game_round_win { "TeamNum" "2" "targetname" "bots_win_red" "switch_teams" "0" "force_map_reset" "1" } ///inwave logic /// logic_relay is used for buildings and something else?? logic_branch { "targetname" "logic_ghost_mode_if_in_wave" // "OnTrue" "!activator,$AddCond,76,0,-1" } logic_relay //used for buildings and ??? { "targetname" "relay_in_wave" "OnSpawn" "!self,$SetVar$InWave,1,0,-1" } OnSpawnOutput { Target "wave_start_relay" Action "AddOutput" Param "OnTrigger relay_in_wave:$SetVar$InWave:0:0:-1" } OnSpawnOutput { Target "wave_start_relay" Action "AddOutput" Param "OnTrigger logic_ghost_mode_if_in_wave:SetValue:1:0:-1" } OnSpawnOutput { Target "wave_finished_relay" Action "AddOutput" Param "OnTrigger relay_in_wave:$SetVar$InWave:1:0:-1" //prolly not necessary but adding it anyway } OnSpawnOutput { Target "wave_finished_relay" Action "AddOutput" Param "OnTrigger logic_ghost_mode_if_in_wave:SetValue:0:0:-1" } //game mode logic //payload robots are cool OnSpawnOutput { Target "capturezone_blue" Action "Disable" } OnSpawnOutput { Target "wave_start_relay" Action "AddOutput" Param "OnTrigger item_teamflag:ForceDrop::0.08:-1" } OnSpawnOutput { Target "wave_start_relay" Action "AddOutput" Param "OnTrigger item_teamflag:Disable::0.11:-1" } OnSpawnOutput { Target "wave_start_relay" Action "AddOutput" Param "OnTrigger item_teamflag:$SetProp$m_bVisibleWhenDisabled:1:0.11:-1" } OnSpawnOutput { Target "wave_start_relay" Action "AddOutput" Param "OnTrigger item_teamflag:$SetLocalOrigin:1015 -1774 -167:0.11:-1" } OnSpawnOutput { Target "item_teamflag" Action "$SetLocalOrigin" Param "1015 -1774 -167" //OOB zone } /// fixes the CP on bomb deployment OnSpawnOutput { Target "func_capturezone" Action "AddOutput" Param "OnCapture robot_cp:HideModel::0:-1" } /// adding map logic! // team_control_point_master //for some reason gives parsing errors. It's fine, I tell you! // { // "targetname" "team_control_point_master" // "cpm_restrict_team_cap_win" "1" // "switch_teams" "0" // "play_all_rounds" "0" // "score_style" "1" // "partial_cap_points_rate" "0" // "caplayout" "0" // "custom_position_x" "0.4" // "custom_position_y" "-1" // "team_base_icon_2" "sprites/obj_icons/icon_base_red" // "team_base_icon_3" "sprites/obj_icons/icon_base_blu" // } tf_point_nav_interface { "targetname" "nav_interface" } /// Removing easter egg OnSpawnOutput { Target "music_timer" Action "Kill" } /// When summon is complete, test this every time a bot spawns with a flag logic_branch { "targetname" "test_summon_complete" "OnTrue" "summoning_ingredient*,ForceDrop,,0,-1" "OnTrue" "summoning_ingredient*,Disable,,0.01,-1" "OnTrue" "summoning_ingredient*,Kill,,0.01,-1" "OnTrue" "player,$RemoveItem,Fake teamflag,0,-1" "OnTrue" "player,$SetVar$HasIngredient,0,0,-1" "OnTrue" "!activator,$SetProp$m_bGlowEnabled,0,0,-1" "OnTrue" "drop_intel_parent*,Kill,,0,-1" "OnFalse" "!activator,$SetProp$m_bGlowEnabled,1,0,-1" } /// Resets inventory to ensure players have all needed updates to their items OnSpawnOutput { Target "wave_start_relay" Action "AddOutput" Param "OnTrigger player_*:$ResetInventory::0:-1" } OnSpawnOutput { Target "wave_start_relay" Action "AddOutput" Param "OnTrigger player_*:$RefillAmmo::0:-1" } } initialize_logic { NoFixup 1 /// DEBUG: summoning robots is cool logic_relay { "targetname" "relay_spawn_summoned_robot" "OnTrigger" "spawn_summoned_robot,Enable,,0,-1" "OnTrigger" "player,$DisplayTextChat,SUMMONING A ROBOT,0,-1" } /// Removes certain player respawn points in inaccessible areas OnSpawnOutput { Target "spawnbot_rand" Action "Kill" } OnSpawnOutput { Target "spawnbot_right" Action "Kill" } OnSpawnOutput { Target "spawnbot_left" Action "Kill" } OnSpawnOutput { Target "spawnbot_mission_*" Action "Kill" } /// Fix other robots taking name of summoned_robot OnSpawnOutput { Target "player" Action "$SetKey$targetname" Param "" } OnSpawnOutput { Target "player" Action "$SetVar$HasIngredient" Param "0" } /// Entity Makers env_entity_maker { "targetname" "m_scroll_flag" "EntityTemplate" "scroll_flag" } env_entity_maker { "targetname" "m_ballista_igniter" "EntityTemplate" "t_ballista_igniter" } env_entity_maker { "targetname" "m_ballista_mini_madmilk" "EntityTemplate" "t_ballista_mini_madmilk" } /// health pack maker env_entity_maker { "targetname" "m_drop_healthkit_small" "EntityTemplate" "t_drop_healthkit_small" "PostSpawnDirection" "-90 0 0" "PostSpawnDirectionVariance" "0.21" "PostSpawnInheritAngles" "0" "PostSpawnSpeed" "400" } /// Filters filter_base { "targetname" "yaki_filter_noteam" "Negated" "1" } filter_activator_tfteam { "targetname" "yaki_filter_red" "teamnum" "2" } filter_activator_tfteam { "targetname" "yaki_filter_blu" "teamnum" "3" } filter_activator_name { "targetname" "yaki_filter_player" "filtername" "player_*" } filter_activator_name { "targetname" "yaki_filter_not_player" "filtername" "player_*" "Negated" "1" } filter_activator_name { "targetname" "filter_summoned_robot" "filtername" "summoned_robot" } filter_tf_class { "targetname" "yaki_filter_pyro" "tfclass" "7" } filter_activator_class { "targetname" "yaki_filter_sentrygun" "filterclass" "obj_sentrygun" } filter_tf_condition { "targetname" "yaki_filter_cond_stunned_15" "condition" "15" } filter_tf_bot_has_tag { "targetname" "yaki_filter_bot_common" "tags" "common" "require_all_tags" "1" } filter_tf_bot_has_tag { "targetname" "yaki_filter_bot_giant" "tags" "giant" "require_all_tags" "1" } $filter_sendprop { "targetname" "yaki_filter_player_stunned" "$name" "m_iStunFlags" "$value" "0" "$compare" "greater than" } filter_tf_condition { "targetname" "yaki_filter_cond_sappedrobot_71" "condition" "71" } filter_multi { "targetname" "yaki_filter_charmer_sapper" "filter01" "yaki_filter_red" "filter02" "yaki_filter_cond_sappedrobot_71" } $filter_variable { "targetname" "filter_var_InThirdPerson" "$name" "InThirdPerson" "$value" "1" "$compare" "equal" "OnPass" "!activator,SetForcedTauntCam,0,0,-1" "OnPass" "!activator,AddOutput,OnUser4 !activator:SetForcedTauntCam:1:0:1,0,-1" } filter_tf_class { "targetname" "yaki_filter_not_engineer" "tfclass" "9" "Negated" "1" } /// Boss Health Bar removal OnSpawnOutput { Target "monster_resource" Action "$SetClientProp$m_iBossHealthPercentageByte" Param "0" } OnSpawnOutput { Target "tf_gamerules" Action "$SetBossState" Param "0" } ////////////////////////////// /// Demo Sword Decap Logic ////////////////////////////////////////////////////////////////////// /// Equipping a sword executes logic to send the item definition index value to a logic_case. ///////////////////// /// This Case adds an output to the parent of the weapon (the player themselves), to fix the stats on resupply. /// /// The decap head recalc logic is triggered on kill. Check the weapons at the bottom. //////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////// logic_case { "targetname" "logic_recalc_heads_any_sword" "Case01" "172" //skullcutter "Case02" "327" //claidheamohmor "Case03" "404" //persian persuader "OnCase01" "@p@!activator,AddOutput,OnUser4 skullcutter_decap_calc_stats:Trigger::0:1,0,-1" "OnCase02" "@p@!activator,AddOutput,OnUser4 claid_decap_calc_stats:Trigger::0:1,0,-1" "OnCase03" "@p@!activator,AddOutput,OnUser4 persuader_decap_calc_stats:Trigger::0:1,0,-1" "OnDefault" "@p@!activator,$FireUserAsActivator4,,0,-1" } logic_relay { "targetname" "skullcutter_decap_calc_stats" /// Skullcutter, on kill, gives +10% damage and +25% healing from all sources (up to 4) "OnTrigger" "!activator,$AddItemAttribute,$$='damage bonus|'..?(!activator.m_iDecapitations < 5,1.2 + (!activator.m_iDecapitations * 0.1),1.6)..'|2',0,-1" "OnTrigger" "!activator,$AddItemAttribute,$$=?(!activator.m_iDecapitations != 0,,'healing received bonus|'..?(!activator.m_iDecapitations < 5,1 + (!activator.m_iDecapitations * 0.25),2)..'|2'),0,-1" "OnTrigger" "!activator,$SetVar$HealingAuraVar,$$=(5 * clamp(int(attribute(playeritematslot(!activator,2),'healing received bonus')),1,9)),0.3,-1" //should fix the healing amount from Healing Canteen "OnTrigger" "!activator,$AddPlayerAttribute,$$='hidden maxhealth non buffed|'..?(!activator.m_iDecapitations < 5,0 - (!activator.m_iDecapitations * 15),0 - 60),0,-1" "OnTrigger" "!activator,$AddPlayerAttribute,$$='major move speed bonus|'..?(!activator.m_iDecapitations < 5,1 - (!activator.m_iDecapitations * 0.06),0.78),0,-1" "OnTrigger" "!activator,$AddCond,32 0,0,-1" } logic_relay { "targetname" "claid_decap_calc_stats" /// Claid, on kill, gives +0.5 charge distance and +3 health regen (up to 5) "OnTrigger" "!activator,$AddItemAttribute,$$=?(!activator.m_iDecapitations != 0,,'health regen|'..?(!activator.m_iDecapitations < 6,!activator.m_iDecapitations * 3,15)..'|2'),0,-1" "OnTrigger" "!activator,$AddItemAttribute,$$='charge time increased|'..?(!activator.m_iDecapitations < 6,0.5 + (!activator.m_iDecapitations * 0.5),3)..'|2',0,-1" "OnTrigger" "!activator,$AddPlayerAttribute,$$='hidden maxhealth non buffed|'..?(!activator.m_iDecapitations < 5,0 - (!activator.m_iDecapitations * 15),0 - 60),0,-1" "OnTrigger" "!activator,$AddPlayerAttribute,$$='major move speed bonus|'..?(!activator.m_iDecapitations < 5,1 - (!activator.m_iDecapitations * 0.06),0.78),0,-1" "OnTrigger" "!activator,$AddCond,32 0,0,-1" } logic_relay { "targetname" "persuader_decap_calc_stats" /// Persuader, on kill, gives +25% jump height and charge recharge rate (up to 4) "OnTrigger" "!activator,$AddItemAttribute,$$=?(!activator.m_iDecapitations != 0,,'increased jump height from weapon|'..?(!activator.m_iDecapitations < 5,float(1 + (!activator.m_iDecapitations * 0.25)),2)..'|2'),0,-1" "OnTrigger" "!activator,$AddItemAttribute,$$='charge recharge rate increased|'..?(!activator.m_iDecapitations < 5,float(1 + (!activator.m_iDecapitations * 0.5)),3)..'|2',0,-1" "OnTrigger" "!activator,$AddPlayerAttribute,$$='hidden maxhealth non buffed|'..?(!activator.m_iDecapitations < 5,0 - (!activator.m_iDecapitations * 15),0 - 60),0,-1" "OnTrigger" "!activator,$AddPlayerAttribute,$$='major move speed bonus|'..?(!activator.m_iDecapitations < 5,1 - (!activator.m_iDecapitations * 0.06),0.78),0,-1" "OnTrigger" "!activator,$AddCond,32 0,0,-1" } /////////////////////////////////////////////////////////////////////////////////// /// trigger_brush (named game_playerdie) fires OnUse when a player or bot dies. /// /// Can trace !activator from this brush ////////////////////////////////////////// //////////////////////////////////////////// /// Bugs are /// (1) attr 'min respawn time' does not work /// (2) teleporter particles only work on players that trigger game_playerdie (and not on anyone that didn't) // trigger_brush // { // "targetname" "game_playerdie" // "OnUse" "!activator,$AddPlayerAttribute,$$='min respawn time|'..clamp(int(attribute(!activator,'min respawn time')),1,30) * 2,0,-1" // "OnUse" "yaki_filter_can_revive,TestActivator,,0,-1" // // "OnUse" "!activator,$AddCond,66,0.01,-1" //for ghost condition. Makes player invisible to bots in ghost mode (or it's supposed to) // "OnUse" "yaki_filter_revive_player_is_ghost,TestActivator,,0.5,-1" //for ghost condition. Makes player able to 'scare' bots (using entity "game_ui") // } $filter_sendprop { "targetname" "yaki_filter_revive_canteen_player_lifestate" "$name" "m_lifeState" "$value" "0" "$compare" "greater than" "OnPass" "relay_revive_canteen,Trigger,,0,-1" } filter_tf_condition { "targetname" "yaki_filter_revive_player_is_ghost" "condition" "77" "OnPass" "!activator,$FireUserAsActivator5,,0,-1" //for ghost condition. Makes player able to 'scare' bots (using entity "game_ui") } filter_multi { "targetname" "yaki_filter_can_revive" // "filter01" "yaki_filter_revive_canteen_player_lifestate" //for when players don't become ghosts, re-enable this "filter01" "yaki_filter_revive_player_is_ghost" //comment out/delete this if players don't become ghosts on death "filter02" "yaki_filter_blu" "filter03" "yaki_filter_player" "OnPass" "relay_revive_canteen,Trigger,,0,-1" } logic_relay { "targetname" "relay_revive_canteen" "StartDisabled" "1" "spawnflags" "2" //fast retrigger rate "OnTrigger" "!activator,$RemoveOutput,OnUser3,1,-1" "OnTrigger" "!activator,$ForceRespawnDead,,1,-1" "OnTrigger" "!activator,$AddCond,6 5,1.1,-1" "OnTrigger" "player,$DisplayTextChat,$$=?(!activator.m_lifeState > 0,'{blue}{activator}{reset} has been {9ec34f}REVIVED{reset} by a Power Up Canteen!',),1,-1" "OnTrigger" "!activator,$AddCond,57 4,0,-1" //Is Ghost condition. Delete if players don't become ghosts in mission "OnTrigger" "!activator,$AddCond,76,1,-1" //Is Ghost condition. Delete if players don't become ghosts in mission "OnTrigger" "!activator,$WeaponSwitchSlot,2,1,-1" //fixes Heavy minigun exploit "OnTrigger" "!activator,$RemoveCond,77,1,-1" //Is Ghost condition. Delete if players don't become ghosts in mission "OnTrigger" "!activator,SetHealth,450,1,-1" //Is Ghost condition. Delete if players don't become ghosts in mission "OnTrigger" "!activator,$RemoveCond,66,1,-1" //Is Ghost condition. Delete if players don't become ghosts in mission "OnTrigger" "!activator,$FireUserAsActivator6,,1,-1" //Is Ghost condition. Delete if players don't become ghosts in mission } math_counter { "targetname" "timer_revive_canteen" "min" "0" "max" "30" "OutValue" "@f@yaki_filter_can_revive@player_*,$RemoveOutput,OnUser3,0,-1" "OutValue" "@f@yaki_filter_can_revive@player_*,AddOutput,OnUser3 relay_revive_canteen:Trigger::0:1,0.1,-1" "OutValue" "@f@yaki_filter_can_revive@player_*,$FireUserAsActivator3,,0.2,-1" "OutValue" "timer_revive_canteen_countdown,Trigger,,0,-1" "OnHitMin" "relay_revive_canteen,Disable,,0,-1" "OnHitMin" "timer_revive_canteen_countdown,CancelPending,,0.1,-1" } logic_relay { "targetname" "timer_revive_canteen_countdown" "OnTrigger" "timer_revive_canteen,Subtract,1,1,-1" } // for "players become ghosts on death" missions // OnSpawnOutput // { // Target "wave_start_relay" // Action "AddOutput" // Param "OnTrigger player:$AddCond:76:0:-1" //condition for player becoming a ghost on death // } //debugging purposes logic_relay { "targetname" "debug_revive" "spawnflags" "2" //fast retrigger rate "OnTrigger" "player_*,$ForceRespawnDead,,0,-1" "OnTrigger" "player_*,$AddCond,6 5,0.1,-1" "OnTrigger" "player,$DisplayTextChat,$$=?(!activator.m_lifeState > 0,'{blue}{activator}{reset} has been {9ec34f}REVIVED{reset} by a Power Up Canteen!',),1,-1" "OnTrigger" "player_*,$AddCond,57 4,0,-1" //Is Ghost condition. Delete if players don't become ghosts in mission "OnTrigger" "player_*,$AddCond,76,1,-1" //Is Ghost condition. Delete if players don't become ghosts in mission "OnTrigger" "player_*,$WeaponSwitchSlot,2,1,-1" //fixes Heavy minigun exploit "OnTrigger" "player_*,$RemoveCond,77,1,-1" //Is Ghost condition. Delete if players don't become ghosts in mission "OnTrigger" "player_*,SetHealth,450,1,-1" //Is Ghost condition. Delete if players don't become ghosts in mission "OnTrigger" "player_*,$RemoveCond,66,1,-1" //Is Ghost condition. Delete if players don't become ghosts in mission "OnTrigger" "player_*,$FireUserAsActivator6,,1,-1" //Is Ghost condition. Delete if players don't become ghosts in mission } ////////////////////////////////// /// Medigun Naming logic_cases /// ////////////////////////////////// logic_case { "targetname" "logic_find_medigun" "Case01" "35" //The Kritzkrieg "Case02" "411" //The Quick-Fix "Case03" "998" //The Vaccinator "Case04" "29" //Stock TF_WEAPON_MEDIGUN "Case05" "211" //Upgradeable TF_WEAPON_MEDIGUN "Case06" "663" //Festive Medigun 2011 "Case07" "796" //Silver Botkiller Medi Gun Mk.I "Case08" "805" //Gold Botkiller Medi Gun Mk.I "Case09" "885" //Rust Botkiller Medi Gun Mk.I "Case10" "894" //Blood Botkiller Medi Gun Mk.I "Case11" "903" //Carbonado Botkiller Medi Gun Mk.Iv "Case12" "912" //Diamond Botkiller Medi Gun Mk.I "Case13" "961" //Silver Botkiller Medi Gun Mk.II "Case14" "970" //Gold Botkiller Medi Gun Mk.II "Case15" "15008" //concealedkiller_medigun_maskedmender "OnCase01" "@p@!activator,$AddItemAttribute,medigun charge is crit boost|1|1,0,-1" "OnCase02" "@p@!activator,$AddItemAttribute,medigun charge is megaheal|2|1,0,-1" "OnCase03" "@p@!activator,$AddItemAttribute,medigun charge is resists|3|1,0,-1" "OnCase01" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase02" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase03" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase04" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase05" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase06" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase07" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase08" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase09" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase10" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase11" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase12" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase13" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase14" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase15" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" } logic_case { "targetname" "logic_find_medigun" "Case01" "15010" //concealedkiller_medigun_wrappedreviver "Case02" "15025" //craftsmann_medigun_reclaimedreanimator "Case03" "15039" //teufort_medigun_civilservant "Case04" "15050" //powerhouse_medigun_sparkoflife "Case05" "15078" //harvest_medigun_wildwood "Case06" "15097" //pyroland_medigun_flowerpower "Case07" "15120" //gentlemanne_medigun_coffinnail "Case08" "15121" //gentlemanne_medigun_dressedtokill "Case09" "15122" //gentlemanne_medigun_highrollers "Case10" "15145" //warbird_medigun_blitzkrieg "Case10" "15146" //warbird_medigun_corsair "OnCase01" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase02" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase03" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase04" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase05" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase06" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase07" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase08" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase09" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" "OnCase10" "!activator,$SetKey$targetname,$$='medigun_'..@p@!activator.EntIndex,0,-1" } ////////////////////////////////// /// Canteen Naming Logic_cases /// ////////////////////////////////// logic_case { "targetname" "logic_find_canteen" "Case01" "489" //Power Up Canteen (MvM) "Case02" "1163" //Default Power Up Canteen (MvM) "Case03" "30015" //Battery Canteens "Case04" "30535" //Kritz Or Treat Canteen "OnCase01" "!activator,AddOutput,$$='targetname canteen_'..@p@!activator.EntIndex,0,-1" "OnCase02" "!activator,AddOutput,$$='targetname canteen_'..@p@!activator.EntIndex,0,-1" "OnCase03" "!activator,AddOutput,$$='targetname canteen_'..@p@!activator.EntIndex,0,-1" "OnCase04" "!activator,AddOutput,$$='targetname canteen_'..@p@!activator.EntIndex,0,-1" } } t_drop_healthkit_small { KeepAlive 1 OnSpawnOutput { Target "drop_healthkit_small" Action "Kill" Delay 30 } OnSpawnOutput { Target "drop_healthkit_small" Action "ClearParent" Delay 5 } OnSpawnOutput { Target "drop_healthkit_small_physics" Action "Kill" Delay 5.1 } item_healthkit_small { "targetname" "drop_healthkit_small" "parentname" "drop_healthkit_small_physics" "origin" "0 0 16" "AutoMaterialize" "0" // "powerup_model" "models/props_medieval_pickups/medkit_small_meat.mdl" "skin" "0" "TeamNum" "3" "OnPlayerTouch" "drop_healthkit_small_physics,Kill,,0,1" } item_powerup_rune { "targetname" "drop_healthkit_small_physics" "origin" "0 0 8" "disableshadows" "1" "modelscale" "0" "teamnum" "4" "AutoMaterialize" "0" } } station //all-in-one upgrade station template { func_upgradestation { "mins" "-105 -100 0" "maxs" "105 100 242" } prop_dynamic { "DisableBoneFollowers" "1" "disablereceiveshadows" "0" "disableshadows" "0" "model" "models\props_mvm\mvm_upgrade_blu_center.mdl" "solid" "6" "fademaxdist" "1500" "fademindist" "1400" } prop_dynamic { "DisableBoneFollowers" "1" "disablereceiveshadows" "0" "disableshadows" "0" "model" "models\props_mvm\mvm_upgrade_blu_tools.mdl" "solid" "0" "fademaxdist" "1500" "fademindist" "1400" } func_upgradestation { "mins" "-100 -100 0" "maxs" "90 60 100" } prop_dynamic { "targetname" "shopcollision" "angles" "0 -90 0" "DisableBoneFollowers" "1" "disablereceiveshadows" "1" "model" "models/props_vehicles/train_flatcar_container.mdl" "disableshadows" "1" "rendermode" "10" "CollisionGroup" "5" "solid" "6" } func_regenerate { "mins" "-105 -100 0" "maxs" "105 100 242" "associatedmodel" "shopcollision" } func_regenerate { "mins" "-100 -100 0" "maxs" "90 60 100" "associatedmodel" "shopcollision" } } gate { prop_dynamic { "targetname" "gate_intact" "model" "models/props_medieval/tank_entrance_rottenburg_intact.mdl" "solid" "6" "DisableBoneFollowers" "1" } prop_dynamic { "targetname" "gate_destruction" "model" "models/props_medieval/tank_entrance_rottenburg.mdl" "StartDisabled" "1" "DefaultAnim" "idle" "DisableBoneFollowers" "1" } ambient_generic { "targetname" "snd_tanksmash" "parentname" "gate" "message" "MVM.TankSmash" "origin" "0 0 32" "radius" "-1" "health" "10" "spawnflags" "49" "pitch" "100" "pitchstart" "100" } trigger_once // When summoned_robot touches this, destroys barrier and pushes robots away { "filtername" "filter_summoned_robot" "maxs" "8 160 224" "mins" "0 -160 0" "spawnflags" "1" "OnStartTouchAll" "gate_intact,Kill,,0,1" "OnStartTouchAll" "nav_interface,RecomputeBlockers,,0.5,1" "OnStartTouchAll" "snd_tanksmash,PlaySound,,0,1" "OnStartTouchAll" "gate_destruction,Enable,,0,1" "OnStartTouchAll" "gate_destruction,SetAnimation,break2,0.1,1" "OnStartTouchAll" "gate_destruction,Kill,,7,1" "OnStartTouchAll" "gate_destroyed_botspawn_handler,Add,1,0,-1" //when added to, changes bot's spawning locations "OnStartTouchAll" "gate_destruction_knockback,Enable,,0,1" "OnStartTouchAll" "gate_destruction_knockback,ApplyImpulse,,0,1" "OnStartTouchAll" "gate_destruction_knockback,Kill,,0.05,1" } trigger_apply_impulse // pushes players/robots away and damaged them { "StartDisabled" "1" "targetname" "gate_destruction_knockback" "origin" "8 0 0" "maxs" "120 200 224" "mins" "0 -200 0" "spawnflags" "1" "impulse_dir" "-45 90 0" "force" "3000" "OnStartTouch" "!activator,$TakeDamage,65,0,-1" } func_nav_avoid { "parentname" "gate_intact" "maxs" "8 320 224" "mins" "0 -320 -200" "tags" "common giant" "team" "-2" } //targets gate and tries to kill it trigger_once { "parentname" "gate_intact" "filtername" "filter_summoned_robot" "maxs" "320 160 224" "mins" "-320 -160 0" "spawnflags" "1" "OnStartTouchAll" "summoned_robot,$BotCommand,interrupt_action -posent snd_tanksmash -lookposent snd_tanksmash,0,-1" } } gate_hatch { OnSpawnOutput { Target "nav_interface" Action "RecomputeBlockers" Delay 1 } prop_dynamic { "targetname" "gate_intact" "model" "models/props_medieval/tank_entrance_rottenburg_intact.mdl" "solid" "6" "DisableBoneFollowers" "1" } prop_dynamic { "targetname" "gate_destruction" "model" "models/props_medieval/tank_entrance_rottenburg.mdl" "StartDisabled" "1" "DefaultAnim" "idle" "DisableBoneFollowers" "1" } ambient_generic { "targetname" "snd_tanksmash" "parentname" "gate" "message" "MVM.TankSmash" "origin" "0 0 32" "radius" "1250" "health" "10" "spawnflags" "49" "pitch" "100" "pitchstart" "100" } trigger_once { "filtername" "filter_summoned_robot" "maxs" "160 8 224" "mins" "-160 0 0" "spawnflags" "1" "OnStartTouchAll" "gate_intact,Kill,,0,1" "OnStartTouchAll" "nav_interface,RecomputeBlockers,,0.5,1" "OnStartTouchAll" "snd_tanksmash,PlaySound,,0,1" "OnStartTouchAll" "gate_destruction,Enable,,0,1" "OnStartTouchAll" "gate_destruction,SetAnimation,break2,0.1,1" "OnStartTouchAll" "gate_destruction,Kill,,7,1" "OnStartTouchAll" "gate_destroyed_botspawn_handler,Add,1,0,-1" //when added to, changes bot's spawning locations "OnStartTouchAll" "gate_destruction_knockback,Enable,,0,1" "OnStartTouchAll" "gate_destruction_knockback,ApplyImpulse,,0,1" "OnStartTouchAll" "gate_destruction_knockback,Kill,,0.05,1" } trigger_apply_impulse // pushes players/robots away and damaged them { "StartDisabled" "1" "targetname" "gate_destruction_knockback" "origin" "0 -8 0" "maxs" "200 0 224" "mins" "-200 -120 0" "spawnflags" "1" "impulse_dir" "-45 -90 0" "force" "3000" "OnStartTouch" "!activator,$TakeDamage,65,0,-1" } func_nav_avoid { "parentname" "gate_intact" "maxs" "320 8 224" "mins" "-320 0 -200" "tags" "common giant" "team" "-2" } //targets gate and tries to kill it trigger_once { "parentname" "gate_intact" "filtername" "filter_summoned_robot" "maxs" "160 320 224" "mins" "-160 -320 0" "spawnflags" "1" "OnStartTouchAll" "summoned_robot,$BotCommand,interrupt_action -posent snd_tanksmash -lookposent snd_tanksmash,0,-1" } } summoning_circle_variant_1 { NoFixup 1 // Effects (base) info_particle_system { "targetname" "summoning_circle" // "effect_name" "utaunt_arcane_purple_parent" "effect_name" "utaunt_arcane_green_parent" // "effect_name" "utaunt_arcane_yellow_parent" "start_active" "1" "origin" "0 0 7" } OnSpawnOutput { Target "summoning_circle_prop" Action "$SetLocalAngles" Param "$$='0 '..randomfloat(-360,360)..' 0'" } prop_dynamic { "targetname" "summoning_circle_prop" "parentname" "summoning_circle" // "model" "models/player/items/crafting/halloween2021_case.mdl" "model" "models/player/items/crafting/halloween2015_case.mdl" // "model" "models/player/items/crafting/halloween_case.mdl" //with skins 0-3 "solid" "0" "fademaxdist" 2500 "fademindist" 2400 "origin" "0 0 7" "DisableBoneFollowers" "1" } } summoning_circle_variant_2 { NoFixup 1 // Effects (base) info_particle_system { "targetname" "summoning_circle" "effect_name" "utaunt_arcane_purple_parent" // "effect_name" "utaunt_arcane_green_parent" // "effect_name" "utaunt_arcane_yellow_parent" "start_active" "1" "origin" "0 0 7" } OnSpawnOutput { Target "summoning_circle_prop" Action "$SetLocalAngles" Param "$$='0 '..randomfloat(-360,360)..' 0'" } prop_dynamic { "targetname" "summoning_circle_prop" "parentname" "summoning_circle" // "model" "models/player/items/crafting/halloween2021_case.mdl" // "model" "models/player/items/crafting/halloween2015_case.mdl" "model" "models/player/items/crafting/halloween_case.mdl" //with skins 0-3 "skin" "1" //magenta "solid" "0" "fademaxdist" 2500 "fademindist" 2400 "origin" "0 0 7" "DisableBoneFollowers" "1" } } summoning_circle_variant_3 { NoFixup 1 // Effects (base) info_particle_system { "targetname" "summoning_circle" // "effect_name" "utaunt_arcane_purple_parent" // "effect_name" "utaunt_arcane_green_parent" "effect_name" "utaunt_arcane_yellow_parent" "start_active" "1" "origin" "0 0 7" } OnSpawnOutput { Target "summoning_circle_prop" Action "$SetLocalAngles" Param "$$='0 '..randomfloat(-360,360)..' 0'" } prop_dynamic { "targetname" "summoning_circle_prop" "parentname" "summoning_circle" "model" "models/player/items/crafting/halloween2021_case.mdl" // "model" "models/player/items/crafting/halloween2015_case.mdl" // "model" "models/player/items/crafting/halloween_case.mdl" //with skins 0-3 "solid" "0" "fademaxdist" 2500 "fademindist" 2400 "origin" "0 0 7" "DisableBoneFollowers" "1" } } summoning_circle_properties { NoFixup 1 // Capture Zone filter_activator_class { "targetname" "yaki_filter_teamflag" "filterclass" "item_teamflag" } $filter_variable { "targetname" "filter_var_HasIngredient" "$name" "HasIngredient" "$value" "1" "$compare" "equal" } filter_multi { "targetname" "filter_summoning_circle" "filter01" "filter_var_HasIngredient" "filter02" "yaki_filter_blu" } trigger_multiple { "targetname" "summon_ingredient_detection" "filtername" "filter_summoning_circle" "spawnflags" "1" "maxs" "80 80 64" "mins" "-80 -80 -8" "OnStartTouch" "summon_ingredient_removal,Enable,,0,-1" "OnStartTouch" "summon_ingredient_removal,Disable,,0.01,-1" "OnStartTouch" "math_summoning_circle_add,Add,48,0,-1" "OnStartTouch" "!activator,$Regenerate,,0,-1" "OnStartTouch" "!self,$PlaySound,Weapon_Upgrade.ExplosiveHeadshot,0,-1" "OnStartTouch" "!self,$PlaySound,Weapon_Upgrade.ExplosiveHeadshot,0,-1" "OnStartTouch" "!self,$PlaySound,Weapon_Upgrade.ExplosiveHeadshot,0,-1" "OnStartTouch" "!self,$PlaySound,Weapon_Upgrade.ExplosiveHeadshot,0,-1" "OnStartTouch" "!self,$PlaySound,Weapon_Upgrade.ExplosiveHeadshot,0,-1" "OnStartTouch" "!self,$PlaySound,Weapon_Upgrade.ExplosiveHeadshot,0,-1" "OnStartTouch" "!self,$PlaySound,Weapon_Upgrade.ExplosiveHeadshot,0,-1" } func_respawnflag { "targetname" "summon_ingredient_removal" "filtername" "filter_summoning_circle" "StartDisabled" "1" "maxs" "80 80 64" "mins" "-80 -80 -8" } OnSpawnOutput { Target "math_summoning_circle_add" Action "Add" Param "255" } math_counter { "targetname" "math_summoning_circle_add" "min" "0" "max" "255" "OutValue" "!caller,$SetVar$CurrentVal,,0,-1" "OutValue" "math_summoning_circle,Add,$$=?(!caller.CurrentVal > 150,3,?(!caller.CurrentVal > 56,2,1)),0.02,-1" "OutValue" "!caller,Subtract,$$=?(!caller.CurrentVal > 150,3,?(!caller.CurrentVal > 56,2,1)),0.02,-1" "OnHitMin" "!caller,Disable,,0,-1" "OnHitMin" "relay_summoning_circle,Enable,,0.1,-1" "OnHitMin" "relay_summoning_circle,Trigger,,1,-1" "OnHitMin" "tf_gamerules,$SetBossState,0,0.1,-1" "OnHitMin" "!caller,Enable,,0.1,-1" "OutValue" "relay_summoning_circle,Disable,,0,1" "OnHitMin" "!caller,AddOutput,OutValue relay_summoning_circle:Disable::0:1,0,-1" "OutValue" "tf_gamerules,$SetBossState,1,0,1" "OnHitMin" "!caller,AddOutput,OutValue tf_gamerules:$SetBossState:1:0:1,0,-1" } math_counter { "targetname" "math_summoning_circle" "min" "0" "max" "255" "OutValue" "!caller,$SetVar$CurrentVal,,0,-1" "OutValue" "monster_resource,$SetClientProp$m_iBossHealthPercentageByte,$$=!caller.CurrentVal,0.01,-1" "OutValue" "relay_summoning_circle,Trigger,,0.01,-1" "OnHitMax" "relay_summoning_circle,CancelPending,,0.1,-1" /// Lose Condition "OnHitMin" "!caller,Kill,,0,-1" "OnHitMin" "bots_win_red,RoundWin,,0,-1" //removes any lingering robots and summons VIP "OnHitMax" "player,$BotCommand,despawn,0,-1" //bots only take this command "OnHitMax" "spawnenemy_*,Disable,,0,-1" //disables all bot spawns "OnHitMax" "populator,PauseBotSpawning,,0,-1" //pauses botspawns "OnHitMax" "populator,UnpauseBotSpawning,,3,-1" //unpauses botspawns to get VIP in play area "OnHitMax" "spawnenemy_river*,Enable,,8,-1" //enables river spawns "OnHitMax" "player_*,$TeleportToEntity,spawnbot,0.25,-1" //teleporters all players to respawn room "OnHitMax" "player_*,$FaceEntity,summoned_robot,3,-1" //forces all players to face VIP //cutscene "OnHitMax" "summon_fadein,Fade,,0,-1" "OnHitMax" "summon_cam,$EnableAll,,0.3,-1" "OnHitMax" "summon_fadeout,Fade,,0.5,-1" "OnHitMax" "train_pointviewcontrol,Kill,,0.5,-1" "OnHitMax" "summon_cam,$SetKey$speed,512,0.8,-1" "OnHitMax" "summon_fadein,Fade,,7.8,-1" "OnHitMax" "summon_cam,$DisableAll,,8.06,-1" "OnHitMax" "summon_fadeout,Fade,,8.1,-1" "OnHitMax" "player_*,$RemoveCond,77,0.25,-1" //revives dead ghost players (breaks camera if still a ghost) "OnHitMax" "player_*,$Removecond,66,0.25,-1" //removes invisilibity (because robots attack ghost players when not invisible) "OnHitMax" "player_*,SetHealth,450,0.26,-1" //revives dead ghost players (breaks camera if still a ghost) "OnHitMax" "player_*,$ForceRespawnDead,,0.3,-1" //revives dead ghost players (breaks camera if still a ghost) "OnHitMax" "spawnbot*,Disable,,0.4,-1" "OnHitMax" "@yaki_filter_not_engineer@player_*,$WeaponSwitchSlot,2,0.35,-1" //fixes Heavy minigun exploit // "OnHitMax" "player_*,$AddCond,76,0.35,-1" //re-adds ghost-on-death status "OnHitMax" "player_*,$RemoveCond,7,0.5,-1" //removes taunting from players "OnHitMax" "player_*,$AddPlayerAttribute,cannot taunt|1,0,-1" //all players cannot taunt for the duration "OnHitMax" "player_*,$RemovePlayerAttribute,cannot taunt,8.1,-1" //restores taunting at end "OnHitMax" "player_*,AddOutput,OnUser4 filter_var_InThirdPerson:TestActivator::0:1,0,-1" //Third Person breaks point_viewcontrol. This is a fix "OnHitMax" "player_*,$FireUserAsActivator4,,0.35,-1" "OnHitMax" "player_*,$FireUserAsActivator4,,8.1,-1" "OnHitMax" "tf_gamerules,PlayVO,Medieval.DoorOpen,10,-1" "OnHitMax" "summoned_robot,$SetProp$m_bUseBossHealthBar,1,10,-1" ///summon logic "OnHitMax" "summon_ingredient_detection,Kill,,0,-1" "OnHitMax" "math_summoning_circle_add,Kill,,0,-1" "OnHitMax" "!caller,Disable,,0,-1" "OnHitMax" "spawn_summoned_robot_particle,Start,,0,-1" "OnHitMax" "spawn_summoned_robot_snd,PlaySound,,0,-1" "OnHitMax" "spawn_summoned_robot,Enable,,3,-1" "OnHitMax" "monster_resource,$SetClientProp$m_iBossHealthPercentageByte,0,3,-1" "OnHitMax" "spawn_summoned_robot_particle,Kill,,5,-1" "OnHitMax" "spawn_summoned_robot_snd,Kill,,6,-1" "OnHitMax" "player_*,$AddPlayerAttribute,cannot pick up intelligence|1,0,-1" "OnHitMax" "player_*,$RemovePlayerAttribute,cannot pick up intelligence,6,-1" } logic_relay { "targetname" "relay_summoning_circle" "OnTrigger" "math_summoning_circle,Subtract,1,0.99,-1" } info_particle_system { "targetname" "spawn_summoned_robot_particle" "effect_name" "eyeboss_tp_vortex" "start_active" "0" "origin" "0 0 120" } ambient_generic { "targetname" "spawn_summoned_robot_snd" "message" "Halloween.TeleportVortex.EyeballMovedVortex" "origin" "0 0 120" "radius" "-1" "health" "10" "spawnflags" "49" "pitch" "100" "pitchstart" "100" } ambient_generic { "targetname" "spawn_summoned_robot_snd" "message" "Halloween.TeleportVortex.EyeballMovedVortex" "origin" "0 0 120" "radius" "-1" "health" "10" "spawnflags" "49" "pitch" "100" "pitchstart" "100" } } candle { OnSpawnOutput { Target "candle_prop" Action "$SetLocalAngles" Param "$$='0 '..randomfloat(-360,360)..' 0'" } info_particle_system { "effect_name" "candle_light2" "parentname" "candle_prop" "start_active" "1" "origin" "0 -1 20" } prop_dynamic { "targetname" "candle_prop" "model" "models/props_halloween/candle.mdl" "solid" "0" "fademaxdist" 3500 "fademindist" 3400 } } summoned_robot_cp { NoFixup 1 OnSpawnOutput { Target !activator Action "$TeleportToEntity" Param "spawn_summoned_robot" } /// adjust map properties to enable capping / remove floating ingredient intels OnSpawnOutput { Target "capturezone_blue" Action "Enable" } OnSpawnOutput { Target "summoning_ingredient*" Action "ForceDrop" Delay 0.1 } OnSpawnOutput { Target "summoning_ingredient*" Action "Kill" Delay 0.15 } OnSpawnOutput { Target "drop_intel_parent*" Action "Kill" } OnSpawnOutput { Target "player" Action "$RemoveItem" Param "Fake teamflag" Delay 0.1 } OnSpawnOutput { Target "summoning_circle" Action "Kill" } OnSpawnOutput { Target "player" Action "$SetVar$HasIngredient" Param "0" } /// properties of summoned robot OnSpawnOutput { Target "!activator" Action "$SetKey$targetname" Param "summoned_robot" } OnParentKilledOutput { Target "!activator" Action "$SetKey$targetname" Param "" } OnSpawnOutput { Target "!activator" Action "$AddPlayerAttribute" Param "move speed bonus|0.0001" } team_control_point { "targetname" "robot_cp" "point_printname" "THE ROBOT" "origin" "0 0 120" "point_index" "0" "point_group" "0" "point_warn_on_cap" "2" "spawnflags" "4" "team_icon_0" "sprites/obj_icons/icon_obj_neutral" "team_model_0" "models/props_gameplay/cap_circle_768.mdl" "team_model_2" "models/props_gameplay/cap_circle_768.mdl" "team_model_3" "models/props_gameplay/cap_circle_768.mdl" "modelscale" "0.8" } trigger_capture_area { "targetname" "robot_capture_area" "maxs" "320 320 320" "mins" "-320 -320 -320" "origin" "0 0 120" "filtername" "yaki_filter_player" "spawnflags" "1" "area_time_to_cap" "9999" "area_cap_point" "robot_cp" "team_cancap_2" "0" "team_cancap_3" "1" "team_numcap_2" "0" "team_numcap_3" "1" "team_startcap_2" "0" "team_startcap_3" "1" "OnNumCappersChanged2" "!caller,$SetVar$NumCappers,,0,-1" "OnNumCappersChanged2" "summoned_robot,$AddPlayerAttribute,$$='move speed bonus|'..?(!caller.NumCappers > 0,clamp((!caller.NumCappers * 0.08) + 0.32,0.4,2),0.0001),0.1,-1" "OnNumCappersChanged2" "player,$DisplayTextHint,$$=!caller.NumCappers..'x'..' | '..?(!caller.NumCappers > 0,clamp((!caller.NumCappers * 8) + 32,40,200)..'%%','Stopped'),0.1,-1" } trigger_capture_area //duplicate of above, with 45 degree angles { "targetname" "robot_capture_area" "angles" "0 45 0" "maxs" "256 256 256" "mins" "-256 -256 -256" "origin" "0 0 120" "filtername" "yaki_filter_player" "spawnflags" "1" "area_time_to_cap" "9999" "area_cap_point" "robot_cp" "team_cancap_2" "0" "team_cancap_3" "1" "team_numcap_2" "0" "team_numcap_3" "1" "team_startcap_2" "0" "team_startcap_3" "1" "OnNumCappersChanged2" "!caller,$SetVar$NumCappers,,0,-1" "OnNumCappersChanged2" "summoned_robot,$AddPlayerAttribute,$$='move speed bonus|'..?(!caller.NumCappers > 0,clamp((!caller.NumCappers * 0.05) + 0.35,0.4,2),0.0001),0.1,-1" "OnNumCappersChanged2" "player,$DisplayTextHint,$$=!caller.NumCappers..'x'..' | '..?(!caller.NumCappers > 0,clamp((!caller.NumCappers * 5) + 35,40,200)..'%%','Stopped'),0.1,-1" } /// required OnSpawnOutput { Target robot_capture_area Action SetControlPoint Param robot_cp } /// test_summon_complete replaces summoning ingredients around the map the prevents others from spawning OnSpawnOutput { Target "test_summon_complete" Action "SetValue" Param "1" } } summoned_robot_flag { NoFixUp 1 KeepAlive 1 /// Summoned robot carries the bomb item_teamflag { "targetname" "summoned_robot_bomb" "teamnum" "3" "GameType" "1" "flag_model" "models/props_td/atom_bomb.mdl" "ReturnTime" "30" "ShotClockMode" "1" //doesn't work wtf "OnReturn" "bots_win_red,RoundWin,,0,-1" "OnReturn" "summoned_robot_bomb,Kill,,0,-1" // parenting this gives extended pickup range. "OnDrop" "summoned_robot_dispenser,Kill,,0,-1" "OnDrop" "summoned_robot_dispenser_trigger,Kill,,0,-1" // OnDrop: checks for current gate destroyed. If it's past the Cave area then allow for reploying by players "OnDrop" "gate_destroyed_botspawn_handler,GetValue,,0,-1" "OnPickup" "bomb_annotation,Hide,,0,-1" //not optimized but w/e } /// If VIP dies the players still have a chance to deploy the bomb training_annotation { "targetname" "bomb_annotation" "parentname" "summoned_robot_bomb" "display_text" "You still have a chance to deploy the bomb!" "lifetime" "5" "origin" "0 0 72" } /// Dispenser OnSpawnOutput { Target "!activator" Action "$AddPlayerAttribute" Param "healing received penalty|0.1" } OnSpawnOutput { Target "!activator" Action "$AddPlayerAttribute" Param "mod weapon blocks healing|1" } dispenser_touch_trigger { "targetname" "summoned_robot_dispenser_trigger" "parentname" "summoned_robot_bomb" "maxs" "320 320 320" "mins" "-320 -320 -320" } pd_dispenser //same as map obj dispenser but metal capacity is limited { "targetname" "summoned_robot_dispenser" "parentname" "summoned_robot_bomb" "teamnum" "3" "touch_trigger" "summoned_robot_dispenser_trigger" "defaultupgrade" "2" "spawnflags" "4" } //respawn point info_player_teamspawn { "targetname" "summoned_robot_spawnplayer" "teamnum" "3" } } scroll_flag { KeepAlive 1 OnSpawnOutput { Target "summoning_ingredient_physics" Action "Kill" Delay 30 } OnSpawnOutput { Target "summoning_ingredient" Action "ShowTimer" Param 30 } item_teamflag { "targetname" "summoning_ingredient" "parentname" "summoning_ingredient_physics" "origin" "0 0 16" "teamnum" "3" "GameType" "2" "flag_model" "models/props_medieval/flag_medieval_scroll/medieval_scroll_flag.mdl" // "flag_icon" "../berserker_key_basic" "ReturnTime" "30" "ShotClockMode" "1" // "OnDrop" "!caller,SetTeam,3,0,1" // "OnDrop" "!caller,$SetKey$GameType,2,0,1" "OnPickup" "summoning_ingredient_physics,Kill,,0.1,1" "OnReturn" "!self,Kill,,0,1" "OnPickup1" "!activator,$SetVar$HasIngredient,1,0,-1" "OnDrop1" "!activator,$SetVar$HasIngredient,0,0,-1" } item_powerup_rune { "targetname" "summoning_ingredient_physics" "origin" "0 0 8" "disableshadows" "1" "modelscale" "0" "teamnum" "4" "AutoMaterialize" "0" } } //////////////////////// ///BLU Respawn fixes /// //////////////////////// clipfix1 { trigger_multiple { "mins" "-940 -864 -1000" "maxs" "1200 1700 800" "spawnflags" "1" // allows player to walk through clips in BLU spawn "OnStartTouch" "!activator,$AddPlayerAttribute,ignore player clip|1,0,-1" "OnEndTouch" "!activator,$RemovePlayerAttribute,ignore player clip,0,-1" // prevents fall damage on cliff "OnStartTouch" "!activator,$AddPlayerAttribute,cancel falling damage|1,0,-1" "OnEndTouch" "!activator,$RemovePlayerAttribute,cancel falling damage,0,-1" } OnSpawnOutput { Target "botspawn" Action "Kill" } func_respawnroom { "mins" "-940 -864 -1000" "maxs" "300 1700 800" "spawnflags" "1" "TeamNum" "3" } } phys_cliff_right { prop_dynamic { "model" "models/props_frostwynd/spawnfix/bluspawn_cliff_right_phys.mdl" "solid" "6" "fademaxdist" 1900 "fademindist" 1800 "angles" "0 -90 0" "DisableBoneFollowers" "1" "disableshadows" "1" } } phys_cliff_left { prop_dynamic { "model" "models/props_frostwynd/spawnfix/bluspawn_cliff_left_phys.mdl" "solid" "6" "fademaxdist" 1900 "fademindist" 1800 "angles" "0 -90 0" "DisableBoneFollowers" "1" "disableshadows" "1" } } model_fix_bluspawn_main { prop_dynamic { "model" "models/props_frostwynd/spawnfix/bluspawn_main_hill_v8.mdl" "solid" "0" "fademaxdist" 1900 "fademindist" 1800 "angles" "0 -90 0" "DisableBoneFollowers" "1" "disableshadows" "1" } prop_dynamic { "model" "models/props_frostwynd/spawnfix/bluspawn_main_floor_v2.mdl" "solid" "6" "fademaxdist" 1900 "fademindist" 1800 "angles" "0 -90 0" "DisableBoneFollowers" "1" "disableshadows" "1" } env_soundscape_proxy { "MainSoundscapeName" "soundscape_outdoor" "radius" "-1" } } model_fix_bluspawn_main_hill_phys { NoFixUp 1 prop_dynamic { "model" "models/props_medieval/medieval_stairs_stone03.mdl" "solid" "6" "angles" "0 180 0" "rendermode" 10 "disablereceiveshadows" "1" "disableshadows" "1" } prop_dynamic { "origin" "0 -100 0" "model" "models/props_medieval/medieval_stairs_stone03.mdl" "solid" "6" "angles" "0 180 0" "rendermode" 10 "disablereceiveshadows" "1" "disableshadows" "1" } } model_fix_bluspawn_main_rock1 { prop_dynamic { "model" "models/props_forest/cliff_wall_10.mdl" "solid" "0" "fademaxdist" 1400 "fademindist" 1300 "DisableBoneFollowers" "1" "skin" "2" } } model_fix_bluspawn_main_rock2 { prop_dynamic { "model" "models/props_forest/cliff_wall_05.mdl" "solid" "0" "fademaxdist" 1800 "fademindist" 1700 "DisableBoneFollowers" "1" "skin" "2" } } model_fix_bluspawn_right_rock3 { prop_dynamic { "model" "models/props_forest/cliff_wall_01.mdl" "solid" "0" "fademaxdist" 3500 "fademindist" 3400 "DisableBoneFollowers" "1" "skin" "2" } prop_dynamic //invis wall { "model" "models/props_forest/cliff_wall_01.mdl" "origin" "0 -200 0" "solid" "2" "DisableBoneFollowers" "1" "rendermode" 10 "disableshadows" "1" } prop_dynamic //invis wall { "model" "models/props_forest/cliff_wall_01.mdl" "origin" "0 -200 500" "solid" "2" "DisableBoneFollowers" "1" "rendermode" 10 "disableshadows" "1" } } model_fix_bluspawn_left_rock4 { prop_dynamic { "model" "models/props_forest/cliff_wall_06.mdl" "modelscale" "2.5" "solid" "2" "fademaxdist" 3400 "fademindist" 3300 "DisableBoneFollowers" "1" "skin" "2" } prop_dynamic //invis wall { "model" "models/props_forest/cliff_wall_01.mdl" "origin" "-100 300 0" "solid" "2" "DisableBoneFollowers" "1" "rendermode" 10 "disableshadows" "1" } prop_dynamic //invis wall { "model" "models/props_forest/cliff_wall_01.mdl" "origin" "-100 300 500" "solid" "2" "DisableBoneFollowers" "1" "rendermode" 10 "disableshadows" "1" } } model_fix_bluspawn_main_skycard { prop_dynamic { "origin" "-80 -432 0" "angles" "0 60 0" "model" "models/props_frontline/tree_birch_card.mdl" "solid" "0" "fademaxdist" 2400 "fademindist" 2300 "DisableBoneFollowers" "1" "disableshadows" "1" "skin" "1" } prop_dynamic { "origin" "-272 -144 0" "model" "models/props_frontline/tree_birch_card.mdl" "solid" "0" "fademaxdist" 2400 "fademindist" 2300 "DisableBoneFollowers" "1" "disableshadows" "1" "skin" "1" } prop_dynamic { "origin" "-272 176 0" "model" "models/props_frontline/tree_birch_card.mdl" "solid" "0" "fademaxdist" 2400 "fademindist" 2300 "DisableBoneFollowers" "1" "disableshadows" "1" "skin" "1" } prop_dynamic { "origin" "-272 512 0" "model" "models/props_frontline/tree_birch_card.mdl" "solid" "0" "fademaxdist" 2500 "fademindist" 2400 "DisableBoneFollowers" "1" "disableshadows" "1" "skin" "1" } } model_fix_collision_rock07 { prop_dynamic { "model" "models/props_forest/cliff_wall_07.mdl" "solid" "6" "angles" "0 80.5 0" "rendermode" 10 "DisableBoneFollowers" "1" "disablereceiveshadows" "1" "disableshadows" "1" } } model_fix_collision_rock02a { prop_dynamic { "model" "models/props_forest/cliff_wall_02a.mdl" "angles" "0 311 0" "solid" "6" "rendermode" 10 "DisableBoneFollowers" "1" "disablereceiveshadows" "1" "disableshadows" "1" } } //////////////////// /// RED Respawns /// //////////////////// model_river_left_collision { NoFixup 1 prop_dynamic { "model" "models/props_medieval/medieval_stairs_stone03.mdl" "solid" "6" "angles" "0 15 0" "rendermode" 10 "DisableBoneFollowers" "1" "disablereceiveshadows" "1" "disableshadows" "1" } prop_dynamic { "model" "models/props_medieval/medieval_stairs_stone03.mdl" "solid" "6" "angles" "0 75 0" "rendermode" 10 "DisableBoneFollowers" "1" "disablereceiveshadows" "1" "disableshadows" "1" } prop_dynamic { "model" "models/props_medieval/medieval_stairs_stone03.mdl" "solid" "6" "angles" "0 90 90" "origin" "-180 -64 64" "rendermode" 10 "DisableBoneFollowers" "1" "disablereceiveshadows" "1" "disableshadows" "1" } } model_river_left_collision_2 { NoFixup 1 prop_dynamic { "model" "models/props_medieval/medieval_stairs_stone03.mdl" "solid" "6" "rendermode" 10 "DisableBoneFollowers" "1" "disablereceiveshadows" "1" "disableshadows" "1" } } blocker_river_left { trigger_multiple { "filtername" "yaki_filter_red" "mins" "-700 -200 0" "maxs" "700 400 1000" "spawnflags" "1" "OnStartTouch" "!activator,$AddPlayerAttribute,ignore player clip|1,0,-1" "OnEndTouch" "!activator,$RemovePlayerAttribute,ignore player clip,0,-1" } } blocker_cave_water { prop_dynamic { "model" "models/props_medieval/tank_entrance_rottenburg_intact.mdl" "solid" "6" "angles" "0 90 0" "rendermode" 10 "DisableBoneFollowers" "1" "disablereceiveshadows" "1" "disableshadows" "1" } } //////////////////////// /// Neat map effects /// //////////////////////// particle_snow_viaduct { info_particle_system { "effect_name" "env_snow_stormfront_001" "start_active" "1" "flag_as_weather" "0" } } ///////////////////////////// /// BLU Respawn Exit Gate /// ///////////////////////////// blu_rr_exit_gate { OnSpawnOutput { Target "wave_start_relay" Action "AddOutput" Param "OnTrigger blu_rr_main_exit:Open::0:-1" } prop_dynamic { "model" "models/props_medieval/portcullis.mdl" "origin" "1 120 111" "parentname" "blu_rr_main_exit" "solid" "6" "fademaxdist" "1300" "fademindist" "1200" "angles" "0 0 180" } prop_dynamic { "model" "models/props_medieval/portcullis.mdl" "origin" "1 -106 111" "parentname" "blu_rr_main_exit" "solid" "6" "fademaxdist" "1300" "fademindist" "1200" "angles" "0 0 180" } func_door { "targetname" "blu_rr_main_exit" "mins" "-4 -224 -112" "maxs" "4 224 108" "spawnflags" "4140" "movedir" "90 0 0" "speed" "40" "lip" "-224" "OnOpen" "blu_rr_forcefield,SetTeam,3,0,-1" "OnOpen" "tf_gamerules,PlayVO,Medieval.DoorOpenLower,0,-1" "OnFullyOpen" "!caller,Kill,,0,-1" } func_forcefield { "targetname" "blu_rr_forcefield" "mins" "-4 -224 -112" "maxs" "4 224 800" "TeamNum" "2" } } ////////////////////////////////// /// OnSpawn Player Attributes /// ////////////////////////////////// attributes_player_onspawn_once { // name players the first time they spawn OnSpawnOutput { Target "!activator" Action "$GetEntIndex" Param "!activator|$SetVar$EntIndex|" Delay 0.01 } OnSpawnOutput { Target "!activator" Action "$SetKey$targetname" Param "$$='player_'..int(!activator.EntIndex)" Delay 0.04 } OnSpawnOutput { Target "yaki_filter_named_player_by_var" Action "FireUser1" Delay 0.1 } filter_activator_name { "targetname" "yaki_filter_named_player_by_var" "filtername" "x" "OnUser1" "!caller,$SetKey$filtername,$$='player_'..!activator.EntIndex,0,1" "OnUser1" "!caller,$SetKey$targetname,$$='filter_player_'..!activator.EntIndex,0,1" } // Fixes custom upgrades not refreshing on disconnect or midwave joining OnSpawnOutput { Target "tf_gamerules" Action "SetCustomUpgradesFile" Param "download/scripts/items/mvm_upgrades_medieval_yaki_rev_testX.txt" } OnSpawnOutput { Target "tf_gamerules" Action "SetCustomUpgradesFile" Param "scripts/items/mvm_upgrades_medieval_yaki_rev_testX.txt" } // Ghost mode 'Scare' Logic OnSpawnOutput { Target "!activator" Action "AddOutput" Param "$OnUser5 ghost_mode_gameui:Activate::0:-1" } OnSpawnOutput { Target "!activator" Action "AddOutput" Param "$OnUser5 ghost_mode_gameui:$$=?(not(!activator.m_fFlags & 8) != 1,!activator.m_fFlags + 8,!activator.m_fFlags)::0:-1" } OnSpawnOutput { Target "!activator" Action "AddOutput" Param "$OnUser6 ghost_mode_gameui:Deactivate::0:-1" } trigger_stun { "StartDisabled" "1" "targetname" "trigger_stun_ghost_mode" "filtername" "yaki_filter_red" "mins" "-64 -64 -64" "maxs" "64 64 64" "spawnflags" "1" "move_speed_reduction" "0.6" "stun_duration" "1.25" "stun_effects" "1" "stun_type" "2" "trigger_delay" "0.25" "OnStunPlayer" "!activator,$AddCond,24 5,0,-1" //marked for death } game_ui { "targetname" "ghost_mode_gameui" "spawnflags" "0" "PressedAttack" "trigger_stun_ghost_mode,Enable,,0,-1" "PressedAttack" "trigger_stun_ghost_mode,Disable,,0.5,-1" } } attributes_player_onspawn { /// healing from Healing Aura canteen OnSpawnOutput { Target "yaki_filter_canteen_healing" Action "FireUser1" Delay 0.1 } filter_multi { "targetname" "yaki_filter_canteen_healing" "filter01" "yaki_filter_player" "filter02" "yaki_filter_blu" "OnUser1" "!caller,$SetKey$filter01,$$='filter_player_'..!activator.EntIndex,0,1" } trigger_multiple { "targetname" "yaki_trigger_canteen_healing" "filtername" "yaki_filter_canteen_healing" "origin" "0 0 8" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "1" "wait" "0.09" "StartDisabled" "1" "OnTrigger" "!activator,$SetKey$health,$$=clamp(!activator.m_iHealth + !activator.HealingAuraVar,1,!activator.MaxHP + !activator.MaxOverheal),0,-1" } OnSpawnOutput { Target "!activator" Action "Addoutput" Param "OnUser1 yaki_trigger_canteen_healing:Enable::0:-1" } OnSpawnOutput { Target "!activator" Action "Addoutput" Param "OnUser2 yaki_trigger_canteen_healing:Disable::0:-1" } OnParentKilledOutput { Target "!activator" Action "$RemoveOutput" Param "OnUser1" } OnParentKilledOutput { Target "!activator" Action "$RemoveOutput" Param "OnUser2" } // adds glows + shows HP for VIP OnSpawnOutput { Target "!activator" Action "$AddCond" Param "114" } } equip_medieval_attributes { /// Max Overheal gimmick OnSpawnOutput { Target "!activator" Action "$GetKey$max_health" //max_health keyvalue read-only, can't write to it Param "!activator|$SetVar$MaxHP|" } // Grabs Kunai Overheal bonus attribute OnSpawnOutput { Target "!activator" Action "$SetVar$KunaiBuff" Param "$$=?(float(attribute(playeritematslot(!activator,2),'overheal bonus')) != 0,float(attribute(playeritematslot(!activator,2),'overheal bonus')) * 0.5,0)" } /// Sets max overheal from new upgrade "+50% Max Overheal" for this medieval mission OnSpawnOutput { Target "!activator" Action "$SetVar$MaxOverheal" Param "$$=int(int(!activator.MaxHP) * ?(float(attribute(!activator,'overheal bonus')) != 0,(float(attribute(!activator,'overheal bonus')) * 0.5) + !activator.KunaiBuff,0.5 + !activator.KunaiBuff))" Delay 0.03 } // removes this item so when you touch resupply it recalculates OnSpawnOutput { Target "!activator" Action "$RemoveItem" Param "Medieval Attributes" Delay 0.1 } // recalcs healing canteen var OnSpawnOutput { Target "!activator" Action "$SetVar$HealingAuraVar" Param "$$=(5 * ?(float(attribute(playeritematslot(!activator,2),'health from healers reduced')) > 0,0.25,1))" } // Tests if in wave. If True, adds ghost mode condition OnSpawnOutput { Target "logic_ghost_mode_if_in_wave" Action "Test" } // Health resistance gimmick OnSpawnOutput { Target "!activator" Action "$RemoveOutput" Param "$OnDamageReceived" } OnSpawnOutput { Target "!activator" Action "$GiveItem" Param "$$=?(int(attribute(!activator,'mod shovel damage boost')) != 0,'','TU Injured Damage Boost')" Delay 0.1 } OnSpawnOutput { Target "!activator" Action "$GiveItem" Param "$$=?(int(attribute(!activator,'mod shovel speed boost')) != 0,'','TU Injured Speed Boost')" Delay 0.1 } } tieredupgrade_injured_speed_boost { OnSpawnOutput { Target "!activator" Action "$RemovePlayerAttribute" Param "move speed penalty" } // OnSpawnOutput // { // Target "!activator" // Action "AddOutput" // Param "$OnDamageReceived !caller:$AddItemAttribute:$$='major move speed bonus|'..clamp(float(float(!caller.MaxHP) / float(!caller.m_iHealth)) / 10 + 1,1,1.35)..'|9':0:-1" // Delay 0.1 // } // OnSpawnOutput // { // Target "!activator" // Action "AddOutput" // Param "$OnDamageReceived !caller:$AddCond:32 0:0:-1" // Delay 0.1 // } OnSpawnOutput { Target "yaki_filter_injured_speed_boost_player_max_hp" Action "AddOutput" Param "$$='$value '..!activator.MaxHP" } $filter_sendprop { "targetname" "yaki_filter_injured_speed_boost_player_max_hp" "$name" "m_iHealth" "$value" "0" "$compare" "less than or equal" } $filter_sendprop { "targetname" "yaki_filter_injured_speed_boost_player_current_hp" "$name" "m_iHealth" "$value" "0" "$compare" "equal" "Negated" "1" } OnSpawnOutput { Target "yaki_filter_injured_speed_boost" Action "FireUser1" } filter_multi { "targetname" "yaki_filter_injured_speed_boost" "filter01" "yaki_filter_player" "filter02" "yaki_filter_injured_speed_boost_player_max_hp" "filter03" "yaki_filter_injured_speed_boost_player_current_hp" "OnUser1" "!caller,$SetKey$filter01,$$='filter_player_'..!activator.EntIndex,0,1" } OnSpawnOutput { Target "yaki_trigger_injured_speed_boost" Action "FireUser1" } trigger_multiple { "targetname" "yaki_trigger_injured_speed_boost" "filtername" "yaki_filter_injured_speed_boost" "mins" "-5 -5 -5" "maxs" "5 5 5" "origin" "0 0 48" "spawnflags" "1" "wait" "0.1" "OnUser1" "!caller,AddOutput,$$='OnTrigger yaki_filter_injured_speed_boost_player_current_hp:AddOutput:$$=\'$value \'..player_'..!activator.EntIndex..'.m_iHealth:0:-1',0,1" "OnUser1" "!caller,AddOutput,$$='OnTrigger player_'..!activator.EntIndex..':$AddPlayerAttribute:$$=\'major move speed bonus|\'..clamp(float(float(!activator.MaxHP) / float(!activator.m_iHealth)) / 10 + 1,1,1.35)..\'|9\':0:-1',0,1" "OnUser1" "!caller,AddOutput,$$='OnTrigger player_'..!activator.EntIndex..':$AddCond:32 0:0:-1',0,1" // "OnTrigger" "player,$DisplayTextChat,UPDATED,0,-1" } } tieredupgrade_injured_damage_boost { OnSpawnOutput { Target "!activator" Action "$RemovePlayerAttribute" Param "damage bonus HIDDEN" } // OnSpawnOutput // { // Target "!activator" // Action "AddOutput" // Param "$OnDamageReceived !caller:$AddPlayerAttribute:$$='damage bonus HIDDEN|'..clamp(float(float(!caller.MaxHP) / float(!caller.m_iHealth)) / 10 + 1,1,1.35):0:-1" // Delay 0.1 // } OnSpawnOutput { Target "yaki_filter_injured_damage_boost_player_max_hp" Action "AddOutput" Param "$$='$value '..!activator.MaxHP" } $filter_sendprop { "targetname" "yaki_filter_injured_damage_boost_player_max_hp" "$name" "m_iHealth" "$value" "0" "$compare" "less than or equal" } $filter_sendprop { "targetname" "yaki_filter_injured_damage_boost_player_current_hp" "$name" "m_iHealth" "$value" "0" "$compare" "equal" "Negated" "1" } OnSpawnOutput { Target "yaki_filter_injured_damage_boost" Action "FireUser1" } filter_multi { "targetname" "yaki_filter_injured_damage_boost" "filter01" "yaki_filter_player" "filter02" "yaki_filter_injured_damage_boost_player_max_hp" "filter03" "yaki_filter_injured_damage_boost_player_current_hp" "OnUser1" "!caller,$SetKey$filter01,$$='filter_player_'..!activator.EntIndex,0,1" } OnSpawnOutput { Target "yaki_trigger_injured_damage_boost" Action "FireUser1" } trigger_multiple { "targetname" "yaki_trigger_injured_damage_boost" "filtername" "yaki_filter_injured_damage_boost" "mins" "-5 -5 -5" "maxs" "5 5 5" "origin" "0 0 48" "spawnflags" "1" "wait" "0.1" "OnUser1" "!caller,AddOutput,$$='OnTrigger yaki_filter_injured_damage_boost_player_current_hp:AddOutput:$$=\'$value \'..player_'..!activator.EntIndex..'.m_iHealth:0:-1',0,1" "OnUser1" "!caller,AddOutput,$$='OnTrigger player_'..!activator.EntIndex..':$AddPlayerAttribute:$$=\'damage bonus HIDDEN|\'..clamp(float(float(!activator.MaxHP) / float(!activator.m_iHealth)) / 10 + 1,1,1.35):0:-1':0:1" // "OnTrigger" "player,$DisplayTextChat,UPDATED,0,-1" } } ///////////////////// /// Custom Equips /// ///////////////////// equip_robot_attributes { KeepAlive 1 ///Disable crits / add reprogrammed OnSpawnOutput { Target "!activator" Action "$AddCond" Param "43" } /// drop health pack logic OnSpawnOutput { Target "!activator" Action "AddOutput" Param "$OnDeath drop_hp_pack_ondeath:InValue:$$=int(attribute(!activator,'drop health pack on kill')) + ?(int(attribute(playeritematslot(!activator,2),'drop health pack on kill')) = 2,1,0):0:1" } logic_case { "targetname" "drop_hp_pack_ondeath" "case01" "1" "case02" "2" "case03" "3" "case04" "4" "case05" "0" "OnCase01" "m_drop_healthkit_small,ForceSpawnAtEntityOrigin,drop_pack_parent,0,-1" "OnCase02" "m_drop_healthkit_small,ForceSpawnAtEntityOrigin,drop_pack_parent,0,-1" "OnCase02" "m_drop_healthkit_small,ForceSpawnAtEntityOrigin,drop_pack_parent,0,-1" "OnCase03" "m_drop_healthkit_small,ForceSpawnAtEntityOrigin,drop_pack_parent,0,-1" "OnCase03" "m_drop_healthkit_small,ForceSpawnAtEntityOrigin,drop_pack_parent,0,-1" "OnCase03" "m_drop_healthkit_small,ForceSpawnAtEntityOrigin,drop_pack_parent,0,-1" "OnCase04" "m_drop_healthkit_small,ForceSpawnAtEntityOrigin,drop_pack_parent,0,-1" "OnCase04" "m_drop_healthkit_small,ForceSpawnAtEntityOrigin,drop_pack_parent,0,-1" "OnCase04" "m_drop_healthkit_small,ForceSpawnAtEntityOrigin,drop_pack_parent,0,-1" "OnCase04" "m_drop_healthkit_small,ForceSpawnAtEntityOrigin,drop_pack_parent,0,-1" "OnDefault" "drop_hp_pack_ondeath,Kill,,1,-1" "OnDefault" "drop_pack_parent,Kill,,1,-1" } prop_dynamic { "targetname" "drop_pack_parent" "DisableBoneFollowers" "1" "disablereceiveshadows" "1" "disableshadows" "1" "fadescale" "1" "fademaxdist" "0" "fademindist" "0" "model" "models\empty.mdl" "solid" "0" } /// Stat stuff (Pyro) OnSpawnOutput { Target "!activator" Action "AddOutput" Param "$OnDamageReceived @f@yaki_filter_pyro@!activator:$SetVar$RageInValue::0:-1" Delay 0.01 //add delay b/c Medieval Attributes removes $OnDamageReceived } OnSpawnOutput { Target "!activator" Action "AddOutput" Param "$OnDamageReceived @f@yaki_filter_pyro@!activator:$SetProp$m_flRageMeter:$$=?(!activator.m_bRageDraining != 0,int(clamp(!activator.m_flRageMeter + (!activator.RageInValue * 0.18),8,100)),!activator.m_flRageMeter):0:-1" Delay 0.01 //add delay b/c Medieval Attributes removes $OnDamageReceived } OnParentKilledOutput //keep { Target "!activator" Action "$RemoveOutput" Param "$OnDamageReceived" } /// Stat stuff (heal on kill -> Max Overheal calc) OnSpawnOutput { Target "!activator" Action "AddOutput" Param "$OnDeath @f@yaki_filter_player@!activator:$SetVar$HoK:0:0:-1" //heal on kill upgrade } OnSpawnOutput { Target "!activator" Action "AddOutput" Param "$OnDeath @f@yaki_filter_player@!activator:$GetItemAttribute:-1|heal on kill|!activator|$SetVar$HoK|:0:-1" } /// Current HP after a kill already has HP on kill value sum in it /// So, check if (current HP - HoK) < MaxHP, if yes add HoK, if no keep HP same. /// then clamp value so does not exceed overheal attribute. /// Have to set current HP into a var because... Source1. /// Was setting to max HP value when pulling m_iHealth directly OnSpawnOutput { Target "!activator" Action "AddOutput" Param "$OnDeath @f@yaki_filter_player@!activator:$SetVar$IntHP:$$=!activator.m_iHealth:0:-1" } OnSpawnOutput { Target "!activator" Action "AddOutput" Param "$OnDeath @f@yaki_filter_player@!activator:$SetVar$CurrentHP:$$=clamp(?(!activator.IntHP < !activator.MaxHP,!activator.IntHP,(!activator.IntHP + !activator.HoK)),1,!activator.MaxHP + !activator.MaxOverheal):0:-1" } OnSpawnOutput { Target "!activator" Action "AddOutput" Param "$OnDeath @f@yaki_filter_player@!activator:$AddPlayerAttribute:$$='hidden maxhealth non buffed|'..!activator.MaxOverheal:0:-1" } OnSpawnOutput { Target "!activator" Action "AddOutput" Param "$OnDeath @f@yaki_filter_player@!activator:$SetKey$health:$$=!activator.CurrentHP:0:-1" } OnSpawnOutput { Target "!activator" Action "AddOutput" Param "$OnDeath @f@yaki_filter_player@!activator:$AddPlayerAttribute:$$='hidden maxhealth non buffed|'..int(0 - (clamp(!activator.m_iDecapitations,0,4) * 15)):0:-1" } OnSpawnOutput { Target "!activator" Action "AddOutput" Param "$OnDeath @f@yaki_filter_player@!activator:$SetKey$health:$$=!activator.CurrentHP:0:-1" } OnParentKilledOutput { Target "!activator" Action "$RemoveOutput" Param "$OnDeath" } } equip_fake_teamflag { /// Removes flag if in wave OnSpawnOutput { Target "test_summon_complete" Action "Test" Delay 0.1 } KeepAlive 1 OnParentKilledOutput { Target "m_scroll_flag" Action "ForceSpawnAtEntityOrigin" Param "drop_intel_parent" } OnParentKilledOutput { Target "drop_intel_parent" Action "Kill" Delay 1 } prop_dynamic { "targetname" "drop_intel_parent" "DisableBoneFollowers" "1" "disablereceiveshadows" "1" "disableshadows" "1" "model" "models\empty.mdl" "rendermode" "10" } } equip_third_person_mode { OnSpawnOutput { Target !activator Action SetForcedTauntCam Param 1 } OnParentKilledOutput { Target !activator Action SetForcedTauntCam Param 0 } OnSpawnOutput { Target !activator Action "$SetVar$InThirdPerson" Param 1 } OnParentKilledOutput { Target !activator Action "$SetVar$InThirdPerson" Param 0 } } ///////////////// /// All-Class /// ///////////////// //////////////// /// Canteens /// //////////////// equip_canteen { // Names canteen OnSpawnOutput { Target "@c@!activator" Action "AddOutput" Param "OnUser4 logic_find_canteen:InValue:$$=!activator.m_iItemDefinitionIndex:0:1" Delay 0.1 } OnSpawnOutput { Target "@c@!activator" Action "$FireUserAsActivator4" Delay 0.15 } /// Action Slot prop that detects if action slot is being used. /// If the Action Slot button is held, always set me to 1. /// If let go, always set me to 0. $filter_sendprop { "targetname" "yaki_filter_prop_using_actionslot" "$name" "m_bUsingActionSlot" "$value" "0" "$compare" "equal" "Negated" "1" } OnSpawnOutput { Target "yaki_filter_used_canteen" Action "FireUser1" } filter_multi { "targetname" "yaki_filter_used_canteen" "filter01" "yaki_filter_prop_using_actionslot" "filter02" "yaki_filter_player" "OnUser1" "!caller,$SetKey$filter02,$$='filter_player_'..!activator.EntIndex,0,1" } OnSpawnOutput { Target "yaki_trigger_detect_actionslot_and_canteen_use" Action "FireUser1" } trigger_multiple { "targetname" "yaki_trigger_detect_actionslot_and_canteen_use" "filtername" "yaki_filter_used_canteen" "mins" "-5 -5 -5" "maxs" "5 5 5" "origin" "0 0 48" "spawnflags" "1" "wait" "0.1" "OnUser1" "!caller,AddOutput,$$='OnTrigger canteen_'..!activator.EntIndex..':$GetProp$m_bActive:test_canteen_active|SetValueTest|:0:-1',0,1" // "OnTrigger" "@c@!activator,$GetProp$m_bActive,test_canteen_active|SetValueTest|,0,-1" "OnTrigger" "yaki_trigger_redetect_actionslot,Enable,,5,-1" "OnTrigger" "!self,Disable,,0,-1" // "OnTrigger" "player,$DisplayTextChat,Detection OFF!,0,-1" } logic_branch { "targetname" "test_canteen_active" "OnTrue" "test_revive_canteen,SetValueTest,$$=int(attribute((playeritematslot(!activator,9)),'revive')),0,-1" "OnTrue" "test_buster_canteen,SetValueTest,$$=int(attribute((playeritematslot(!activator,9)),'bombinomicon effect on death')),0,-1" "OnTrue" "test_healing_canteen,SetValueTest,$$=int(attribute((playeritematslot(!activator,9)),'enables aoe heal')),0,-1" // "OnFalse" "player,$DisplayTextChat,Fail,0,-1" } logic_branch { "targetname" "test_revive_canteen" "OnTrue" "player,$DisplayTextChat,{blue}{activator}{reset} has used their {9ec34f}REVIVE TEAMMATES{reset} Power Up Canteen!,0,-1" "OnTrue" "relay_revive_canteen,Enable,,0,-1" "OnTrue" "timer_revive_canteen,Add,8,0,-1" /// debug // "OnTrue" "player,$DisplayTextChat,Pass,0,-1" // "OnFalse" "player,$DisplayTextChat,Fail,0,-1" } logic_branch { "targetname" "test_buster_canteen" "OnTrue" "player,$DisplayTextChat,{blue}{activator}{reset} has used their {9ec34f}BECOME A BUSTER{reset} Power Up Canteen!,0,-1" } logic_branch { "targetname" "test_healing_canteen" "OnTrue" "player,$DisplayTextChat,{blue}{activator}{reset} has used their {9ec34f}HEALING AURA{reset} Power Up Canteen!,0,-1" "OnTrue" "m_canteen_healing_aura,ForceSpawnAtEntityOrigin,yaki_trigger_detect_actionslot_and_canteen_use,0,-1" } /// Detects if I am NOT holding down the Action Slot key, and if so, re-enables canteen use (above) $filter_sendprop { "targetname" "yaki_filter_prop_not_using_actionslot" "$name" "m_bUsingActionSlot" "$value" "0" "$compare" "equal" } OnSpawnOutput { Target "yaki_filter_reenable_canteen_detection" Action "FireUser1" } filter_multi { "targetname" "yaki_filter_reenable_canteen_detection" "filter01" "yaki_filter_prop_not_using_actionslot" "filter02" "yaki_filter_player" "OnUser1" "!caller,$SetKey$filter02,$$='filter_player_'..!activator.EntIndex,0,1" } trigger_multiple { "targetname" "yaki_trigger_redetect_actionslot" "filtername" "yaki_filter_reenable_canteen_detection" "mins" "-5 -5 -5" "maxs" "5 5 5" "origin" "0 0 48" "spawnflags" "1" "wait" "0.1" "StartDisabled" "1" "OnTrigger" "yaki_trigger_detect_actionslot_and_canteen_use,Enable,,0,-1" "OnTrigger" "!self,Disable,,0,-1" // "OnTrigger" "player,$DisplayTextChat,Detection ON!,0,-1" } } t_canteen_healing_aura { OnSpawnOutput { Target "yaki_healing_aura_base" Action "Kill" Delay 2 } info_particle_system { "targetname" "yaki_healing_aura_base" "effect_name" "spell_overheal_blue" "start_active" "1" } OnSpawnOutput { Target "yaki_healing_aura_shower" Action "SetModelScale" Param "1.5 1" } OnSpawnOutput { Target "yaki_healing_aura_shower" Action "$SetKey$renderfx" Param "10" Delay 5 } OnSpawnOutput { Target "yaki_healing_aura_shower" Action "Kill" Delay 8.1 } prop_dynamic { "parentname" "yaki_healing_aura_shower" "origin" "0 0 32" "model" "models/props_gameplay/cap_square_768.mdl" "skin" "2" "DisableBoneFollowers" "1" "disablereceiveshadows" "1" "disableshadows" "1" } item_powerup_rune { "targetname" "yaki_healing_aura_shower" "origin" "0 0 8" "powerup_model" "models/pickups/pickup_powerup_regen.mdl" "disableshadows" "1" "modelscale" "0.1" "teamnum" "4" "AutoMaterialize" "0" "Skin" "2" "rendermode" "2" "renderfx" "0" } info_particle_system { "parentname" "yaki_healing_aura_shower" "effect_name" "hell_megaheal_blue_shower" "start_active" "1" "origin" "0 -176 8" } info_particle_system { "parentname" "yaki_healing_aura_shower" "effect_name" "hell_megaheal_blue_shower" "start_active" "1" "origin" "0 176 8" } OnSpawnOutput { Target "yaki_healing_trigger" Action "Disable" //if sent "Kill" then OnEndTouch doesn't fire Delay 8 } trigger_multiple { "targetname" "yaki_healing_trigger" "parentname" "yaki_healing_aura_shower" "filtername" "yaki_filter_blu" "origin" "0 0 8" "mins" "-368 -368 -64" "maxs" "368 368 128" "spawnflags" "1" "OnStartTouch" "!activator,FireUser1,,0,-1" //turns on healing from healing trigger from OnSpawn Player Attributes "OnEndTouch" "!activator,FireUser2,,0,-1" //turns healing off } item_healthkit_full { "parentname" "yaki_healing_aura_shower" "TeamNum" "3" "origin" "0 80 16" "OnPlayerTouch" "!caller,Kill,,0,-1" } item_healthkit_full { "parentname" "yaki_healing_aura_shower" "TeamNum" "3" "origin" "0 -80 16" "OnPlayerTouch" "!caller,Kill,,0,-1" } item_healthkit_full { "parentname" "yaki_healing_aura_shower" "TeamNum" "3" "origin" "60 -30 16" "OnPlayerTouch" "!caller,Kill,,0,-1" } item_healthkit_full { "parentname" "yaki_healing_aura_shower" "TeamNum" "3" "origin" "-60 -30 16" "OnPlayerTouch" "!caller,Kill,,0,-1" } item_healthkit_full { "parentname" "yaki_healing_aura_shower" "TeamNum" "3" "origin" "60 30 16" "OnPlayerTouch" "!caller,Kill,,0,-1" } item_healthkit_full { "parentname" "yaki_healing_aura_shower" "TeamNum" "3" "origin" "-60 30 16" "OnPlayerTouch" "!caller,Kill,,0,-1" } } logic_canteens { NoFixUp 1 env_entity_maker { "targetname" "m_canteen_healing_aura" "EntityTemplate" "t_canteen_healing_aura" } } ///////////// /// Scout /// ///////////// equip_candy_cane { OnSpawnOutput { Target "!activator" Action "$AddItemAttribute" Param "drop health pack on kill|2|2" } OnParentKilledOutput { Target "!activator" Action "$RemoveItemAttribute" Param "drop health pack on kill|2" } } equip_soda_popper_hype { OnSpawnOutput { Target "!activator" Action "$WeaponSwitchSlot" Param "2" } OnSpawnOutput { Target "tf_weapon_soda_popper" Action "$SetKey$classname" Param "disabled" } $filter_sendprop { "targetname" "yaki_filter_prop_vecVelocity0" "$name" "m_vecVelocity[0]" "$value" "0" "$compare" "equal" "Negated" "1" } $filter_sendprop { "targetname" "yaki_filter_prop_vecVelocity1" "$name" "m_vecVelocity[1]" "$value" "0" "$compare" "equal" "Negated" "1" } filter_tf_condition { "targetname" "yaki_filter_hype_36" "condition" "36" "Negated" "1" } $filter_sendprop { "targetname" "yaki_filter_scouts_hype_is_not_100" "$name" "m_flHypeMeter" "$value" "100" "$compare" "less than" } OnSpawnOutput { Target "yaki_filter_player_moving" Action "FireUser1" } filter_multi { "targetname" "yaki_filter_player_scouts_hype" "filter01" "yaki_filter_player" "filter02" "yaki_filter_hype_36" "filter03" "yaki_filter_scouts_hype_is_not_100" "filter04" "yaki_filter_prop_vecVelocity0" "filter05" "yaki_filter_prop_vecVelocity1" "OnUser1" "!caller,$SetKey$filter01,$$='filter_player_'..!activator.EntIndex,0,1" } trigger_multiple { "filtername" "yaki_filter_player_scouts_hype" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "1" "wait" "0.15" "OnTrigger" "!activator,$SetProp$m_flHypeMeter,$$=clamp(float(!activator.m_flHypeMeter) + ?(abs(!activator.m_vecVelocity[0]) > abs(!activator.m_vecVelocity[1]),abs(!activator.m_vecVelocity[0]),abs(!activator.m_vecVelocity[1])) * 0.0025,0,100),0,-1" } /// Detection filter_tf_condition { "targetname" "yaki_filter_scouts_hype_scout_is_taunting" "condition" "7" } $filter_sendprop { "targetname" "yaki_filter_scouts_hype_is_100" "$name" "m_flHypeMeter" "$value" "100" "$compare" "greater than or equal" } OnSpawnOutput { Target "yaki_filter_scouts_hype_ready" Action "FireUser1" } filter_multi { "targetname" "yaki_filter_scouts_hype_ready" "filter01" "yaki_filter_scouts_hype_scout_is_taunting" "filter02" "yaki_filter_scouts_hype_is_100" "filter03" "yaki_filter_player" "OnUser1" "!caller,$SetKey$filter03,$$='filter_player_'..!activator.EntIndex,0,1" } trigger_multiple { "targetname" "yaki_trigger_scouts_hype_ready" "filtername" "yaki_filter_scouts_hype_ready" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "1" "wait" "0.01" "OnTrigger" "!activator,$RemoveCond,7,0,-1" "OnTrigger" "!activator,$AddCond,36,0,-1" //seems to drain the HYPE meter by just being active! "OnTrigger" "!activator,$AddCond,32,0,-1" //Disciplinary Action "OnTrigger" "!activator,$RefillAmmo,,0,-1" "OnTrigger" "!activator,$AddPlayerAttribute,effect bar recharge rate increased|0,0,-1" } filter_tf_condition { "targetname" "yaki_filter_scout_32" //Disciplinary Action "condition" "32" } OnSpawnOutput { Target "yaki_filter_scouts_hype_remover" Action "FireUser1" } filter_multi { "targetname" "yaki_filter_scouts_hype_remover" "filter01" "yaki_filter_scout_32" "filter02" "yaki_filter_hype_36" "filter03" "yaki_filter_player" "OnUser1" "!caller,$SetKey$filter03,$$='filter_player_'..!activator.EntIndex,0,1" } trigger_multiple { "filtername" "yaki_filter_scouts_hype_remover" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "1" "wait" "0.1" "OnTrigger" "!activator,$RemoveCond,32,0,-1" "OnTrigger" "!activator,$RemovePlayerAttribute,effect bar recharge rate increased,0,-1" } } give_soda_popper { OnSpawnOutput { Target "!activator" Action "$GiveItem" Param "The Soda Popper" } } /////////////// /// Soldier /// /////////////// equip_soldier_mountain_jumper { OnSpawnOutput { Target "!activator" Action "$AddPlayerAttribute" Param "air dash count|2" } OnParentKilledOutput { Target "!activator" Action "$RemovePlayerAttribute" Param "air dash count" } /// First jump $filter_sendprop { "targetname" "yaki_filter_airjump_count_1" "$name" "m_iAirDash" "$value" "1" "$compare" "equal" } // removing this because this sendprop isn't set to 1 when jumping in water // $filter_sendprop // { // "targetname" "yaki_filter_player_is_jumping" // "$name" "m_bJumping" // "$value" "1" // "$compare" "equal" // } filter_tf_condition { "targetname" "yaki_filter_mountainjump_condition_115_not" "condition" "115" "Negated" "1" } OnSpawnOutput { Target "yaki_filter_airjump" Action "FireUser1" } filter_multi { "targetname" "yaki_filter_airjump" "filter01" "yaki_filter_player" "filter02" "yaki_filter_airjump_count_1" "filter03" "yaki_filter_mountainjump_condition_115_not" // "filter04" "yaki_filter_player_is_jumping" "OnUser1" "!caller,$SetKey$filter01,$$='filter_player_'..!activator.EntIndex,0,1" } logic_relay { "targetname" "yaki_soldier_mountain_jump" // "OnTrigger" "!activator,$TakeDamage,20,0,-1" "OnTrigger" "!activator,$SetProp$m_iAirDash,0,0,-1" "OnTrigger" "!activator,$AddCond,115,0,-1" //airblast cond. Removes itself on ground touch "OnTrigger" "!activator,$AddCond,125,0,-1" //manntreads cond "OnTrigger" "!activator,$PlaySound,General.banana_slip,0,-1" "OnTrigger" "m_mountain_jump,ForceSpawn,,0,-1" "OnTrigger" "yaki_trigger_impulse_jump,ApplyImpulse,,0,-1" "OnTrigger" ",,,0.1,-1" //keep here to cause this trigger to not retrigger for 0.1s delay } trigger_multiple { "filtername" "yaki_filter_airjump" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "1" "origin" "0 0 32" "wait" "0.01" "OnTrigger" "yaki_soldier_mountain_jump,Trigger,,0,-1" } OnSpawnOutput //need this because something about setting it in trigger itself breaks impulse_dir. This is a fix. { Target "yaki_trigger_impulse_jump" Action "$SetKey$impulse_dir" Param "0 0 90" } OnSpawnOutput { Target "yaki_trigger_impulse_jump" Action "$SetKey$force" Param "$$=float(?(float(attribute(!activator,'increased jump height')) > 0,float(attribute(!activator,'increased jump height')),1) * 4)" } OnSpawnOutput { Target "yaki_trigger_impulse_jump" Action "$GetKey$force" Param "player|$DisplayTextChat|" Delay 1 } trigger_apply_impulse { "targetname" "yaki_trigger_impulse_jump" "angles" "0 0 0" "mins" "-5 -5 -5" "maxs" "5 5 50" "spawnflags" "1" "impulse_dir" "0 0 90" "force" "3" } env_entity_maker { "targetname" "m_mountain_jump" "EntityTemplate" "t_mountain_jump" } // Third Jump $filter_sendprop { "targetname" "yaki_filter_airjump_count_1" "$name" "m_iAirDash" "$value" "1" "$compare" "equal" } OnSpawnOutput { Target "yaki_filter_airjump_crusher" Action "FireUser1" } filter_tf_condition { "targetname" "yaki_filter_mountainjump_condition_115" "condition" "115" } filter_multi { "targetname" "yaki_filter_airjump_crusher" "filter01" "yaki_filter_player" "filter02" "yaki_filter_airjump_count_1" "filter03" "yaki_filter_mountainjump_condition_115" // "filter04" "yaki_filter_player_is_jumping" "OnUser1" "!caller,$SetKey$filter01,$$='filter_player_'..!activator.EntIndex,0,1" } trigger_multiple { "filtername" "yaki_filter_airjump_crusher" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "1" "origin" "0 0 32" "wait" "0.01" "OnTrigger" "yaki_soldier_mountain_crush,Trigger,,0,-1" } logic_relay { "targetname" "yaki_soldier_mountain_crush" "OnTrigger" "yaki_trigger_impulse_jump_crusher,ApplyImpulse,,0,-1" "OnTrigger" "!activator,$SetProp$m_iAirDash,3,0,-1" "OnTrigger" "!activator,$PlaySound,General.banana_slip,0,-1" "OnTrigger" "!activator,$AddCond,57,0,-1" //misc ubercharge "OnTrigger" "!activator,$AddCond,5 0,0,-1" //stock ubercharge "OnTrigger" ",,,0.1,-1" //keep here to cause this trigger to not retrigger for 0.1s delay } OnSpawnOutput //need this because something about setting it in trigger itself breaks impulse_dir. This is a fix. { Target "yaki_trigger_impulse_jump_crusher" Action "$SetKey$impulse_dir" Param "0 0 -90" } trigger_apply_impulse { "targetname" "yaki_trigger_impulse_jump_crusher" "angles" "0 0 0" "mins" "-5 -5 -5" "maxs" "5 5 50" "spawnflags" "1" "impulse_dir" "0 0 -90" "force" "24" } // removes uber when on ground only filter_tf_condition { "targetname" "yaki_filter_mountainjump_condition_57" "condition" "57" } $filter_sendprop { "targetname" "yaki_filter_player_is_not_jumping" "$name" "m_bJumping" "$value" "0" "$compare" "equal" } filter_multi { "targetname" "yaki_filter_airjump_remove_uber" "filter01" "yaki_filter_player" "filter02" "yaki_filter_player_is_not_jumping" "filter03" "yaki_filter_mountainjump_condition_57" "OnUser1" "!caller,$SetKey$filter01,$$='filter_player_'..!activator.EntIndex,0,1" } trigger_multiple { "filtername" "yaki_filter_airjump_remove_uber" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "1" "origin" "0 0 32" "wait" "0.1" "OnTrigger" "!activator,$RemoveCond,57,0,-1" "OnTrigger" "!activator,$AddCond,5 0.8,0,-1" "OnTrigger" "!activator,$RemoveCond,125,0,-1" } } t_mountain_jump { OnSpawnOutput { Target "yaki_effect_mountain_jump" Action "Kill" Delay 2 } OnSpawnOutput { Target "yaki_effect_mountain_jump" Action "SetParent" Param "!activator" } info_particle_system { "targetname" "yaki_effect_mountain_jump" "effect_name" "rocketpack_exhaust_launch" "start_active" "1" } } //////////// /// Pyro /// //////////// equip_flamethrower { OnSpawnOutput { Target "!activator" Action "$WeaponSwitchSlot" Param "2" Delay 0.01 } OnSpawnOutput { Target "tf_weapon_flamethrower" Action "$SetKey$classname" Param "disabled" } //rage logic OnSpawnOutput { Target "!activator" Action "$SetProp$m_flRageMeter" Param "0" } /// Detection /// Works like: /// three triggers--each trigger enables the next in order of what stage the pyro taunt is at /// Trigger 1 = Pyro has taunted with >100 rage; Give uber and crits. Enable Trigger 2 /// Trigger 2 = Pyro has stopped taunting. Enable rage drain. Remove uber. Enable Trigger 3 /// Trigger 3 = Pyro rage is 0. Disable rage drain. Remove crits. Enable trigger 1 filter_tf_condition { "targetname" "yaki_filter_pyros_rage_pyro_is_taunting" "condition" "7" } $filter_sendprop { "targetname" "yaki_filter_pyros_rage_is_100" "$name" "m_flRageMeter" "$value" "100" "$compare" "greater than or equal" } $filter_sendprop { "targetname" "yaki_filter_pyros_rage_is_not_draining" "$name" "m_bRageDraining" "$value" "0" "$compare" "equal" } OnSpawnOutput { Target "yaki_filter_pyros_rage_ready" Action "FireUser1" } filter_multi { "targetname" "yaki_filter_pyros_rage_ready" "filter01" "yaki_filter_pyros_rage_pyro_is_taunting" "filter02" "yaki_filter_pyros_rage_is_100" "filter03" "yaki_filter_pyros_rage_is_not_draining" "filter04" "yaki_filter_player" "OnUser1" "!caller,$SetKey$filter04,$$='filter_player_'..!activator.EntIndex,0,1" } trigger_multiple { "targetname" "yaki_trigger_pyros_rage_ready" "filtername" "yaki_filter_pyros_rage_ready" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "1" "wait" "0.01" "OnTrigger" "yaki_trigger_pyros_rage_ready_start,Enable,,0,-1" "OnTrigger" "!self,Disable,,0,-1" "OnTrigger" "!activator,$AddCond,56,0,-1" "OnTrigger" "!activator,$AddCond,57 5,0,-1" } filter_tf_condition { "targetname" "yaki_filter_pyros_rage_pyro_has_stopped_taunting" "condition" "7" "Negated" "1" } filter_multi { "targetname" "yaki_filter_pyros_rage_ready_start" "filter01" "yaki_filter_pyros_rage_pyro_has_stopped_taunting" "filter02" "yaki_filter_pyros_rage_is_100" "filter03" "yaki_filter_pyros_rage_is_not_draining" "filter04" "yaki_filter_player" "OnUser1" "!caller,$SetKey$filter04,$$='filter_player_'..!activator.EntIndex,0,1" } trigger_multiple { "targetname" "yaki_trigger_pyros_rage_ready_start" "filtername" "yaki_filter_pyros_rage_ready_start" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "1" "wait" "0.01" "StartDisabled" "1" "OnTrigger" "yaki_trigger_pyros_rage_finished,Enable,,0,-1" "OnTrigger" "!self,Disable,,0,-1" "OnTrigger" "!activator,$RemoveCond,57,0,-1" "OnTrigger" "!activator,$SetProp$m_bRageDraining,1,0,-1" } $filter_sendprop { "targetname" "yaki_filter_pyros_rage_is_empty" "$name" "m_flRageMeter" "$value" "0" "$compare" "equal" } OnSpawnOutput { Target "yaki_filter_pyros_rage_finished" Action "FireUser1" } filter_multi { "targetname" "yaki_filter_pyros_rage_finished" "filter01" "yaki_filter_pyros_rage_is_empty" "filter02" "yaki_filter_player" "OnUser1" "!caller,$SetKey$filter02,$$='filter_player_'..!activator.EntIndex,0,1" } trigger_multiple { "targetname" "yaki_trigger_pyros_rage_finished" "filtername" "yaki_filter_pyros_rage_finished" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "1" "wait" "0.01" "StartDisabled" "1" "OnTrigger" "yaki_trigger_pyros_rage_ready,Enable,,0,-1" "OnTrigger" "!self,Disable,,0,-1" "OnTrigger" "!activator,$RemoveCond,56,0,-1" } } equip_gas_passer { /// gas passer regen logic OnSpawnOutput { Target "ammo1_regenerator_loop" Action "Trigger" Delay 0.1 } OnSpawnOutput { Target "!activator" Action "$SetVar$PasserRegen" Param "$$=clamp(100 / ceil(float(attribute(playeritematslot(!activator,1),'mult_item_meter_charge_rate')) * 66),1,4) * 3" //jank but works as +3/6/9/12 regen per tick } logic_relay { "targetname" "ammo1_regenerator" // "OnTrigger" "player,$DisplayTextChat,$$=clamp(100 / ceil(float(attribute(playeritematslot(!activator,1),'mult_item_meter_charge_rate')) * 66),1,4) * 3,0,-1" "OnTrigger" "!activator,$SetProp$m_flItemChargeMeter$1,$$=clamp(float(!activator.m_flItemChargeMeter$1) + !activator.PasserRegen,0,100),0,-1" "OnTrigger" "!activator,$SetProp$m_iAmmo$4,$$=?(!activator.m_flItemChargeMeter$1 >= 100,1,0),0,-1" "OnTrigger" "ammo1_regenerator_loop,Trigger,,1,-1" } logic_relay { "targetname" "ammo1_regenerator_loop" "OnTrigger" "ammo1_regenerator,Trigger,,0,-1" } } shoot_fireball { OnSpawnOutput { Target "fireball" Action "FireUser1" } tf_projectile_spellfireball { "targetname" "fireball" "origin" "0 0 0" "teamnum" "3" "OnUser1" "!caller,$SetOwner,!activator,0,1" // "OnUser1" "!activator,$SetProp$m_bCritical,$$=?(not(!activator.m_nPlayerCondEx & 16777216) = 0,0,1),0,-1" "OnUser1" "!activator,$SetProp$m_bCritical,1,0,-1" } OnSpawnOutput { Target "!activator" Action "$SetProp$m_flItemChargeMeter$1" Param 0 } } equip_back_scratcher { OnSpawnOutput { Target "!activator" Action "$AddItemAttribute" Param "health from healers reduced|0.25|2" } OnParentKilledOutput { Target "!activator" Action "$RemoveItemAttribute" Param "health from healers reduced|2" } } /////////////// /// Demoman /// /////////////// equip_sword { /// fixes bug with 0ish movespeed on spawn OnSpawnOutput { Target "!activator" Action "$AddCond" Param "32 0.1" } /// refreshes eyelander-forget stats on all swords OnParentKilledOutput { Target "!activator" Action "$RemovePlayerAttribute" Param "hidden maxhealth non buffed" } OnParentKilledOutput { Target "!activator" Action "$RemovePlayerAttribute" Param "major move speed bonus" } // skullcutter OnParentKilledOutput { Target "!activator" Action "$RemoveItemAttribute" Param "healing received bonus|2" } // claid OnParentKilledOutput { Target "!activator" Action "$RemoveItemAttribute" Param "health regen|2" } // persuader OnParentKilledOutput { Target "!activator" Action "$RemoveItemAttribute" Param "increased jump height from weapon|2" } OnParentKilledOutput { Target "!activator" Action "$RemoveItemAttribute" Param "charge recharge rate increased|2" } /// recalculates sword user stats OnSpawnOutput { Target "@c@!activator" Action "AddOutput" Param "OnUser4 logic_recalc_heads_any_sword:InValue:$$=!activator.m_iItemDefinitionIndex:0:1" } OnSpawnOutput { Target "@c@!activator" Action "$FireUserAsActivator4" Delay 0.1 } } ///////////// /// Heavy /// ///////////// equip_heavys_rage { OnSpawnOutput { Target "!activator" Action "$WeaponSwitchSlot" Param "2" } OnSpawnOutput { Target "tf_weapon_minigun" Action "$SetKey$classname" Param "disabled" } //rage logic OnSpawnOutput { Target "!activator" Action "AddOutput" Param "$OnDamageReceived !caller:$SetVar$DmgInRage::0:-1" Delay 0.01 //add delay b/c Medieval Attributes removes $OnDamageReceived } OnSpawnOutput { Target "!activator" Action "AddOutput" Param "$$='$OnDamageReceived !caller:$SetVar$HeavysRage:$$=int(!caller.DmgInRage / 7 + !caller.m_flRageMeter):0:-1'" Delay 0.01 //add delay b/c Medieval Attributes removes $OnDamageReceived } OnSpawnOutput { Target "!activator" Action "AddOutput" Param "$OnDamageReceived !caller:$SetProp$m_flRageMeter:$$=?(!caller.m_bRageDraining != 0,!caller.HeavysRage,!caller.m_flRageMeter):0:-1" Delay 0.01 //add delay b/c Medieval Attributes removes $OnDamageReceived } OnParentKilledOutput { Target "!activator" Action "$RemoveOutput" Param "$OnDamageReceived" } OnSpawnOutput { Target "!activator" Action "$GetProp$m_flRageMeter" Param "heavy_rage_regenerator_math|SetValue|" } math_counter { "targetname" "heavy_rage_regenerator_math" // "OutValue" "!caller,$SetKey$targetname,$$='heavy_rage_regenerator_math_player_'..!activator.EntIndex,0,1" "min" "0" "max" "100" "startvalue" "0" // "OnGetValue" "!activator,$AddPlayerAttribute,$$='damage bonus|'..float(!activator.HeavysRageTotal / 100 + 1),0,-1" "OutValue" "!caller,AddOutput,$$='OutValue player_'..!activator.EntIndex..':$AddPlayerAttribute,$$=\'mult dmgtaken from melee|\'..float(1 - (!activator.m_flRageMeter / 300)):0:-1',0,1" "OutValue" "!caller,Add,0,0.1,1" "OutValue" "!activator,$SetProp$m_flRageMeter,,0,-1" } $filter_sendprop { "targetname" "yaki_filter_heavys_rage_current" "$name" "m_flRageMeter" "$value" "0" "$compare" "equal" "Negated" "1" } OnSpawnOutput { Target "yaki_filter_heavys_rage_updater" Action "FireUser1" } filter_multi { "targetname" "yaki_filter_heavys_rage_updater" "filter01" "yaki_filter_heavys_rage_current" "filter02" "yaki_filter_heavys_rage_is_not_draining" "filter03" "yaki_filter_player" "OnUser1" "!caller,$SetKey$filter03,$$='filter_player_'..!activator.EntIndex,0,1" } trigger_multiple { "filtername" "yaki_filter_heavys_rage_updater" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "1" "wait" "0.01" "OnTrigger" "heavy_rage_regenerator_math,SetValue,$$=int(!activator.m_flRageMeter),0,-1" "OnTrigger" "yaki_filter_heavys_rage_current,AddOutput,$$='$value '..int(!activator.m_flRageMeter),0,-1" } /// Detection /// Works like: /// two triggers--each trigger enables the next in order of what stage the Heavy taunt is at /// Trigger 1 = Heavy has taunted with >100 rage; Fix damage from knockback rage and Enable Trigger 2 /// Trigger 2 = Heavy rage is 0. Disable rage drain. Forget bonuses. Enable Trigger 1 filter_tf_condition { "targetname" "yaki_filter_heavys_rage_heavy_is_taunting" "condition" "7" } $filter_sendprop { "targetname" "yaki_filter_heavys_rage_is_100" "$name" "m_flRageMeter" "$value" "100" "$compare" "greater than or equal" } $filter_sendprop { "targetname" "yaki_filter_heavys_rage_is_not_draining" "$name" "m_bRageDraining" "$value" "0" "$compare" "equal" } OnSpawnOutput { Target "yaki_filter_heavys_rage_ready" Action "FireUser1" } filter_multi { "targetname" "yaki_filter_heavys_rage_ready" "filter01" "yaki_filter_heavys_rage_heavy_is_taunting" "filter02" "yaki_filter_heavys_rage_is_100" "filter03" "yaki_filter_heavys_rage_is_not_draining" "filter04" "yaki_filter_player" "OnUser1" "!caller,$SetKey$filter04,$$='filter_player_'..!activator.EntIndex,0,1" } trigger_multiple { "targetname" "yaki_trigger_heavys_rage_ready" "filtername" "yaki_filter_heavys_rage_ready" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "1" "wait" "0.01" "OnTrigger" "yaki_trigger_heavys_rage_finished,Enable,,0,-1" "OnTrigger" "!self,Disable,,0,-1" "OnTrigger" "!activator,$AddPlayerAttribute,damage bonus HIDDEN|2,0,-1" // knockback fix "OnTrigger" "!activator,$AddItemAttribute,melee cleave attack|1|2,0,-1" // cleaves "OnTrigger" "!activator,$RemoveCond,7,0,-1" "OnTrigger" "!activator,$SetProp$m_bRageDraining,1,0,-1" //This plays the voiceline "OnTrigger" "!activator,AddContext,weaponmode:melee,0,-1" "OnTrigger" "!activator,AddContext,crosshair_enemy:Yes,0,-1" // "OnTrigger" "!activator,SpeakResponseConcept,TLK_PLAYER_BATTLECRY,0,-1" //broken; can't use while taunting for some reason. Using clientcommand instead "OnTrigger" "battlecry,Command,voicemenu 2 1,0,-1" "OnTrigger" "!activator,ClearContext,,0.1,-1" } point_clientcommand { "targetname" "battlecry" } $filter_sendprop { "targetname" "yaki_filter_heavys_rage_is_empty" "$name" "m_flRageMeter" "$value" "0" "$compare" "equal" } OnSpawnOutput { Target "yaki_filter_heavys_rage_finished" Action "FireUser1" } filter_multi { "targetname" "yaki_filter_heavys_rage_finished" "filter01" "yaki_filter_heavys_rage_is_empty" "filter02" "yaki_filter_player" "OnUser1" "!caller,$SetKey$filter02,$$='filter_player_'..!activator.EntIndex,0,1" } trigger_multiple { "targetname" "yaki_trigger_heavys_rage_finished" "filtername" "yaki_filter_heavys_rage_finished" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "1" "wait" "0.01" "StartDisabled" "1" "OnTrigger" "yaki_trigger_heavys_rage_ready,Enable,,0,-1" "OnTrigger" "!self,Disable,,0,-1" // forget bonuses "OnTrigger" "!activator,$RemovePlayerAttribute,damage bonus HIDDEN,0,-1" // knockback fix "OnTrigger" "!activator,$RemoveItemAttribute,melee cleave attack|2,0,-1" // cleaves } /// Cleanup OnParentKilledOutput { Target "!activator" Action "$RemoveItemAttribute" Param "melee cleave attack|2" } OnParentKilledOutput { Target "!activator" Action "$RemoveItemAttribute" Param "damage bonus HIDDEN|2" } } equip_holiday_punch { OnSpawnOutput { Target "!activator" Action "$AddCond" Param "56" } OnParentKilledOutput { Target "!activator" Action "$RemoveCond" Param "56" } } //////////////// /// Engineer /// //////////////// equip_rescue_ranger { OnSpawnOutput { Target "!activator" Action "$AddItemAttribute" Param "engineer building teleporting pickup|0|0" } OnParentKilledOutput { Target "!activator" Action "$RemoveItemAttribute" Param "engineer building teleporting pickup|0" } OnSpawnOutput { Target "!activator" Action "$AddItemAttribute" Param "arrow heals buildings|0|0" } OnParentKilledOutput { Target "!activator" Action "$RemoveItemAttribute" Param "arrow heals buildings|0" } OnSpawnOutput { Target "!activator" Action "$AddItemAttribute" Param "mark for death on building pickup|0|0" } OnParentKilledOutput { Target "!activator" Action "$RemoveItemAttribute" Param "mark for death on building pickup|0" } OnSpawnOutput { Target "!activator" Action "$AddItemAttribute" Param "repair health to metal ratio DISPLAY ONLY|0|0" } OnParentKilledOutput { Target "!activator" Action "$RemoveItemAttribute" Param "repair health to metal ratio DISPLAY ONLY|0" } } give_rescue_ranger { OnSpawnOutput { Target "!activator" Action "$GiveItem" Param "The Rescue Ranger" } } equip_medieval_pda { OnSpawnOutput { Target "!activator" Action "$AddItemAttribute" Param "building max level|1|5" } } building_sentry_ballista { //Building fix. Tests if the building is... building! If it fails, kills all related entites (as to not spawn them again on redeployment). // ->Requires a special entity to track if the wave is running, however. OnSpawnOutput { Target "sentrygun_ballista_redeploy_branch" Action "SetValueTest" Param "$$=?(int(relay_in_wave.InWave) = 0,1,int(!activator.m_bBuilding))" } logic_branch { "targetname" "sentrygun_ballista_redeploy_branch" "OnTrue" "!caller,Kill,,0,1" "OnFalse" "!caller,Kill,,0,1" "OnFalse" "yaki_ballista_arrow_shooter,Kill,,0,1" "OnFalse" "yaki_filter_obj_ballista,Kill,,0,1" "OnFalse" "yaki_filter_obj_ballista_state,Kill,,0,1" "OnFalse" "yaki_filter_ballista_detect_firing,Kill,,0,1" "OnFalse" "yaki_obj_ballista_rot,Kill,,0,1" "OnFalse" "sentrygun_ballista_if_minisentry,Kill,,0,1" "OnFalse" "sentrygun_ballista_if_disposable,Kill,,0,1" } //Mini-building health change (only while being built first time) OnSpawnOutput { Target "!activator" Action "AddHealth" Param "$$=int(test(!activator.m_bBuilding = 1,50,0))" } // OnSpawnOutput // { // Target "!activator" // Action "$SetProp$m_iMaxHealth" // Param "100" // } //relay OnSpawnOutput { Target "sentrygun_ballista_relay" Action "Trigger" Delay 0.1 } logic_relay { "targetname" "sentrygun_ballista_relay" "spawnflags" "1" //deletes self after OnSpawn or OnTrigger output "OnTrigger" "!activator,$SetKey$spawnflags,12,0,1" //infinite ammo to prevent sentry from using any ammo the normal way. //These add the minisentry visuals without changing HP and firing rate properties // "OnTrigger" "!activator,$SetClientProp$m_bMiniBuilding,1,0,1" //doesn't display upgrade level yet keeps HP same // "OnTrigger" "!activator,Skin,$$=!activator.m_iTeamNum,0,1" //fixes minisentry skin // "OnTrigger" "!activator,SetBodyGroup,0,0,1" //removes mini-sentry light } /// Checks if building is a mini-sentry OnSpawnOutput { Target "sentrygun_ballista_if_minisentry" Action "SetValueTest" Param "$$=int(!activator.m_bMiniBuilding)" Delay 0.05 } logic_branch { "targetname" "sentrygun_ballista_if_minisentry" "OnTrue" "!caller,Kill,,0,1" "OnFalse" "!caller,Kill,,0,1" ///minis use less ammo but deal less damage "OnTrue" "yaki_obj_ballista_trigger,AddOutput,OnTrigger !activator:$SetProp$m_iAmmoShells:$$=(!activator.m_iAmmoShells - 4):0:-1,0,-1" "OnTrue" "yaki_ballista_arrow_shooter,AddOutput,$OnFire m_ballista_mini_madmilk:ForceSpawnAtEntityOrigin:!activator:0:-1,0,-1" "OnTrue" "yaki_ballista_arrow_shooter,$SetKey$Damage,40,0,1" "OnTrue" "yaki_filter_obj_ballista_has_no_ammo,AddOutput,$value 4,0,-1" "OnTrue" "yaki_filter_obj_ballista_has_enough_ammo,AddOutput,$value 4,0,-1" ///regular sentry deals more damage but has less ammo "OnFalse" "yaki_obj_ballista_trigger,AddOutput,OnTrigger !activator:$SetProp$m_iAmmoShells:$$=(!activator.m_iAmmoShells - 6):0:-1,0,-1" "OnFalse" "yaki_ballista_arrow_shooter,AddOutput,$OnFire m_ballista_igniter:ForceSpawnAtEntityOrigin:!activator:0:-1,0,-1" } OnSpawnOutput { Target "yaki_ballista_arrow_shooter" Action "$SetOwner" Param "!activator" } tf_point_weapon_mimic { "targetname" "yaki_ballista_arrow_shooter" "speedmin" "4120" "speedmax" "4120" "WeaponType" "2" //arrows "SplashRadius" "160" "Damage" "60" "teamnum" "3" "Crits" "0" // "modelscale" "0.5" "$killicon" "sentry1" } OnSpawnOutput { Target "yaki_ballista_arrow_shooter" Action "SetParent" Param "!activator" } OnSpawnOutput { Target "yaki_ballista_arrow_shooter" Action "SetParentAttachment" Param "muzzle" Delay 0.01 } OnSpawnOutput { Target "yaki_ballista_arrow_shooter" Action "$SetLocalOrigin" Param "15 0 0" Delay 0.02 } OnSpawnOutput { Target "yaki_obj_ballista_rot" Action "Open" } filter_activator_class { "targetname" "yaki_filter_obj_ballista" "filterclass" "obj_sentrygun" } $filter_sendprop { "targetname" "yaki_filter_obj_ballista_state" "$name" "m_iState" "$value" "2" //means it's firing or wrangled "$compare" "equal" } $filter_sendprop //compares if ammo if >=6 { "targetname" "yaki_filter_obj_ballista_has_enough_ammo" "$name" "m_iAmmoShells" "$value" "6" "$compare" "greater than or equal" } filter_multi { "targetname" "yaki_filter_ballista_detect_firing" "filter01" "yaki_filter_obj_ballista" "filter02" "yaki_filter_obj_ballista_state" "filter03" "yaki_filter_obj_ballista_has_enough_ammo" } func_door { "targetname" "yaki_obj_ballista_rot" "mins" "-10 -10 -10" "maxs" "10 10 10" "movedir" "-90 0 0" "spawnflags" "4104" "speed" "0.1" "wait" "0.01" "OnFullyClosed" "!self,Open,,0,-1" } OnSpawnOutput { Target "!activator" Action "$SetVar$Mini" Param "$$=!activator.m_bMiniBuilding" } OnSpawnOutput { Target "!activator" Action "$SetVar$SentryFirerate" Param "$$=float(attribute(playeritematslot(@e@m_hBuilder@!activator,5),'engy sentry fire rate increased'))" } OnSpawnOutput { Target "yaki_obj_ballista_trigger" Action "$SetKey$wait" Param "$$=?(!activator.SentryFirerate > 0,!activator.SentryFirerate,1) * ?(!activator.Mini = 1,0.612,0.765)" Delay 0.02 } trigger_multiple { "targetname" "yaki_obj_ballista_trigger" "parentname" "yaki_obj_ballista_rot" "filtername" "yaki_filter_ballista_detect_firing" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "64" "wait" "2" "OnTrigger" "yaki_ballista_arrow_shooter,FireOnce,,0,-1" "OnTrigger" "!activator,$PlaySound,Weapon_CrusadersCrossbow.Single,0,-1" "OnTrigger" "!activator,$PlaySound,Weapon_CrusadersCrossbow.Single,0,-1" "OnTrigger" "!activator,$PlaySound,Weapon_CrusadersCrossbow.Single,0,-1" ///Recalculates fire rate every shot /// Uses variables to avoid Expression character limit "OnTrigger" "!caller,$SetVar$SentryFirerate,$$=float(attribute(playeritematslot(@e@m_hBuilder@!activator,5),'engy sentry fire rate increased')),0,-1" "OnTrigger" "!self,$SetKey$wait,$$=?(!activator.SentryFirerate > 0,!activator.SentryFirerate,1) * ?(!activator.Mini = 1,0.612,0.765),0.01,-1" } $filter_sendprop //compares if ammo if <=6 { "targetname" "yaki_filter_obj_ballista_has_no_ammo" "$name" "m_iAmmoShells" "$value" "6" "$compare" "less than" } $filter_sendprop //compares if ammo if <=6 { "targetname" "yaki_filter_obj_ballista_has_at_least_1_ammo" "$name" "m_iAmmoShells" "$value" "1" "$compare" "greater than or equal" } filter_multi { "targetname" "yaki_filter_ballista_detect_firing_empty" "filter01" "yaki_filter_obj_ballista" "filter02" "yaki_filter_obj_ballista_state" "filter03" "yaki_filter_obj_ballista_has_no_ammo" "filter04" "yaki_filter_obj_ballista_has_at_least_1_ammo" } trigger_multiple { "targetname" "yaki_obj_ballista_trigger" "parentname" "yaki_obj_ballista_rot" "filtername" "yaki_filter_ballista_detect_firing_empty" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "64" "wait" "0.45" "OnTrigger" "!activator,$SetProp$m_iAmmoShells,0,0,-1" "OnTrigger" "yaki_ballista_arrow_shooter,FireOnce,,0,-1" "OnTrigger" "!activator,$PlaySound,Weapon_CrusadersCrossbow.Single,0,-1" "OnTrigger" "!activator,$PlaySound,Weapon_CrusadersCrossbow.Single,0,-1" "OnTrigger" "!activator,$PlaySound,Weapon_CrusadersCrossbow.Single,0,-1" } } t_ballista_igniter { OnSpawnOutput { Target "ballista_igniter" Action "SetParent" Param "!activator" } trigger_once { "targetname" "ballista_igniter" "filtername" "yaki_filter_red" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "1" "OnStartTouch" "!activator,$IgnitePlayerDuration,10,0,-1" } info_particle_system { "parentname" "ballista_igniter" "effect_name" "m_torchflame" "start_active" "1" } } t_ballista_mini_madmilk { OnSpawnOutput { Target "ballista_milker" Action "SetParent" Param "!activator" } trigger_once { "targetname" "ballista_milker" "filtername" "yaki_filter_red" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "1" "OnStartTouch" "!activator,$AddCond,27 5,0,-1" } info_particle_system { "parentname" "ballista_milker" "effect_name" "peejar_drips_milk" "start_active" "1" } } building_dispenser_furnace { //Building fix. Tests if the building is... building! If it fails, kills all related entites (as to not spawn them again on redeployment). // ->Requires a special entity to track if the wave is running, however. OnSpawnOutput { Target "dispenser_furnace_redeploy_branch" Action "SetValueTest" Param "$$=?(int(relay_in_wave.InWave) = 0,1,int(!activator.m_bBuilding))" } logic_branch { "targetname" "dispenser_furnace_redeploy_branch" "OnTrue" "!caller,Kill,,0,1" "OnFalse" "!caller,Kill,,0,1" // "OnFalse" "yaki_filter_obj_furnace_building_built,Kill,,0,1" // "OnFalse" "yaki_obj_furnace_rot,Kill,,0,1" "OnFalse" "yaki_obj_furnace_arrow_igniter,Kill,0,1" } OnSpawnOutput { Target "!activator" Action "$SetModel" Param "models/props_medieval_buildables/dispenser_furnace/wood_stove_light.mdl" } OnSpawnOutput { Target "!activator" Action "$SetKey$maxs" //bounding box size Param "20 20 72" Delay 0.01 } OnSpawnOutput { Target "!activator" Action "$SetClientProp$m_bMiniBuilding" //doesn't display upgrade level yet keeps HP same Param "1" } OnSpawnOutput { Target "yaki_obj_furnace_rot" Action "SetParent" Param "!activator" } OnSpawnOutput { Target "yaki_obj_furnace_rot" Action "SetParentAttachment" Param "heal_origin" Delay 0.01 } OnSpawnOutput { Target "yaki_obj_furnace_rot" Action "Open" } func_door { "targetname" "yaki_obj_furnace_rot" "mins" "-5 -5 -5" "maxs" "5 5 5" "movedir" "-90 0 0" "spawnflags" "4104" "speed" "0.1" "wait" "0.01" "OnFullyClosed" "!self,Open,,0,-1" } $filter_sendprop { "targetname" "yaki_filter_obj_furnace_building_built" "$name" "m_bBuilding" "$value" "0" "$compare" "equal" } trigger_multiple { "filtername" "yaki_filter_obj_furnace_building_built" "parentname" "yaki_obj_furnace_rot" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "64" "wait" "0.01" //constant detection "OnTrigger" "!activator,$SetModel,models/props_medieval_buildables/dispenser_furnace/wood_stove_light.mdl,0,1" //replaces model with furnace "OnTrigger" "!activator,AddOutput,maxs 20 20 72,0.01,1" //bounding box size "OnTrigger" "!activator,SetModelScale,1,0.1,1" //bounding box size fix "OnTrigger" "!caller,Kill,,0,1" } // huntsman arrow ignition OnSpawnOutput { Target "yaki_obj_furnace_arrow_igniter" Action "SetParent" Param "!activator" } OnSpawnOutput { Target "yaki_obj_furnace_arrow_igniter" Action "SetParentAttachment" Param "heal_origin" Delay 0.01 } trigger_ignite_arrows { "targetname" "yaki_obj_furnace_arrow_igniter" "mins" "-128 -128 -128" "maxs" "128 128 128" "spawnflags" "1" } } } BuildingSpawnTemplate { Name building_sentry_ballista ItemName "Artificer PDA" BuildingType "Sentry" // Sentry // Dispenser // Teleporter Entry // Teleporter Exit // Sapper AllowBots 1 // Allow bots to spawn the template when building (Default: 0) } BuildingSpawnTemplate { Name building_dispenser_furnace ItemName "Artificer PDA" BuildingType "Dispenser" AllowBots 1 } PointTemplates { ///////////// /// Medic /// ///////////// shoot_crusaders_crossbow { // Notes // - Compared to the other template below this one, this one doesn't remove ubercharge OnSpawnOutput { Target "yaki_trigger_medic_magicarrows" Action "AddOutput" Param "$$='OnStartTouch !activator:$AddCond:'..@e@m_hOwnerEntity@!activator.CrossbowType..' 5:0:-1',0,-1" } info_particle_system { "targetname" "fire_arrow_particle" "effect_name" "critgun_weaponmodel_blu" "start_active" "1" } OnSpawnOutput { Target "yaki_trigger_medic_magicarrows" Action "AddOutput" Param "mins -1 -1 -1" Delay 0.1 } OnSpawnOutput { Target "yaki_trigger_medic_magicarrows" Action "AddOutput" Param "maxs 1 1 1" Delay 0.1 } trigger_multiple { "targetname" "yaki_trigger_medic_magicarrows" "filtername" "yaki_filter_blu" "maxs" "0 0 0.01" "mins" "0 0 -0.01" "spawnflags" "1" "OnStartTouchAll" "!caller,Kill,,0,-1" } RemoveIfKilled "yaki_trigger_medic_magicarrows" RemoveIfKilled "fire_arrow_particle" } shoot_crusaders_crossbow_UNUSED_USES_UBERCHARGE { //Notes: // - This template checks for ubercharge and consumes it to give buffs // - Don't use for medieval. Gaining uber just confuses everybody (I think, at least!) OnSpawnOutput { Target "yaki_filter_medic_magicarrows" Action "$TestEntity" Param "@c@@e@m_hOwnerEntity@!activator" } $filter_sendprop { "targetname" "yaki_filter_medic_magicarrows" "$name" "m_flChargeLevel" "$value" "0" "$compare" "greater than" "OnPass" "yaki_trigger_medic_magicarrows,AddOutput,$$='OnStartTouch medigun_'..@e@m_hOwnerEntity@!activator.EntIndex..':$SetProp$m_flChargeLevel:$$=clamp(medigun_'..@e@m_hOwnerEntity@!activator.EntIndex..'.m_flChargeLevel - 0.1,0,1):0:-1',0,-1" "OnPass" "yaki_trigger_medic_magicarrows,AddOutput,$$='OnStartTouch !activator:$AddCond:$$=\''..@e@m_hOwnerEntity@!activator.CrossbowType..' \'..(clamp(medigun_'..@e@m_hOwnerEntity@!activator.EntIndex..'.m_flChargeLevel,0,0.1) * 50):0:-1',0,-1" } info_particle_system { "targetname" "fire_arrow_particle" "effect_name" "spell_fireball_small_red" "start_active" "0" } OnSpawnOutput { Target "yaki_trigger_medic_magicarrows" Action "AddOutput" Param "mins -1 -1 -1" Delay 0.1 } OnSpawnOutput { Target "yaki_trigger_medic_magicarrows" Action "AddOutput" Param "maxs 1 1 1" Delay 0.1 } trigger_multiple { "targetname" "yaki_trigger_medic_magicarrows" "filtername" "yaki_filter_blu" "maxs" "0 0 0.01" "mins" "0 0 -0.01" "spawnflags" "1" "OnStartTouchAll" "!caller,Kill,,0,-1" } RemoveIfKilled "yaki_trigger_medic_magicarrows" RemoveIfKilled "fire_arrow_particle" RemoveIfKilled "yaki_filter_medic_magicarrows" } give_crusaders_crossbow { OnSpawnOutput { Target "!activator" Action "$GiveItem" Param "The Crusader's Crossbow" } } equip_medigun { OnSpawnOutput { Target "!activator" Action "$WeaponSwitchSlot" Param "2" } OnSpawnOutput { Target "tf_weapon_medigun" Action "$SetKey$classname" Param "disabled" } /// Names the medigun... OnSpawnOutput { Target "@c@!activator" Action "AddOutput" Param "OnUser4 logic_find_medigun:InValue:$$=!activator.m_iItemDefinitionIndex:0:1" Delay 0.01 } OnSpawnOutput { Target "@c@!activator" Action "$FireUserAsActivator4" Delay 0.05 } // ...then grabs the attribute to set crossbow buff type OnSpawnOutput { Target "medigun_decider_relay" Action "Trigger" } logic_relay { "targetname" "medigun_decider_relay" "spawnflags" "1" //resets variables "OnTrigger" "!activator,$SetVar$Kritzkrieg,0,0,-1" "OnTrigger" "!activator,$SetVar$QuickFix,0,0,-1" "OnTrigger" "!activator,$SetVar$Vaccinator,0,0,-1" //sets new variables (if applicable) "OnTrigger" "!activator,$SetVar$Kritzkrieg,$$=int(attribute(playeritematslot(!activator,1),'medigun charge is crit boost')),0.1,-1" //sets to 1 if applicable "OnTrigger" "!activator,$SetVar$QuickFix,$$=int(attribute(playeritematslot(!activator,1),'medigun charge is megaheal')),0.1,-1" //sets to 2 if applicable "OnTrigger" "!activator,$SetVar$Vaccinator,$$=int(attribute(playeritematslot(!activator,1),'medigun charge is resists')),0.1,-1" //sets to 3 if applicable //grabs a single number to use for medigun charge type "OnTrigger" "!activator,$SetVar$MedigunType,$$=?(!activator.Vaccinator != 3,3,?(!activator.QuickFix != 2,2,?(!activator.Kritzkrieg != 1,1,0))),0.14,-1" //sets addcond for new crossbow ability "OnTrigger" "!activator,$SetVar$CrossbowType,$$=?(!activator.MedigunType != 3,26,?(!activator.MedigunType != 2,16,?(!activator.MedigunType != 1,29,26))),0.21,-1" //Debug "OnTrigger" "!activator,$DisplayTextChat,$$=?(!activator.MedigunType != 3,'CROSSBOW BUFF: VACCINATOR',?(!activator.MedigunType != 2,'CROSSBOW BUFF: QUICK-FIX',?(!activator.MedigunType != 1,'CROSSBOW BUFF: KRITZKRIEG','CROSSBOW BUFF: MEDIGUN'))),0.21,-1" } } ////////////// /// Sniper /// ////////////// shoot_huntsman_bombarrow { KeepAlive 1 OnSpawnOutput { Target "yaki_huntsman_bombarrow_mimic" Action "$InheritOwner" Param "!activator" } OnSpawnOutput { Target "yaki_huntsman_bombarrow_mimic" Action "SetParent" Param "!activator" } tf_point_weapon_mimic { "targetname" "yaki_huntsman_bombarrow_mimic" "speedmin" "0" "speedmax" "0" "WeaponType" "3" //stickies "SplashRadius" "246" "Damage" "120" "teamnum" "3" "Crits" "0" // "$OnFire" "!activator,SetParent,yaki_huntsman_bombarrow_parenter,0,-1" "OnUser1" "!caller,FireOnce,,0.75,1" "OnUser1" "!caller,DetonateStickies,,0.8,1" "OnUser1" "!caller,Kill,,0.9,1" "OnUser1" "yaki_huntsman_bombarrow_prop,Kill,,0.8,1" "OnUser1" "branch_bombarrow,Test,,0.8,1" } OnSpawnOutput { Target "yaki_huntsman_bombarrow_autoboom" Action "SetParent" Param "!activator" } OnSpawnOutput { Target "branch_bombarrow" Action "SetValue" Param "$$=!activator.m_bArrowAlight" } logic_branch { "targetname" "branch_bombarrow" "OnTrue" "yaki_huntsman_bombarrow_autoboom,$SetKey$maxs,222 222 222,0,1" "OnTrue" "yaki_huntsman_bombarrow_autoboom,$SetKey$mins,-222 -222 -222,0,1" "OnTrue" "yaki_huntsman_bombarrow_autoboom,AddOutput,OnStartTouch !activator:$IgnitePlayerDuration:10:0:-1,0,1" } trigger_multiple { "targetname" "yaki_huntsman_bombarrow_autoboom" "filtername" "yaki_filter_red" "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "1" "origin" "32 0 0" "OnStartTouchAll" "branch_bombarrow,Test,,0,1" "OnStartTouchAll" "yaki_huntsman_bombarrow_mimic,$CancelPending,,0,1" "OnStartTouchAll" "yaki_huntsman_bombarrow_mimic,FireOnce,,0,1" "OnStartTouchAll" "yaki_huntsman_bombarrow_mimic,DetonateStickies,,0.01,1" "OnStartTouchAll" "yaki_huntsman_bombarrow_prop,Kill,,0,1" "OnStartTouchAll" "!caller,Kill,,0.1,-1" } OnSpawnOutput { Target yaki_huntsman_bombarrow_mimic Action "FireUser1" } OnSpawnOutput { Target "yaki_huntsman_bombarrow_prop" Action "SetParent" Param "!activator" } prop_dynamic { "targetname" "yaki_huntsman_bombarrow_prop" "model" "models\weapons\w_models\w_cannonball.mdl" "skin" "1" "modelscale" "0.75" } } } PlayerSpawnTemplate { Name "attributes_player_onspawn" } PlayerSpawnOnceTemplate { Name "attributes_player_onspawn_once" } PlayerItemEquipSpawnTemplate { Name equip_medieval_attributes ItemName "Medieval Attributes" } PlayerItemEquipSpawnTemplate { Name equip_third_person_mode ItemName "Third-Person Perspective" } PlayerItemEquipSpawnTemplate { Name equip_canteen Classname "tf_powerup_bottle" } ///////////// /// Scout /// ///////////// PlayerItemEquipSpawnTemplate { Name equip_candy_cane ItemName "The Candy Cane" } // soda popper PlayerItemEquipSpawnTemplate { Name equip_soda_popper_hype Classname "tf_weapon_soda_popper" } ItemAttributes { Classname "tf_weapon_soda_popper" "cannot be upgraded" 1 "special item description" "or used" "hype on damage" 0 // "always allow taunt" 1 //doesn't work? } PlayerItemEquipSpawnTemplate { Name give_soda_popper Classname "tf_weapon_handgun_scout_primary" } PlayerItemEquipSpawnTemplate { Name give_soda_popper Classname "tf_weapon_scattergun" } PlayerItemEquipSpawnTemplate { Name give_soda_popper Classname "tf_weapon_pep_brawler_blaster" } // ForceItem "The Soda Popper" ItemAttributes { Classname "tf_weapon_bat_wood" "mod bat launches balls" 2 //stuns bots completely } ItemAttributes { Classname "tf_weapon_cleaver" "always crit" 1 } /////////////// /// Soldier /// /////////////// ItemAttributes { Classname "tf_weapon_buff_item" "mod soldier buff range" 112.11 } PlayerItemEquipSpawnTemplate { Name equip_soldier_mountain_jumper ItemName "Soldier's Mountain Jump" } //////////// /// Pyro /// //////////// PlayerItemEquipSpawnTemplate { Name equip_flamethrower Classname "tf_weapon_flamethrower" } ItemAttributes { Classname "tf_weapon_flamethrower" "cannot be upgraded" 1 "special item description" "or used" "burn damage earns rage" 1 "mod soldier buff type" 5 "lunchbox adds minicrits" 1 "special taunt" 1 } PlayerItemEquipSpawnTemplate { Name equip_gas_passer Classname tf_weapon_jar_gas } ItemAttributes { ItemName "The Gas Passer" // "SPELL: Halloween pumpkin explosions" 1 "item_meter_charge_type" 4 // uses bitmasks. Requires any number other than 0 to function. 0x04 is unused, disables 0x01 and 0x02 // "dmg penalty vs players" 0.25 //reduces damage for EoI // "explode_on_ignite" 1 //yes // "weapon burn dmg increased" 4 //fixes afterburn for EoI } PlayerShootTemplate //credit seelpit { Name shoot_fireball Speed 1500 Offset "-3 0 0" Angles "0 0 0" OverrideShoot 1 Classname tf_weapon_jar_gas } PlayerItemEquipSpawnTemplate { Name equip_back_scratcher ItemName "The Back Scratcher" } /////////////// /// Demoman /// /////////////// /// Demoman Swords PlayerItemEquipSpawnTemplate { Name equip_sword Classname tf_weapon_sword } /// Scotsman's Skullcutter ItemAttributes { ItemName "The Scotsman's Skullcutter" "fire input on kill" "skullcutter_decap_calc_stats^Trigger^0" "decapitate type" 1 "special item description" "This weapon can collect heads." "special item description 2" "Heads claimed increase melee damage and healing from all sources." "provide on active" 0 } /// Claidheamohmor ItemAttributes { ItemName "The Claidheamohmor" "fire input on kill" "claid_decap_calc_stats^Trigger^0" "decapitate type" 1 "special item description" "This weapon can collect heads." "special item description 2" "Heads claimed increase charge distance and health regen." "provide on active" 0 } /// Persian Persuader ItemAttributes { ItemName "The Persian Persuader" "fire input on kill" "persuader_decap_calc_stats^Trigger^0" "decapitate type" 1 "special item description" "This weapon can collect heads." "special item description 2" "Heads claimed increase jump height and charge recharge rate." "cancel falling damage" 1 } /// Half Zatoichi /// Honestly lazy to not check for RHoK in overheal gimmick ItemAttributes { ItemName "The Half-Zatoichi" "heal on kill" 100 "restore health on kill" 0 } ///////////// /// Heavy /// ///////////// PlayerItemEquipSpawnTemplate { Name equip_heavys_rage ItemName "Heavy's Rage" } ItemAttributes { Classname tf_weapon_minigun "cannot be upgraded" 1 "generate rage on damage" 3 "special item description" "or used" } PlayerItemEquipSpawnTemplate { Name equip_holiday_punch ItemName "The Holiday Punch" } ItemAttributes { ItemName "The Holiday Punch" "special item description" "Always deals critical hits" "special item description 2" "+30% bonus move speed on wearer" // "cannot be upgraded" 1 "move speed bonus" 1.3 // "taunt attack after end" 1 "taunt attack time mult" 0.5 "gesture speed increase" 2 "dmg penalty vs players" 0.6 "CARD: damage bonus" 1.8 } //////////////// /// Engineer /// //////////////// //ItemAttributes //{ // ItemName "The Wrangler" // "custom item model" "models/weapons/c_models/c_wrangler_wooden.mdl" // "disable wrangler shield" "1" // "item color rgb" "6901050" //} ItemAttributes { Classname "tf_weapon_shotgun_building_rescue" "special item description" "Replaces Spytech with The Ye Olde" // "paintkit_proto_def_index" 93 // "set_item_texture_wear" 0 "override projectile type" 8 "engineer building teleporting pickup" 0 } PlayerItemEquipSpawnTemplate { Name equip_rescue_ranger Classname "tf_weapon_shotgun_building_rescue" } PlayerItemEquipSpawnTemplate { Name give_rescue_ranger Classname "tf_weapon_shotgun_primary" } PlayerItemEquipSpawnTemplate { Name give_rescue_ranger Classname "tf_weapon_sentry_revenge" } PlayerItemEquipSpawnTemplate { Name give_rescue_ranger Classname "tf_weapon_drg_pomson" } PlayerItemEquipSpawnTemplate { Name equip_medieval_pda Classname "tf_weapon_pda_engineer_build" } ItemAttributes { Classname "tf_weapon_pda_engineer_destroy" "engy sentry damage bonus" 0 //hidden from player purposely "engy sentry fire rate increased" 3.4 //hidden } // ItemAttributes // { // ItemName "The Eureka Effect" // "alt fire teleport to spawn" 0 // } ///////////// /// Medic /// ///////////// ItemAttributes { Classname "tf_weapon_crossbow" "mad milk syringes" "1" "add cond on hit" "27" "add cond on hit duration" "4" "special item description" "On Hit Teammate: Gives a buff dependent on Medigun type." // "special item description 2" " Buff costs up to 10% Ubercharge" // "special item description 3" " and lasts 5 seconds" } PlayerItemEquipSpawnTemplate { Name give_crusaders_crossbow Classname "tf_weapon_syringegun_medic" } PlayerItemEquipSpawnTemplate { Name give_crusaders_crossbow ItemName "Upgradeable TF_WEAPON_SYRINGEGUN_MEDIC" } PlayerShootTemplate { Name shoot_crusaders_crossbow Offset "18 0 0" AttachToProjectile 1 Classname "tf_weapon_crossbow" } PlayerItemEquipSpawnTemplate { Name equip_medigun Classname "tf_weapon_medigun" } ItemAttributes { Classname tf_weapon_medigun "cannot be upgraded" 1 "special item description" "or used" } ////////////// /// Sniper /// ////////////// PlayerShootTemplate { Name shoot_huntsman_bombarrow AttachToProjectile 1 Offset "4 0 0" Classname "tf_weapon_compound_bow" } ItemAttributes { Classname "tf_weapon_compound_bow" "special item description" "Fires Bomb Arrows" "arrow hit kill time" 1 } /////////// /// Spy /// /////////// PointTemplates { building_sapper_charmer { OnSpawnOutput { Target "!activator" Action "$SetModelOverride" Param "models/empty.mdl" } trigger_once { "filtername" "yaki_filter_red" //can't seem to filter stunned robot here? "mins" "-5 -5 -5" "maxs" "5 5 5" "spawnflags" "1" "OnStartTouch" "!activator,$RemoveCond,43,0,1" //reprogrammed "OnStartTouch" "!activator,$AddCond,43,6.2,1" //reprogrammed "OnStartTouch" "!activator,$AddCond,56 6.2,0,1" //crits "OnStartTouch" "!activator,$RemoveCond,50,0.1,1" //sapped robot effect "OnStartTouch" "!activator,$RemoveCond,71,0.1,1" //gatebot stun "OnStartTouch" "!activator,$SetProp$m_iStunFlags,0,0.1,1" "OnStartTouch" "!activator,$AddPlayerAttribute,receive friendly fire|1,0,-1" "OnStartTouch" "!activator,$RemovePlayerAttribute,receive friendly fire,6.2,-1" } } } BuildingSpawnTemplate { Name building_sapper_charmer ItemName "Charmer Sapper" //Since we can't filter ClassName here, we use another equip to give all sappers the same effect. BuildingType "Sapper" } ItemAttributes //Var$KunaiBuff { ItemName "Conniver's Kunai" "overheal bonus" 3 } /////////////////////////// /// Custom Weapons List /// /////////////////////////// CustomWeapon { "Medieval Attributes" { OriginalItemName "Damaged Capacitor" } "Third-Person Perspective" { OriginalItemName "Damaged Capacitor" } "Default Power Up Canteen (MvM)" { OriginalItemName "Default Power Up Canteen (MvM)" "powerup max charges" 3 } "Power Up Canteen (MvM)" { OriginalItemName "Power Up Canteen (MvM)" "powerup max charges" 3 } "Kritz Or Treat Canteen" { OriginalItemName "Kritz Or Treat Canteen" "powerup max charges" 3 } "Battery Canteens" { OriginalItemName "Battery Canteens" "powerup max charges" 3 } "Fake teamflag" { OriginalItemName "Battery Canteens" "attachment name" "flag" "custom item model" "models/props_medieval/flag_medieval_scroll/medieval_scroll_flag.mdl" } "The Parthian Shot" { OriginalItemName "The Huntsman" "special item description" "(+)On Kill: Gain speed boost for 5 seconds" "special item description 2" "(+)25% faster move speed while aiming" "special item description 3" "(-)33% slower reload speed" "speed_boost_on_kill" "5" "aiming movespeed increased" "1.25" "Reload time increased" "1.33" } "Scout's Hype" { OriginalItemName "Damaged Capacitor" "special item description" "'HYPE' increases mobility and item recharge rates" "special item description 2" "Generate 'HYPE' by running" "special item description 3" "'Taunt' to activate 'HYPE'" } "Soldier's Mountain Jump" { OriginalItemName "Damaged Capacitor" "special item description" "Use 'JUMP' twice to 'MOUNTAIN JUMP'" "special item description 2" "Use 'JUMP' three times to 'MOUNTAIN CRUSH'" } "Pyro's MMMPH" { OriginalItemName "Damaged Capacitor" "special item description" "'MMMPH' grants 100% critical hits" "special item description 2" "Deal damage to generate 'MMMPH'" "special item description 3" "Activate 'MMMPH' by taunting" } "Heavy's Rage" { OriginalItemName "Damaged Capacitor" "special item description" "'RAGE' deals knockback to targets on hit" "special item description 2" "Generate 'RAGE' by taking and dealing damage" "special item description 3" "'Taunt' to activate 'RAGE'" } "Artificer PDA" { OriginalItemName "tf_weapon_pda_engineer_build" // "special item description" "Special PDA builds Medieval Inventions" //makes description too long "special item description 2" "Sentry replaced with a Ballista" "special item description 3" "Dispenser replaced with a Furnace" "special item description 4" "Teleporters replaced by a Catapult" // "building max level" 1 //Adds it in equip_medieval_pda so descriptions are in stats first //"engy sentry radius increased" 0.75 "sentry rapid fire" 1 //sentry head rotates near instantly, it's nice! } "Charmer Sapper" { OriginalItemName "Damaged Capacitor" "special item description" "Sapper charms enemies" } "TU Injured Speed Boost" { OriginalItemName "Damaged Capacitor" } "TU Injured Damage Boost" { OriginalItemName "Damaged Capacitor" } } PlayerItemEquipSpawnTemplate { Name tieredupgrade_injured_damage_boost ItemName "TU Injured Damage Boost" } PlayerItemEquipSpawnTemplate { Name tieredupgrade_injured_speed_boost ItemName "TU Injured Speed Boost" } ForceItem { All { Item "Medieval Attributes" } Scout { Item "Scout's Hype" } Soldier { Item "Soldier's Mountain Jump" } Pyro { Item "Pyro's MMMPH" } Heavyweapons { Item "Heavy's Rage" } Engineer { Item "Artificer PDA" } Spy { Item "Charmer Sapper" } } UpgradeStationKeepWeapons 1 ExtraLoadoutItems { AllowEquipOutsideSpawn 1 18 "Third-Person Perspective" } ////////////////////// /// Bot Navigation /// ////////////////////// PointTemplates { moveto_nav_info_targets { NoFixUp 1 //River info_target { "targetname" "nav_river_left_exit" "origin" "-2354 700 -836" } //Cave info_target { "targetname" "nav_cave_rightspawn" "origin" "284 -2172 -639" } info_target { "targetname" "nav_cave_to_town_exit" "origin" "1138 -2037 -607" } //Town info_target { "targetname" "nav_town_bar_to_outlook" "origin" "3512 -884 -93" } info_target { "targetname" "nav_town_bar_to_upperhill" "origin" "3196 177 -100" } info_target { "targetname" "nav_town_right_outside_parapet" "origin" "2279 -524 36" } //Hatch info_target { "targetname" "nav_hatch_rr_right_exit" "origin" "2651 -2344 98" } info_target { "targetname" "nav_hatch_right_upstairs" "origin" "1882 -877 369" } info_target { "targetname" "nav_hatch_rr_left_exit" "origin" "327 -2361 96" } info_target { "targetname" "nav_hatch_outside_cliff" "origin" "-341 -346 40" } } teleport_river_left { OnSpawnOutput { Target "!activator" Action "$TeleportToEntity" Param "spawnenemy_river_left" Delay 1 //required to make bots move. If it's immediate they sit in spawn like ducks } OnSpawnOutput { Target "!activator" Action "$BotCommand" Param "interrupt_action -posent nav_river_left_exit" Delay 2 } } } /////////////////////// /// Robot Templates /// /////////////////////// Templates { FW_Heavy_KGB { Class Heavyweapons Name "Brawler" Skill Normal ClassIcon heavy_champ_red WeaponRestrictions MeleeOnly Item "The Killing Gloves of Boxing" Item "Pugilist's Protector" StripItemSlot 0 StripItemSlot 1 AddTemplate "robot_stats" } FW_Heavy_Eviction { Class Heavyweapons Name "Evictor" Skill Normal ClassIcon heavy_eviction_nys WeaponRestrictions MeleeOnly Item "The Eviction Notice" Item "Capone's Capper" StripItemSlot 0 StripItemSlot 1 AddTemplate "robot_stats" } FW_Scout { Class Scout Name "Scoundrel" Skill Normal ClassIcon scout_bat WeaponRestrictions MeleeOnly StripItemSlot 0 StripItemSlot 1 AddTemplate "robot_stats" } robot_stats { SpawnTemplate "equip_robot_attributes" UseMeleeThreatPrioritization 1 Attributes DisableDodge Attributes Aggressive Action Mobber // hunts players even when bomb is picked up UseHumanModel 2 NoIdleSound 1 SuppressTimedFetchFlag 1 DesiredAttackRange 150 //default 100 CharacterAttributes { "crit mod disabled hidden" "0" } EventChangeAttributes { HuntPlayers { InterruptAction { Target "ClosestPlayer" AimTarget "ClosestPlayer" // KillAimTarget 1 Repeats 1 Duration 1 } } } } moveto_cave_rightspawn { InterruptAction { Target "nav_cave_rightspawn" Delay 0.8 Repeats 1 Duration 2 OnDoneChangeAttributes HuntPlayers } } moveto_cave_to_town_exit { InterruptAction { Target "nav_cave_to_town_exit" Delay 0.8 Repeats 1 Duration 2.5 OnDoneChangeAttributes HuntPlayers } } moveto_town_right_outside_parapet { InterruptAction { Target "nav_town_right_outside_parapet" Delay 0.8 Repeats 1 Duration 1 OnDoneChangeAttributes HuntPlayers } } moveto_town_bar_to_upperhill { InterruptAction { Target "nav_town_bar_to_upperhill" Delay 0.8 Repeats 1 Duration 0.7 OnDoneChangeAttributes HuntPlayers } } moveto_town_bar_to_outlook { InterruptAction { Target "nav_town_bar_to_outlook" Delay 0.8 Repeats 1 Duration 1 OnDoneChangeAttributes HuntPlayers } } moveto_hatch_rr_left_exit { InterruptAction { Target "nav_hatch_rr_left_exit" Delay 0.8 Repeats 1 Duration 1 OnDoneChangeAttributes HuntPlayers } } moveto_hatch_rr_right_exit { InterruptAction { Target "nav_hatch_rr_right_exit" Delay 0.8 Repeats 1 Duration 3 OnDoneChangeAttributes HuntPlayers } } moveto_hatch_right_upstairs { InterruptAction { Target "nav_hatch_right_upstairs" Delay 0.8 Repeats 1 Duration 3 OnDoneChangeAttributes HuntPlayers } } moveto_hatch_outside_cliff { InterruptAction { Target "nav_hatch_outside_cliff" Delay 0.8 Repeats 1 Duration 1 OnDoneChangeAttributes HuntPlayers } } //////////// /// VIPs /// //////////// VIP_Mannvich_Monster { Name "Mannvich Monster" Class Heavyweapons Skill Expert Health 9000 Scale 2.2 ClassIcon heavy_mannvich_yaki UseMeleeThreatPrioritization 1 Attributes DisableDodge Attributes Aggressive Attributes Miniboss StripItemSlot 0 StripItemSlot 1 UseHumanModel 2 NoIdleSound 1 WeaponRestrictions MeleeOnly Item "Mannvich" UseCustomModel "models/props_frostwynd/bots/heavy_legs.mdl" ItemAttributes { ItemName "Mannvich" "custom item model" "models/props_frostwynd/bots/hwn2020_mannvich.mdl" } ItemAttributes { ItemName TF_WEAPON_FISTS // "custom hit sound" "sandwicheat09_single.wav" //need to precache, removing for now "custom kill icon" "ham_shank" "killstreak tier" 1 //tracks kills for VIP lol "melee cleave attack" 1 "melee range multiplier" 1.1 "melee bounds multiplier" 1.3 } CharacterAttributes { "airblast vulnerability multiplier" 0.6 "damage force reduction" 0.6 "move speed penalty" 0.75 "no_jump" 1 "damage penalty" 2 "override footstep sound set" 9 "voice pitch scale" 0.8 "SET BONUS: Special dsp" 30 } VoiceCommand { Delay 0.1 Cooldown 1 Repeats 5 IfSeeTarget 1 Type "Dispenser here" } Taunt { Delay 0.9 Name "Taunt: Mannrobics" Repeats 1 Duration 6.3 } } VIP_Boxing_Heavy { Class heavyweapons Name "All-Time Robo Heavyweight Champ" ClassIcon heavy_champ_giant Skill Expert Health 10000 Scale 2.2 Item "The Killing Gloves of Boxing" Item "Pugilist's Protector" Item "The Heavy-Weight Champ" WeaponRestrictions MeleeOnly UseMeleeThreatPrioritization 1 Attributes DisableDodge Attributes Aggressive Attributes Miniboss Attributes AlwaysCrit StripItemSlot 0 StripItemSlot 1 UseCustomModel "models/bots/heavy_boss/bot_heavy_boss.mdl" ItemAttributes { ItemName "the killing gloves of boxing" "fire rate penalty" 1.6 "damage bonus" 1.2 "melee cleave attack" 1 "melee bounds multiplier" 2.75 "melee range multiplier" 1.1 "killstreak tier" 1 //tracks kills for VIP lol } CharacterAttributes { "no_jump" 1 "move speed bonus" 0.4 "damage force reduction" 0 "airblast vulnerability multiplier" 0.3 "override footstep sound set" 2 } Taunt { Delay 1 Repeats 2 Duration 3.4 Cooldown 0.01 } } } }