///////////////////////////////////////////////////////////////////// // // Example pop file for the map mvm_example. // // This pop file contains a sampling of wave types used in MVM and is commented. // ///////////////////////////////////////////////////////////////////// // // Helpful debug and console commands for developing MVM population scripts: // // sv_cheats 1 // Allows cheat commands. // god // Enables god mode for players. // nb_stop 1 // Stops all bots in place. // nb_blind 1 // Bots will not treat players as threats. // currency_give x // Give player x amount of game currency to be used on upgrades. // tf_populator_health_multiplier x.x // Multiplies health of enemy bots - example: tf_populator_health_multiplier 0.01 will set health of bots to 1% of normal. // tf_mvm_popfile abcd // Will load the .pop file of the specified name - example tf_mvm_popfile mvm_mapname_challenge2 will load mvm_mapname_challenge2.pop in the tf/scripts/population directory. // tf_mvm_jump_to_wave x // Will jump to the specified wave number of the current .pop file - example tf_mvm_jump_to_wave 6 will jump to wave 6. // tf_bot_flag_kill_on_touch 1 // When a bot picks up the flag, they die. // ///////////////////////////////////////////////////////////////////// // BEGIN POP FILE ///////////////////////////////////////////////////////////////////// #base robot_giant.pop // This pop file is marked to be included. These are other .pop files that contain templates for TFBots. In our WaveSpawns we can reference the templates in these pop files. #base robot_standard.pop // This pop file is marked to be included. These are other .pop files that contain templates for TFBots. In our WaveSpawns we can reference the templates in these pop files. WaveSchedule { StartingCurrency 20000 CanBotsAttackWhileInSpawnRoom Yes //keep this so companion bots can combat spawn camping RespawnWaveTimeBlue 1 //replaces the normal respawn kv's FixedRespawnWaveTimeBlue 1 // Essential stuff ReverseWinConditions 1 AllowJoinTeamBlueMax 6 AllowJoinTeamBlue 1 HumansMustJoinTeam Blue SetCreditTeam 3 SniperAllowHeadshots 1 //sniper and amby un-exist without this, use AimAt Body if you don't want your sniper bots headshotting // MaxTotalPlayers 6 // currently doesn't work in reverse SendBotsToSpectatorImmediately 1 //keeps the populator less clogged, bot projectiles vanish on death + causes weird killcams RobotLimit 27 FlagCarrierMovementPenalty 1 BluHumanFlagCapture 1 BluHumanFlagPickup 1 StartingCurrency 20000 // How much currency each player starts with. Normally 400 is a good starting point, but increased to 20k for the purpose of this test script. RespawnWaveTime 10 // This is the maximum respawn time, in seconds for players when they die. Starting at 2 seconds, it grows 2 seconds per wave. // In this case, wave 1 will have a respawn time of 2 seconds. Wave 2 - 4 seconds. Wave 3 - 6 seocnds, and so on until it hits the cap of 10 seconds for wave 5 and beyond. CanBotsAttackWhileInSpawnRoom no // Sets the robots to not attack players while they are inside of their respawn room volume. PointTemplates { flag { NoFixup 1 item_teamflag { "targetname" "flag" "angles" "0 180 0" "flag_icon" "../hud/objectives_flagpanel_carried" //this is the hud icon that represents the flag "flag_model" "models/flag/briefcase.mdl" //you can replace the model of the flag if you know the file name "flag_paper" "player_intel_papertrail" //this is the paper trail particle that emits whenever you move with the flag, this can also be changed "flag_trail" "flagtrail" //this is the team colored trail particle "GameType" "1" //1 sets the flag to "Attack/Defend" which only allows the flag to be picked up by its own team rather than the opposing team, you also cannot pick up neutral flags, set it to 0 to work as a normal flag in Capture The Flag gamemode "NeutralType" "1" "ReturnBetweenWaves" "1" "ReturnTime" "60000" "ScoringType" "0" "StartDisabled" "0" "TeamNum" "3" //changing this number affects which team the flag belongs to, 0 for neutral (both teams can pick it up), 1 for spectator (same as 0), 2 for red and 3 for blue "trail_effect" "1" } } capturezone //all three of these entities can be used to detect the flag entity, there are different outputs you can use to achieve the desired outcome { NoFixup 1 func_capturezone { "classname" "func_capturezone" //note that with a func_capturezone, if a TFBot AI captures the flag inside this, it will result in blu team winning even if there are no outputs "mins" "-92 -92 -92" //mins and maxs are keyvalues that determine the size/volume of the entity brush in hammer units, these are defined as two opposite corners so you can only create cubes and prisms, the numbers can be asymmetrical however mins must be lower than maxs, each number represents the hammer unit distance from the origin point in terms of "X Y Z" coordinates "maxs" "92 92 92" "TeamNum" "3" //changing this number affects which team can capture, 0 for neutral (both teams can cap), 1 for spectator (same as 0), 2 for red and 3 for blue "spawnflags" "1" ////////////////////////////////////////////editable outputs//////////////////////////////////////////// "OnCapture" "bots_win,RoundWin,,0,-1" //this output ends the wave in blu victory, you can remove it or edit it and replace it other outputs if you want it to do something else, note that the name of the entity may be different depending on what map you are on } } flagdetectionzone { NoFixup 1 func_flagdetectionzone { "classname" "func_flagdetectionzone" "mins" "-92 -92 -92" "maxs" "92 92 92" "spawnflags" "1" //"TeamNum" keyvalue exist for this entity though i have not tested it ////////////////////////////////////////////editable outputs//////////////////////////////////////////// "OnStartTouchFlag" "bots_win,RoundWin,,0,-1" "OnEndTouchFlag" "bots_win,RoundWin,,0,-1" "OnDroppedFlag" "bots_win,RoundWin,,0,-1" "OnPickedUpFlag" "bots_win,RoundWin,,0,-1" } } flagalert { NoFixup 1 func_flag_alert { "classname" "func_flag_alert" "mins" "-92 -92 -92" "maxs" "92 92 92" "spawnflags" "1" //"TeamNum" keyvalue exist for this entity though i have not tested it ////////////////////////////////////////////editable outputs//////////////////////////////////////////// "OnTriggerByTeam1" "bots_win,RoundWin,,0,-1" "OnTriggerByTeam2" "bots_win,RoundWin,,0,-1" } } capmodel { prop_dynamic { "model" "models/props_gameplay/cap_point_base.mdl" "targetname" "controlpoint" "solid" "6" "skin" "1" } } deskprop { prop_dynamic { "model" "models/props_spytech/work_table001.mdl" "solid" "6" } } cap { training_annotation { "targetname" "annotationcap1" "parentname" "controlpoint" "display_text" "Cap start" "lifetime" "3" "origin" "-210.799 957.09 -16" } training_annotation { "targetname" "annotationcap2" "parentname" "controlpoint" "display_text" "Cap break" "lifetime" "3" "origin" "-210.799 957.09 -16" } training_annotation { "targetname" "annotation" "display_text" "Success" "lifetime" "3" "origin" "32 -960 48" } trigger_multiple { "mins" "-92 -92 -92" "maxs" "92 92 92" "origin" "32 -960 -16" "spawnflags" "1" "OnStartTouchAll" "annotationcap1,Show,,0,-1" "OnStartTouchAll" "controlpoint1area,SetTeamCanCap,3 1,0,-1" "OnStartTouchAll" "annotation,Show,,0,-1" "OnStartTouchAll" "controlpoint,Skin,0,0,-1" "OnStartTouchAll" "controlpoint,TurnOff,,0,-1" //"OnStartTouchAll" "caps_roundspawn_relay,Trigger,,0,-1" "OnStartTouchAll" "controlpoint1,SetLocked,1,0,-1" "OnStartTouchAll" "controlpoint1,SetOwner,3,0,-1" } trigger_capture_area { "targetname" "controlpoint1area" "classname" "trigger_capture_area" "area_cap_point" "controlpoint1" "area_time_to_cap" "5" "parentname" "controlpoint" "StartDisabled" "0" "targetname" "capturearea" "team_cancap_2" "0" "team_cancap_3" "1" "team_numcap_2" "1" "team_numcap_3" "1" "team_spawn_2" "0" "team_spawn_3" "0" "team_startcap_2" "1" "team_startcap_3" "1" "mins" "-112 -112 -80" "maxs" "112 112 80" "origin" "-128 960 16" "spawnflags" "1" "OnStartCap" "controlpoint,Skin,2,0,-1" "OnStartTeam2" "annotationcap1,Show,,0,-1" "OnBreakTeam2" "annotationcap2,Show,,0,-1" } team_control_point { "classname" "team_control_point" "angles" "0 0 0" "point_default_owner" "2" "point_group" "0" "point_index" "0" "point_printname" "TODO: Set Name" "point_start_locked" "0" "point_warn_on_cap" "0" "point_warn_sound" "ControlPoint.CaptureWarn" "random_owner_on_restart" "0" "spawnflags" "0" "StartDisabled" "0" "targetname" "controlpoint1" "team_bodygroup_0" "3" "team_bodygroup_2" "1" "team_bodygroup_3" "1" "team_icon_0" "sprites/obj_icons/icon_obj_neutral" "team_icon_2" "sprites/obj_icons/icon_obj_red" "team_icon_3" "sprites/obj_icons/icon_obj_blu" "team_model_0" "models/effects/cappoint_hologram.mdl" "team_model_2" "models/effects/cappoint_hologram.mdl" "team_model_3" "models/effects/cappoint_hologram.mdl" "team_previouspoint_3_0" "controlpoint1" "team_timedpoints_2" "0" "team_timedpoints_3" "0" "origin" "-128 960 -64" } team_control_point_master { "classname" "team_control_point_master" "cpm_restrict_team_cap_win" "3" "custom_position_x" "-1" "custom_position_y" "-1" "partial_cap_points_rate" "0" "play_all_rounds" "0" "score_style" "0" "StartDisabled" "0" "switch_teams" "0" "targetname" "master_control_point" "team_base_icon_2" "sprites/obj_icons/icon_base_red" "team_base_icon_3" "sprites/obj_icons/icon_base_blu" "origin" "-272 960 -7.27679" } logic_relay { "targetname" "caps_roundspawn_relay" "origin" "777 777 777" "OnTrigger" "controlpoint1,RoundActivate,,0,-1" "OnTrigger" "controlpoint1area,RoundSpawn,,0,-1" "OnTrigger" "master_control_point,RoundSpawn,,0,-1" "OnTrigger" "master_control_point,RoundActivate,,0,-1" } } cap2 { prop_dynamic { "model" "models/props_gameplay/cap_point_base.mdl" "targetname" "cap_base" "solid" "6" "skin" "0" //0 = neutral, 1 = red, 2 = blue "origin" "0 0 0" } prop_dynamic { "model" "models/effects/cappoint_hologram.mdl" "targetname" "cap_hologram" "DefaultAnim" "idle" "disableshadows" "1" "SetBodyGroup" "0" //0 = neutral, 2 = red, 3 = blue "origin" "0 0 4" } trigger_multiple { "classname" "trigger_multiple" "filtername" "cap_filter_blu" "origin" "0 0 128" "spawnflags" "1" "StartDisabled" "0" "targetname" "cap_area" "wait" "1" "mins" "-128 -128 -128" "maxs" "128 128 128" "OnStartTouchAll" "cap_timer_blu,Enable,,0,-1" "OnStartTouchAll" "cap_compare,Compare,,0,-1" "OnStartTouchAll" "annotationcap1,Show,,0,-1" } filter_tf_player_can_cap { "classname" "filter_tf_player_can_cap" "Negated" "0" "targetname" "cap_filter_cancap" "TeamNum" "0" "origin" "0 -52 16" } filter_multi { "classname" "filter_multi" "Filter01" "filter_bluteam" "Filter02" "cap_filter_cancap" "filtertype" "0" "Negated" "0" "targetname" "cap_filter_blu" "origin" "0 -68 32" } logic_timer //this is where you set the capture duration of the control point, change "RefireTime" to change the duration, divide the time in seconds by 100 to determine the value { "classname" "logic_timer" "RefireTime" "0.05" //by default this value is 0.05, which takes 5 seconds to capture "spawnflags" "0" "StartDisabled" "1" "targetname" "cap_timer_blu" "UseRandomTime" "0" "OnTimer" "cap_progress_blu_ones,Add,1,0,-1" // you can also change the first number here to change the capture progress increment, remember that the point is captured once the progress reaches 100 "OnTimer" "cap_compare,SetValue,1,0,-1" "OnTimer" "cap_text_blu_ones,Display,,0,-1" "OnTimer" "cap_text_blu_tens,Display,,0,-1" "origin" "0 -68 48" } logic_compare { "classname" "logic_compare" "CompareValue" "0" "InitialValue" "1" "targetname" "cap_compare" "OnEqualTo" "cap_sound_stop,PlaySound,,0,-1" "OnGreaterThan" "cap_sound_start,PlaySound,,0,-1" "OnEqualTo" "cap_sound_move,StopSound,,0,-1" "OnGreaterThan" "cap_sound_move,PlaySound,,0,-1" "origin" "0 -100 48" } math_counter { "classname" "math_counter" "max" "10" "min" "-1" "StartDisabled" "0" "startvalue" "0" "targetname" "cap_progress_blu_ones" "OnHitMax" "cap_progress_blu_tens,Add,1,0,-1" "OnHitMin" "cap_progress_blu_tens,Subtract,1,0,-1" "OnHitMin" "cap_progress_blu_ones,SetValueNoFire,9,0,-1" "OnHitMax" "cap_progress_blu_ones,SetValueNoFire,0,0,-1" "OutValue" "cap_case_blu_ones,InValue,,0,-1" "origin" "0 -68 64" } math_counter //this is where you put your events to trigger something on the map upon point capture using the output "OnHitMax" { "classname" "math_counter" "max" "10" "min" "-1" "StartDisabled" "0" "startvalue" "0" "targetname" "cap_progress_blu_tens" "OnHitMax" "cap_timer_blu,Disable,,0,-1" "OnHitMax" "cap_base,Skin,2,0,-1" //set the first number to 0 = neutral, 1 = red, 2 = blue "OnHitMax" "cap_hologram,SetBodyGroup,3,0,-1" //set the first number to 0 = neutral, 2 = red, 3 = blue "OnHitMax" "cap_sound_success,PlaySound,,0,-1" "OnHitMax" "cap_sound_move,StopSound,,0,-1" "OnHitMax" "cap_sound_stop,PlaySound,,0,-1" "OnHitMax" "cap_area,DisableAndEndTouch,,0,-1" "OutValue" "cap_case_blu_tens,InValue,,0,-1" "OnHitMax" "cap_text_blu_ones,Kill,,0,-1" "OnHitMax" "cap_text_blu_tens,Kill,,0,-1" "OnHitMin" "cap_progress_blu_tens,SetValueNoFire,0,0,-1" "OnHitMin" "cap_compare,SetValueCompare,0,0,-1" "origin" "0 -84 64" } logic_case { "classname" "logic_case" "Case01" "0" "Case02" "1" "Case03" "2" "Case04" "3" "Case05" "4" "Case06" "5" "Case07" "6" "Case08" "7" "Case09" "8" "Case10" "9" "Case11" "10" "Case12" "-1" "targetname" "cap_case_blu_ones" "OnCase01" "cap_text_blu_ones,AddOutput,message 0,0,-1" "OnCase02" "cap_text_blu_ones,AddOutput,message 1,0,-1" "OnCase03" "cap_text_blu_ones,AddOutput,message 2,0,-1" "OnCase04" "cap_text_blu_ones,AddOutput,message 3,0,-1" "OnCase05" "cap_text_blu_ones,AddOutput,message 4,0,-1" "OnCase06" "cap_text_blu_ones,AddOutput,message 5,0,-1" "OnCase07" "cap_text_blu_ones,AddOutput,message 6,0,-1" "OnCase08" "cap_text_blu_ones,AddOutput,message 7,0,-1" "OnCase09" "cap_text_blu_ones,AddOutput,message 8,0,-1" "OnCase10" "cap_text_blu_ones,AddOutput,message 9,0,-1" "OnCase11" "cap_text_blu_ones,AddOutput,message 0,0,-1" "OnCase12" "cap_text_blu_ones,AddOutput,message 9,0,-1" "origin" "0 -68 80" } logic_case { "classname" "logic_case" "Case01" "0" "Case02" "1" "Case03" "2" "Case04" "3" "Case05" "4" "Case06" "5" "Case07" "6" "Case08" "7" "Case09" "8" "Case10" "9" "Case11" "10" "targetname" "cap_case_blu_tens" "OnCase11" "cap_text_blu_tens,AddOutput,message,0,-1" "OnCase10" "cap_text_blu_tens,AddOutput,message 9,0,-1" "OnCase09" "cap_text_blu_tens,AddOutput,message 8,0,-1" "OnCase08" "cap_text_blu_tens,AddOutput,message 7,0,-1" "OnCase07" "cap_text_blu_tens,AddOutput,message 6,0,-1" "OnCase06" "cap_text_blu_tens,AddOutput,message 5,0,-1" "OnCase05" "cap_text_blu_tens,AddOutput,message 4,0,-1" "OnCase04" "cap_text_blu_tens,AddOutput,message 3,0,-1" "OnCase03" "cap_text_blu_tens,AddOutput,message 2,0,-1" "OnCase02" "cap_text_blu_tens,AddOutput,message 1,0,-1" "OnCase01" "cap_text_blu_tens,AddOutput,message,0,-1" "origin" "0 -84 80" } game_text { "classname" "game_text" "channel" "2" "color" "88 133 162" "color2" "240 110 0" "effect" "0" "fadein" "0" "fadeout" "0" "fxtime" "0.25" "holdtime" "0.3" "spawnflags" "1" "targetname" "cap_text_blu_ones" "x" "0.50" "y" "0.75" "origin" "0 -68 96" } game_text { "classname" "game_text" "channel" "3" "color" "88 133 162" "color2" "240 110 0" "effect" "0" "fadein" "0" "fadeout" "0" "fxtime" "0.25" "holdtime" "0.3" "spawnflags" "1" "targetname" "cap_text_blu_tens" "x" "0.49" "y" "0.75" "origin" "0 -84 96" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "misc/hologram_start.wav" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "1250" "spawnflags" "48" "spindown" "0" "spinup" "0" "targetname" "cap_sound_start" "volstart" "0" "origin" "0 0 80" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "misc/hologram_move.wav" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "1250" "spawnflags" "16" "spindown" "0" "spinup" "0" "targetname" "cap_sound_move" "volstart" "0" "origin" "0 0 80" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "misc/hologram_stop.wav" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "1250" "spawnflags" "48" "spindown" "0" "spinup" "0" "targetname" "cap_sound_stop" "volstart" "0" "origin" "0 0 80" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "misc/hologram_malfunction.wav" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "1250" "spawnflags" "48" "spindown" "0" "spinup" "0" "targetname" "cap_sound_malfunction" "volstart" "0" "origin" "0 0 80" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "ui/scored.wav" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "1250" "spawnflags" "49" "spindown" "0" "spinup" "0" "targetname" "cap_sound_success" "volstart" "0" "origin" "0 0 80" } training_annotation { "targetname" "annotationcap1" "parentname" "controlpoint" "display_text" "Cap start" "lifetime" "3" "origin" "-210.799 957.09 -16" } } cap3 { prop_dynamic { "classname" "prop_dynamic" "angles" "0 0 0" "DisableBoneFollowers" "0" "disablereceiveshadows" "0" "disableshadows" "0" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademaxdist" "0" "fademindist" "-1" "fadescale" "1" "MaxAnimTime" "10" "maxdxlevel" "0" "MinAnimTime" "5" "mindxlevel" "0" "model" "models/props_gameplay/cap_point_base.mdl" "modelscale" "1.0" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "0" "skin" "1" "solid" "6" "spawnflags" "0" "targetname" "cap_base" "origin" "0 0 0" } prop_dynamic { "classname" "prop_dynamic" "angles" "0 0 0" "DefaultAnim" "idle" "DisableBoneFollowers" "0" "disablereceiveshadows" "0" "disableshadows" "1" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademaxdist" "0" "fademindist" "-1" "fadescale" "1" "MaxAnimTime" "10" "maxdxlevel" "0" "MinAnimTime" "5" "mindxlevel" "0" "model" "models/effects/cappoint_hologram.mdl" "modelscale" "1.0" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "2" "skin" "0" "solid" "0" "spawnflags" "0" "targetname" "cap_hologram" "origin" "0 0 4" } trigger_multiple { "classname" "trigger_multiple" "filtername" "cap_filter_blu" "origin" "0 0 128" "spawnflags" "1" "StartDisabled" "0" "targetname" "cap_area" "wait" "1" "OnStartTouch" "cap_count_blu_player,Add,1,0,-1" "OnEndTouch" "cap_count_blu_player,Subtract,1,0,-1" "OnEndTouchAll" "cap_count_blu_player,SetValue,0,0,-1" "OnStartTouchAll" "cap_area_block,Enable,,0,-1" "OnEndTouchAll" "cap_area_block,Disable,,0,-1" "OnEndTouchAll" "cap_area_block_ubered,Disable,,0,-1" "OnStartTouchAll" "cap_area_block_ubered,Enable,,0,-1" "OnStartTouchAll" "cap_compare,Compare,,0,-1" "mins" "-128 -128 -128" "maxs" "128 128 128" } trigger_multiple { "classname" "trigger_multiple" "filtername" "cap_filter_blu_scout" "origin" "0 0 128" "spawnflags" "1" "StartDisabled" "0" "targetname" "cap_area_scout" "wait" "1" "OnStartTouch" "cap_count_blu_player,Add,1,0,-1" "OnEndTouch" "cap_count_blu_player,Subtract,1,0,-1" "mins" "-128 -128 -128" "maxs" "128 128 128" } trigger_multiple { "classname" "trigger_multiple" "filtername" "cap_filter_red" "origin" "0 0 128" "spawnflags" "1" "StartDisabled" "1" "targetname" "cap_area_block" "wait" "1" "OnStartTouchAll" "cap_sound_malfunction,PlaySound,,0,-1" "OnEndTouchAll" "cap_sound_malfunction,StopSound,,0,-1" "OnTouching" "cap_timer_blu,Disable,,0,-1" "OnNotTouching" "cap_timer_blu,Enable,,0,-1" "OnEndTouchAll" "cap_timer_block,Disable,,0,-1" "OnStartTouchAll" "cap_timer_block,Enable,,0,-1" "mins" "-128 -128 -128" "maxs" "128 128 128" } trigger_multiple { "classname" "trigger_multiple" "filtername" "cap_filter_red_ubered" "origin" "0 0 128" "spawnflags" "1" "StartDisabled" "1" "targetname" "cap_area_block_ubered" "wait" "1" "OnStartTouchAll" "cap_sound_malfunction,PlaySound,,0,-1" "OnEndTouchAll" "cap_sound_malfunction,StopSound,,0,-1" "OnTouching" "cap_timer_blu,Disable,,0,-1" "OnNotTouching" "cap_timer_blu,Enable,,0,-1" "OnEndTouchAll" "cap_timer_block,Disable,,0,-1" "OnStartTouchAll" "cap_timer_block,Enable,,0,-1" "mins" "-128 -128 -128" "maxs" "128 128 128" } filter_activator_tfteam { "classname" "filter_activator_tfteam" "Negated" "0" "targetname" "cap_filter_bluteam" "TeamNum" "3" "origin" "0 -68 16" } filter_activator_tfteam { "classname" "filter_activator_tfteam" "Negated" "0" "targetname" "cap_filter_redteam" "TeamNum" "2" "origin" "0 -52 16" } filter_tf_player_can_cap { "classname" "filter_tf_player_can_cap" "Negated" "0" "targetname" "cap_filter_cancap" "TeamNum" "0" "origin" "0 -100 16" } filter_tf_class { "classname" "filter_tf_class" "Negated" "0" "targetname" "cap_filter_scout" "tfclass" "1" "origin" "0 -84 16" } filter_tf_condition { "classname" "filter_tf_condition" "condition" "5" "Negated" "0" "targetname" "cap_filter_ubered" "origin" "0 -36 16" } filter_tf_condition //not included in filter_tf_player_can_cap { "classname" "filter_tf_condition" "condition" "14" "Negated" "1" "targetname" "cap_filter_cancap_bonk" "origin" "0 -116 16" } filter_multi { "classname" "filter_multi" "Filter01" "cap_filter_bluteam" "Filter02" "cap_filter_cancap" "Filter03" "cap_filter_cancap_bonk" "filtertype" "0" "Negated" "0" "targetname" "cap_filter_blu" "origin" "0 -68 32" } filter_multi { "classname" "filter_multi" "Filter01" "cap_filter_bluteam" "Filter02" "cap_filter_cancap" "Filter03" "cap_filter_scout" "Filter04" "cap_filter_cancap_bonk" "filtertype" "0" "Negated" "0" "targetname" "cap_filter_blu_scout" "origin" "0 -84 32" } filter_multi { "classname" "filter_multi" "Filter01" "cap_filter_redteam" "Filter02" "cap_filter_cancap" "Filter03" "cap_filter_cancap_bonk" "filtertype" "0" "Negated" "0" "targetname" "cap_filter_red" "origin" "0 -52 32" } filter_multi { "classname" "filter_multi" "Filter01" "cap_filter_redteam" "Filter02" "cap_filter_ubered" "filtertype" "0" "Negated" "0" "targetname" "cap_filter_red_ubered" "origin" "0 -36 32" } logic_timer { "classname" "logic_timer" "spawnflags" "0" "StartDisabled" "1" "targetname" "cap_timer_blu" "UseRandomTime" "0" "OnTimer" "cap_progress_blu_ones,Add,1,0,-1" "OnTimer" "cap_text_blu_ones,Display,,0,-1" "OnTimer" "cap_text_blu_tens,Display,,0,-1" "OnTimer" "cap_text_blu_player,Display,,0,-1" "OnTimer" "cap_compare,SetValue,0,0,-1" "origin" "0 -68 48" } logic_timer { "classname" "logic_timer" "RefireTime" "0.1" "spawnflags" "0" "StartDisabled" "1" "targetname" "cap_timer_decay" "UseRandomTime" "0" "OnTimer" "cap_progress_blu_ones,Subtract,1,0,-1" "OnTimer" "cap_text_blu_ones,Display,,0,-1" "OnTimer" "cap_text_blu_tens,Display,,0,-1" "origin" "0 -52 48" } logic_timer { "classname" "logic_timer" "spawnflags" "0" "StartDisabled" "1" "targetname" "cap_timer_block" "UseRandomTime" "0" "OnTimer" "cap_area_block,TouchTest,,0,-1" "OnTimer" "cap_area_block_ubered,TouchTest,,0,-1" "OnTimer" "cap_text_blu_ones,Display,,0,-1" "OnTimer" "cap_text_blu_tens,Display,,0,-1" "OnTimer" "cap_text_block,Display,,0,-1" "origin" "0 -36 48" } logic_compare { "classname" "logic_compare" "CompareValue" "0" "InitialValue" "1" "targetname" "cap_compare" "OnGreaterThan" "cap_sound_start,PlaySound,,0,-1" "origin" "0 -116 32" } math_counter { "classname" "math_counter" "max" "16" "min" "0" "StartDisabled" "0" "startvalue" "0" "targetname" "cap_count_blu_player" "OutValue" "cap_case_blu_player,InValue,,0,-1" "origin" "0 -100 64" } math_counter { "classname" "math_counter" "max" "10" "min" "-1" "StartDisabled" "0" "startvalue" "0" "targetname" "cap_progress_blu_ones" "OutValue" "cap_case_blu_ones,InValue,,0,-1" "OnHitMax" "cap_progress_blu_tens,Add,1,0,-1" "OnHitMin" "cap_progress_blu_tens,Subtract,1,0,-1" "OnHitMax" "cap_progress_blu_ones,SetValueNoFire,0,0,-1" "OnHitMin" "cap_progress_blu_ones,SetValueNoFire,9,0,-1" "origin" "0 -68 64" } math_counter { "classname" "math_counter" "max" "10" "min" "-1" "StartDisabled" "0" "startvalue" "0" "targetname" "cap_progress_blu_tens" "OutValue" "cap_case_blu_tens,InValue,,0,-1" "OnHitMax" "cap_timer_blu,Disable,,0,-1" "OnHitMax" "cap_timer_decay,Disable,,0.1,-1" "OnHitMax" "cap_timer_block,Disable,,0,-1" "OnHitMax" "cap_area,Disable,,0,-1" "OnHitMax" "cap_area_scout,Disable,,0,-1" "OnHitMax" "cap_area_block,Disable,,0,-1" "OnHitMax" "cap_area_block_ubered,Disable,,0,-1" "OnHitMax" "cap_base,Skin,2,0,-1" "OnHitMax" "cap_hologram,SetBodyGroup,3,0,-1" "OnHitMax" "cap_sound_success,PlaySound,,0,-1" "OnHitMax" "cap_sound_move,StopSound,,0,-1" "OnHitMax" "cap_sound_stop,PlaySound,,0,-1" "OnHitMin" "cap_timer_decay,Disable,,0,-1" "OnHitMin" "cap_progress_blu_tens,SetValue,0,0,-1" "OnHitMin" "cap_progress_blu_ones,SetValue,0,0,-1" "OnHitMin" "cap_sound_move,StopSound,,0,-1" "OnHitMin" "cap_sound_stop,PlaySound,,0,-1" "OnHitMin" "cap_compare,SetValue,1,0,-1" "origin" "0 -84 64" } logic_case { "classname" "logic_case" "Case01" "1" "Case02" "2" "Case03" "3" "Case04" "4" "Case05" "5" "Case06" "6" "Case07" "7" "Case08" "8" "Case09" "9" "Case10" "10" "Case11" "11" "Case12" "12" "Case13" "13" "Case14" "14" "Case15" "15" "Case16" "16" "targetname" "cap_case_blu_player" "OnCase01" "cap_text_blu_player,AddOutput,message Capturing x1,0,-1" "OnCase02" "cap_text_blu_player,AddOutput,message Capturing x2,0,-1" "OnCase03" "cap_text_blu_player,AddOutput,message Capturing x3,0,-1" "OnCase04" "cap_text_blu_player,AddOutput,message Capturing x4,0,-1" "OnCase05" "cap_text_blu_player,AddOutput,message Capturing x5,0,-1" "OnCase06" "cap_text_blu_player,AddOutput,message Capturing x6,0,-1" "OnCase07" "cap_text_blu_player,AddOutput,message Capturing x7,0,-1" "OnCase08" "cap_text_blu_player,AddOutput,message Capturing x8,0,-1" "OnCase09" "cap_text_blu_player,AddOutput,message Capturing x9,0,-1" "OnCase10" "cap_text_blu_player,AddOutput,message Capturing x10,0,-1" "OnCase11" "cap_text_blu_player,AddOutput,message Capturing x11,0,-1" "OnCase12" "cap_text_blu_player,AddOutput,message Capturing x12,0,-1" "OnCase13" "cap_text_blu_player,AddOutput,message Capturing x13,0,-1" "OnCase14" "cap_text_blu_player,AddOutput,message Capturing x14,0,-1" "OnCase15" "cap_text_blu_player,AddOutput,message Capturing x15,0,-1" "OnCase16" "cap_text_blu_player,AddOutput,message Capturing x16 (MAX),0,-1" "OnCase01" "cap_timer_blu,AddOutput,RefireTime 0.1,0,-1" "OnCase02" "cap_timer_blu,AddOutput,RefireTime 0.067,0,-1" "OnCase03" "cap_timer_blu,AddOutput,RefireTime 0.055,0,-1" "OnCase04" "cap_timer_blu,AddOutput,RefireTime 0.048,0,-1" "OnCase05" "cap_timer_blu,AddOutput,RefireTime 0.044,0,-1" "OnCase06" "cap_timer_blu,AddOutput,RefireTime 0.041,0,-1" "OnCase07" "cap_timer_blu,AddOutput,RefireTime 0.039,0,-1" "OnCase08" "cap_timer_blu,AddOutput,RefireTime 0.037,0,-1" "OnCase09" "cap_timer_blu,AddOutput,RefireTime 0.035,0,-1" "OnCase10" "cap_timer_blu,AddOutput,RefireTime 0.034,0,-1" "OnCase11" "cap_timer_blu,AddOutput,RefireTime 0.033,0,-1" "OnCase12" "cap_timer_blu,AddOutput,RefireTime 0.032,0,-1" "OnCase13" "cap_timer_blu,AddOutput,RefireTime 0.031,0,-1" "OnCase14" "cap_timer_blu,AddOutput,RefireTime 0.031,0,-1" "OnCase15" "cap_timer_blu,AddOutput,RefireTime 0.030,0,-1" "OnCase16" "cap_timer_blu,AddOutput,RefireTime 0.030,0,-1" "OnCase01" "cap_timer_blu,Enable,,0,-1" "OnCase01" "cap_timer_decay,Disable,,0,-1" "OnDefault" "cap_timer_decay,Enable,,0,-1" "OnDefault" "cap_timer_blu,Disable,,0,-1" "origin" "0 -100 80" } logic_case { "classname" "logic_case" "Case01" "0" "Case02" "1" "Case03" "2" "Case04" "3" "Case05" "4" "Case06" "5" "Case07" "6" "Case08" "7" "Case09" "8" "Case10" "9" "Case11" "10" "Case12" "-1" "targetname" "cap_case_blu_ones" "OnCase01" "cap_text_blu_ones,AddOutput,message 0,0,-1" "OnCase02" "cap_text_blu_ones,AddOutput,message 1,0,-1" "OnCase03" "cap_text_blu_ones,AddOutput,message 2,0,-1" "OnCase04" "cap_text_blu_ones,AddOutput,message 3,0,-1" "OnCase05" "cap_text_blu_ones,AddOutput,message 4,0,-1" "OnCase06" "cap_text_blu_ones,AddOutput,message 5,0,-1" "OnCase07" "cap_text_blu_ones,AddOutput,message 6,0,-1" "OnCase08" "cap_text_blu_ones,AddOutput,message 7,0,-1" "OnCase09" "cap_text_blu_ones,AddOutput,message 8,0,-1" "OnCase10" "cap_text_blu_ones,AddOutput,message 9,0,-1" "OnCase11" "cap_text_blu_ones,AddOutput,message 0,0,-1" "OnCase12" "cap_text_blu_ones,AddOutput,message 9,0,-1" "origin" "0 -68 80" } logic_case { "classname" "logic_case" "Case01" "0" "Case02" "1" "Case03" "2" "Case04" "3" "Case05" "4" "Case06" "5" "Case07" "6" "Case08" "7" "Case09" "8" "Case10" "9" "targetname" "cap_case_blu_tens" "OnCase10" "cap_text_blu_tens,AddOutput,message 9,0,-1" "OnCase09" "cap_text_blu_tens,AddOutput,message 8,0,-1" "OnCase08" "cap_text_blu_tens,AddOutput,message 7,0,-1" "OnCase07" "cap_text_blu_tens,AddOutput,message 6,0,-1" "OnCase06" "cap_text_blu_tens,AddOutput,message 5,0,-1" "OnCase05" "cap_text_blu_tens,AddOutput,message 4,0,-1" "OnCase04" "cap_text_blu_tens,AddOutput,message 3,0,-1" "OnCase03" "cap_text_blu_tens,AddOutput,message 2,0,-1" "OnCase02" "cap_text_blu_tens,AddOutput,message 1,0,-1" "OnCase01" "cap_text_blu_tens,AddOutput,message 0,0,-1" "origin" "0 -84 80" } game_text { "classname" "game_text" "channel" "4" "color" "88 133 162" "color2" "240 110 0" "effect" "0" "fadein" "0" "fadeout" "0" "fxtime" "0.25" "holdtime" "0.3" "spawnflags" "1" "targetname" "cap_text_blu_player" "x" "-1" "y" "0.78" "origin" "0 -100 96" } game_text { "classname" "game_text" "channel" "2" "color" "88 133 162" "color2" "240 110 0" "effect" "0" "fadein" "0" "fadeout" "0" "fxtime" "0.25" "holdtime" "0.3" "spawnflags" "1" "targetname" "cap_text_blu_ones" "x" "0.5" "y" "0.75" "origin" "0 -68 96" } game_text { "classname" "game_text" "channel" "3" "color" "88 133 162" "color2" "240 110 0" "effect" "0" "fadein" "0" "fadeout" "0" "fxtime" "0.25" "holdtime" "0.3" "spawnflags" "1" "targetname" "cap_text_blu_tens" "x" "0.49" "y" "0.75" "origin" "0 -84 96" } game_text { "classname" "game_text" "channel" "4" "color" "184 56 59" "color2" "240 110 0" "effect" "0" "fadein" "0" "fadeout" "0" "fxtime" "0.25" "holdtime" "0.3" "message" "Contested!" "spawnflags" "1" "targetname" "cap_text_block" "x" "-1" "y" "0.78" "origin" "0 -36 64" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "misc/hologram_start.wav" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "1250" "spawnflags" "48" "spindown" "0" "spinup" "0" "targetname" "cap_sound_start" "volstart" "0" "origin" "0 0 80" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "misc/hologram_move.wav" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "1250" "spawnflags" "16" "spindown" "0" "spinup" "0" "targetname" "cap_sound_move" "volstart" "0" "origin" "0 0 80" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "misc/hologram_stop.wav" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "1250" "spawnflags" "48" "spindown" "0" "spinup" "0" "targetname" "cap_sound_stop" "volstart" "0" "origin" "0 0 80" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "misc/hologram_malfunction.wav" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "1250" "spawnflags" "16" "spindown" "0" "spinup" "0" "targetname" "cap_sound_malfunction" "volstart" "0" "origin" "0 0 80" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "ui/scored.wav" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "1250" "spawnflags" "49" "spindown" "0" "spinup" "0" "targetname" "cap_sound_success" "volstart" "0" "origin" "0 0 80" } } cap1 { trigger_capture_area { "classname" "trigger_capture_area" "area_cap_point" "cp" "area_time_to_cap" "5" "StartDisabled" "0" "targetname" "area" "team_cancap_2" "1" "team_cancap_3" "1" "team_numcap_2" "1" "team_numcap_3" "1" "team_spawn_2" "0" "team_spawn_3" "0" "team_startcap_2" "1" "team_startcap_3" "1" "mins" "-64 -64 -64" "maxs" "64 64 64" } team_control_point { "classname" "team_control_point" "angles" "0 0 0" "point_default_owner" "0" "point_group" "0" "point_index" "0" "point_printname" "TODO: Set Name" "point_start_locked" "0" "point_warn_on_cap" "0" "point_warn_sound" "ControlPoint.CaptureWarn" "random_owner_on_restart" "0" "spawnflags" "4" "targetname" "cp" "team_bodygroup_0" "3" "team_bodygroup_2" "1" "team_bodygroup_3" "1" "team_icon_0" "sprites/obj_icons/icon_obj_neutral" "team_icon_2" "sprites/obj_icons/icon_obj_red" "team_icon_3" "sprites/obj_icons/icon_obj_blu" "team_model_0" "models/effects/cappoint_hologram.mdl" "team_model_2" "models/effects/cappoint_hologram.mdl" "team_model_3" "models/effects/cappoint_hologram.mdl" "team_previouspoint_2_0" "cp" "team_previouspoint_3_0" "cp" "team_timedpoints_2" "0" "team_timedpoints_3" "0" "origin" "-128 960 -64" } team_control_point_master { "classname" "team_control_point_master" "cpm_restrict_team_cap_win" "0" "custom_position_x" "-1" "custom_position_y" "-1" "partial_cap_points_rate" "0" "play_all_rounds" "0" "score_style" "0" "switch_teams" "0" "targetname" "cp_master" "team_base_icon_2" "sprites/obj_icons/icon_base_red" "team_base_icon_3" "sprites/obj_icons/icon_base_blu" "origin" "-128 960 -4" } } controlpoint { NoFixup 1 prop_dynamic { "model" "models/props_gameplay/cap_point_base.mdl" "targetname" "cap_base" "solid" "6" "skin" "1" //set this number to 0 for neutral, 1 for red, 2 for blu } trigger_capture_area { "classname" "trigger_capture_area" "area_cap_point" "cap_point" "area_time_to_cap" "500" //multiply this number by 2 to get the capture duration in seconds, raising "team_numcap_3" and "team_numcap_2" will also increase the time taken by a factor of the value (e.g. raising it to 2 will multiply the duration by 2) "StartDisabled" "0" "targetname" "cap_area" "team_cancap_2" "1" //setting this number to 0 disables red team from recapturing, 1 enables red team to recapture "team_cancap_3" "1" //1 enables blu team to cap "team_numcap_2" "1" //changing this number will change the number of red players required to stand on the point to finish capturing "team_numcap_3" "1" //changing this number will change the number of blu players required to stand on the point to finish capturing "team_spawn_2" "0" "team_spawn_3" "0" "team_startcap_2" "1" //changing this number will change the number of red players required to stand on the point to begin capturing "team_startcap_3" "1" //changing this number will change the number of blu players required to stand on the point to begin capturing "mins" "-128 -128 -128" "maxs" "128 128 128" "origin" "0 0 128" "spawnflags" "1" "OnCapTeam1" "cap_base,Skin,1,0,-1" //set the first number to 0 for neutral, 1 for red, 2 for blu "OnCapTeam2" "cap_base,Skin,2,0,-1" //set the first number to 0 for neutral, 1 for red, 2 for blu ////////////////////////////////////////////editable outputs//////////////////////////////////////////// OnStartTeam1,OnBreakTeam1,OnCapTeam1,OnStartTeam2,OnBreakTeam2.OnCapTeam2,OnStartCap,OnBreakCap,OnEndCap,OnNumCappersChanged,OnNumCappersChanged2 //add your outputs here using "OnCapTeam2" for blu team capture, or "OnCapTeam1" for red team capture } team_control_point { "classname" "team_control_point" "angles" "0 0 0" "point_default_owner" "0" //this is the team that the control point will spawn in, set this number to 0 for neutral, 2 for red, 3 for blu "point_group" "0" "point_index" "0" //if you plan on having multiple control points at once, you must give each one a unique "point_index", spawning more than 8 control points on the map will crash the server "point_printname" "TODO: Set Name" //this is the name of the control point that will show up in the kill feed "point_start_locked" "0" "point_warn_on_cap" "0" "point_warn_sound" "ControlPoint.CaptureWarn" "random_owner_on_restart" "0" "spawnflags" "4" "targetname" "cap_point" "team_bodygroup_0" "3" "team_bodygroup_2" "1" "team_bodygroup_3" "1" "team_icon_0" "sprites/obj_icons/icon_obj_neutral" //this is the image shown on the hud icon "team_icon_2" "sprites/obj_icons/icon_obj_red" "team_icon_3" "sprites/obj_icons/icon_obj_blu" "team_model_0" "models/effects/cappoint_hologram.mdl" //this is the model of the hologram that appears above the control point "team_model_2" "models/effects/cappoint_hologram.mdl" "team_model_3" "models/effects/cappoint_hologram.mdl" "team_previouspoint_3_0" "cap_point" "team_previouspoint_2_0" "cap_point" //if you want to create a sequence of control points similar to an attack/defense map, this keyvalue determines the order in which they can be captured //it represents the names of the previous control points that must be owned by blu team before this point can be unlocked, if this is the first control point on the map, it must refer to itself or else it will be locked //"team_previouspoint_3_1" "0" //"team_previouspoint_3_2" "0" //"team_previouspoint_2_0" "cap_point" //this allows red to recapture if "team_cancap_2" is set to 1 in the trigger_capture_area //"team_previouspoint_2_1" "0" //"team_previouspoint_2_2" "0" "team_timedpoints_2" "0" "team_timedpoints_3" "0" "origin" "0 0 4" } team_control_point_master { "classname" "team_control_point_master" "cpm_restrict_team_cap_win" "2" //this makes it so the wave does not end when all the points are owned by a team, set this to 0 for neither team (this will end the wave on capture), 1 to restrict both teams, 2 to restrict red team winning, and 3 to restrict blu team winning "custom_position_x" "0.4" //you can change the number here to move the control points on the hud if something is blocking it, accepted values are from 0 to 1 and is expressed as a percentage of the screen from left to right, 0.5 or "-1" will center the hud "custom_position_y" "-1" "partial_cap_points_rate" "1" //this gives points on the scoreboard for partially capturing a point, it has nothing to do with the rate at which the control point is captured "play_all_rounds" "0" "score_style" "0" "StartDisabled" "0" "switch_teams" "0" "targetname" "cap_master" "team_base_icon_2" "sprites/obj_icons/icon_base_red" "team_base_icon_3" "sprites/obj_icons/icon_base_blu" } OnSpawnOutput //very important to keep this output otherwise the control point will not function { Target cap_area Action SetControlPoint Param cap_point } OnSpawnOutput //i believe this output is optional but it is kept here for debugging purposes, if you do not restrict a team from winning and the control point spawned owned by red or blu, it will automatically end the wave so make sure you set the restriction { Target cap_master Action RoundSpawn } } payload //to my knowledge, implementing the payload hud is currently impossible as the hud can only be instanced on map load, however the control point hud shows up and can still display the number of players pushing the payload { NoFixup 1 prop_dynamic { "classname" "prop_dynamic" "angles" "0 180 0" "DisableBoneFollowers" "0" "disablereceiveshadows" "0" "disableshadows" "1" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademaxdist" "0" "fademindist" "-1" "fadescale" "0" "MaxAnimTime" "10" "MinAnimTime" "5" "model" "models/props_trainyard/bomb_cart.mdl" //you can change the cart model if you know the file name. if you change it, there are four entities that may be misaligned which are the cart_dispenser, cart_flashinglight, cart_spark_left, and cart_spark_right, change the origins of these to "modelscale" "1.0" "parentname" "cart_tracktrain" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "0" "skin" "0" "solid" "0" "spawnflags" "0" "StartDisabled" "0" "targetname" "cart_physprop" "origin" "10 0 -10" } func_tracktrain { "classname" "func_tracktrain" "bank" "0" "disablereceiveshadows" "0" "disableshadows" "0" "dmg" "10000" "height" "1" //change this number to adjust the height of the paylaod from the ground, if you want people to jump on the payload, it shoudld be 72 units from the ground (this does not always accurately reflect the value shown here) "ManualAccelSpeed" "70" "ManualDecelSpeed" "150" "ManualSpeedChanges" "1" "MoveSound" "Cart.Roll" "MoveSoundMaxPitch" "200" "MoveSoundMaxTime" "0" "MoveSoundMinPitch" "60" "MoveSoundMinTime" "0" "orientationtype" "1" "origin" "0 0 16" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "spawnflags" "514" "speed" "0" //this makes the cart stationary when it spawns "StartSound" "Cart.RollStart" "startspeed" "90" //change this number to adjust the maximum speed of the payload, actual speed is determined by logic_case "StopSound" "Cart.RollStop" "target" "tank_path_a_2" //change the FIXME to the name of the path_track node you want to spawn at, different maps will have different names, if you are using a custom tank path you can use the name of the path to make it spawn there "targetname" "cart_tracktrain" "velocitytype" "1" "volume" "10" "wheels" "20" "mins" "-36 -25 -54" "maxs" "52 25 14" } phys_constraint //this is required, without this entity the model will be disjointed from the payload itself { "classname" "phys_constraint" "angles" "0 270 0" "attach1" "cart_tracktrain" "attach2" "cart_physprop" "forcelimit" "0" "spawnflags" "1" "targetname" "cart_constraint" "teleportfollowdistance" "0" "torquelimit" "0" "origin" "-38 72 -18" } trigger_capture_area { "classname" "trigger_capture_area" "area_cap_point" "cart_point" "area_time_to_cap" "99999" //this is a very high number so that the control point cant be captured at any point, if it is capped, the payload will not move "parentname" "cart_tracktrain" "StartDisabled" "0" "targetname" "cart_area" "team_cancap_2" "0" //this makes it so that red team cannot push the payload "team_cancap_3" "1" "team_numcap_2" "1" //you cant "finish" capturing a payload, so these keyvalues are ineffective "team_numcap_3" "1" "team_spawn_2" "0" "team_spawn_3" "0" "team_startcap_2" "1" //this also is ineffective, as the logic_case entity is used to affect the cart speed depending on how many blu players are on it "team_startcap_3" "1" "OnNumCappersChanged" "cart_remap,InValue,,0,-1" "OnNumCappersChanged" "cart_watcher,SetNumTrainCappers,,0,-1" "mins" "-112 -96 -60" //trigger_capture_area and dispenser_touch_trigger should have the same mins and maxs "maxs" "112 96 60" } dispenser_touch_trigger { "classname" "dispenser_touch_trigger" "parentname" "cart_tracktrain" "targetname" "cart_dispenser_trigger" "mins" "-112 -96 -60" //trigger_capture_area and dispenser_touch_trigger should have the same mins and maxs "maxs" "112 96 60" } mapobj_cart_dispenser //spawning the payload in waveschedule will cause the dispenser to explode for some reason { "classname" "mapobj_cart_dispenser" "parentname" "cart_tracktrain" "spawnflags" "12" "targetname" "cart_dispenser" "TeamNum" "3" "touch_trigger" "cart_dispenser_trigger" "origin" "-31 -12 56" } info_particle_system { "classname" "info_particle_system" "angles" "-80.7088 53.9446 -53.5839" "cpoint1_parent" "0" "cpoint2_parent" "0" "cpoint3_parent" "0" "cpoint4_parent" "0" "cpoint5_parent" "0" "cpoint6_parent" "0" "cpoint7_parent" "0" "effect_name" "cart_flashinglight" "parentname" "cart_tracktrain" "start_active" "0" "targetname" "cart_particles" "origin" "39 5 46" } env_spark { "classname" "env_spark" "angles" "0 0 0" "Magnitude" "1" "MaxDelay" "0" "parentname" "cart_tracktrain" "spawnflags" "0" "targetname" "cart_spark_left" "TrailLength" "2" "origin" "0.080101 14 -36" } env_spark { "classname" "env_spark" "angles" "0 0 0" "Magnitude" "1" "MaxDelay" "0" "parentname" "cart_tracktrain" "spawnflags" "0" "targetname" "cart_spark_right" "TrailLength" "2" "origin" "0.080101 -14 -36" } trigger_hurt { "classname" "trigger_hurt" "damage" "2000" //if the payload happens to collide with a tank, it will damage the tank for this number, can be set to a higher number to instantly destroy the tank "damagecap" "20" "damagemodel" "0" "damagetype" "16" "filtername" "cart_filter_noplayers" "origin" "14.29 0 -20" "parentname" "cart_tracktrain" "spawnflags" "1096" "StartDisabled" "0" "targetname" "cart_hurt" "mins" "-4 -24 -34" "maxs" "4 24 34" } team_control_point //this is a hidden control point that comes with the payload { //you must have atleast one control point on the map in order for the trigger_capture_area to work, otherwise the payload will not operate in any capacity "classname" "team_control_point" //the purpose of the placeholder control point is set here to enable the trigger_capture_area "angles" "0 0 0" "point_default_owner" "2" "point_group" "0" "point_index" "0" //if you want to have multiple payloads on the map at the same time, make sure to change the index so each control point has a unique index, again having more than eight unique control points will crash the server "point_printname" "TODO: Set Name" "point_start_locked" "0" "point_warn_on_cap" "2" "point_warn_sound" "ControlPoint.CaptureWarn" "random_owner_on_restart" "0" "spawnflags" "14" //this hides the model, disables sounds and disables shadows "StartDisabled" "0" "targetname" "cart_point" "team_bodygroup_0" "3" "team_bodygroup_2" "1" "team_bodygroup_3" "1" "team_icon_0" "sprites/obj_icons/icon_obj_neutral" "team_icon_2" "sprites/obj_icons/icon_obj_red" "team_icon_3" "sprites/obj_icons/icon_obj_blu" "team_model_0" "models/effects/cappoint_hologram.mdl" "team_model_2" "models/effects/cappoint_hologram.mdl" "team_model_3" "models/effects/cappoint_hologram.mdl" "team_previouspoint_3_0" "cart_point" //this is required so the payload isnt "locked" "team_timedpoints_2" "0" "team_timedpoints_3" "0" "origin" "10 0 -42" } logic_case { "classname" "logic_case" "Case01" "0" //you can add more cases here to raise the maximum number of players that can affect the payload, by default max speed is reached at three players "Case02" "1" //these Case01, Case02, etc... keyvalues represents the outputs sent depending on how many players are pushing the payload at any given time "Case03" "2" "Case04" "3" "targetname" "cart_case" "OnCase01" "cart_tracktrain,SetSpeedDirAccel,0,0,-1" //change the first number here to adjust the speed per case as a percentage of "startspeed" defined in func_tracktrain, does not go below -1 or above 1, negative numbers roll backwards "OnCase02" "cart_tracktrain,SetSpeedDirAccel,0.55,0,-1" "OnCase03" "cart_tracktrain,SetSpeedDirAccel,0.77,0,-1" "OnCase04" "cart_tracktrain,SetSpeedDirAccel,1.0,0,-1" "OnCase01" "cart_spark_left,StopSpark,,0,-1" "OnCase01" "cart_spark_right,StopSpark,,0,-1" "OnCase02" "cart_spark_right,StopSpark,,0,-1" "OnCase02" "cart_spark_left,StopSpark,,0,-1" "OnCase03" "cart_spark_left,StopSpark,,0,-1" "OnCase03" "cart_spark_right,StopSpark,,0,-1" "OnCase04" "cart_spark_right,StopSpark,,0,-1" "OnCase04" "cart_spark_left,StopSpark,,0,-1" "OnCase01" "cart_particles,Stop,,0,-1" "OnCase02" "cart_particles,Start,,0,-1" "OnCase03" "cart_particles,Start,,0,-1" "OnCase04" "cart_particles,Start,,0,-1" "origin" "10 0 62" } math_remap { "classname" "math_remap" "in1" "0" //make sure you also change the numbers if you introduce more cases in logic_case, in1/out1 represent the minimum amount of players on the cart and out1/out2 represents the maximum "in2" "3" //if you want to raise the maximum amount of players on the cart, you would have to change the keyvalues here and add more cases to logic_case "out1" "0" "out2" "3" "spawnflags" "2" "targetname" "cart_remap" "OutValue" "cart_case,InValue,,0,-1" "origin" "-14 0 62" } filter_activator_class //this filter is used by the trigger_hurt entity to not affect players { "classname" "filter_activator_class" "filterclass" "player" "Negated" "1" "targetname" "cart_filter_noplayers" "origin" "-70 72 -18" } team_control_point_master //this entity is required to enable the control point { "classname" "team_control_point_master" "cpm_restrict_team_cap_win" "2" //probably ineffective "custom_position_x" "0.4" "custom_position_y" "-1" "partial_cap_points_rate" "0" "score_style" "1" "switch_teams" "1" "targetname" "cart_master" "team_base_icon_2" "sprites/obj_icons/icon_base_red" "team_base_icon_3" "sprites/obj_icons/icon_base_blu" "origin" "-62 -40 -10" } team_train_watcher { "classname" "team_train_watcher" "goal_node" "tank_path_a_6" //this should be the final path_track node of the desired track, FIXME by default as different maps will have different names "hud_min_speed_level_1" "1" "hud_min_speed_level_2" "60" "hud_min_speed_level_3" "80" "linked_cp_1" "cart_point" //placeholder control point set here to enable the trigger_capture_area "linked_pathtrack_1" "tank_path_a_6" //set this to the final path_track node, same as goal_node, to prevent the administrator from saying voice lines prematurely "speed_forward_modifier" "1" "start_node" "tank_path_a_2" //this should be the path_track node of where the payload spawns, FIXME by default as different maps will have different names "targetname" "cart_watcher" "train" "cart_tracktrain" "train_can_recede" "1" //set this to 0 to disable payload rolling backwards, 1 to enable "OnTrainStartRecede" "cart_tracktrain,SetSpeedDirAccel,-0.1,0,-1" "OnTrainStartRecede" "cart_spark_left,StartSpark,,0,-1" "OnTrainStartRecede" "cart_spark_right,StartSpark,,0,-1" "origin" "-62 -56 -10" } OnSpawnOutput //very important to keep these three outputs otherwise the payload will not function { Target cart_area Action SetControlPoint Param cart_point } OnSpawnOutput { Target cart_watcher Action RoundActivate } OnSpawnOutput { Target cart_physprop Action SetParent Param cart_tracktrain } ////////////////////////////////////////////editable output section//////////////////////////////////////////// //note that editing outputs for the payload is very different, as you have to use OnSpawnOutput blocks, and use AddOutputs on specific path_track nodes in order to make things happen //OnSpawnOutput //this makes blu team win when the payload reaches the last track, commented out as a more exciting payload deploying animation is provided //{ // Target tank_path_a_6 // Action AddOutput // Param "OnPass bots_win:RoundWin::0:-1" //} } payloaddeploy //this is an optional pointtemplate that adds a "payload deploying animation" note that you will have to define the origin of this pointtemplate in the SpawnTemplate block and place it where the hatch is { NoFixup 1 //point_teleport //this entity can be used to move path_track nodes around the map, here it is used to put it over the hatch hole so the payload has a bit of an extra distance to cross, however this will also affect any tanks on this path so feel free to comment out this entity if needed //{ // "target" "tank_path_a_6" // "targetname" "cart_deploy_teleport" //} path_track { "target" "cart_deploy_2" "targetname" "cart_deploy_1" "orientationtype" "2" } path_track { "targetname" "cart_deploy_2" "origin" "0 0 -400" "orientationtype" "2" "OnPass" "boss_deploy_relay,Trigger,,0,-1" "OnPass" "cart_physprop,Disable,,0,-1" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "Cart.Trigger" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "1250" "spawnflags" "49" "spindown" "0" "spinup" "0" "targetname" "cart_beep" "volstart" "0" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "Cart.Falling" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "1250" "spawnflags" "49" "spindown" "0" "spinup" "0" "targetname" "cart_tip" "volstart" "0" } OnSpawnOutput //these AddOutputs make the payload perform a deploy animation when reaching the final path_track (usually the hatch), again replace these FIXME with the final path_track node, if you want to add more outputs on different path_tracks, make sure you are familiar with the addoutput syntax, this can allow you to put control points on the path track if desired { //note that using AddOutput to override the target of an existing path_track does not work, which is why i use the input TeleportToPathTrack on the func_tracktrain Target tank_path_a_6 Action AddOutput Param "OnPass cart_tracktrain:TeleportToPathTrack:cart_deploy_1:0:-1" } OnSpawnOutput { Target tank_path_a_6 Action AddOutput Param "OnPass cart_case:Kill::0:-1" } OnSpawnOutput { Target tank_path_a_6 Action AddOutput Param "OnPass cart_tracktrain:AddOutput:startspeed 400:0:-1" } OnSpawnOutput { Target tank_path_a_6 Action AddOutput Param "OnPass cart_tracktrain:SetSpeed:1:0:-1" } OnSpawnOutput { Target tank_path_a_6 Action AddOutput Param "OnPass cart_beep:PlaySound::0:-1" } OnSpawnOutput { Target tank_path_a_6 Action AddOutput Param "OnPass cart_tip:PlaySound::0:-1" } OnSpawnOutput { Target cart_deploy_teleport Action Teleport } } payloadinit //an attempt to get the hud to work { team_train_watcher { "classname" "team_train_watcher" "goal_node" "tank_path_a_6" //this should be the final path_track node of the desired track, FIXME by default as different maps will have different names "hud_min_speed_level_1" "1" "hud_min_speed_level_2" "60" "hud_min_speed_level_3" "80" "linked_cp_1" "cart_point" //placeholder control point set here to enable the trigger_capture_area "linked_pathtrack_1" "tank_path_a_6" //set this to the final path_track node, same as goal_node, to prevent the administrator from saying voice lines prematurely "speed_forward_modifier" "1" "start_node" "tank_path_a_1" //this should be the beginning path_track node of where the payload spawns, FIXME by default as different maps will have different names "targetname" "cart_watcher" "train" "cart_tracktrain" "train_can_recede" "1" //set this to 0 to disable payload rolling backwards, 1 to enable "OnTrainStartRecede" "cart_tracktrain,SetSpeedDirAccel,-0.1,0,-1" "OnTrainStartRecede" "cart_spark_left,StartSpark,,0,-1" "OnTrainStartRecede" "cart_spark_right,StartSpark,,0,-1" "origin" "-62 -56 -10" } } doomsdayrocket //disgustingly unoptimized, extremely buggy, needs to be cleaned up much more before public release { prop_dynamic { "classname" "prop_dynamic" "angles" "0 270 270" "DisableBoneFollowers" "1" "disablereceiveshadows" "0" "disableshadows" "1" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademindist" "-1" "fadescale" "1" "lightingorigin" "cap_track2" "MaxAnimTime" "10" "MinAnimTime" "5" "model" "models/props_doomsday/cap_point_small.mdl" "modelscale" "1.0" "parentname" "elevator_train" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "0" "skin" "0" "solid" "0" "spawnflags" "0" "StartDisabled" "0" "targetname" "cap_point_small" "origin" "0 -128 15.648" } prop_dynamic { "classname" "prop_dynamic" "angles" "180 90 90" "DisableBoneFollowers" "1" "disablereceiveshadows" "0" "disableshadows" "1" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademaxdist" "0" "fademindist" "-1" "fadescale" "1" "lightingorigin" "cap_track2" "MaxAnimTime" "10" "maxdxlevel" "0" "MinAnimTime" "5" "mindxlevel" "0" "model" "models/props_doomsday/mini_lights_doomsday.mdl" "modelscale" "1.0" "parentname" "elevator_train" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "0" "skin" "0" "solid" "6" "spawnflags" "0" "StartDisabled" "0" "targetname" "rocket_lift_lights" "origin" "0 -112 15.358" } prop_dynamic { "classname" "prop_dynamic" "angles" "0 90 0" "DisableBoneFollowers" "1" "disablereceiveshadows" "0" "disableshadows" "1" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademindist" "-1" "fadescale" "1" "lightingorigin" "cap_track2" "MaxAnimTime" "10" "MinAnimTime" "5" "model" "models/props_doomsday/rocket_base_doomsday.mdl" "modelscale" "1.0" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "0" "skin" "0" "solid" "6" "spawnflags" "0" "StartDisabled" "0" "targetname" "rocket_base_model" "origin" "0 24 -64" } prop_dynamic { "classname" "prop_dynamic" "angles" "0 90 0" "DisableBoneFollowers" "1" "disablereceiveshadows" "0" "disableshadows" "1" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademindist" "-1" "fadescale" "1" "MaxAnimTime" "10" "MinAnimTime" "5" "model" "models/props_doomsday/rocket_lid_doomsday.mdl" "modelscale" "1.0" "parentname" "rocket_lid" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "0" "skin" "0" "solid" "6" "spawnflags" "0" "StartDisabled" "0" "targetname" "rocket_lid_model" "origin" "0 24 419" } prop_dynamic { "classname" "prop_dynamic" "angles" "0 270 0" "DisableBoneFollowers" "1" "disablereceiveshadows" "0" "disableshadows" "1" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademindist" "-1" "fadescale" "1" "MaxAnimTime" "10" "MinAnimTime" "5" "model" "models/props_doomsday/rocket_socket_doomsday.mdl" "modelscale" "1.0" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "0" "skin" "0" "solid" "6" "spawnflags" "0" "StartDisabled" "0" "targetname" "rocket_socket" "origin" "0 24 419" } prop_dynamic { "classname" "prop_dynamic" "angles" "75 274 0" "DisableBoneFollowers" "1" "disablereceiveshadows" "0" "disableshadows" "1" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademindist" "-1" "fadescale" "1" "MaxAnimTime" "10" "MinAnimTime" "5" "model" "models/props_doomsday/australium_container.mdl" "modelscale" "1.0" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "0" "skin" "0" "solid" "6" "spawnflags" "0" "StartDisabled" "1" "targetname" "red_australium_model" "origin" "-4 12 445" } prop_dynamic { "classname" "prop_dynamic" "angles" "0 159.5 0" "DisableBoneFollowers" "0" "disablereceiveshadows" "0" "disableshadows" "0" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademaxdist" "866.0" "fademindist" "935" "fadescale" "1.0" "MaxAnimTime" "10" "maxdxlevel" "0" "MinAnimTime" "5" "mindxlevel" "95" "model" "models/props_farm/scenes/bananana_peel.mdl" "modelscale" "1.0" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "0" "skin" "0" "solid" "0" "spawnflags" "0" "StartDisabled" "0" "origin" "-29.27 77.96 -592.078" } prop_dynamic { "classname" "prop_dynamic" "angles" "75 274 0" "DisableBoneFollowers" "1" "disablereceiveshadows" "0" "disableshadows" "1" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademindist" "-1" "fadescale" "1" "MaxAnimTime" "10" "MinAnimTime" "5" "model" "models/props_doomsday/australium_container.mdl" "modelscale" "1.0" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "0" "skin" "1" "solid" "6" "spawnflags" "0" "StartDisabled" "1" "targetname" "blue_australium_model" "origin" "-4 12 445" } prop_dynamic { "classname" "prop_dynamic" "angles" "0 90 0" //you can change the second number to alter what direction the rocket flys in when it lifts off, since the rocket path is an animation it is very limited in where the rocket can go "DisableBoneFollowers" "1" "disablereceiveshadows" "0" "disableshadows" "1" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademindist" "-1" "fadescale" "1" "MaxAnimTime" "10" "MinAnimTime" "5" "model" "models/props_doomsday/rocket_flight_doomsday.mdl" "modelscale" "1.0" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "0" "skin" "0" "solid" "0" "spawnflags" "0" "StartDisabled" "1" "targetname" "rocket_flying" "origin" "0 24 -64" } prop_dynamic { "classname" "prop_dynamic" "angles" "0 270 270" "DisableBoneFollowers" "1" "disablereceiveshadows" "0" "disableshadows" "1" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademindist" "-1" "fadescale" "1" "lightingorigin" "cap_track2" "MaxAnimTime" "10" "MinAnimTime" "5" "model" "models/props_doomsday/rocket_lift_doomsday.mdl" "modelscale" "1.0" "parentname" "elevator_train" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "0" "skin" "0" "solid" "6" "spawnflags" "0" "StartDisabled" "0" "targetname" "rocket_lift_model" "origin" "0 -112 15.358" } prop_dynamic { "classname" "prop_dynamic" "angles" "0 270 0" "DisableBoneFollowers" "1" "disablereceiveshadows" "0" "disableshadows" "1" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademindist" "-1" "fadescale" "1" "lightingorigin" "cap_track2" "MaxAnimTime" "10" "MinAnimTime" "5" "model" "models/props_doomsday/rocket_gantry_doomsday.mdl" "modelscale" "1.0" "parentname" "rocket_gantry" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "0" "skin" "0" "solid" "1" "spawnflags" "0" "StartDisabled" "0" "targetname" "rocket_gantry_model" "origin" "0 24 -64" } prop_dynamic //you may want to remove this model if you are placing the rocket on the bomb hatch { "classname" "prop_dynamic" "angles" "0 90 0" "DisableBoneFollowers" "0" "disablereceiveshadows" "0" "disableshadows" "0" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademaxdist" "0.0" "fademindist" "-1.0" "fadescale" "1.0" "MaxAnimTime" "10" "maxdxlevel" "0" "MinAnimTime" "5" "mindxlevel" "0" "model" "models/props_doomsday/rocket_hatch_doomsday.mdl" "modelscale" "1.0" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "0" "skin" "0" "solid" "6" "spawnflags" "0" "StartDisabled" "0" "origin" "0 24 -19.112" } func_tracktrain { "classname" "func_tracktrain" "angles" "0 0 0" "bank" "0" "disablereceiveshadows" "1" "disableshadows" "1" "dmg" "1000" "height" "0" "ManualAccelSpeed" "70" "ManualDecelSpeed" "150" "ManualSpeedChanges" "1" "MoveSound" "doomsday.lift_loop" "MoveSoundMaxPitch" "200" "MoveSoundMaxTime" "0" "MoveSoundMinPitch" "60" "MoveSoundMinTime" "0" "orientationtype" "1" "origin" "0 224 11.33" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" "spawnflags" "514" "speed" "0" "StartSound" "doomsday.lift_start" "startspeed" "100" "StopSound" "doomsday.lift_stop" "target" "cap_track1" "targetname" "elevator_train" "velocitytype" "1" "volume" "10" "wheels" "20" "mins" "-8 -8 -8" //placeholder just incase this is required "maxs" "8 8 8" //placeholder just incase this is required } func_flagdetectionzone { "classname" "func_flagdetectionzone" "parentname" "elevator_train" "StartDisabled" "0" "targetname" "elevator_australium_zone" "TeamNum" "0" "OnEndTouchFlag" "drop_relay,Trigger,,0,-1" "OnStartTouchFlag" "touch_relay,Trigger,,0,-1" "mins" "-172 -122 -74" "maxs" "172 122 74" } dispenser_touch_trigger { "classname" "dispenser_touch_trigger" "parentname" "elevator_train" "targetname" "red_elevator_dispenser_touch" "mins" "-172 -122 -56" "maxs" "172 122 56" } dispenser_touch_trigger { "classname" "dispenser_touch_trigger" "parentname" "elevator_train" "targetname" "blue_elevator_dispenser_touch" "mins" "-172 -122 -56" "maxs" "172 122 56" } mapobj_cart_dispenser { "classname" "mapobj_cart_dispenser" "parentname" "elevator_train" "spawnflags" "12" "targetname" "blue_dispenser_beam" "TeamNum" "3" "touch_trigger" "blue_elevator_dispenser_touch" "origin" "0 -128 20" } mapobj_cart_dispenser { "classname" "mapobj_cart_dispenser" "parentname" "elevator_train" "spawnflags" "12" "targetname" "red_dispenser_beam" "TeamNum" "2" "touch_trigger" "red_elevator_dispenser_touch" "origin" "-1 -128 19" } func_achievement //idk what this is for { "classname" "func_achievement" "parentname" "elevator_train" "StartDisabled" "1" "targetname" "achievement_volume" "TeamNum" "0" "zone_id" "1" "mins" "-172 -122 -84" "maxs" "172 122 84" } func_nobuild { "classname" "func_nobuild" "StartDisabled" "0" "TeamNum" "0" "mins" "-172 -122 -159" "maxs" "172 122 159" } func_capturezone { "classname" "func_capturezone" "capturepoint" "1" "StartDisabled" "1" "targetname" "capturezone_volume" "TeamNum" "0" "OnCapTeam1" "red_win,Enable,,0,-1" "OnCapTeam2" "blue_win,Enable,,0,-1" "OnCapTeam1" "red_australium_model,Enable,,0,-1" "OnCapTeam2" "blue_australium_model,Enable,,0,-1" "OnCapture" "rocket_lid,Close,,0.1,-1" "OnCapture" "rocket_lid,SetSpeed,30,0,-1" "OnCapture" "sound_cap_spin,StopSound,,1,-1" "OnCapture" "sound_cap_quickdown,PlaySound,,0,-1" "OnCapture" "rocket_launch_sound_relay,Enable,,0,-1" "OnCapture" "game_timer,Disable,,0,-1" "mins" "-24 -24 -24" "maxs" "24 24 24" "origin" "0 0 435" } trigger_push { "classname" "trigger_push" "alternateticksfix" "0" "origin" "0 24 787" "pushdir" "0 271 0" "spawnflags" "1" "speed" "500" "StartDisabled" "1" "targetname" "rocket_push" "mins" "-40 -32 -320" "maxs" "40 32 320" "origin" "0 24 787" } trigger_multiple { "classname" "trigger_multiple" "origin" "0 24 101" "spawnflags" "1" "StartDisabled" "1" "targetname" "vent_hurt2" "wait" "0" "mins" "-86 -112 -102" "maxs" "86 112 102" "origin" "0 24 101" } trigger_multiple { "classname" "trigger_multiple" "origin" "-8 24 -561" "spawnflags" "1" "StartDisabled" "0" "wait" "1" "OnTrigger" "!activator,SetHealth,0,0,-1" "mins" "-192 -160 -8" "maxs" "192 160 8" "origin" "0 24 -565" } trigger_hurt { "classname" "trigger_hurt" "damage" "1000" "damagecap" "20" "damagemodel" "0" "damagetype" "0" "nodmgforce" "0" "origin" "0 -108 3.5" "parentname" "elevator_train" "spawnflags" "1" "StartDisabled" "1" "targetname" "elevator_hurt" "mins" "-172 -211 -4" "maxs" "172 211 3" } trigger_hurt { "classname" "trigger_hurt" "damage" "1000000" "damagecap" "200000" "damagemodel" "0" "damagetype" "32" "nodmgforce" "1" "origin" "-4 24 -549" "spawnflags" "1" "StartDisabled" "0" "mins" "-192 -160 -16" "maxs" "192 160 16" "origin" "0 24 -557" } func_door_rotating { "classname" "func_door_rotating" "angles" "0 0 0" "closesound" "doomsday.cap_close_end" "disablereceiveshadows" "0" "disableshadows" "0" "distance" "-40" "dmg" "10" "forceclosed" "1" "health" "0" "ignoredebris" "0" "lip" "0" "locked_sentence" "0" "loopmovesound" "0" "noise1" "doomsday.cap_open_start" "noise2" "doomsday.cap_open_end" "origin" "0 65 419" "parentname" "rocket_lid_spin" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "solidbsp" "0" "spawnflags" "96" "spawnpos" "0" "speed" "10" "startclosesound" "doomsday.cap_close_start" "targetname" "rocket_lid" "unlocked_sentence" "0" "wait" "-1" "OnFullyClosed" "rocket_lid_spin,Close,,0,-1" "OnFullyOpen" "capturezone_volume,Enable,,0,-1" "OnClose" "capturezone_volume,Disable,,0,-1" "OnFullyClosed" "blue_win,Trigger,,1,-1" "OnFullyClosed" "red_win,Trigger,,1,-1" "OnFullyClosed" "rocket_launch_sound_relay,Trigger,,0,-1" "OnOpen" "gamerules,HandleMapEvent,,0,-1" "mins" "-8 -8 -8" //placeholder just incase this is required "maxs" "8 8 8" //placeholder just incase this is required } func_door_rotating { "classname" "func_door_rotating" "angles" "0 0 0" "closesound" "doomsday.cap_spin_end" "disablereceiveshadows" "0" "disableshadows" "0" "distance" "720" "dmg" "0" "forceclosed" "1" "health" "0" "ignoredebris" "0" "lip" "0" "locked_sentence" "0" "loopmovesound" "0" "noise1" "doomsday.blank" "noise2" "doomsday.cap_spin_end" "origin" "0 24 371" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "solidbsp" "0" "spawnflags" "0" "spawnpos" "0" "speed" "100" "startclosesound" "doomsday.blank" "targetname" "rocket_lid_spin" "unlocked_sentence" "0" "wait" "-1" "OnFullyOpen" "rocket_lid,Open,,0,-1" "OnOpen" "sound_cap_spin,PlaySound,,0,-1" "OnFullyOpen" "sound_cap_spin,StopSound,,0,-1" "OnFullyClosed" "sound_cap_spin,StopSound,,0,-1" "OnClose" "sound_cap_spin,PlaySound,,0,-1" "OnOpen" "blue_team_owner_lid,Trigger,,0,-1" "OnOpen" "red_team_owner_lid,Trigger,,0,-1" "mins" "-8 -8 -8" //placeholder just incase this is required "maxs" "8 8 8" //placeholder just incase this is required } func_door_rotating { "classname" "func_door_rotating" "angles" "0 0 0" "disablereceiveshadows" "1" "disableshadows" "1" "distance" "-7" "dmg" "0" "forceclosed" "0" "health" "0" "ignoredebris" "0" "lip" "0" "locked_sentence" "0" "loopmovesound" "0" "origin" "0 130 -159" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "0" "solidbsp" "0" "spawnflags" "96" "spawnpos" "0" "speed" "10" "targetname" "rocket_gantry" "unlocked_sentence" "0" "wait" "-1" "mins" "-8 -8 -8" //placeholder just incase this is required "maxs" "8 8 8" //placeholder just incase this is required } logic_relay { "classname" "logic_relay" "spawnflags" "0" "StartDisabled" "1" "targetname" "blue_team_owner_lid_X" "OnTrigger" "gamerules,PlayVORed,Announcer.SD_TheyAreAboutToLaunch,0,-1" "OnTrigger" "gamerules,PlayVOBlue,Announcer.SD_WeAreAboutToLaunch,0,-1" } logic_relay { "classname" "logic_relay" "spawnflags" "0" "StartDisabled" "1" "targetname" "red_team_owner_lid_X" "OnTrigger" "gamerules,PlayVOBlue,Announcer.SD_TheyAreAboutToLaunch,0,-1" "OnTrigger" "gamerules,PlayVORed,Announcer.SD_WeAreAboutToLaunch,0,-1" } logic_relay { "classname" "logic_relay" "spawnflags" "0" "StartDisabled" "1" "targetname" "blue_win" "OnTrigger" "round_win,RoundWin,,1,-1" "OnTrigger" "round_win,SetTeam,3,0,-1" "OnTrigger" "rocket_base_model,Disable,,0,-1" "OnTrigger" "rocket_lid,Kill,,0,-1" "OnTrigger" "red_building_explosion,Start,,6.1,-1" "OnTrigger" "rocket_flying,Enable,,0,-1" "OnTrigger" "rocket_flying,SetAnimation,blue_flight,0.1,-1" "OnTrigger" "rocket_shake_flight,StartShake,,0,-1" "OnTrigger" "rocket_flying,Kill,,6.35,-1" "OnTrigger" "red_building_explosion_sound,PlaySound,,6.1,-1" "OnTrigger" "rocket_lid_model,Disable,,0,-1" "OnTrigger" "rocket_base_model,Kill,,2,-1" "OnTrigger" "rocket_socket,Kill,,0,-1" "OnTrigger" "blue_australium_model,Kill,,0,-1" "OnTrigger" "rocket_lid_model,Kill,,2,-1" "OnTrigger" "rocket_gantry_model,SetAnimation,gantry_arms_open_stay,1,-1" "OnTrigger" "rocket_gantry,Open,,0,-1" "OnTrigger" "rocket_gantry_model,SetAnimation,gantry_arms_open,0,-1" "OnTrigger" "rockettrail_vents_smoke,Start,,0,-1" "OnTrigger" "rockettrail_vents_smoke,Stop,,2,-1" "OnTrigger" "vent_hurt,Enable,,0,-1" "OnTrigger" "vent_hurt,Disable,,2,-1" "OnTrigger" "vent_hurt2,Disable,,2,-1" "OnTrigger" "vent_hurt2,Enable,,1,-1" "OnTrigger" "rocket_push,Enable,,0.5,-1" "OnTrigger" "red_base_building_relay,Trigger,,6.1,-1" "OnTrigger" "rocket_shake_impact,StartShake,,6.1,-1" "OnTrigger" "hdr_scale,Trigger,,6.1,-1" "OnTrigger" "rocket_hole_brush,Disable,,0.1,-1" "OnTrigger" "red_death_magnet,Disable,,6.2,-1" "OnTrigger" "red_death_magnet,Enable,,6.1,-1" "OnTrigger" "red_death,Disable,,6.2,-1" "OnTrigger" "red_death,Enable,,6.1,-1" "OnTrigger" "pj_bugle_sound,Trigger,,3.5,-1" "OnTrigger" "vo_crashed,PlaySound,,7,-1" "OnTrigger" "gamerules,PlayVORed,Game.YourTeamLostQuiet,0,-1" "OnTrigger" "gamerules,PlayVOBlue,Game.YourTeamWonQuiet,0,-1" } logic_relay { "classname" "logic_relay" "spawnflags" "0" "StartDisabled" "1" "targetname" "red_win" "OnTrigger" "round_win,RoundWin,,1,-1" "OnTrigger" "round_win,SetTeam,2,0,-1" "OnTrigger" "rocket_lid,Kill,,0,-1" "OnTrigger" "rocket_base_model,Disable,,0,-1" "OnTrigger" "rocket_flying,SetAnimation,red_flight,0.1,-1" "OnTrigger" "blue_building_explosion,Start,,6.1,-1" "OnTrigger" "rocket_flying,Enable,,0,-1" "OnTrigger" "rocket_shake_flight,StartShake,,0,-1" "OnTrigger" "rocket_flying,Kill,,6.35,-1" "OnTrigger" "blue_building_explosion_sound,PlaySound,,6.1,-1" "OnTrigger" "rocket_lid_model,Disable,,0,-1" "OnTrigger" "rocket_base_model,Kill,,2,-1" "OnTrigger" "rocket_socket,Kill,,0,-1" "OnTrigger" "red_australium_model,Kill,,0,-1" "OnTrigger" "rocket_lid_model,Kill,,2,-1" "OnTrigger" "rocket_gantry_model,SetAnimation,gantry_arms_open_stay,1,-1" "OnTrigger" "rocket_gantry_model,SetAnimation,gantry_arms_open,0,-1" "OnTrigger" "rocket_gantry,Open,,0,-1" "OnTrigger" "rockettrail_vents_smoke,Stop,,2,-1" "OnTrigger" "rockettrail_vents_smoke,Start,,0,-1" "OnTrigger" "vent_hurt,Disable,,2,-1" "OnTrigger" "vent_hurt,Enable,,0,-1" "OnTrigger" "vent_hurt2,Disable,,2,-1" "OnTrigger" "vent_hurt2,Enable,,1,-1" "OnTrigger" "rocket_push,Enable,,0.5,-1" "OnTrigger" "blue_base_building_relay,Trigger,,6.1,-1" "OnTrigger" "rocket_shake_impact,StartShake,,6.1,-1" "OnTrigger" "hdr_scale,Trigger,,6.1,-1" "OnTrigger" "rocket_hole_brush,Disable,,0.1,-1" "OnTrigger" "blue_death,Enable,,6.1,-1" "OnTrigger" "blue_death,Disable,,6.2,-1" "OnTrigger" "blue_death_magnet,Disable,,6.2,-1" "OnTrigger" "blue_death_magnet,Enable,,6.1,-1" "OnTrigger" "pj_bugle_sound,Trigger,,3.5,-1" "OnTrigger" "vo_crashed,PlaySound,,7,-1" "OnTrigger" "gamerules,PlayVORed,Game.YourTeamWonQuiet,0,-1" "OnTrigger" "gamerules,PlayVOBlue,Game.YourTeamLostQuiet,0,-1" } logic_relay { "classname" "logic_relay" "spawnflags" "0" "StartDisabled" "0" "targetname" "touch_relay" "OnTrigger" "cap_track_relay,Disable,,0,-1" "OnTrigger" "cap_track1,EnablePath,,0,-1" "OnTrigger" "elevator_train,SetSpeedDirAccel,1,0,-1" "OnTrigger" "elevator_hurt_relay,Disable,,0,-1" "OnTrigger" "elevator_hurt,Disable,,0,-1" "OnTrigger" "elevator_train,SetSpeedForwardModifier,.2,0,-1" "OnTrigger" "blue_dispenser_logic,Trigger,,0,-1" "OnTrigger" "red_dispenser_logic,Trigger,,0,-1" "OnTrigger" "elevator_alarm,Enable,,0,-1" "OnTrigger" "achievement_volume,Enable,,0,-1" "OnTrigger" "red_team_owner_lift,Trigger,,0,-1" "OnTrigger" "blue_team_owner_lift,Trigger,,0,-1" } logic_relay { "classname" "logic_relay" "spawnflags" "0" "StartDisabled" "0" "targetname" "drop_relay" "OnTrigger" "elevator_train,SetSpeedDirAccel,-0.3,0,-1" "OnTrigger" "cap_track_relay,Enable,,0,-1" "OnTrigger" "elevator_hurt_relay,Enable,,0,-1" "OnTrigger" "red_dispenser_beam,Disable,,0,-1" "OnTrigger" "blue_dispenser_beam,Disable,,0,-1" "OnTrigger" "cap_point_small,Skin,0,0,-1" "OnTrigger" "rocket_lift_lights,Skin,0,0,-1" "OnTrigger" "mini_light_flashing_red,Stop,,0,-1" "OnTrigger" "mini_light_flashing_blue,Stop,,0,-1" "OnTrigger" "elevator_alarm,Disable,,0.1,-1" } logic_relay { "classname" "logic_relay" "spawnflags" "0" "StartDisabled" "1" "targetname" "elevator_hurt_relay" "OnTrigger" "elevator_hurt,Enable,,0,-1" } logic_relay { "classname" "logic_relay" "spawnflags" "0" "StartDisabled" "1" "targetname" "cap_track_relay" "OnTrigger" "elevator_train,SetSpeedDirAccel,0,0,-1" } logic_relay { "classname" "logic_relay" "spawnflags" "0" "StartDisabled" "0" "targetname" "red_dispenser_logic" "OnTrigger" "red_dispenser_beam,Enable,,0,-1" "OnTrigger" "cap_point_small,Skin,1,0,-1" "OnTrigger" "rocket_lift_lights,Skin,1,0,-1" "OnTrigger" "mini_light_flashing_red,Start,,0,-1" } logic_relay { "classname" "logic_relay" "spawnflags" "0" "StartDisabled" "0" "targetname" "blue_dispenser_logic" "OnTrigger" "blue_dispenser_beam,Enable,,0,-1" "OnTrigger" "cap_point_small,Skin,2,0,-1" "OnTrigger" "rocket_lift_lights,Skin,2,0,-1" "OnTrigger" "mini_light_flashing_blue,Start,,0,-1" } logic_relay { "classname" "logic_relay" "spawnflags" "0" "StartDisabled" "1" "targetname" "rocket_launch_sound_relay" "OnTrigger" "rocket_launch_sound,PlaySound,,0,-1" } logic_relay { "classname" "logic_relay" "spawnflags" "0" "StartDisabled" "0" "targetname" "blue_team_owner_lift" "OnTrigger" "gamerules,PlayVORed,Announcer.SD_TheirFlagOnElevator,0,-1" "OnTrigger" "gamerules,PlayVOBlue,Announcer.SD_OurFlagOnElevator,0,-1" "OnTrigger" "blue_team_owner_lift,Disable,,0,-1" } logic_relay { "classname" "logic_relay" "spawnflags" "0" "StartDisabled" "0" "targetname" "red_team_owner_lift" "OnTrigger" "gamerules,PlayVOBlue,Announcer.SD_TheirFlagOnElevator,0,-1" "OnTrigger" "gamerules,PlayVORed,Announcer.SD_OurFlagOnElevator,0,-1" "OnTrigger" "red_team_owner_lift,Disable,,0,-1" } path_track { "classname" "path_track" "angles" "0 0 0" "radius" "0" "spawnflags" "0" "speed" "0" "targetname" "cap_track8" "OnPass" "rocket_lid_spin,Open,,0,-1" "OnPass" "sound_cap_start,PlaySound,,0,-1" "OnPass" "elevator_alarm,RefireTime,1.3,0,-1" "origin" "0 224 371" } path_track { "classname" "path_track" "angles" "0 0 0" "radius" "0" "spawnflags" "0" "speed" "0" "target" "cap_track8" "targetname" "cap_track7" "OnPass" "elevator_alarm,RefireTime,1.3,0,-1" "origin" "0 224 361" } path_track { "classname" "path_track" "angles" "0 0 0" "radius" "0" "spawnflags" "0" "speed" "0" "target" "cap_track7" "targetname" "cap_track6" "OnPass" "elevator_alarm,RefireTime,1.8,0,-1" "origin" "0 224 277" } path_track { "classname" "path_track" "angles" "0 0 0" "radius" "0" "spawnflags" "0" "speed" "0" "target" "cap_track6" "targetname" "cap_track5" "OnPass" "rocket_lid,Close,,0,-1" "origin" "0 224 259" } path_track { "classname" "path_track" "angles" "0 0 0" "radius" "0" "spawnflags" "0" "speed" "0" "target" "cap_track5" "targetname" "cap_track4" "OnPass" "elevator_hurt_relay,Trigger,,0,-1" "OnPass" "elevator_alarm,RefireTime,2,0,-1" "OnPass" "rocket_lid,Close,,0,-1" "origin" "0 224 207" } path_track { "classname" "path_track" "angles" "0 0 0" "radius" "0" "spawnflags" "0" "speed" "0" "target" "cap_track4" "targetname" "cap_track3" "OnPass" "elevator_hurt_relay,Trigger,,0,-1" "OnPass" "elevator_alarm,RefireTime,2,0,-1" "OnPass" "rocket_lid,Close,,0,-1" "origin" "0 224 151" } path_track { "classname" "path_track" "angles" "0 0 0" "radius" "0" "spawnflags" "0" "speed" "0" "target" "cap_track3" "targetname" "cap_track2" "OnPass" "elevator_hurt_relay,Trigger,,0,-1" "OnPass" "elevator_alarm,RefireTime,2.5,0,-1" "origin" "0 224 91" } path_track { "classname" "path_track" "angles" "0 0 0" "radius" "0" "spawnflags" "0" "speed" "0" "target" "cap_track2" "targetname" "cap_track1b" "OnPass" "elevator_alarm,RefireTime,2.5,0,-1" "OnPass" "achievement_volume,Enable,,0,-1" "origin" "0 224 27" } path_track { "classname" "path_track" "angles" "0 0 0" "radius" "0" "spawnflags" "0" "speed" "0" "target" "cap_track1b" "targetname" "cap_track1" "OnPass" "cap_track_relay,Trigger,,0,-1" "OnPass" "achievement_volume,Disable,,0,-1" "origin" "0 224 13" } path_track { "classname" "path_track" "angles" "0 0 0" "radius" "0" "spawnflags" "0" "speed" "0" "target" "cap_track1" "targetname" "cap_track0" "origin" "0 224 -11" } info_particle_system { "classname" "info_particle_system" "angles" "-16.5272 164.12 0" "cpoint1_parent" "0" "cpoint2_parent" "0" "cpoint3_parent" "0" "cpoint4_parent" "0" "cpoint5_parent" "0" "cpoint6_parent" "0" "cpoint7_parent" "0" "effect_name" "cart_flashinglight" "flag_as_weather" "0" "parentname" "elevator_train" "start_active" "0" "targetname" "mini_light_flashing_blue" "origin" "172.728 -204.494 25.081" } info_particle_system { "classname" "info_particle_system" "angles" "-15 165 0" "cpoint1_parent" "0" "cpoint2_parent" "0" "cpoint3_parent" "0" "cpoint4_parent" "0" "cpoint5_parent" "0" "cpoint6_parent" "0" "cpoint7_parent" "0" "effect_name" "cart_flashinglight_red" "flag_as_weather" "0" "parentname" "elevator_train" "start_active" "0" "targetname" "mini_light_flashing_red" "origin" "172.168 -204.473 25.081" } info_particle_system { "classname" "info_particle_system" "angles" "-23.5346 104.164 0" "cpoint1_parent" "0" "cpoint2_parent" "0" "cpoint3_parent" "0" "cpoint4_parent" "0" "cpoint5_parent" "0" "cpoint6_parent" "0" "cpoint7_parent" "0" "effect_name" "cart_flashinglight" "flag_as_weather" "0" "parentname" "elevator_train" "start_active" "0" "targetname" "mini_light_flashing_blue" "origin" "172.846 4.95996 27.319" } info_particle_system { "classname" "info_particle_system" "angles" "-22.5 105 0" "cpoint1_parent" "0" "cpoint2_parent" "0" "cpoint3_parent" "0" "cpoint4_parent" "0" "cpoint5_parent" "0" "cpoint6_parent" "0" "cpoint7_parent" "0" "effect_name" "cart_flashinglight_red" "flag_as_weather" "0" "parentname" "elevator_train" "start_active" "0" "targetname" "mini_light_flashing_red" "origin" "172.676 5.47998 27.319" } info_particle_system { "classname" "info_particle_system" "angles" "-15 0 0" "cpoint1_parent" "0" "cpoint2_parent" "0" "cpoint3_parent" "0" "cpoint4_parent" "0" "cpoint5_parent" "0" "cpoint6_parent" "0" "cpoint7_parent" "0" "effect_name" "cart_flashinglight_red" "flag_as_weather" "0" "parentname" "elevator_train" "start_active" "0" "targetname" "mini_light_flashing_red" "origin" "-172 8.43005 27.116" } info_particle_system { "classname" "info_particle_system" "angles" "-16.5936 0 0" "cpoint1_parent" "0" "cpoint2_parent" "0" "cpoint3_parent" "0" "cpoint4_parent" "0" "cpoint5_parent" "0" "cpoint6_parent" "0" "cpoint7_parent" "0" "effect_name" "cart_flashinglight" "flag_as_weather" "0" "parentname" "elevator_train" "start_active" "0" "targetname" "mini_light_flashing_blue" "origin" "-172.73 8.45996 27.116" } info_particle_system { "classname" "info_particle_system" "angles" "-16.1163 46.7143 0" "cpoint1_parent" "0" "cpoint2_parent" "0" "cpoint3_parent" "0" "cpoint4_parent" "0" "cpoint5_parent" "0" "cpoint6_parent" "0" "cpoint7_parent" "0" "effect_name" "cart_flashinglight" "flag_as_weather" "0" "parentname" "elevator_train" "start_active" "0" "targetname" "mini_light_flashing_blue" "origin" "-171.5 -224.966 27.043" } info_particle_system { "classname" "info_particle_system" "angles" "-15 45 0" "cpoint1_parent" "0" "cpoint2_parent" "0" "cpoint3_parent" "0" "cpoint4_parent" "0" "cpoint5_parent" "0" "cpoint6_parent" "0" "cpoint7_parent" "0" "effect_name" "cart_flashinglight_red" "flag_as_weather" "0" "parentname" "elevator_train" "start_active" "0" "targetname" "mini_light_flashing_red" "origin" "-172.27 -225.021 27.043" } env_shake { "classname" "env_shake" "amplitude" "5" "duration" "4" "frequency" "50" "radius" "8000" "spawnflags" "5" "targetname" "rocket_shake_flight" "origin" "0 -60 396.81" } env_shake { "classname" "env_shake" "amplitude" "16" "duration" "4" "frequency" "20" "radius" "8000" "spawnflags" "5" "targetname" "rocket_shake_impact" "origin" "5.21002 -80 657.84" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "Announcer.SD_Rocket_Crash" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "1250" "spawnflags" "49" "spindown" "0" "spinup" "0" "targetname" "vo_crashed" "volstart" "0" "origin" "0 -152 531" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "doomsday.cap_close_quick" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "2250" "spawnflags" "49" "spindown" "0" "spinup" "0" "targetname" "sound_cap_quickdown" "volstart" "0" "origin" "0 -32 523" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "doomsday.cap_spinstart" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "2500" "spawnflags" "49" "spindown" "0" "spinup" "0" "targetname" "sound_cap_start" "volstart" "0" "origin" "0 -32 499" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "doomsday.cap_spinloop" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "2500" "spawnflags" "17" "spindown" "0" "spinup" "0" "targetname" "sound_cap_spin" "volstart" "0" "origin" "0 -32 475" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "doomsday.alarm" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "1250" "SourceEntityName" "elevator_train" "spawnflags" "48" "spindown" "0" "spinup" "0" "targetname" "elevator_alarm_sound" "volstart" "0" "origin" "2 -132 267" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "doomsday.launch" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "2500" "spawnflags" "49" "spindown" "0" "spinup" "0" "targetname" "rocket_launch_sound" "volstart" "0" "origin" "-0.0899658 24 546" } ambient_generic { "classname" "ambient_generic" "cspinup" "0" "fadeinsecs" "0" "fadeoutsecs" "0" "health" "10" "lfomodpitch" "0" "lfomodvol" "0" "lforate" "0" "lfotype" "0" "message" "doomsday.launch" "pitch" "100" "pitchstart" "100" "preset" "0" "radius" "2500" "spawnflags" "49" "spindown" "0" "spinup" "0" "targetname" "rocket_launch_sound" "volstart" "0" "origin" "-0.0899658 24 523" } OnSpawnOutput { Target rocket_lift_model Action SetParent Param elevator_train } OnSpawnOutput { Target rocket_lift_lights Action SetParent Param elevator_train } OnSpawnOutput { Target cap_point_small Action SetParent Param elevator_train } OnSpawnOutput { Target rocket_lid_model Action SetParent Param rocket_lid } OnSpawnOutput { Target rocket_lid Action SetParent Param rocket_lid_spin } OnSpawnOutput { Target blue_dispenser_beam Action Disable } OnSpawnOutput { Target red_dispenser_beam Action Disable } } koth //doesnt work { prop_dynamic { "model" "models/props_gameplay/cap_point_base.mdl" "targetname" "cap_base" "solid" "6" "skin" "0" //set this number to 0 for neutral, 1 for red, 2 for blu } trigger_capture_area { "classname" "trigger_capture_area" "area_cap_point" "controlpoint1" "area_time_to_cap" "5" //multiply this number by 2 to get the capture duration in seconds, raising "team_numcap_3" and "team_numcap_2" will also increase the time taken by a factor of the value (e.g. raising it to 2 will multiply the duration by 2) "StartDisabled" "0" "targetname" "cap_area" "team_cancap_2" "1" //setting this number to 0 disables red team from recapturing, 1 enables red team to recapture "team_cancap_3" "1" "team_numcap_2" "1" //changing this number will change the number of red players required to stand on the point to finish capturing "team_numcap_3" "1" //changing this number will change the number of blu players required to stand on the point to finish capturing "team_spawn_2" "0" "team_spawn_3" "0" "team_startcap_2" "1" "team_startcap_3" "1" "mins" "-128 -128 -128" "maxs" "128 128 128" "origin" "0 0 128" "spawnflags" "1" "OnCapTeam2" "cap_base,Skin,2,0,-1" //set the first number to 0 for neutral, 1 for red, 2 for blu "OnCapTeam1" "cap_base,Skin,1,0,-1" "OnCapTeam2" "gamerules,SetBlueKothClockActive,1,0,-1" //the first word has to match the name of the tf_gamerules entity in the map, in most cases it will be gamerules but it can change on a map to map basis "OnCapTeam1" "gamerules,SetRedKothClockActive,1,0,-1" //add your outputs here using "OnCapTeam2" for blu team capture, or "OnCapTeam1" for red team capture } team_control_point { "classname" "team_control_point" "angles" "0 0 0" "point_default_owner" "0" //set this number to 0 for neutral, 2 for red, 3 for blu "point_group" "0" "point_index" "0" //if you plan on having multiple control points at once, you must give each one a unique "point_index", spawning more than 8 control points on the map will crash the server "point_printname" "TODO: Set Name" //this is the name of the control point that will show up in the kill feed "point_start_locked" "1" "point_warn_on_cap" "0" "point_warn_sound" "ControlPoint.CaptureWarn" "random_owner_on_restart" "0" "spawnflags" "4" "targetname" "cap_point" "team_bodygroup_0" "3" "team_bodygroup_2" "1" "team_bodygroup_3" "1" "team_icon_0" "sprites/obj_icons/icon_obj_neutral" "team_icon_2" "sprites/obj_icons/icon_obj_red" "team_icon_3" "sprites/obj_icons/icon_obj_blu" "team_model_0" "models/effects/cappoint_hologram.mdl" "team_model_2" "models/effects/cappoint_hologram.mdl" "team_model_3" "models/effects/cappoint_hologram.mdl" "team_previouspoint_2_0" "cap_point" "team_previouspoint_3_0" "cap_point" "team_timedpoints_2" "0" "team_timedpoints_3" "0" "origin" "0 0 4" } team_control_point_master { "classname" "team_control_point_master" "cpm_restrict_team_cap_win" "1" //this makes it so the wave does not end when all the points are owned by a team, set this to 0 for neither team (this will end the wave on capture), 1 to restrict both teams, 2 to restrict red team winning, and 3 to restrict blu team winning "custom_position_x" "0.4" //you can change the number here to move the control points on the hud if something is blocking it, accepted values are from 0 to 1 and is expressed as a percentage of the screen from left to right, 0.5 or "-1" will center the hud "custom_position_y" "-1" "partial_cap_points_rate" "0" "play_all_rounds" "0" "score_style" "0" "StartDisabled" "0" "switch_teams" "0" "targetname" "cap_master" "team_base_icon_2" "sprites/obj_icons/icon_base_red" "team_base_icon_3" "sprites/obj_icons/icon_base_blu" } tf_logic_koth { "classname" "tf_logic_koth" "targetname" "cap_koth" "timer_length" "2" //koth timer measured in seconds, by default it is 180 seconds long or three minutes "unlock_point" "2" //timer to unlock point measured in seconds, starts counting when the wave starts, by default it is 30 seconds long, set it to 0 if you want to unlock the point immediately } OnSpawnOutput //very important to keep this output otherwise the control point will not function { Target cap_area Action SetControlPoint Param cap_point } OnSpawnOutput { Target cap_master Action RoundSpawn } OnSpawnOutput //this will ensure the koth timers are operational { Target cap_koth Action RoundSpawn } OnSpawnOutput //this will ensure the koth timers are operational { Target cap_koth Action RoundActivate } } kothinit { tf_logic_koth { "classname" "tf_logic_koth" "targetname" "cap_koth" "timer_length" "2" //koth timer measured in seconds, by default it is 180 seconds long or three minutes "unlock_point" "2" //timer to unlock point measured in seconds, starts counting when the wave starts, by default it is 30 seconds long, set it to 0 if you want to unlock the point immediately } } pd //logic works but due to current rafmod settings it is unplayable, also hud does not show { tf_logic_player_destruction { "classname" "tf_logic_player_destruction" "blue_respawn_time" "10" "finale_length" "30" "flag_reset_delay" "60" "heal_distance" "450" "min_points" "10" "points_per_player" "5" "prop_model_name" "models/flag/flag.mdl" "red_respawn_time" "10" "res_file" "resource/UI/HudObjectivePlayerDestruction.res" "targetname" "pd" } func_capturezone { "classname" "func_capturezone" "mins" "-92 -92 -92" "maxs" "92 92 92" "origin" "32 -960 -16" "spawnflags" "1" "OnCapTeam1_PD" "pd,ScoreRedPoints,,0,-1" "OnCapTeam2_PD" "pd,ScoreBluePoints,,0,-1" } } } ///////////////// //MISSIONS ///////////////// Mission // This is a sentry buster mission. It creates sentry busters for any player sentries deemed too dangerous. { Objective DestroySentries InitialCooldown 5 // Amount of time once a wave starts before the mission becomes active. Where spawnbot_mission_sentrybuster // Entity at which to spawn. BeginAtWave 1 // The mission becomes active on this wave. RunForThisManyWaves 11 // It remains active for this many waves. Generally, this is the same as the total number of waves. CooldownTime 35 // This is the time, in seconds, between when Sentry Busters are allowed to spawn, should their spawning conditions be met. TFBot { Template T_TFBot_SentryBuster // This references a template to use for its TFBot. } } Mission // This is a sniper mission. This spawns sniper(s) at periodic intervals, it will not spawn more snipers unless its conditions are met, and all previous snipers from this mission are dead. { Objective Sniper InitialCooldown 10 // Amount of time once a wave starts before the mission becomes active. Where spawnbot_mission_sniper // Entity at which to spawn. BeginAtWave 4 // The mission becomes active on this wave. RunForThisManyWaves 1 // It remains active for this many waves. CooldownTime 35 // This is the time, in seconds, between when Sniper Missions are allowed to spawn, should their spawning conditions be met. DesiredCount 0 // Number of snipers to spawn each time this mission's criteria are met. TFBot { Class Sniper Skill Expert Name Sniper } } Mission // This is a spy mission. This spawns spy(s) at periodic intervals, it will not spawn more spies unless its conditions are met, and all previous spies from this mission are dead. { Objective Spy InitialCooldown 20 // Amount of time once a wave starts before the mission becomes active. Where spawnbot_mission_spy // Entity at which to spawn. BeginAtWave 3 // The mission becomes active on this wave. RunForThisManyWaves 1 // It remains active for this many waves. CooldownTime 15 // This is the time, in seconds, between when Sniper Missions are allowed to spawn, should their spawning conditions be met. DesiredCount 0 // Number of spies to spawn each time this mission's criteria are met. TFBot { Class Spy Skill Expert Name Spy } } ///////////////// //WAVES ///////////////// //WAVE 1 ///////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // This wave consists of 15 scouts, with 400 currency divided between them. // At the start of the wave scouts are spawned in groups of 5, 5 seconds apart, until there are 10 bots are in the world. // They spawn at the spawnpoint named spawnbot, and if multiple spawnbot spawn points exist, they choose a random spawnbot each time a group of 2 spawn. // As bots are eliminated, new bots spawn in groups of 5 as long as there are enough slots in the max active count. // The wave is over when all 15 bot scouts have been eliminated. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Wave { SpawnTemplate { Name "flag" "origin" "0 0 -160" } SpawnTemplate { Name "capturezone" "origin" "400 0 -92" } SpawnTemplate { Name "deskprop" "origin" "400 0 -192" } StartWaveOutput // Output which occurs at moment the wave begins. { Target wave_start_relay // Name of the entity in the map to target. Action Trigger // Input to give the targeted entity. } DoneOutput // Output which occurrs at moment the wave is completed. { Target wave_finished_relay // Name of the entity in the map to target. Action trigger // Input to give the targeted entity. } Checkpoint Yes // Sets a checkpoint at the end of this wave. WaveSpawn { Where spawnbot // Entity at which to spawn. TotalCount 1 // The total number of individual bots that will spawn. MaxActive 10 // The maximum number of bots, from this WaveSpawn, that can be alive in the world at any moment. SpawnCount 5 // Defines the number of bots to spawn at a time as a group. WaitBeforeStarting 0 // Amount of time to wait before spawning the first bot. WaitBetweenSpawns 5 // Amount of time to wait between spawning each group (defined by the spawncount) of bots. TotalCurrency 400 // Amount of money dropped by all of the bots in the WaveSpawn. Money is divided equally between each bot. TFBot { Class Scout // Type of bot to spawn. Skill Normal // Skill level of bot. options are Easy, Normal, Hard, Expert in ascending difficulty. AddCond //Adds conditions to bots { Name "TF_COND_REPROGRAMMED" action mobber } } } } //WAVE 2 ///////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // This wave is identical to wave 1 except that the bot scouts are using a template located in one of the included pop files. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Wave { SpawnTemplate { Name "controlpoint" "origin" "0 0 -192" } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } Checkpoint Yes WaveSpawn { Where spawnbot // Entity at which to spawn. TotalCount 1 // The total number of individual bots that will spawn. MaxActive 10 // The maximum number of bots, from this WaveSpawn, that can be alive in the world at any moment. SpawnCount 5 // Defines the number of bots to spawn at a time as a group. WaitBeforeStarting 0 // Amount of time to wait before spawning the first bot. WaitBetweenSpawns 5 // Amount of time to wait between spawning each group (defined by the spawncount) of bots. TotalCurrency 400 // Amount of money dropped by all of the bots in the WaveSpawn. Money is divided equally between each bot. TFBot { Class Scout // Type of bot to spawn. Skill Normal // Skill level of bot. options are Easy, Normal, Hard, Expert in ascending difficulty. AddCond //Adds conditions to bots { Name "TF_COND_REPROGRAMMED" } } } } //WAVE 3 ///////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // This wave is similar to wave 2 but with a TANK added that spawns 15 seconds AFTER all the scouts have been spawned. // Additionally, each individual scout, not the SpawnCount group as a whole, will spawn at a random spawn point of the specified name. // **SPY MISSION** is active for this wave, as defined at the top of the pop file. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Wave { SpawnTemplate payload //payload does not need an origin defined SpawnTemplate { Name "payloaddeploy" Origin "1664 0 -136" //origin is defined at the hatch Angles "90 90 0" //change the second number to orientate the payload } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } Checkpoint Yes WaveSpawn { Where spawnbot // Entity at which to spawn. TotalCount 1 // The total number of individual bots that will spawn. MaxActive 10 // The maximum number of bots, from this WaveSpawn, that can be alive in the world at any moment. SpawnCount 5 // Defines the number of bots to spawn at a time as a group. WaitBeforeStarting 0 // Amount of time to wait before spawning the first bot. WaitBetweenSpawns 5 // Amount of time to wait between spawning each group (defined by the spawncount) of bots. TotalCurrency 400 // Amount of money dropped by all of the bots in the WaveSpawn. Money is divided equally between each bot. TFBot { Class Scout // Type of bot to spawn. Skill Normal // Skill level of bot. options are Easy, Normal, Hard, Expert in ascending difficulty. AddCond //Adds conditions to bots { Name "TF_COND_REPROGRAMMED" } } } } //WAVE 4 ///////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // This wave has 2 tanks which spawn on different tracks. The first tank starts at the beginning of the wave, the other 10 seconds later. // **SNIPER MISSION** is active for this wave, as defined at the top of the pop file. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Wave { SpawnTemplate "flag" SpawnTemplate { Name "doomsdayrocket" Origin "1664 0 -176" Angles "0 180 0" //change the second number to orientate the rocket } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } Checkpoint Yes WaveSpawn { Where spawnbot // Entity at which to spawn. TotalCount 1 // The total number of individual bots that will spawn. MaxActive 10 // The maximum number of bots, from this WaveSpawn, that can be alive in the world at any moment. SpawnCount 5 // Defines the number of bots to spawn at a time as a group. WaitBeforeStarting 0 // Amount of time to wait before spawning the first bot. WaitBetweenSpawns 5 // Amount of time to wait between spawning each group (defined by the spawncount) of bots. TotalCurrency 400 // Amount of money dropped by all of the bots in the WaveSpawn. Money is divided equally between each bot. TFBot { Class Scout // Type of bot to spawn. Skill Normal // Skill level of bot. options are Easy, Normal, Hard, Expert in ascending difficulty. AddCond //Adds conditions to bots { Name "TF_COND_REPROGRAMMED" } } } } //WAVE 5 ///////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // This wave consists of 18 bots, with 400 currency divided between them. // At the start of the wave bots are spawned in groups of 3, 1 second apart, until there are 9 bots are in the world. // For each bot spawned, a random TFBot from those listed inside the RandomChoice is picked. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Wave { InitWaveOutput { Target kothinit Action ForceSpawn } SpawnTemplate { Name "koth" "origin" "0 0 -192" } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } Checkpoint Yes WaveSpawn { Where spawnbot // Entity at which to spawn. TotalCount 1 // The total number of individual bots that will spawn. MaxActive 10 // The maximum number of bots, from this WaveSpawn, that can be alive in the world at any moment. SpawnCount 5 // Defines the number of bots to spawn at a time as a group. WaitBeforeStarting 0 // Amount of time to wait before spawning the first bot. WaitBetweenSpawns 5 // Amount of time to wait between spawning each group (defined by the spawncount) of bots. TotalCurrency 400 // Amount of money dropped by all of the bots in the WaveSpawn. Money is divided equally between each bot. TFBot { Class Scout // Type of bot to spawn. Skill Normal // Skill level of bot. options are Easy, Normal, Hard, Expert in ascending difficulty. AddCond //Adds conditions to bots { Name "TF_COND_REPROGRAMMED" } } } } //WAVE 6 ///////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // In the first WaveSpawn within this wave, melee Heavy bots are spawned, and as the first bots in the world they will carry the bomb. // In the scond WaveSpawn, 5 seconds later, Soldier and Pyro TFBots spawn and are flagged to follow specific parts // of the nav mesh marked by func_nav_prefer entities in the level. Additionally, they have the BehaviorModifier "push" // which makes these bots path directly to the hatch before letting any other AI driven pathing take over. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Wave { InitWaveOutput { Target pd Action ForceSpawn } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } Checkpoint Yes WaveSpawn { Where spawnbot TotalCount 5 MaxActive 5 SpawnCount 5 WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 100 TFBot { Class HeavyWeapons Skill Easy WeaponRestrictions MeleeOnly // This bot will only use its melee weapon. } } WaveSpawn { Where spawnbot TotalCount 12 MaxActive 8 SpawnCount 4 WaitBeforeStarting 5 WaitBetweenSpawns 1 TotalCurrency 300 RandomChoice { TFBot { Class Pyro Skill Easy Tag nav_prefer_flank_left // This bot will pay attention to nav mesh tagged by func_nav_prefer and func_nav_avoid entities of this name. BehaviorModifiers push // Forces bot to "push" all the way to the hatch before pathing to any other location. } TFBot { Class Soldier Skill Easy Tag nav_prefer_flank_right // This bot will pay attention to nav mesh tagged by func_nav_prefer and func_nav_avoid entities of this name. BehaviorModifiers push // Forces bot to "push" all the way to thezc hatch before pathing to any other location. } } } } //WAVE 7 ///////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // This wave consists of a pair of giant heavy robots spawned 5 seconds apart. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Wave { StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } Checkpoint Yes WaveSpawn { Where spawnbot TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 5 TotalCurrency 400 TFBot { Class Heavyweapons Name "Giant Heavy" // Name of the bot used in the obituaries. If not specified, standard class name is used. ClassIcon heavy_giant // Icon to use in the wave telegraph. If not specified, standard icon is used. Skill Expert Health 5000 WeaponRestrictions PrimaryOnly MaxVisionRange 1200 // Sets the distance at which this bot will attempt to engage and attack players. CharacterAttributes { "move speed bonus" 0.5 // Multiplies the movement speed of this bot by the specified amount. "damage bonus" 1.5 // Multiplies the damage output of this bot by the specified amount. "damage force reduction" 0.3 // Multiplies the damage forces applied to this bot by the specified amount. "airblast vulnerability multiplier" 0.3 // Multiplies airblast forces applied to this bot by the specified amount. "override footstep sound set" 2 // Sets the footstep sounds to that of a giant. } } } } //WAVE 8 ///////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Identical to wave 7, except using templates. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Wave { StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } Checkpoint Yes WaveSpawn { Where spawnbot TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 5 TotalCurrency 400 TFBot { Template T_TFBot_Giant_Heavyweapons } } } //WAVE 9 ///////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // This wave demonstrates squads. // There are 3 squads of robots, with 6 robots in each squad for a total of 18 robots. // Squads are made up of a group of bots which have a single leader. The minions escort the leader an follow the leader's pathing. // When the squad leader is killed, the minions will disband and normal AI will take over. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Wave { StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } Checkpoint Yes WaveSpawn { Where spawnbot TotalCount 18 // For squads, total count MUST divide evenly into the spawncount/number of bots in the squad. MaxActive 12 // For squads, max active MUST divide evenly into the spawncount/number of bots in the squad. SpawnCount 6 // For squads, spawncount must reflect the EXACT number or a MULTIPLE of all bots in the squad. WaitBetweenSpawns 8 WaitBeforeStarting 0 TotalCurrency 400 Squad { TFBot { Template T_TFBot_Giant_Demoman // The first bot listed in the squad will be the SQUAD LEADER. } TFBot { Template T_TFBot_Demoman_Knight // All subsequent bots listed in the squad will be minions. Minions will take up specific locations in the squad formation in front of the squad leader. The first minion takes the 11 o'clock position. } TFBot { Template T_TFBot_Demoman_Knight // The second minion takes the 1 o'clock position. } TFBot { Template T_TFBot_Demoman_Knight // The third minion takes the 10 o'clock position. } TFBot { Template T_TFBot_Demoman_Knight // The fourth minion takes the 2 o'clock position. } TFBot { Template T_TFBot_Demoman_Knight // The fifth minion takes the 9 o'clock position. And so on... } } } } //WAVE 10 //////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // This wave also demonstrates of a squad of robots - this time with medics as the minions supporting a squad leader. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Wave { StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } Checkpoint Yes WaveSpawn { Where spawnbot TotalCount 8 MaxActive 8 SpawnCount 4 WaitBetweenSpawns 5 WaitBeforeStarting 0 TotalCurrency 400 Squad { TFBot { Template T_TFBot_Giant_Demoman } TFBot { Template T_TFBot_Medic_QuickUber // When a medic is supporting a squad leader, they do not take the standard formation. Instead, they attempt to hang back behind the squad leader while healing. } TFBot { Template T_TFBot_Medic_QuickUber // When a medic is supporting a squad leader, they do not take the standard formation. Instead, they attempt to hang back behind the squad leader while healing. } TFBot { Template T_TFBot_Medic_QuickUber // When a medic is supporting a squad leader, they do not take the standard formation. Instead, they attempt to hang back behind the squad leader while healing. } } } } //WAVE 11 //////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // This wave demonstrates a support WaveSpawn. // Support WaveSpawns continue to run and output an infinite number of bots until the other non-support // WaveSpawns have been eliminated. // Currency in support WaveSpawns will be distributed amongst the first bots spawned until the TotalCount is reached. // After the total count, support bots will no longer drop currency. // If the wave ends and not all of the support currency has been dropped, that remaining currency will dropped by // the last support bot killed. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Wave { StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } Checkpoint Yes WaveSpawn // This WaveSpawn is NOT support. When all 15 scouts are killed, the support bots will stop spawning. { Where spawnbot TotalCount 15 MaxActive 10 SpawnCount 5 WaitBeforeStarting 0 WaitBetweenSpawns 8 TotalCurrency 200 TFBot { Template T_TFBot_Scout_Melee } } WaveSpawn // This is the support WaveSpawn. { Where spawnbot TotalCount 4 // For a support WaveSpawn, this number is used to divide the currency. In this case, only the first 4 support bots will drop currency, yet an infinite number of bots may be spawned. MaxActive 4 SpawnCount 4 WaitBeforeStarting 2 WaitBetweenSpawns 5 TotalCurrency 200 Support 1 // Sets this WaveSpawn as support. TFBot { Template T_TFBot_Demoman_Knight } } } }