This article relates to the game "Portal: Revolution". Click here for more information.

Revolution.fgd

From Valve Developer Community
Jump to: navigation, search

From: \common\Portal Revolution\revolution\revolution.fgd.

@mapsize(-65536, 65536)

@AutoVisgroup = "Auto"
	[
	"AI"
		[
		"ai_battle_line"
		"ai_changehintgroup"
		"ai_changetarget"
		"ai_goal_assault"
		"ai_goal_fightfromcover"
		"ai_goal_follow"
		"ai_goal_injured_follow"
		"ai_goal_lead"
		"ai_goal_lead_weapon"
		"ai_goal_standoff"
		"ai_npc_eventresponsesystem"
		"ai_relationship"
		"ai_script_conditions"
		"ai_sound"
		"ai_speechfilter"
		"assault_assaultpoint"
		"assault_rallypoint"
		"tanktrain_ai"
		"tanktrain_aitarget"
		]
	"Auto"
		[
		"ai_battle_line"
		"ai_changehintgroup"
		"ai_changetarget"
		"ai_goal_assault"
		"ai_goal_fightfromcover"
		"ai_goal_follow"
		"ai_goal_injured_follow"
		"ai_goal_lead"
		"ai_goal_lead_weapon"
		"ai_goal_standoff"
		"ai_npc_eventresponsesystem"
		"ai_relationship"
		"ai_script_conditions"
		"ai_sound"
		"ai_speechfilter"
		"assault_assaultpoint"
		"assault_rallypoint"
		"tanktrain_ai"
		"tanktrain_aitarget"
		]
	"Brush Entities"
		[
		"comp_trigger_p2_goo"
		"env_bubbles"
		"env_embers"
		"func_breakable"
		"func_breakable_surf"
		"func_brush"
		"func_clip_vphysics"
		"func_conveyor"
		"func_detail_blocker"
		"func_dustcloud"
		"func_dustmotes"
		"func_guntarget"
		"func_movelinear"
		"func_physbox"
		"func_physbox_multiplayer"
		"func_placement_clip"
		"func_platrot"
		"func_portal_detector"
		"func_portal_orientation"
		"func_portalled"
		"func_precipitation"
		"func_precipitation_blocker"
		"func_proprrespawnzone"
		"func_pushable"
		"func_reflective_glass"
		"func_rotating"
		"func_smokevolume"
		"func_tank"
		"func_tanklaser"
		"func_tankmortar"
		"func_tankphyscannister"
		"func_tankpulselaser"
		"func_tanktrain"
		"func_trackautochange"
		"func_trackchange"
		"func_tracktrain"
		"func_train"
		"func_traincontrols"
		"func_viscluster"
		"func_wall"
		"func_wall_toggle"
		"func_water"
		"func_water_analog"
		"game_zone_player"
		"trigger_autosave"
		"trigger_brush"
		"trigger_catapult"
		"trigger_changelevel"
		"trigger_gravity"
		"trigger_hierarchy"
		"trigger_hurt"
		"trigger_impact"
		"trigger_look"
		"trigger_momentum_promptinput"
		"trigger_ping_detector"
		"trigger_playermovement"
		"trigger_playerteam"
		"trigger_proximity"
		"trigger_push"
		"trigger_remove"
		"trigger_reversespeed"
		"trigger_serverragdoll"
		"trigger_setspeed"
		"trigger_softbarrier"
		"trigger_soundoperator"
		"trigger_teleport"
		"trigger_teleport_relative"
		"trigger_togglesave"
		"trigger_tonemap"
		"trigger_transition"
		"trigger_userinput"
		"trigger_vphysics_motion"
		"trigger_wind"
		]
	"Color Correction"
		[
		"color_correction"
		"color_correction_volume"
		]
	"Commentary"
		[
		"commentary_auto"
		"point_commentary_node"
		]
	"Cubes"
		[
		"prop_monster_box"
		]
	"Fog"
		[
		"env_fog_controller"
		"fog_volume"
		]
	"Gameplay"
		[
		"env_hudhint"
		"env_instructor_hint"
		"env_message"
		"env_microphone"
		"env_portal_laser"
		"env_speaker"
		"func_button"
		"func_door"
		"func_door_rotating"
		"func_ladder"
		"func_ladderendpoint"
		"func_lookdoor"
		"func_noportal_volume"
		"func_portal_bumper"
		"func_rot_button"
		"func_useableladder"
		"func_weight_button"
		"game_text"
		"hot_potato"
		"hot_potato_catcher"
		"hot_potato_socket"
		"hot_potato_spawner"
		"info_coop_spawn"
		"info_ladder_dismount"
		"info_paint_sprayer"
		"info_player_deathmatch"
		"info_player_start"
		"info_target_instructor_hint"
		"linked_portal_door"
		"logic_active_autosave"
		"logic_autosave"
		"momentary_rot_button"
		"paint_sphere"
		"point_energy_ball_launcher"
		"point_futbol_shooter"
		"point_hurt"
		"point_laser_target"
		"point_message"
		"point_teleport"
		"point_worldtext"
		"projected_wall_entity"
		"prop_button"
		"prop_door_rotating"
		"prop_energy_ball"
		"prop_exploding_futbol"
		"prop_floor_ball_button"
		"prop_floor_button"
		"prop_floor_cube_button"
		"prop_glass_futbol"
		"prop_glass_futbol_socket"
		"prop_glass_futbol_spawner"
		"prop_laser_catcher"
		"prop_laser_relay"
		"prop_paint_bomb"
		"prop_rocket_tripwire"
		"prop_telescopic_arm"
		"prop_testchamber_door"
		"prop_tic_tac_toe_panel"
		"prop_under_button"
		"prop_under_floor_button"
		"prop_wall_projector"
		"trigger_autosave"
		"trigger_paint_cleanser"
		"trigger_portal_cleanser"
		"trigger_teleport"
		"trigger_teleport_relative"
		]
	"Hammer"
		[
		"hammer_notes"
		"hammer_updateignorelist"
		]
	"Instances"
		[
		"func_instance"
		]
	"Items"
		[
		"item_boots"
		"item_nugget"
		"item_paint_power_pickup"
		]
	"Lights"
		[
		"beam_spotlight"
		"env_cascade_light"
		"env_cubemap"
		"info_lighting_relative"
		"info_no_dynamic_shadow"
		"light"
		"light_environment"
		"light_spot"
		"parallax_obb"
		"point_spotlight"
		]
	"NPCs"
		[
		"ent_hover_turret_tether"
		"info_npc_spawn_destination"
		"monster_generic"
		"npc_bullseye"
		"npc_enemyfinder"
		"npc_heardanger"
		"npc_hover_turret"
		"npc_personality_core"
		"npc_rocket_turret"
		"npc_wheatley_boss"
		"prop_glados_core"
		"rocket_turret_projectile"
		]
	"Nodes"
		[
		"info_hint"
		]
	"Point Entities"
		[
		"aiscripted_schedule"
		"ambient_generic"
		"color_correction"
		"comp_choreo_sceneset"
		"comp_relay"
		"env_ambient_light"
		"env_beam"
		"env_blood"
		"env_cascade_light"
		"env_credits"
		"env_detail_controller"
		"env_dof_controller"
		"env_dustpuff"
		"env_effectscript"
		"env_entity_dissolver"
		"env_entity_igniter"
		"env_entity_maker"
		"env_explosion"
		"env_fade"
		"env_fire"
		"env_firesensor"
		"env_firesource"
		"env_fog_controller"
		"env_global"
		"env_glow"
		"env_gunfire"
		"env_laser"
		"env_lightglow"
		"env_lightrail_endpoint"
		"env_movieexplosion"
		"env_muzzleflash"
		"env_particle_performance_monitor"
		"env_particlelight"
		"env_particlescript"
		"env_physexplosion"
		"env_physimpact"
		"env_player_surface_trigger"
		"env_player_viewfinder"
		"env_portal_credits"
		"env_portal_path_track"
		"env_rockettrail"
		"env_rotorshooter"
		"env_screeneffect"
		"env_screenoverlay"
		"env_shake"
		"env_shooter"
		"env_smokestack"
		"env_smoketrail"
		"env_soundscape"
		"env_soundscape_proxy"
		"env_soundscape_triggerable"
		"env_spark"
		"env_splash"
		"env_sporeexplosion"
		"env_sprite"
		"env_sprite_clientside"
		"env_sprite_oriented"
		"env_spritetrail"
		"env_steam"
		"env_sun"
		"env_surface_teleport"
		"env_tilt"
		"env_tonemap_controller"
		"env_viewpunch"
		"env_wind"
		"env_zoom"
		"filter_activator_class"
		"filter_activator_context"
		"filter_activator_involume"
		"filter_activator_keyfield"
		"filter_activator_mass_greater"
		"filter_activator_model"
		"filter_activator_name"
		"filter_activator_surfacedata"
		"filter_activator_team"
		"filter_base"
		"filter_damage_type"
		"filter_enemy"
		"filter_multi"
		"filter_paint_power"
		"filter_player_held"
		"filter_velocity"
		"func_fish_pool"
		"func_instance_io_proxy"
		"func_instance_origin"
		"func_instance_parms"
		"func_monitor"
		"game_gib_manager"
		"game_globalvars"
		"game_player_equip"
		"game_ragdoll_manager"
		"game_ui"
		"game_weapon_manager"
		"generic_actor"
		"gibshooter"
		"info_camera_link"
		"info_constraint_anchor"
		"info_game_event_proxy"
		"info_landmark"
		"info_landmark_entry"
		"info_landmark_exit"
		"info_mass_center"
		"info_particle_system"
		"info_placement_helper"
		"info_player_ping_detector"
		"info_playtest_manager"
		"info_portal_gamerules"
		"info_projecteddecal"
		"info_target"
		"info_target_instructor_hint"
		"info_target_personality_sphere"
		"info_teleport_destination"
		"infodecal"
		"keyframe_rope"
		"keyframe_track"
		"light_environment"
		"logic_achievement"
		"logic_active_autosave"
		"logic_auto"
		"logic_autosave"
		"logic_branch"
		"logic_branch_listener"
		"logic_case"
		"logic_choreographed_scene"
		"logic_collision_pair"
		"logic_compare"
		"logic_console"
		"logic_context_accessor"
		"logic_convar"
		"logic_coop_manager"
		"logic_datadesc_accessor"
		"logic_entity_position"
		"logic_eventlistener"
		"logic_eventlistener_itemequip"
		"logic_format"
		"logic_gate"
		"logic_keyfield"
		"logic_lineto"
		"logic_measure_direction"
		"logic_measure_movement"
		"logic_modelinfo"
		"logic_multicompare"
		"logic_navigation"
		"logic_playerproxy"
		"logic_playmovie"
		"logic_random_outputs"
		"logic_register_activator"
		"logic_relay"
		"logic_relay_queue"
		"logic_scene_list_manager"
		"logic_script"
		"logic_sequence"
		"logic_timer"
		"logic_timescale"
		"material_modify_control"
		"math_bits"
		"math_clamp"
		"math_colorblend"
		"math_counter"
		"math_counter_advanced"
		"math_generate"
		"math_lightpattern"
		"math_mod"
		"math_remap"
		"math_vector"
		"move_keyframed"
		"move_rope"
		"move_track"
		"npc_maker"
		"npc_template_maker"
		"path_corner"
		"path_corner_crash"
		"path_track"
		"path_vphysics"
		"phys_ballsocket"
		"phys_constraint"
		"phys_constraintsystem"
		"phys_convert"
		"phys_hinge"
		"phys_keepupright"
		"phys_lengthconstraint"
		"phys_magnet"
		"phys_motor"
		"phys_pulleyconstraint"
		"phys_ragdollconstraint"
		"phys_ragdollmagnet"
		"phys_slideconstraint"
		"phys_spring"
		"phys_thruster"
		"phys_torque"
		"physics_cannister"
		"player_loadsaved"
		"player_speedmod"
		"player_weaponstrip"
		"point_anglesensor"
		"point_angularvelocitysensor"
		"point_bonusmaps_accessor"
		"point_camera"
		"point_changelevel"
		"point_clientcommand"
		"point_devshot_camera"
		"point_enable_motion_fixup"
		"point_entity_finder"
		"point_gamestats_counter"
		"point_paint_sensor"
		"point_playermoveconstraint"
		"point_proximity_sensor"
		"point_push"
		"point_servercommand"
		"point_survey"
		"point_teleport"
		"point_template"
		"point_tesla"
		"point_velocitysensor"
		"point_viewcontrol"
		"point_viewproxy"
		"portal_race_checkpoint"
		"portalmp_gamerules"
		"postprocess_controller"
		"prop_portal_stats_display"
		"prop_testchamber_sign"
		"scripted_scene"
		"scripted_sentence"
		"scripted_sequence"
		"scripted_target"
		"shadow_control"
		"sky_camera"
		"skybox_swapper"
		"spark_shower"
		"sunlight_shadow_control"
		"tanktrain_ai"
		"tanktrain_aitarget"
		"target_changegravity"
		"test_sidelist"
		"test_traceline"
		"trigger_soundscape"
		"vgui_level_placard_display"
		"vgui_movie_display"
		"vgui_mp_lobby_display"
		"vgui_neurotoxin_countdown"
		"vgui_screen"
		"vgui_slideshow_display"
		"vgui_world_text_panel"
		"water_lod_control"
		]
	"Postcompiler"
		[
		"comp_pack"
		"comp_pack_rename"
		"comp_pack_replace_soundscript"
		"comp_precache_model"
		"comp_precache_sound"
		"comp_prop_cable"
		"comp_prop_rope"
		"comp_propcombine_set"
		"comp_propcombine_volume"
		"comp_vactube_end"
		"comp_vactube_junction"
		"comp_vactube_object"
		"comp_vactube_spline"
		"comp_vactube_start"
		]
	"Tool Brushes"
		[
		"func_areaportal"
		"func_areaportalwindow"
		]
	"Weapons"
		[
		"weapon_cubemap"
		"weapon_paintgun"
		"weapon_portalgun"
		]
	"World Details"
		[
		"cycler"
		"cycler_actor"
		"env_texturetoggle"
		"info_overlay"
		"info_overlay_transition"
		"prop_detail"
		"prop_detail_sprite"
		"prop_dynamic"
		"prop_dynamic_glow"
		"prop_dynamic_ornament"
		"prop_dynamic_override"
		"prop_hallucination"
		"prop_indicator_panel"
		"prop_mirror"
		"prop_physics"
		"prop_physics_multiplayer"
		"prop_physics_override"
		"prop_physics_paintable"
		"prop_physics_ragdoll"
		"prop_physics_respawnable"
		"prop_ragdoll"
		"prop_sphere"
		"prop_static"
		"simple_physics_brush"
		"simple_physics_prop"
		]
	]
@AutoVisgroup = "Brush Entities"
	[
	"Breakables"
		[
		"func_breakable"
		"func_breakable_surf"
		]
	"Clips"
		[
		"func_clip_vphysics"
		"func_placement_clip"
		]
	"Conveyors"
		[
		"func_conveyor"
		]
	"Effects"
		[
		"env_bubbles"
		"env_embers"
		"func_dustcloud"
		"func_dustmotes"
		"func_precipitation"
		"func_precipitation_blocker"
		"func_smokevolume"
		]
	"Func Brush"
		[
		"func_brush"
		"func_wall"
		"func_wall_toggle"
		]
	"Illusionary"
		[
		"func_illusionary"
		]
	"LOD Brushes"
		[
		"func_lod"
		]
	"Moving Brushes"
		[
		"func_guntarget"
		"func_movelinear"
		"func_platrot"
		"func_rotating"
		"func_trackautochange"
		"func_trackchange"
		"func_tracktrain"
		"func_train"
		"func_traincontrols"
		"func_water"
		"func_water_analog"
		]
	"Physbox"
		[
		"func_physbox"
		"func_physbox_multiplayer"
		]
	"Tank"
		[
		"func_tank"
		"func_tanklaser"
		"func_tankmortar"
		"func_tankphyscannister"
		"func_tankpulselaser"
		"func_tanktrain"
		]
	"Triggers"
		[
		"comp_trigger_p2_goo"
		"func_portal_detector"
		"func_portal_orientation"
		"func_portalled"
		"trigger_autosave"
		"trigger_brush"
		"trigger_catapult"
		"trigger_changelevel"
		"trigger_gravity"
		"trigger_hierarchy"
		"trigger_hurt"
		"trigger_impact"
		"trigger_look"
		"trigger_momentum_promptinput"
		"trigger_ping_detector"
		"trigger_playermovement"
		"trigger_playerteam"
		"trigger_proximity"
		"trigger_push"
		"trigger_remove"
		"trigger_reversespeed"
		"trigger_serverragdoll"
		"trigger_setspeed"
		"trigger_softbarrier"
		"trigger_soundoperator"
		"trigger_teleport"
		"trigger_teleport_relative"
		"trigger_togglesave"
		"trigger_tonemap"
		"trigger_transition"
		"trigger_userinput"
		"trigger_vphysics_motion"
		"trigger_wind"
		]
	]
@AutoVisgroup = "Cubes"
	[
	"FrankenTurrets"
		[
		"prop_monster_box"
		]
	"Normal"
		[
		"prop_weighted_cube"
		]
	]
@AutoVisgroup = "Effects"
	[
	"Precipitation"
		[
		"func_precipitation"
		"func_precipitation_blocker"
		]
	]
@AutoVisgroup = "Gameplay"
	[
	"Autosaves"
		[
		"logic_active_autosave"
		"logic_autosave"
		"trigger_autosave"
		]
	"Broadcast"
		[
		"env_microphone"
		"env_speaker"
		]
	"Buttons"
		[
		"func_button"
		"func_rot_button"
		"func_weight_button"
		"momentary_rot_button"
		]
	"Buttons�"
		[
		"prop_button"
		"prop_floor_ball_button"
		"prop_floor_button"
		"prop_floor_cube_button"
		"prop_under_button"
		"prop_under_floor_button"
		]
	"Dis. Beams"
		[
		"env_portal_laser"
		"point_laser_target"
		"prop_laser_catcher"
		"prop_laser_relay"
		]
	"Doors"
		[
		"func_door"
		"func_door_rotating"
		"func_lookdoor"
		"prop_door_rotating"
		"prop_testchamber_door"
		]
	"Excursion Funnels"
		[
		"prop_tractor_beam"
		]
	"Fizzlers"
		[
		"trigger_paint_cleanser"
		"trigger_portal_cleanser"
		]
	"Funnel"
		[
		"env_funnel"
		]
	"Futbols"
		[
		"point_futbol_shooter"
		"prop_exploding_futbol"
		"prop_glass_futbol"
		"prop_glass_futbol_socket"
		"prop_glass_futbol_spawner"
		]
	"HEPs"
		[
		"point_energy_ball_launcher"
		"prop_energy_ball"
		]
	"Hot Potato"
		[
		"hot_potato"
		"hot_potato_catcher"
		"hot_potato_socket"
		"hot_potato_spawner"
		]
	"Ladders"
		[
		"func_ladder"
		"func_ladderendpoint"
		"func_useableladder"
		"info_ladder_dismount"
		]
	"Light Bridge"
		[
		"projected_wall_entity"
		"prop_wall_projector"
		]
	"Paint"
		[
		"info_paint_sprayer"
		"paint_sphere"
		"prop_paint_bomb"
		]
	"Player Spawn"
		[
		"info_coop_spawn"
		"info_player_deathmatch"
		"info_player_start"
		]
	"Portal Control"
		[
		"func_noportal_volume"
		"func_portal_bumper"
		]
	"Portals"
		[
		"prop_portal"
		]
	"Teleporters"
		[
		"linked_portal_door"
		"point_teleport"
		"trigger_teleport"
		"trigger_teleport_relative"
		]
	"Text/Hints"
		[
		"env_hudhint"
		"env_instructor_hint"
		"env_message"
		"game_text"
		"info_target_instructor_hint"
		"point_message"
		"point_worldtext"
		]
	]
@AutoVisgroup = "Items"
	[
	"Ammunition"
		[
		"item_paint_power_pickup"
		]
	]
@AutoVisgroup = "Lights"
	[
	"Cascade Light"
		[
		"env_cascade_light"
		]
	"Cubemaps"
		[
		"env_cubemap"
		"parallax_obb"
		]
	"Directional Light"
		[
		"light_directional"
		]
	"Dynamic"
		[
		"light_dynamic"
		]
	"Environment Light"
		[
		"env_cascade_light"
		"light_environment"
		]
	"Info Lighting"
		[
		"info_lighting_relative"
		"info_no_dynamic_shadow"
		]
	"Light FX"
		[
		"beam_spotlight"
		"point_spotlight"
		]
	"Omnidirectional Light"
		[
		"light"
		]
	"Proj. Texture"
		[
		"env_projectedtexture"
		]
	"Static"
		[
		"light"
		"light_environment"
		"light_spot"
		]
	]
@AutoVisgroup = "Moving Brushes"
	[
	"Train"
		[
		"func_trackautochange"
		"func_trackchange"
		"func_tracktrain"
		"func_train"
		"func_traincontrols"
		]
	]
@AutoVisgroup = "NPCs"
	[
	"Bullseyes"
		[
		"npc_bullseye"
		]
	"Cameras"
		[
		"npc_security_camera"
		]
	"Cores"
		[
		"npc_personality_core"
		"npc_wheatley_boss"
		"prop_glados_core"
		]
	"Furniture"
		[
		"npc_furniture"
		]
	"Hover Turret"
		[
		"ent_hover_turret_tether"
		"npc_hover_turret"
		]
	"Logical"
		[
		"npc_bullseye"
		"npc_enemyfinder"
		"npc_heardanger"
		]
	"Rocket Turrets"
		[
		"npc_rocket_turret"
		"rocket_turret_projectile"
		]
	"Security Camera"
		[
		"npc_security_camera"
		]
	"Turret"
		[
		"npc_portal_turret_floor"
		]
	"Wheatley"
		[
		"npc_wheatley_boss"
		]
	]
@AutoVisgroup = "Point Entities"
	[
	"Camera Control"
		[
		"point_viewcontrol"
		"point_viewproxy"
		]
	"Choreo Scenes"
		[
		"aiscripted_schedule"
		"comp_choreo_sceneset"
		"env_effectscript"
		"logic_choreographed_scene"
		"logic_scene_list_manager"
		"scripted_scene"
		"scripted_sentence"
		"scripted_sequence"
		]
	"Decals"
		[
		"info_projecteddecal"
		"infodecal"
		]
	"Effects�"
		[
		"env_beam"
		"env_blood"
		"env_dustpuff"
		"env_effectscript"
		"env_entity_dissolver"
		"env_entity_igniter"
		"env_explosion"
		"env_fire"
		"env_firesource"
		"env_glow"
		"env_gunfire"
		"env_laser"
		"env_lightglow"
		"env_lightrail_endpoint"
		"env_muzzleflash"
		"env_particlelight"
		"env_particlescript"
		"env_portal_path_track"
		"env_rockettrail"
		"env_rotorshooter"
		"env_shooter"
		"env_smokestack"
		"env_smoketrail"
		"env_spark"
		"env_splash"
		"env_sporeexplosion"
		"env_steam"
		"env_sun"
		"func_fish_pool"
		"info_particle_system"
		"point_tesla"
		"spark_shower"
		]
	"Filters"
		[
		"filter_activator_class"
		"filter_activator_context"
		"filter_activator_involume"
		"filter_activator_keyfield"
		"filter_activator_mass_greater"
		"filter_activator_model"
		"filter_activator_name"
		"filter_activator_surfacedata"
		"filter_activator_team"
		"filter_base"
		"filter_damage_type"
		"filter_enemy"
		"filter_multi"
		"filter_paint_power"
		"filter_player_held"
		"filter_velocity"
		]
	"Global FX"
		[
		"env_fade"
		"env_movieexplosion"
		"env_screeneffect"
		"env_screenoverlay"
		"env_shake"
		"env_tilt"
		"env_viewpunch"
		"env_zoom"
		"logic_playmovie"
		]
	"Globals"
		[
		"color_correction"
		"env_ambient_light"
		"env_cascade_light"
		"env_credits"
		"env_detail_controller"
		"env_dof_controller"
		"env_fog_controller"
		"env_global"
		"env_particle_performance_monitor"
		"env_player_surface_trigger"
		"env_player_viewfinder"
		"env_portal_credits"
		"env_surface_teleport"
		"env_tonemap_controller"
		"env_wind"
		"game_gib_manager"
		"game_globalvars"
		"game_ragdoll_manager"
		"game_weapon_manager"
		"info_landmark"
		"info_landmark_entry"
		"info_landmark_exit"
		"info_playtest_manager"
		"info_portal_gamerules"
		"light_environment"
		"logic_achievement"
		"logic_autosave"
		"logic_playerproxy"
		"player_speedmod"
		"player_weaponstrip"
		"point_bonusmaps_accessor"
		"point_changelevel"
		"point_clientcommand"
		"point_devshot_camera"
		"point_servercommand"
		"portalmp_gamerules"
		"postprocess_controller"
		"shadow_control"
		"sky_camera"
		"sunlight_shadow_control"
		"water_lod_control"
		]
	"Logic"
		[
		"comp_relay"
		"env_firesensor"
		"func_instance_io_proxy"
		"func_instance_origin"
		"func_instance_parms"
		"info_game_event_proxy"
		"logic_active_autosave"
		"logic_auto"
		"logic_autosave"
		"logic_branch"
		"logic_branch_listener"
		"logic_case"
		"logic_collision_pair"
		"logic_compare"
		"logic_console"
		"logic_context_accessor"
		"logic_convar"
		"logic_coop_manager"
		"logic_datadesc_accessor"
		"logic_entity_position"
		"logic_eventlistener"
		"logic_eventlistener_itemequip"
		"logic_format"
		"logic_gate"
		"logic_keyfield"
		"logic_lineto"
		"logic_measure_direction"
		"logic_measure_movement"
		"logic_modelinfo"
		"logic_multicompare"
		"logic_navigation"
		"logic_random_outputs"
		"logic_register_activator"
		"logic_relay"
		"logic_relay_queue"
		"logic_script"
		"logic_sequence"
		"logic_timer"
		"logic_timescale"
		"material_modify_control"
		"math_bits"
		"math_clamp"
		"math_colorblend"
		"math_counter"
		"math_counter_advanced"
		"math_generate"
		"math_lightpattern"
		"math_mod"
		"math_remap"
		"math_vector"
		"phys_convert"
		"point_anglesensor"
		"point_angularvelocitysensor"
		"point_entity_finder"
		"point_paint_sensor"
		"point_proximity_sensor"
		"point_teleport"
		"point_velocitysensor"
		"portal_race_checkpoint"
		]
	"Null"
		[
		"info_null"
		]
	"Paths"
		[
		"keyframe_track"
		"move_track"
		"path_corner"
		"path_corner_crash"
		"path_track"
		"path_vphysics"
		]
	"Physics"
		[
		"env_physexplosion"
		"env_physimpact"
		"info_constraint_anchor"
		"info_mass_center"
		"phys_ballsocket"
		"phys_constraint"
		"phys_constraintsystem"
		"phys_hinge"
		"phys_keepupright"
		"phys_lengthconstraint"
		"phys_magnet"
		"phys_motor"
		"phys_pulleyconstraint"
		"phys_ragdollconstraint"
		"phys_ragdollmagnet"
		"phys_slideconstraint"
		"phys_spring"
		"phys_thruster"
		"phys_torque"
		"physics_cannister"
		"point_enable_motion_fixup"
		"point_push"
		]
	"Player"
		[
		"env_player_surface_trigger"
		"env_player_viewfinder"
		"game_player_equip"
		"game_ui"
		"info_player_ping_detector"
		"player_speedmod"
		"player_weaponstrip"
		"point_playermoveconstraint"
		"target_changegravity"
		]
	"Ropes"
		[
		"keyframe_rope"
		"move_rope"
		]
	"Sounds"
		[
		"ambient_generic"
		"generic_actor"
		]
	"Soundscapes"
		[
		"env_soundscape"
		"env_soundscape_proxy"
		"env_soundscape_triggerable"
		"trigger_soundscape"
		]
	"Sprites"
		[
		"env_sprite"
		"env_sprite_clientside"
		"env_sprite_oriented"
		"env_spritetrail"
		]
	"Tanktrain"
		[
		"info_player_ping_detector"
		"tanktrain_ai"
		"tanktrain_aitarget"
		]
	"Targets"
		[
		"info_placement_helper"
		"info_target"
		"info_target_instructor_hint"
		"info_target_personality_sphere"
		"info_teleport_destination"
		"scripted_target"
		]
	"Templates"
		[
		"env_entity_maker"
		"npc_maker"
		"npc_template_maker"
		"point_template"
		]
	"Test"
		[
		"test_sidelist"
		"test_traceline"
		]
	"VGUI"
		[
		"func_monitor"
		"info_camera_link"
		"point_camera"
		"prop_portal_stats_display"
		"prop_testchamber_sign"
		"vgui_level_placard_display"
		"vgui_movie_display"
		"vgui_mp_lobby_display"
		"vgui_neurotoxin_countdown"
		"vgui_screen"
		"vgui_slideshow_display"
		"vgui_world_text_panel"
		]
	]
@AutoVisgroup = "Postcompiler"
	[
	"Coop Trigger"
		[
		"comp_trigger_coop"
		]
	"Ent Mover"
		[
		"comp_entity_mover"
		]
	"Entity Finder"
		[
		"comp_entity_finder"
		]
	"KV Setter"
		[
		"comp_kv_setter"
		]
	"Numeric Transition"
		[
		"comp_numeric_transition"
		]
	"Packing"
		[
		"comp_pack"
		"comp_pack_rename"
		"comp_pack_replace_soundscript"
		]
	"Precacher"
		[
		"comp_precache_model"
		"comp_precache_sound"
		]
	"Propcombine"
		[
		"comp_propcombine_set"
		"comp_propcombine_volume"
		]
	"Ropes�"
		[
		"comp_prop_cable"
		"comp_prop_rope"
		]
	"Sceneset"
		[
		"comp_choreo_sceneset"
		]
	"VScript Setter"
		[
		"comp_scriptvar_setter"
		]
	"Vactubes"
		[
		"comp_vactube_end"
		"comp_vactube_junction"
		"comp_vactube_object"
		"comp_vactube_spline"
		"comp_vactube_start"
		]
	]
@AutoVisgroup = "Tool Brushes"
	[
	"Areaportals"
		[
		"func_areaportal"
		"func_areaportalwindow"
		]
	"Occluders"
		[
		"func_occluder"
		]
	"Propcombine�"
		[
		"comp_propcombine_volume"
		]
	]
@AutoVisgroup = "Triggers"
	[
	"Death Triggers"
		[
		"comp_trigger_p2_goo"
		"trigger_hurt"
		]
	"Ent Destruction"
		[
		"trigger_remove"
		]
	"Force Triggers"
		[
		"trigger_catapult"
		"trigger_gravity"
		"trigger_impact"
		"trigger_push"
		"trigger_vphysics_motion"
		"trigger_wind"
		]
	"Level Transitions"
		[
		"trigger_changelevel"
		"trigger_transition"
		]
	"Player Movement Triggers"
		[
		"trigger_playermovement"
		"trigger_reversespeed"
		"trigger_setspeed"
		]
	"Portal Detectors"
		[
		"func_portal_detector"
		"func_portal_orientation"
		"func_portalled"
		]
	"Trigger Multiple"
		[
		"trigger_multiple"
		]
	"Trigger Once"
		[
		"trigger_once"
		]
	]
@AutoVisgroup = "World Details"
	[
	"Func Detail"
		[
		"func_detail"
		]
	"Overlays"
		[
		"env_texturetoggle"
		"info_overlay"
		"info_overlay_transition"
		"prop_indicator_panel"
		]
	"Props"
		[
		"cycler"
		"cycler_actor"
		"prop_detail"
		"prop_detail_sprite"
		"prop_dynamic"
		"prop_dynamic_glow"
		"prop_dynamic_ornament"
		"prop_dynamic_override"
		"prop_hallucination"
		"prop_mirror"
		"prop_physics"
		"prop_physics_multiplayer"
		"prop_physics_override"
		"prop_physics_paintable"
		"prop_physics_ragdoll"
		"prop_physics_respawnable"
		"prop_ragdoll"
		"prop_sphere"
		"prop_static"
		"simple_physics_brush"
		"simple_physics_prop"
		]
	]
@AutoVisgroup = "Logic"
	[
	"Sensors"
		[
		"env_firesensor"
		"info_game_event_proxy"
		"logic_eventlistener"
		"point_anglesensor"
		"point_angularvelocitysensor"
		"point_paint_sensor"
		"point_proximity_sensor"
		"point_velocitysensor"
		"portal_race_checkpoint"
		]
	]
@AutoVisgroup = "Props"
	[
	"Cycler"
		[
		"cycler"
		"cycler_actor"
		]
	"Dynamic�"
		[
		"prop_dynamic"
		"prop_dynamic_glow"
		"prop_dynamic_ornament"
		"prop_dynamic_override"
		]
	"Physics�"
		[
		"prop_physics"
		"prop_physics_multiplayer"
		"prop_physics_override"
		"prop_physics_paintable"
		"prop_physics_ragdoll"
		"prop_physics_respawnable"
		"prop_ragdoll"
		"prop_sphere"
		"simple_physics_brush"
		"simple_physics_prop"
		]
	"Prop Control"
		[
		"point_posecontroller"
		]
	"Static Lighting Origins"
		[
		"info_lighting"
		]
	"Static�"
		[
		"prop_detail"
		"prop_detail_sprite"
		"prop_static"
		]
	]
@AutoVisgroup = "Physics�"
	[
	"Ragdoll"
		[
		"prop_physics_ragdoll"
		"prop_ragdoll"
		]
	]

@BaseClass = Angles
	[
	angles(angle) : "Pitch Yaw Roll (Y Z X)" : "0 0 0" : "This entity's orientation in the world. Pitch is rotation around the Y axis, yaw is the rotation around the Z axis, roll is the rotation around the X axis."
	]

@BaseClass = BaseEffectBrush
	[
	targetname(target_source) : "Name" : : "The name that other entities refer to this entity by."
	globalname(string) : "Global Entity Name" : : "Name by which this entity is linked to another entity in a different map. When the player transitions to a new map, entities in the new map with globalnames matching entities in the previous map will have the previous map's state copied over their state."
	parentname(target_destination) : "Parent" : : "The name of this entity's parent in the movement hierarchy. Entities with parents move with their parent."
	parent_attachment_point(string) : "Attachment Point" : : "If set, attach to this attachment point on the parent during spawn."
	vscripts(scriptlist) : "Entity Scripts" : : "Name(s) of script files that are executed after all entities have spawned."
	thinkfunction(string) : "Script think function" : : "Name of a function in this entity's script scope which will be called automatically."
	linedivider_base(string) readonly : "----------------------------------------------------------------------------------------------------------"
	]

@BaseClass = BaseEntity
	[
	targetname(target_source) : "Name" : : "The name that other entities refer to this entity by."
	globalname(string) : "Global Entity Name" : : "Name by which this entity is linked to another entity in a different map. When the player transitions to a new map, entities in the new map with globalnames matching entities in the previous map will have the previous map's state copied over their state."
	vscripts(scriptlist) : "Entity Scripts" : : "Name(s) of script files that are executed after all entities have spawned."
	thinkfunction(string) : "Script think function" : : "Name of a function in this entity's script scope which will be called automatically."
	vscript_init_code(string) : "Init Code" : : "This code will be executed after the Entity Scripts option. Backtick ( ` ) characters will be converted to quotes in-game for strings."
	vscript_init_code2(string) : "Init Code 2" : : "This code will be the second line executed after the Entity Scripts option. Backtick ( ` ) characters will be converted to quotes in-game for strings. Additional Init Code keyvalues can be added with SmartEdit off."
	linedivider_base(string) readonly : "----------------------------------------------------------------------------------------------------------"

	// Inputs
	input Kill(void) : "Removes this entity from the world."
	input KillHierarchy(void) : "Removes this entity and all its children from the world."
	input AddOutput(string) : "Adds an entity I/O connection to this entity or changes keyvalues dynamically. Format:\n'<output name> <targetname>:<inputname>:<parameter>:<delay>:<max times to fire (-1 == infinite, 1 = only once)>'\nor 'keyvalue newval'. Very dangerous, use with care."
	input FireUser1(void) : "Causes this entity's OnUser1 output to be fired."
	input FireUser2(void) : "Causes this entity's OnUser2 output to be fired."
	input FireUser3(void) : "Causes this entity's OnUser3 output to be fired."
	input FireUser4(void) : "Causes this entity's OnUser4 output to be fired."
	input Use(void) : "More or less replicates the player interacting with an entity. (+USE)"
	input RunScriptFile(string) : "Execute a game script file from disk."
	input RunScriptCode(script) : "Execute a string of script source code. Backtick ( ` ) characters will be converted to quotes in-game for strings."
	input CallScriptFunction(string) : "Execute the given function name."
	input CancelPending(void) : "Cancels any events fired by this entity that are currently pending in the I/O event queue."
	input PassUser1(string) : "Causes this entity's OutUser1 output to be fired, passing along the parameter unchanged."
	input PassUser2(string) : "Causes this entity's OutUser2 output to be fired, passing along the parameter unchanged."
	input PassUser3(string) : "Causes this entity's OutUser3 output to be fired, passing along the parameter unchanged."
	input PassUser4(string) : "Causes this entity's OutUser4 output to be fired, passing along the parameter unchanged."
	input FireRandomUser(void) : "Fires OnUser1, OnUser2, OnUser3, or OnUser4 with a 25% chance of each."
	input PassRandomUser(string) : "Fires OutUser1, OutUser2, OutUser3, or OutUser4 with a 25% chance of each. The parameter is passed along unchanged."
	input KillIfNotVisible(void) : "Removes this entity if it is not in the player's viewcone."
	input KillWhenNotVisible(void) : "Removes this entity when it is not in the player's viewcone."
	input FireOutput(string) : "Fires the named output on this entity. Format: '<output name>:<activator>:<caller>:<parameter>:<delay>' (OnDeath:hl3cardgame:gaben). Everything beyond the output name is optional."
	input RemoveOutput(string) : "Removes all instances of the named output on this entity. Wildcards are supported, meaning you could just pass '*' to wipe all outputs from this entity."
	input AcceptInput(string) : "Fires the named input on this entity. Format: '<input name>:<parameter>:<activator>:<caller>:<output ID>' (SetTarget:cheese). Everything beyond the input name is optional. Mind the fact this is arranged differently from FireOutput, having the parameter right after the input name."
	input AddSpawnFlags(integer) : "Adds spawnflag(s) to this entity. Many spawnflags have their respective numbers suffixed in this FGD."
	input RemoveSpawnFlags(integer) : "Removes spawnflag(s) to this entity. Many spawnflags have their respective numbers suffixed in this FGD."
	input AddSolidFlags(integer) : "Adds solid flags to this entity."
	input RemoveSolidFlags(integer) : "Removes solid flags from this entity."
	input ChangeVariable(string) : "Similar to AddOutput, except it changes an internal variable similar to logic_datadesc_accessor instead. Very dangerous, use with care."
	input SetEntityName(target_destination) : "Sets this entity's name that other entities should refer to it by."
	input SetTarget(target_destination) : "Sets this entity's target. This is specific to certain entities, particularly logic entities that involve a target."
	input SetOwnerEntity(target_destination) : "Sets this entity's owner entity. This has nothing to do with parenting and has more to do with collision and kill credits."
	input SetThinkNull(void) : "Sets this entity's general think function to null. Behavior varies from entity to entity.."

	// Outputs
	output OnUser1(void) : "Fired in response to FireUser1 input."
	output OnUser2(void) : "Fired in response to FireUser2 input."
	output OnUser3(void) : "Fired in response to FireUser3 input."
	output OnUser4(void) : "Fired in response to FireUser4 input."
	output OutUser1(string) : "Fires in response to PassUser1 input, with the parameter passed through unchanged."
	output OutUser2(string) : "Fires in response to PassUser2 input, with the parameter passed through unchanged."
	output OutUser3(string) : "Fires in response to PassUser3 input, with the parameter passed through unchanged."
	output OutUser4(string) : "Fires in response to PassUser4 input, with the parameter passed through unchanged."
	]

@BaseClass = BaseEntityBrush
	[
	targetname(target_source) : "Name" : : "The name that other entities refer to this entity by."
	globalname(string) : "Global Entity Name" : : "Name by which this entity is linked to another entity in a different map. When the player transitions to a new map, entities in the new map with globalnames matching entities in the previous map will have the previous map's state copied over their state."
	origin(origin) : "Origin (X Y Z)" : : "The position of this brush entity's center in the world. Rotating entities typically rotate around their origin."
	parentname(target_destination) : "Parent" : : "The name of this entity's parent in the movement hierarchy. Entities with parents move with their parent."
	parent_attachment_point(string) : "Attachment Point" : : "If set, attach to this attachment point on the parent during spawn."
	linedivider_vscript(string) readonly : "-------------------------------------------------------------------------------------------------------"
	vscripts(scriptlist) : "Entity Scripts" : : "Name(s) of script files that are executed after all entities have spawned."
	thinkfunction(string) : "Script think function" : : "Name of a function in this entity's script scope which will be called automatically."
	vscript_init_code(string) : "Init Code" : : "This code will be executed after the Entity Scripts option. Backtick ( ` ) characters will be converted to quotes in-game for strings."
	vscript_init_code2(string) : "Init Code 2" : : "This code will be the second line executed after the Entity Scripts option. Backtick ( ` ) characters will be converted to quotes in-game for strings. Additional Init Code keyvalues can be added with SmartEdit off."
	linedivider_base(string) readonly : "----------------------------------------------------------------------------------------------------------"
	mins(vector) : "Minimum Bounding Box Size" : : "Co-ordinate of the minimum bounding box corner, relative to entity origin. The bounding box is drawn from this corner to the other one. Requires Bounding Box collisions (solid 2) to be used. Can be used to overwrite the collision shape of a brush, although it can only be a cuboid. Can be AddOutputed to change shape at runtime."
	maxs(vector) : "Maximum Bounding Box Size" : : "Co-ordinate of the maximum bounding box corner, relative to entity origin. The bounding box is drawn from this corner to the other one. Requires Bounding Box collisions (solid 2) to be used. Can be used to overwrite the collision shape of a brush, although it can only be a cuboid. Can be AddOutputed to change shape at runtime."
	solid(choices) : "Collisions" : 6 : "Method of collision for this entity. Can be changed at runtime with AddOutput." =
		[
		0: "None"
		1: "BSP (QPhysics)"
		2: "Bounding Box"
		3: "Oriented Bounding Box"
		4: "Oriented Bounding Box, constrained to Yaw only"
		5: "Custom (defined per-entity, if not defined the entity will have bizarre collision behavior)"
		6: "VPhysics"
		]

	linedivider_basebrush(string) readonly : "----------------------------------------------------------------------------------------------------------"

	// Inputs
	input Kill(void) : "Removes this entity from the world."
	input KillHierarchy(void) : "Removes this entity and all its children from the world."
	input SetParent(target_destination) : "Changes the entity's parent in the movement hierarchy."
	input SetParentAttachment(string) : "Change this entity to attach to a specific attachment point on its parent. Entities must be parented before being sent this input. The parameter passed in should be the name of the attachment."
	input SetParentAttachmentMaintainOffset(string) : "Change this entity to attach to a specific attachment point on it's parent. Entities must be parented before being sent this input. The parameter passed in should be the name of the attachment. The entity will maintain it's position relative to the parent at the time it is attached."
	input ClearParent(void) : "Removes this entity from the the movement hierarchy, leaving it free to move independently."
	input SetLocalAngles(vector) : "Sets the rotation of the entity relative to the parent's rotation."
	input SetLocalOrigin(vector) : "Sets the position of the entity relative to its parent if one exists. Otherwise relative to the world."
	input SetAbsAngles(vector) : "Set this entity's angles, always relative to the world origin."
	input AddOutput(string) : "Adds an entity I/O connection to this entity or changes keyvalues dynamically. Format:\n'<output name> <targetname>:<inputname>:<parameter>:<delay>:<max times to fire (-1 == infinite, 1 = only once)>'\nor 'keyvalue newval'. Very dangerous, use with care."
	input FireUser1(void) : "Causes this entity's OnUser1 output to be fired."
	input FireUser2(void) : "Causes this entity's OnUser2 output to be fired."
	input FireUser3(void) : "Causes this entity's OnUser3 output to be fired."
	input FireUser4(void) : "Causes this entity's OnUser4 output to be fired."
	input Use(void) : "More or less replicates the player interacting with an entity. (+USE)"
	input RunScriptFile(string) : "Execute a game script file from disk."
	input RunScriptCode(script) : "Execute a string of script source code. Backtick ( ` ) characters will be converted to quotes in-game for strings."
	input CallScriptFunction(string) : "Execute the given function name."
	input PassUser1(string) : "Causes this entity's OutUser1 output to be fired, passing along the parameter unchanged."
	input PassUser2(string) : "Causes this entity's OutUser2 output to be fired, passing along the parameter unchanged."
	input PassUser3(string) : "Causes this entity's OutUser3 output to be fired, passing along the parameter unchanged."
	input PassUser4(string) : "Causes this entity's OutUser4 output to be fired, passing along the parameter unchanged."
	input FireRandomUser(void) : "Fires OnUser1, OnUser2, OnUser3, or OnUser4 with a 25% chance of each."
	input PassRandomUser(string) : "Fires OutUser1, OutUser2, OutUser3, or OutUser4 with a 25% chance of each. The parameter is passed along unchanged."
	input KillIfNotVisible(void) : "Removes this entity if it is not in the player's viewcone."
	input KillWhenNotVisible(void) : "Removes this entity when it is not in the player's viewcone."
	input FireOutput(string) : "Fires the named output on this entity. Format: '<output name>:<activator>:<caller>:<parameter>:<delay>' (OnDeath:hl3cardgame:gaben). Everything beyond the output name is optional."
	input RemoveOutput(string) : "Removes all instances of the named output on this entity. Wildcards are supported, meaning you could just pass '*' to wipe all outputs from this entity."
	input AcceptInput(string) : "Fires the named input on this entity. Format: '<input name>:<parameter>:<activator>:<caller>:<output ID>' (SetTarget:cheese). Everything beyond the input name is optional. Mind the fact this is arranged differently from FireOutput, having the parameter right after the input name."
	input CancelPending(void) : "Cancels any events fired by this entity that are currently pending in the I/O event queue."
	input FreeChildren(void) : "Unparents all direct children of this entity."
	input SetLocalVelocity(vector) : "Sets this entity's current velocity."
	input SetLocalAngularVelocity(vector) : "Sets this entity's current angular velocity."
	input AddSpawnFlags(integer) : "Adds spawnflag(s) to this entity. Many spawnflags have their respective numbers suffixed in this FGD."
	input RemoveSpawnFlags(integer) : "Removes spawnflag(s) to this entity. Many spawnflags have their respective numbers suffixed in this FGD."
	input AddSolidFlags(integer) : "Adds solid flags to this entity."
	input RemoveSolidFlags(integer) : "Removes solid flags from this entity."
	input ChangeVariable(string) : "Similar to AddOutput, except it changes an internal variable similar to logic_datadesc_accessor instead. Very dangerous, use with care."
	input SetHealth(integer) : "Sets this entity's health."
	input AddHealth(integer) : "Adds to this entity's health."
	input RemoveHealth(integer) : "Removes from this entity's health."
	input SetMaxHealth(integer) : "Sets this entity's max health."
	input SetEntityName(target_destination) : "Sets this entity's name that other entities should refer to it by."
	input SetTarget(target_destination) : "Sets this entity's target. This is specific to certain entities, particularly logic entities that involve a target."
	input SetOwnerEntity(target_destination) : "Sets this entity's owner entity. This has nothing to do with parenting and has more to do with collision and kill credits."
	input SetThinkNull(void) : "Sets this entity's general think function to null. Behavior varies from entity to entity.."
	input Touch(target_destination) : "Simulates this entity touching the specified entity."

	// Outputs
	output OnUser1(void) : "Fired in response to FireUser1 input."
	output OnUser2(void) : "Fired in response to FireUser2 input."
	output OnUser3(void) : "Fired in response to FireUser3 input."
	output OnUser4(void) : "Fired in response to FireUser4 input."
	output OutUser1(string) : "Fires in response to PassUser1 input, with the parameter passed through unchanged."
	output OutUser2(string) : "Fires in response to PassUser2 input, with the parameter passed through unchanged."
	output OutUser3(string) : "Fires in response to PassUser3 input, with the parameter passed through unchanged."
	output OutUser4(string) : "Fires in response to PassUser4 input, with the parameter passed through unchanged."
	]

@BaseClass = BaseEntityPoint
	[
	targetname(target_source) : "Name" : : "The name that other entities refer to this entity by."
	globalname(string) : "Global Entity Name" : : "Name by which this entity is linked to another entity in a different map. When the player transitions to a new map, entities in the new map with globalnames matching entities in the previous map will have the previous map's state copied over their state."
	angles(angle) : "Pitch Yaw Roll (X Y Z)" : "0 0 0" : "This entity's orientation in the world. Roll is the rotation around the X axis, pitch is rotation around the Y axis and yaw is the rotation around the Z axis."
	parentname(target_destination) : "Parent" : : "The name of this entity's parent in the movement hierarchy. Entities with parents move with their parent."
	parent_attachment_point(string) : "Attachment Point" : : "If set, attach to this attachment point on the parent during spawn."
	linedivider_vscript(string) readonly : "-------------------------------------------------------------------------------------------------------" : : "VScript"
	vscripts(scriptlist) : "Entity Scripts" : : "Name(s) of script files that are executed after all entities have spawned."
	thinkfunction(string) : "Script think function" : : "Name of a function in this entity's script scope which will be called automatically."
	vscript_init_code(string) : "Init Code" : : "This code will be executed after the Entity Scripts option. Backtick ( ` ) characters will be converted to quotes in-game for strings."
	vscript_init_code2(string) : "Init Code 2" : : "This code will be the second line executed after the Entity Scripts option. Backtick ( ` ) characters will be converted to quotes in-game for strings. Additional Init Code keyvalues can be added with SmartEdit off."

	// Inputs
	input Kill(void) : "Removes this entity from the world."
	input KillHierarchy(void) : "Removes this entity and all its children from the world."
	input SetParent(target_destination) : "Changes the entity's parent in the movement hierarchy."
	input SetParentAttachment(string) : "Change this entity to attach to a specific attachment point on its parent. Entities must be parented before being sent this input. The parameter passed in should be the name of the attachment."
	input SetParentAttachmentMaintainOffset(string) : "Change this entity to attach to a specific attachment point on it's parent. Entities must be parented before being sent this input. The parameter passed in should be the name of the attachment. The entity will maintain it's position relative to the parent at the time it is attached."
	input ClearParent(void) : "Removes this entity from the the movement hierarchy, leaving it free to move independently."
	input SetLocalAngles(vector) : "Sets the rotation of the entity relative to the parent's rotation."
	input SetLocalOrigin(vector) : "Sets the position of the entity relative to its parent if one exists. Otherwise relative to the world."
	input SetAbsAngles(vector) : "Set this entity's angles, always relative to the world origin."
	input AddOutput(string) : "Adds an entity I/O connection to this entity or changes keyvalues dynamically. Format:\n'<output name> <targetname>:<inputname>:<parameter>:<delay>:<max times to fire (-1 == infinite, 1 = only once)>'\nor 'keyvalue newval'. Very dangerous, use with care."
	input FireUser1(void) : "Causes this entity's OnUser1 output to be fired."
	input FireUser2(void) : "Causes this entity's OnUser2 output to be fired."
	input FireUser3(void) : "Causes this entity's OnUser3 output to be fired."
	input FireUser4(void) : "Causes this entity's OnUser4 output to be fired."
	input Use(void) : "More or less replicates the player interacting with an entity. (+USE)"
	input RunScriptFile(string) : "Execute a game script file from disk."
	input RunScriptCode(script) : "Execute a string of script source code. Backtick ( ` ) characters will be converted to quotes in-game for strings."
	input CallScriptFunction(string) : "Execute the given function name."
	input PassUser1(string) : "Causes this entity's OutUser1 output to be fired, passing along the parameter unchanged."
	input PassUser2(string) : "Causes this entity's OutUser2 output to be fired, passing along the parameter unchanged."
	input PassUser3(string) : "Causes this entity's OutUser3 output to be fired, passing along the parameter unchanged."
	input PassUser4(string) : "Causes this entity's OutUser4 output to be fired, passing along the parameter unchanged."
	input FireRandomUser(void) : "Fires OnUser1, OnUser2, OnUser3, or OnUser4 with a 25% chance of each."
	input PassRandomUser(string) : "Fires OutUser1, OutUser2, OutUser3, or OutUser4 with a 25% chance of each. The parameter is passed along unchanged."
	input KillIfNotVisible(void) : "Removes this entity if it is not in a player's viewcone."
	input KillWhenNotVisible(void) : "Removes this entity when it is not in a player's viewcone. You can pass a time for when this should start."
	input FireOutput(string) : "Fires the named output on this entity. Format: '<output name>:<activator>:<caller>:<parameter>:<delay>' (OnDeath:hl3cardgame:gaben). Everything beyond the output name is optional."
	input RemoveOutput(string) : "Removes all instances of the named output on this entity. Wildcards are supported, meaning you could just pass '*' to wipe all outputs from this entity."
	input AcceptInput(string) : "Fires the named input on this entity. Format: '<input name>:<parameter>:<activator>:<caller>:<output ID>' (SetTarget:cheese). Everything beyond the input name is optional. Mind the fact this is arranged differently from FireOutput, having the parameter right after the input name."
	input CancelPending(void) : "Cancels any events fired by this entity that are currently pending in the I/O event queue."
	input FreeChildren(void) : "Unparents all direct children of this entity."
	input SetLocalVelocity(vector) : "Sets this entity's current velocity."
	input SetLocalAngularVelocity(vector) : "Sets this entity's current angular velocity."
	input AddSpawnFlags(integer) : "Adds spawnflag(s) to this entity. Many spawnflags have their respective numbers suffixed in this FGD."
	input RemoveSpawnFlags(integer) : "Removes spawnflag(s) to this entity. Many spawnflags have their respective numbers suffixed in this FGD."
	input AddSolidFlags(integer) : "Adds solid flags to this entity."
	input RemoveSolidFlags(integer) : "Removes solid flags from this entity."
	input ChangeVariable(string) : "Similar to AddOutput, except it changes an internal variable similar to logic_datadesc_accessor instead. Very dangerous, use with care."
	input SetHealth(integer) : "Sets this entity's health."
	input AddHealth(integer) : "Adds to this entity's health."
	input RemoveHealth(integer) : "Removes from this entity's health."
	input SetMaxHealth(integer) : "Sets this entity's max health."
	input SetEntityName(target_destination) : "Sets this entity's name that other entities should refer to it by."
	input SetTarget(target_destination) : "Sets this entity's target. This is specific to certain entities, particularly logic entities that involve a target."
	input SetOwnerEntity(target_destination) : "Sets this entity's owner entity. This has nothing to do with parenting and has more to do with collision and kill credits."
	input SetThinkNull(void) : "Sets this entity's general think function to null. Behavior varies from entity to entity.."
	input Touch(target_destination) : "Simulates this entity touching the specified entity."

	// Outputs
	output OnUser1(void) : "Fired in response to FireUser1 input."
	output OnUser2(void) : "Fired in response to FireUser2 input."
	output OnUser3(void) : "Fired in response to FireUser3 input."
	output OnUser4(void) : "Fired in response to FireUser4 input."
	output OutUser1(string) : "Fires in response to PassUser1 input, with the parameter passed through unchanged."
	output OutUser2(string) : "Fires in response to PassUser2 input, with the parameter passed through unchanged."
	output OutUser3(string) : "Fires in response to PassUser3 input, with the parameter passed through unchanged."
	output OutUser4(string) : "Fires in response to PassUser4 input, with the parameter passed through unchanged."
	]

@BaseClass = BaseFadeProp
	[
	fademindist(float) : "Start Fade Dist" : -1 : "Distance at which the prop starts to fade (<0 = use fademaxdist)."
	fademaxdist(float) : "End Fade Dist" : 0 : "Max fade distance at which the prop is visible (0 = don't fade out)."
	fadescale(float) : "Fade Scale" : 1 : "If you specify a fade in the worldspawn, then the engine will forcibly fade out props even if fademindist/fademaxdist isn't specified.This scale factor gives you some control over the fade. Using 0 here turns off the forcible fades. Numbers smaller than 1 cause the prop to fade out at further distances, and greater than 1 cause it to fade out at closer distances."
	]

@BaseClass = BaseLight
	[
	_light(color255) : "Brightness" : "255 255 255 200" : "Color and brightness of the light."
	_lighthdr(color255) : "BrightnessHDR" : "-1 -1 -1 1"
	_lightscalehdr(float) : "BrightnessScaleHDR" : 1 : "Amount to scale the light by when compiling for HDR."
	style(choices) : "Appearance" : 0 =
		[
		0: "Normal"
		10: "Fluorescent flicker"
		2: "Slow, strong pulse"
		11: "Slow pulse, noblack"
		5: "Gentle pulse"
		1: "Flicker A"
		6: "Flicker B"
		3: "Candle A"
		7: "Candle B"
		8: "Candle C"
		4: "Fast strobe"
		9: "Slow strobe"
		12: "Underwater light mutation"
		]

	pattern(string) : "Custom Appearance" : : "Set a custom pattern of light brightness for this light. Pattern format is a string of characters, where 'a' is total darkness, 'z' fully bright. i.e. 'aaggnnttzz' would be a steppy fade in from dark to light."
	fadetickinterval(float) : "Fade Tick Interval" : "0.1" : "The tick interval of the light's fade, in seconds. Lower values cause a faster fade."
	_constant_attn(string) : "Constant" : 0
	_linear_attn(string) : "Linear" : 0
	_quadratic_attn(string) : "Quadratic" : 1
	_fifty_percent_distance(string) : "50 percent falloff distance" : 0 : "Distance at which brightness should fall off to 50%. If set, overrides linear constant and quadratic paramaters."
	_zero_percent_distance(string) : "0 percent falloff distance" : 0 : "Distance at which brightness should fall off to negligible (1/256)%. Must set _fifty_percent_distance to use."
	_hardfalloff(integer) : "Hard Falloff" : 0 : "If set, causes lights to fall to exactly zero beyond the zero percent distance. May cause unrealistic lightijng if not used carefully."
	_distance(integer) : "Maximum Distance" : 0 : "The distance that light is allowed to cast."

	// Inputs
	input TurnOn(void) : "Turn the light on."
	input TurnOff(void) : "The the light off."
	input Toggle(void) : "Toggle the light's current state."
	input SetPattern(string) : "Set a custom pattern of light brightness for this light. Pattern format is a string of characters, where 'a' is total darkness, 'z' fully bright. i.e. 'aaggnnttzz' would be a steppy fade in from dark to light."
	input FadeToPattern(string) : "Fades from first value in old pattern, to first value in the new given pattern. Pattern format is a string of characters, where 'a' is total darkness, 'z' fully bright. i.e. 'aaggnnttzz' would be a steppy fade in from dark to light."
	input SetFadeInterval(float) : "Sets the fadetickinterval."
	input SetFadeSteps(float) : "Sets the amount of steps to use for fading."
	input FadeOn(float) : "Fades the light on using patterns. (Shortcut for FadeToPattern with z param). Parameter sets fade tick interval"
	input FadeOff(float) : "Fades the light off using patterns. (Shortcut for FadeToPattern with a param). Parameter sets fade tick interval"
	input FadeToggles(float) : "Fades the light on or  off using patterns depending on the current fade pattern (a or z)."
	]

@BaseClass = BasePaintType: "Paint Type property."
	[
	painttype(choices) : "Paint Type" : 0 : "The type of Gel created." =
		[
		0: "Repulsion Gel"
		1: "Reflection Gel"
		2: "Propulsion Gel"
		3: "Conversion Gel"
		4: "Cleansing Gel"
		5: "Adhesion Gel"
		]

	skin(choices) : "[H] Paint Type" : 0 : "The type of gel displayed in Hammer." =
		[
		0: "Repulsion Gel"
		1: "Reflection Gel"
		2: "Propulsion Gel"
		3: "Conversion Gel"
		4: "Cleansing Gel"
		5: "Adhesion Gel"
		]

	]

@BaseClass = DamageFilter
	[
	damagefilter(filterclass) : "Damage Filter" : : "Name of the filter entity that controls which entities can damage us."

	// Inputs
	input SetDamageFilter(target_destination) : "Sets the entity to use as damage filter. Pass in an empty string to clear the damage filter."
	]

@BaseClass = DamageType
	[
	damagetype(choices) : "Damage Type" : 0 : "Kind of damage to apply. These fields can be ORed together. " =
		[
		0: "Generic"
		1: "Crush"
		2: "Bullet"
		4: "Slash"
		8: "Burn"
		32: "Fall"
		64: "Blast"
		128: "Club"
		256: "Shock"
		512: "Sonic"
		1024: "Energy Beam"
		16384: "Drown (blue faded)"
		32768: "Paralyse"
		65536: "Nerve Gas"
		131072: "Poison"
		262144: "Radiation"
		524288: "Drowning recovery"
		1048576: "Acid"
		2097152: "Slow Burn"
		4194304: "Slowfreeze"
		8388608: "Gravity Gun"
		16777216: "Plasma"
		33554432: "Airboat"
		67108864: "Dissolve"
		134217728: "Blast Surface"
		268435456: "Direct"
		536870912: "Buckshot"
		]

	damageor1(choices) : "Damage Gibbing" : 0 : "Optional flags that can accompany the damage type." =
		[
		0: "Normal Behaviour"
		4096: "Never use gibs"
		8192: "Always gib if possible"
		]

	damageor2(choices) : "Prevent Physics Force" : 0 : "Prevent applying physics force to the target." =
		[
		0: "No"
		2048: "Yes"
		]

	]

@BaseClass = DetailPropBase
	[
	detailorientation(choices) : "Orientation" : 0 : "How the prop/sprite rotates to face the camera." =
		[
		0: "No rotation"
		1: "Screen Aligned"
		2: "Z axis only"
		]

	]

@BaseClass = EnableDisable
	[
	startdisabled(boolean) : "Start Disabled" : 0

	// Inputs
	input Enable(void) : "Enable this entity."
	input Disable(void) : "Disable this entity."
	]

@BaseClass = FadeDistance
	[
	fademindist(float) : "Start Fade Dist" : -1 : "Distance at which the prop starts to fade (<0 = use fademaxdist)."
	fademaxdist(float) : "End Fade Dist" : 0 : "Maximum distance at which the prop is visible (0 = don't fade out)."
	fadescale(float) : "Fade Scale" : 1 : "If you specify a fade in the worldspawn, or if the engine is running under low end/medium end, then the engine will forcibly fade out props even if fademindist/fademaxdist isn't specified. This scale factor gives you some control over the fade. Using 0 here turns off the forcible fades. Numbers smaller than 1 cause the prop to fade out at further distances, and greater than 1 cause it to fade out at closer distances."
	]

@BaseClass = KeyFrame
	[
	nextkey(target_destination) : "Next KeyFrame" : : "Name of the next keyframe along this keyframe path."
	movespeed(integer) : "Speed (units per second)" : 64
	]

@BaseClass = LinkedPortalDoor: "An entity that can be linked to another door and create a passage between them dynamically."
	[

	// Inputs
	input SetPartner(target_destination) : "Set a new partner door."
	input Open(void) : "Open the door and cause the portal to activate."
	input Close(void) : "Close the door and cause the portal to deactivate."

	// Outputs
	output OnOpen(void) : "Called when the door has started its open animation."
	output OnClose(void) : "Called when the door has started its close animation."
	output OnEntityTeleportFromMe(void) : "When any entity is teleported from this portal to the linked partner."
	output OnPlayerTeleportFromMe(void) : "When the player is teleported from this portal to the linked partner."
	output OnEntityTeleportToMe(void) : "When any entity is teleported from this linked partner to the portal."
	output OnPlayerTeleportToMe(void) : "When the player is teleported from this linked partner to the portal."
	]

@BaseClass = MasterEnt
	[
	master(target_destination) : "Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this entity will not activate."
	]

@BaseClass = Mover
	[
	positioninterpolator(choices) : "Position Interpolator" : 0 =
		[
		0: "Linear"
		1: "Catmull-Rom Spline"
		]

	]

@BaseClass = Node
	[
	nodeid(node_id) readonly : "Node ID"
	]

@BaseClass = Origin
	[
	origin(origin) : "Origin (X Y Z)" : : "The position of this entity's center in the world. Rotating entities typically rotate around their origin."
	]

@BaseClass = PortalBase
	[
	activated(choices) : "Start Activated" : 0 : "An inactive portal will not be drawn and will not teleport entities." =
		[
		0: "Inactive"
		1: "Active"
		]

	portaltwo(choices) : "Portal Number" : 0 : "Which of the pair is this portal?" =
		[
		0: "Portal 1 (Blue)"
		1: "Portal 2 (Orange)"
		]

	halfwidth(float) : "Half-Width of the Portal." : 0
	halfheight(float) : "Half-Height of the Portal." : 0

	// Outputs
	output OnPlacedSuccessfully(void) : "When a portal is placed without failure, this output is fired."
	output OnEntityTeleportFromMe(void) : "When any entity is teleported from this portal to the linked partner."
	output OnPlayerTeleportFromMe(void) : "When the player is teleported from this portal to the linked partner."
	output OnEntityTeleportToMe(void) : "When any entity is teleported from this linked partner to the portal."
	output OnPlayerTeleportToMe(void) : "When the player is teleported from this linked partner to the portal."
	]

@BaseClass = Reflection
	[
	linedivider_reflection(string) readonly : "----------------------------------------------------------------------------------------------------------" : : "Reflections"
	drawinfastreflection(boolean) : "Render in Fast Reflections" : 0 : "If enabled, causes this entity/prop to to render in fast water reflections (i.e. when a water material specifies $reflectonlymarkedentities) and in the world impostor pass."

	// Inputs
	input DisableDrawInFastReflection(void) : "Turns off rendering of this entity in reflections when using $reflectonlymarkedentities in water material."
	input EnableDrawInFastReflection(void) : "Turn on rendering of this entity in reflections when using $reflectonlymarkedentities in water material."
	]

@BaseClass = RenderFields
	[
	linedivider_anim(string) readonly : "----------------------------------------------------------------------------------------------------------" : : "Rendering"
	rendermode(choices) : "Render Mode" : 0 : "Used to set a non-standard rendering mode on this entity. See also 'FX Amount' and 'FX Color'.* Color & Texture = src*a+dest*(1-a)* Glow = src*a + dest, fixed on screen for sprites* Solid = Performs alphatest transparency* Additive = src*a + dest* Additive FF = blend between sprite nimation frames* Alpha Add = src + dest*(1-a)* World Space Glow = src*a + dest" =
		[
		0: "Normal"
		1: "Color"
		2: "Texture"
		3: "Glow"
		4: "Solid"
		5: "Additive"
		7: "Additive Fractional Frame"
		8: "Additive Alpha"
		9: "World Space Glow"
		10: "Don't Render"
		]

	rendercolor(color255) : "FX Color (R G B)" : "255 255 255" : "A color to mix with the model/sprite."
	renderamt(integer) : "FX Alpha (0 - 255)" : 255 : "Transparency amount, requires a Render Mode other than Normal. 0 is invisible, 255 is fully visible."
	renderfx(choices) : "Render FX" : 0 : "Various somewhat legacy alpha effects. Material Proxies are more modern." =
		[
		0: "Normal"
		1: "Slow Pulse"
		2: "Fast Pulse"
		3: "Slow Wide Pulse"
		4: "Fast Wide Pulse"
		9: "Slow Strobe"
		10: "Fast Strobe"
		11: "Faster Strobe"
		12: "Slow Flicker"
		13: "Fast Flicker"
		5: "Slow Fade Away"
		6: "Fast Fade Away"
		7: "Slow Become Solid"
		8: "Fast Become Solid"
		14: "Constant Glow"
		15: "Fade Out"
		16: "Fade In"
		17: "Pulse Fast Wider"
		18: "Glow Shell"
		]

	disablereceiveshadows(boolean) : "Disable Receiving Shadows" : 0
	viewhideflags(choices) : "View ID nodraw" : 0 : "This keyvalue can control whether an entity should only draw on things like monitors or mirrors, or the opposite. The code for this is { m_iViewHideFlags & (1 << CurrentViewID()) } and supports any combination of view IDs." =
		[
		0: "Draw normally"
		193: "Hide in main view (player's eyes)"
		36: "Hide in cameras"
		24: "Hide in mirrors/water"
		60: "Hide in cameras and mirrors/water"
		2: "Hide in 3D skybox"
		128: "Hide projected texture shadows"
		]


	// Inputs
	input Alpha(integer) : "Set the entity's alpha (0 - 255)."
	input Color(color255) : "Set the entity's color (R G B)."
	input SetRenderMode(integer) : "Sets this entity's render mode."
	input SetRenderFX(integer) : "Sets this entity's render FX."
	input SetViewHideFlags(integer) : "Sets this entity's view ID nodraw flags (takes raw flag combination)."
	input AddEffects(integer) : "Adds an entity effect."
	input RemoveEffects(integer) : "Removes an entity effect."
	input EnableDraw(void) : "Draws an entity if it is not drawn. Equivalent to RemoveEffects > 32."
	input DisableDraw(void) : "Undraws an entity if it is drawn. Equivalent to AddEffects > 32."
	input AddEFlags(integer) : "Adds an entity flag. NOTE: Entity flags are not the spawn flags you see in Hammer. Use AddSpawnFlags to add spawnflags."
	input RemoveEFlags(integer) : "Removes an entity flag. NOTE: Entity flags are not the spawn flags you see in Hammer. Use RemoveSpawnFlags to remove spawnflags."
	input SetCollisionGroup(integer) : "Sets this entity's collision group."
	]

@BaseClass = ResponseContext
	[
	responsecontext(string) : "Response Contexts" : : "Response system context(s) for this entity. Format should be: 'key:value,key2:value2,etc'. When this entity speaks, the list of keys & values will be passed to the response rules system."

	// Inputs
	input AddContext(string) : "Adds a context to this entity's list of response contexts. The format should be 'key:value'."
	input RemoveContext(string) : "Remove a context from this entity's list of response contexts. The name should match the 'key' of a previously added context."
	input ClearContext(void) : "Removes all contexts in this entity's list of response contexts."
	]

@BaseClass = SRCIndicator: "Adds an Indicator Name option to toggle overlays."
	[
	indicatorname(target_destination) : "Indicator Name" : : "Set to the name of a set of info_overlays to toggle when this is activated and deactivated. The name may also point to a prop_indicator_panel, which will also be toggled appropriately."

	// Inputs
	input SetTextureIndex(integer) : "Manually change the index of the overlays. prop_indicator_panels must not be used."
	]

@BaseClass = SetSkin
	[
	skin(integer) : "Skin" : 0 : "Some models have multiple versions of their textures, called skins. Set this to a number other than 0 to use that skin instead of the default."
	skinset(string) : "Used Skins" : : "Set this to a space seperated list of all the skin numbers which will be used by this ent ('0 4 8' for example). This allows auto-packing to skip unused ones. If blank all skins are assumed to be used."
	]

@BaseClass = StaticTargetName: "Targetnames only used in compilation."
	[
	targetname(target_source) : "Name" : : "The name that other entities refer to this entity by. This entity only exists during compilation, so the name is only usable in limited situations."
	]

@BaseClass = SystemLevelChoice
	[
	mincpulevel(choices) : "Minimum CPU Level" : 0 =
		[
		0: "default (low)"
		1: "low"
		2: "medium"
		3: "high"
		]

	maxcpulevel(choices) : "Maximum CPU Level" : 0 =
		[
		0: "default (high)"
		1: "low"
		2: "medium"
		3: "high"
		]

	mingpulevel(choices) : "Minimum GPU Level" : 0 =
		[
		0: "default (very low)"
		1: "very low"
		2: "low"
		3: "medium"
		4: "high"
		]

	maxgpulevel(choices) : "Maximum GPU Level" : 0 =
		[
		0: "default (high)"
		1: "very low"
		2: "low"
		3: "medium"
		4: "high"
		]

	]

@BaseClass = Toggle
	[

	// Inputs
	input Toggle(void) : "Toggle the enabled/disabled status of this entity."
	]

@BaseClass = ToggleDraw
	[

	// Inputs
	input DisableDraw(void) : "Add the EF_NODRAW flag to this entity. Some entities manage this on their own so be aware you can override that value."
	input EnableDraw(void) : "Remove the EF_NODRAW flag to this entity. Some entities manage this on their own so be aware you can override that value."
	]

@BaseClass = _Breakable
	[
	linedivider_breakable(string) readonly : "----------------------------------------------------------------------------------------------------------" : : "Health & Damage"
	explodedamage(float) : "Explosion Damage" : 0 : "If non-zero, when this entity breaks it will create an explosion that causes the specified amount of damage. See also 'Explosion Radius'."
	exploderadius(float) : "Explosion Radius" : 0 : "If non-zero, when this entity breaks it will create an explosion with a radius of the specified amount. See also 'Explosion Damage'."
	explodemagnitude(integer) : "Explode Magnitude" : 0 : "If non-zero, when this entity breaks it will create an explosion that causes the specified amount of damage."
	performancemode(choices) : "Performance Mode" : 0 : "Used to limit the amount of gibs produced when this entity breaks, for performance reasons." =
		[
		0: "Normal"
		1: "No Gibs"
		2: "Full Gibs on All Platforms"
		3: "Reduced gibs"
		]

	pressuredelay(float) : "Pressure Delay" : 0 : "Delay, in seconds, after 'broken' by pressure before breaking apart (allows for sound to play before breaking apart)."
	minhealthdmg(integer) : "Minimum Damage to Hurt" : 0 : "The entity will ignore any damage events if the damage is less than this amount."
	health(integer) : "Health" : 0 : "Number of points of damage to take before breaking. 0 means don't break."
	physdamagescale(float) : "Physics Impact Damage Scale" : "1.0" : "Scales damage energy when this object is hit by a physics object. Set to 1.0 for materials as strong as flesh, smaller numbers indicate stronger materials."

	// Inputs
	input Break(void) : "Breaks the breakable."
	input SetHealth(integer) : "Sets a new value for the breakable's health. If the breakable's health reaches zero it will break."
	input AddHealth(integer) : "Adds health to the breakable. If the breakable's health reaches zero it will break."
	input RemoveHealth(integer) : "Removes health from the breakable. If the breakable's health reaches zero it will break."
	input EnablePhyscannonPickup(void) : "Makes the breakable able to picked up by the physcannon."
	input DisablePhyscannonPickup(void) : "Makes the breakable not able to picked up by the physcannon."
	input SetMass(float) : "Set mass of this object."

	// Outputs
	output OnBreak(void) : "Fired when this breakable breaks."
	output OnTakeDamage(void) : "Fired each time this breakable takes any damage."
	output OnHealthChanged(float) : "Fired when the health of this breakable changes, passing the new value of health as a percentage of max health, from [0..1]."
	output OnPhysCannonDetach(void) : "Fired when the physcannon has ripped this breakable off of the wall. Only fired if ACT_PHYSCANNON_DETACH is defined in the model this breakable is using."
	output OnPhysCannonAnimatePreStarted(void) : "Fired when this prop starts playing the Pre physcannon-pull activity, caused by the player trying to grab this prop with the physcannon. Only fired if the ACT_PHYSCANNON_ANIMATE_PRE activity is defined in the model this breakable is using."
	output OnPhysCannonAnimatePullStarted(void) : "Fired when this prop starts playing the physcannon-pull activity, caused by the player trying to grab this prop with the physcannon. Only fired if the ACT_PHYSCANNON_ANIMATE activity is defined in the model this breakable is using. If the prop has Pre pull anim, this will be fired after the Pre anim has finished playing."
	output OnPhysCannonPullAnimFinished(void) : "Fired when this prop has finished playing the physcannon-pull activity, caused by the player trying to grab this prop with the physcannon. Only fired if the ACT_PHYSCANNON_ANIMATE activity is defined in the model this breakable is using. If the prop has Pre & Post pull anims, this will be fired after the Post anim has finished playing."
	output OnPhysCannonAnimatePostStarted(void) : "Fired when this prop starts playing the Post physcannon-pull activity. Only fired if the ACT_PHYSCANNON_ANIMATE_POST activity is defined in the model this breakable is using."
	]

@PointClass 
	iconsprite("editor/comp_entity_finder")
	sphere(radius)
	cylinder(255 255 255, targetname, targetref, radius)
	line(255 255 255, targetname, kv1_known)
	line(255 255 255, targetname, kv2_known)
	line(255 255 255, targetname, kv3_known)
	line(255 255 255, targetname, kv4_known)
	line(255 255 255, targetname, kv5_known)
= comp_entity_finder: "Finds the closest entity of a given type, then applies various transformations.Outputs from this entity will be moved to the found entity.Further keyvalues can be set manually with SmartEdit off."
	[
	targetname(target_source) readonly : "Targetname" : "<pack_rename>" : "Fake targetname, used to determine how containing instances are configured."
	targetcls(string) : "Target Classname" : : "Classnames of the entity to find. Multiple classnames can be specified seperated by spaces."
	radius(float) : "Search Radius" : 64 : "Radius to search inside, or 0 for infinite."
	searchfov(float) : "Search Field Of View" : 180 : "The found entity must be within this many degrees of the direction of the finder."
	angles(angle) : "Search Direction" : "0 0 0" : "If Search FOV is used, the direction to compare to."
	targetref(target_destination) : "Reference position" : : "If set, look for entities close to this entity instead of the comp_entity_finder."
	blacklist(target_destination) : "Search Blacklist" : : "If set, ignore entities matching this name."
	teleporttarget(boolean) : "Teleport Target To Me" : 0 : "Move the found entity to the location of this entity or that of the reference."
	makeunique(boolean) : "Make Target Unique" : 0 : "Append a numeric suffix to the target's name to make it unique."
	sep1(string) readonly : "----------------------------------------------------------------------------------------------------------"
	kv1_mode(choices) : "1 - Mode" : : "The first modification to perform. For Replace Outputs, outputs sent to a !name specified in Destination will be switched to point to the found entity." =
		[
		"": "None"
		"const2target": "Constant -> Target Ent KV"
		"const2known": "Constant -> Known Ent KV"
		"known2target": "Known Ent KV -> Target Ent KV"
		"target2known": "Target Ent KV -> Known Ent KV"
		"replacetarget": "Replace Outputs"
		]

	kv1_known(target_destination) : "1 - Known Entity" : : "The known entity to access."
	kv1_src(string) : "1 - Source" : : "Constant value to use or keyvalue name to read from."
	kv1_dest(string) : "1 - Destination" : : "Keyvalue name to write to or !special name to replace."
	sep2(string) readonly : "----------------------------------------------------------------------------------------------------------"
	kv2_mode(choices) : "2 - Mode" : : "The second modification to perform. For Replace Outputs, outputs sent to a !name specified in Destination will be switched to point to the found entity." =
		[
		"": "None"
		"const2target": "Constant -> Target KV"
		"const2known": "Constant -> Known KV"
		"known2target": "Known KV -> Target KV"
		"target2known": "Target KV -> Known KV"
		"replacetarget": "Replace Outputs"
		]

	kv2_known(target_destination) : "2 - Known Entity" : : "The known entity to access."
	kv2_src(string) : "2 - Source" : : "Constant value or keyvalue name to read from."
	kv2_dest(string) : "2 - Destination" : : "Keyvalue name to write to or !special name to replace."
	sep3(string) readonly : "----------------------------------------------------------------------------------------------------------"
	kv3_mode(choices) : "3 - Mode" : : "The third modification to perform. For Replace Outputs, outputs sent to a !name specified in Destination will be switched to point to the found entity." =
		[
		"": "None"
		"const2target": "Constant -> Target KV"
		"const2known": "Constant -> Known Ent KV"
		"known2target": "Known KV -> Target KV"
		"target2known": "Target KV -> Known KV"
		"replacetarget": "Replace Outputs"
		]

	kv3_known(target_destination) : "3 - Known Entity" : : "The known entity to access."
	kv3_src(string) : "3 - Source" : : "Constant value or keyvalue name to read from."
	kv3_dest(string) : "3 - Destination" : : "Keyvalue name to write to or !special name to replace."
	sep4(string) readonly : "----------------------------------------------------------------------------------------------------------"
	kv4_mode(choices) : "4 - Mode" : : "The fourth modification to perform. For Replace Outputs, outputs sent to a !name specified in Destination will be switched to point to the found entity." =
		[
		"": "None"
		"const2target": "Constant -> Target KV"
		"const2known": "Constant -> Known Ent KV"
		"known2target": "Known KV -> Target KV"
		"target2known": "Target KV -> Known KV"
		"replacetarget": "Replace Outputs"
		]

	kv4_known(target_destination) : "4 - Known Entity" : : "The known entity to access."
	kv4_src(string) : "4 - Source" : : "Constant value or keyvalue name to read from."
	kv4_dest(string) : "4 - Destination" : : "Keyvalue name to write to or !special name to replace."
	sep5(string) readonly : "----------------------------------------------------------------------------------------------------------"
	kv5_mode(choices) : "5 - Mode" : : "The fifth modification to perform. For Replace Outputs, outputs sent to a !name specified in Destination will be switched to point to the found entity." =
		[
		"": "None"
		"const2target": "Constant -> Target KV"
		"const2known": "Constant -> Known Ent KV"
		"known2target": "Known KV -> Target KV"
		"target2known": "Target KV -> Known KV"
		"replacetarget": "Replace Outputs"
		]

	kv5_known(target_destination) : "5 - Known Entity" : : "The known entity to access."
	kv5_src(string) : "5 - Source" : : "Constant value or keyvalue name to read from."
	kv5_dest(string) : "5 - Destination" : : "Keyvalue name to write to or !special name to replace."

	// Outputs
	output OutName(void) : "Needed to allow Hammer to add outputs to this."
	]

@PointClass 
	iconsprite("editor/comp_entity_mover")
	sphere(distance)
	line(255 255 255, targetname, target)
= comp_entity_mover: "Shift an entity by a given amount. This is useful to place entities into the void, for example."
	[
	target(target_destination) : "Target Entity" : : "The name of the entity or entities to move."
	reference(target_destination) : "Reference Entity" : : "If set, the target will be offset by the amount that this entity is from the reference. The Distance will then be a multiplier."
	direction(angle) : "Direction" : "0 0 0" : "If no Reference is provided, the direction to move in."
	distance(float) : "Distance" : 1 : "The amount to move targets by."
	]

@PointClass 
	iconsprite("editor/comp_pack")
= comp_pack: "Explicitly identify resources to pack into the map. If more are needed, add additional keyvalues with SmartEdit off."
	[
	generic1(string) : "Generic" : : "Pack a file, starting in any of the content folders."
	generic2(string) : "Generic" : : "Pack a file, starting in any of the content folders."
	generic3(string) : "Generic" : : "Pack a file, starting in any of the content folders."
	generic4(string) : "Generic" : : "Pack a file, starting in any of the content folders."
	generic5(string) : "Generic" : : "Pack a file, starting in any of the content folders."
	sound1(sound) : "Sound" : : "Pack a raw sound file or a soundscript."
	sound2(sound) : "Sound" : : "Pack a raw sound file or a soundscript."
	sound3(sound) : "Sound" : : "Pack a raw sound file or a soundscript."
	sound4(sound) : "Sound" : : "Pack a raw sound file or a soundscript."
	sound5(sound) : "Sound" : : "Pack a raw sound file or a soundscript."
	model1(studio) : "Model" : : "Pack a model."
	model2(studio) : "Model" : : "Pack a model."
	model3(studio) : "Model" : : "Pack a model."
	model4(studio) : "Model" : : "Pack a model."
	model5(studio) : "Model" : : "Pack a model."
	material1(material) : "Material" : : "Pack a material."
	material2(material) : "Material" : : "Pack a material."
	material3(material) : "Material" : : "Pack a material."
	material4(material) : "Material" : : "Pack a material."
	material5(material) : "Material" : : "Pack a material."
	particle1(particlesystem) : "Particle" : : "Pack a particle system, and include in the manifest."
	particle2(particlesystem) : "Particle" : : "Pack a particle system, and include in the manifest."
	particle3(particlesystem) : "Particle" : : "Pack a particle system, and include in the manifest."
	particle4(particlesystem) : "Particle" : : "Pack a particle system, and include in the manifest."
	particle5(particlesystem) : "Particle" : : "Pack a particle system, and include in the manifest."
	soundscript1(string) : "SoundScript" : : "Pack a soundscript file, and include in the manifest."
	soundscript2(string) : "SoundScript" : : "Pack a soundscript file, and include in the manifest."
	soundscript3(string) : "SoundScript" : : "Pack a soundscript file, and include in the manifest."
	soundscript4(string) : "SoundScript" : : "Pack a soundscript file, and include in the manifest."
	soundscript5(string) : "SoundScript" : : "Pack a soundscript file, and include in the manifest."
	]

@PointClass 
	iconsprite("editor/comp_pack_rename")
= comp_pack_rename: "Pack a file into the BSP, under a different name than it starts with."
	[
	filesrc(string) : "Source Filename" : : "Filename to read data from."
	filedest(string) : "Destination Filename" : : "Filename to pack under."
	filetype(choices) : "File Type" : "GENERIC" : "File type to record it as." =
		[
		"GENERIC": "Generic"
		"SOUNDSCRIPT": "SoundScript file (add to manifest)"
		"PARTICLE_FILE": "Particle System (add to manifest)"
		"VSCRIPT_SQUIRREL": "VScript (Squirrel)"
		"MATERIAL": "Material"
		"TEXTURE": "Texture"
		"MODEL": "Model"
		]

	]

@PointClass 
	iconsprite("editor/comp_pack_replace_soundscript")
= comp_pack_replace_soundscript: "Replace a soundscript with a different one."
	[
	original(string) : "Original SoundScript" : : "Prevent this soundscript from being included."
	replacement(string) : "New SoundScript" : : "Force this soundscript to be included."
	]

@PointClass 
	iconsprite("editor/comp_precache_sound")
= comp_precache_sound: "Force a specific sound to load, for runtime switching. Duplicates will be removed. More keyvalues can be added."
	[
	sound1(sound) : "Sound" : : "Pack and precache a raw sound file or a soundscript."
	sound2(sound) : "Sound" : : "Pack and precache a raw sound file or a soundscript."
	sound3(sound) : "Sound" : : "Pack and precache a raw sound file or a soundscript."
	sound4(sound) : "Sound" : : "Pack and precache a raw sound file or a soundscript."
	sound5(sound) : "Sound" : : "Pack and precache a raw sound file or a soundscript."
	sound6(sound) : "Sound" : : "Pack and precache a raw sound file or a soundscript."
	sound7(sound) : "Sound" : : "Pack and precache a raw sound file or a soundscript."
	sound8(sound) : "Sound" : : "Pack and precache a raw sound file or a soundscript."
	sound9(sound) : "Sound" : : "Pack and precache a raw sound file or a soundscript."
	sound10(sound) : "Sound" : : "Pack and precache a raw sound file or a soundscript."
	]

@SolidClass = comp_propcombine_volume: "Specifies a group of props that will be combined together. Note that unlike the propcombine_set point-entity version, this does impact some brush limits, so it is suggested to use the point version in instances and prefabs."
	[
	name(string) : "Name" : : "Two sets with the same name will be treated as one."
	prop(studio) : "Group Model" : : "If set, a combinable model used to define which others will be combined."
	skin(integer) : "Group Skin" : 0 : "The skin for the Group Model."
	]

@PointClass 
	studioprop()
= comp_vactube_object: "Registers objects that can appear in the tubing."
	[
	model(studio) : "Vac Model" : : "Specifies the model used while in the vactube."
	skin(integer) : "Vac Skin" : : "Skin for the vactube model."
	offset(vecline) : "Offset" : : "The centerpoint of the model for positioning. Position this at the center of the model to ensure it doesn't stick out of the tube."
	weight(integer) : "Weight" : 1 : "The number of extra 'chances' for this to spawn. This works like a lottery - each cube has this many 'tickets', and then one is chosen randomly each time. If you have two choices with a weight of 9 and 1, the first will be chosen 90% of the time."
	group(string) : "Group" : : "A vactube will only spawn objects with the same group name as it, so multiple vactubes can be set to have a different mix of items."
	tv_skin(choices) : "TV Skin" : 0 : "The skin to display on scanner TVs." =
		[
		0: "Blank"
		1: "Chair"
		2: "Table"
		3: "Cube"
		4: "Hover turret / Core / Sphere"
		5: "Turret"
		6: "Boxed Turret"
		]

	cube_model(studio) : "Cube Model" : : "If set, this object can be spawned in droppers. This should be the model used on the real cube version so they can be matched to each other."
	cube_skin(integer) : "Cube Skin" : 0 : "The specific skin to detect on the real cubes."
	]

@PointClass 
	color(0 0 255)
	sidelist()
	iconsprite("editor/env_cubemap.vmt")
	line(255 255 255, targetname, parallaxobb)
= env_cubemap: "An entity that creates a sample point for the Cubic Environment Map."
	[
	cubemapsize(choices) : "Cubemap Size" : 0 =
		[
		0: "Default"
		1: "1x1"
		2: "2x2"
		3: "4x4"
		4: "8x8"
		5: "16x16"
		6: "32x32"
		7: "64x64"
		8: "128x128"
		9: "256x256"
		]

	sides(sidelist) : "Brush faces" : : "(Optional) Brushes faces to directly attach to the env_cubemap. Press Pick then click on faces in the 3D View to select them. Use CTRL while clicking to add or remove from the selection."
	parallaxobb(target_destination) : "Cubemap Bounds" : : "Optionally assigns this cubemap a bounding box for parallax correction (brush entity tied to parallax_obb). This means the cubemap reflection will move as the camera moves, similar to func_reflective_glass. "
	]

@SolidClass 
	color(0 180 0)
= func_detail: "An entity that turns its brushes into detail brushes. Detail brushes do NOT contribute to visibility in the PVS. World geometry is not clipped to detail brushes, so if you have a small detail clump attached to a wall, the wall won't be cut up by the detail brush. func_detail is great for high-frequency brush geometry that's visual detail only. It is also ideal for reducing map VIS time."
	[
	]

@SolidClass = func_detail_blocker: "A brush entity that prevents detail sprites from being placed inside its volume."
	[
	]

@PointClass 
	sphere(max_range)
	iconsprite("editor/ficool2/func_fish_pool")
= func_fish_pool: "Creates a school of interactive fish that swim near this entity."
	[
	model(studio) : "World model" : "models/Junkola.mdl"
	fish_count(integer) : "Fish Count" : 10 : "Number of Fish in this Pool"
	max_range(float) : "Max Range" : 150 : "How far away a Fish can wander (max 255)"
	]

@PointClass 
	iconsprite("editor/func_instance_io_proxy.vmt")
= func_instance_io_proxy: "Place one copy of this entity inside of an instance.  Sending messages to entities inside the instance from the Proxy's OnProxyRelay output will allow you to trigger these entities from outside the instance by sending messages to the func_instance.  Send the ProxyRelay message from entities inside the instance to the proxy and you will be able to use these events to send messages to other entities outside the instance from the func_instance. NOTE: The instance, the proxy, and all entities involved should be named descriptively."
	[
	targetname(target_source) : "Name" : "proxy" : "The name that other entities refer to this entity by."

	// Inputs
	input ProxyRelay(string) : "This message will get relayed and will be available from the instance."
	input ProxyRelay1(string) : "Added by the compiler, this is used internally to connect the outputs."
	input ProxyRelay2(string) : "Added by the compiler, this is used internally to connect the outputs."
	input ProxyRelay3(string) : "Added by the compiler, this is used internally to connect the outputs."
	input ProxyRelay4(string) : "Added by the compiler, this is used internally to connect the outputs."
	input ProxyRelay5(string) : "Added by the compiler, this is used internally to connect the outputs."

	// Outputs
	output OnProxyRelay(void) : "A message from outside can trigger this to cause something to happen in the instance."
	]

@PointClass 
	iconsprite("editor/func_instance_origin.vmt")
= func_instance_origin: "This is the center of the instance for rotation."
	[
	]

@PointClass 
	iconsprite("editor/func_instance_parms.vmt")
= func_instance_parms: "Place one copy of this entity inside of an instance.  Whenever you add a $parameter for the instance, get the properties of this entity.  It will auto-populate it with the variables and allow you to indicate the variable type."
	[
	parm1(instance_parm) : "Parm (01)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm2(instance_parm) : "Parm (02)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm3(instance_parm) : "Parm (03)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm4(instance_parm) : "Parm (04)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm5(instance_parm) : "Parm (05)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm6(instance_parm) : "Parm (06)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm7(instance_parm) : "Parm (07)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm8(instance_parm) : "Parm (08)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm9(instance_parm) : "Parm (09)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm10(instance_parm) : "Parm (10)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm11(instance_parm) : "Parm (11)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm12(instance_parm) : "Parm (12)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm13(instance_parm) : "Parm (13)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm14(instance_parm) : "Parm (14)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm15(instance_parm) : "Parm (15)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm16(instance_parm) : "Parm (16)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm17(instance_parm) : "Parm (17)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm18(instance_parm) : "Parm (18)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm19(instance_parm) : "Parm (19)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm20(instance_parm) : "Parm (20)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm21(instance_parm) : "Parm (21)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm22(instance_parm) : "Parm (22)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm23(instance_parm) : "Parm (23)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm24(instance_parm) : "Parm (24)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm25(instance_parm) : "Parm (25)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm26(instance_parm) : "Parm (26)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm27(instance_parm) : "Parm (27)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm28(instance_parm) : "Parm (28)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm29(instance_parm) : "Parm (29)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	parm30(instance_parm) : "Parm (30)" : : "This is a parameter.  It goes in the form of $variable type [default value]."
	]

@SolidClass = func_ladder: "Ladder. Players will be able to freely along one side of this brush, as if it was a ladder. If you are using a model prop for the visual representation of the ladder in the map, apply the toolsinvisibleladder material to the climbable side of the func_ladder brush."
	[
	]

@SolidClass 
	color(180 180 0)
= func_viscluster: "Any visleafs touching this brush will assume they can see each other. Place across large open areas to help reduce compile times. Use sparingly, can create lag if you're not careful!"
	[
	]

@PointClass 
	iconsprite("editor/ts_book.vmt")
	line(255 255 255, targetname, linename1)
	line(255 0 0, targetname, linename2)
	line(0 255 0, targetname, linename3)
	line(0 0 255, targetname, linename4)
	worldtext()
= hammer_notes: "Fake entity to store notes and comments inside. Won`t spawn."
	[
	message(string) : "Display Message" : : "Text to display in the 3D view."
	textsize(float) : "Text Size" : 10 : "Text Size."
	color(color255) : "Color" : "255 255 255"
	linename1(target_destination) : "White Related Entity" : : "Add entity names to have lines drawn to them."
	linename2(target_destination) : "Red Related Entity" : : "Add entity names to have lines drawn to them."
	linename3(target_destination) : "Green Related Entity" : : "Add entity names to have lines drawn to them."
	linename4(target_destination) : "Blue Related Entity" : : "Add entity names to have lines drawn to them."
	mat(material) : "Material Chooser" : : "Has the material browser for easier editing."
	part(particlesystem) : "Particle Chooser" : : "Has the particle system chooser for easier editing."
	model(studio) : "Model Chooser" : : "Has the model chooser for easier editing."
	sound(sound) : "Sound Chooser" : : "Has the sound chooser for easier editing."
	]

@PointClass 
	halfgridsnap
	iconsprite("editor/ficool2/info_mass_center.vmt")
	color(128 128 128)
	line(128 128 128, targetname, target)
= info_mass_center: "An entity that overrides the mass center of the target physics object, by moving it to the info_mass_center's location. This kills itself on spawn."
	[
	target(target_destination) : "Target object" : : "The entity whose mass center will be overridden."
	]

@PointClass 
	iconsprite("editor/info_no_dynamic_shadow.vmt")
	color(200 200 0)
= info_no_dynamic_shadow: "Use this entity to mark surfaces that shouldn't receive dynamic shadows. Useful to apply to walls and floors where shadows are drawn improperly, giving away the location of enemies."
	[
	sides(sidelist) : "Brush faces"
	]

@PointClass 
	color(80 150 225)
	studio("models/editor/overlay_helper_box.mdl")
	sidelist()
	sidelist(sides2)
	overlay_transition()
= info_overlay_transition: "This creates a scrolling texture at the intersect between two brushes, for things like wave effects at water edges."
	[
	material(material) : "Material"
	sides(sidelist) : "Brush faces"
	sides2(sidelist) : "Water faces"
	lengthtexcoordstart(float) : "Texcoord Length Start" : "0.0"
	lengthtexcoordend(float) : "Texcoord Length End" : "1.0"
	widthtexcoordstart(float) : "Texcoord Width Start" : "0.0"
	widthtexcoordend(float) : "Texcoord Width End" : "1.0"
	width1(float) : "Width Land" : "25.0"
	width2(float) : "Width Water" : "25.0"
	debugdraw(boolean) : "Show Debug" : 0
	]

@SolidClass = parallax_obb: "Bounding box for Parallax Corrected Cubemaps."
	[
	targetname(target_source) : "Name" : : "The name that other entities refer to this entity by."
	]

@BaseClass base(BaseEntityPoint, RenderFields, Reflection) = BaseBeam: "This is the definition of the 'beam' class, but we don't want that in the entity list."
	[
	rendermode(choices) readonly : "Render Mode" : 1 : "Render mode is forced to Texture, but set to Color in Hammer to ensure correct rendering." =
		[
		1: "Color"
		]

	renderamt(integer) : "Brightness (1 - 255)" : 100
	rendercolor(color255) : "Beam Color (R G B)" : "255 255 255"
	hdrcolorscale(float) : "HDR color scale." : "1.0" : "float value to multiply sprite color by when running in HDR mode."
	noiseamplitude(float) : "Amount of noise (0-64)" : 0 : "The amount of noise in the beam. 0 is a perfectly straight beam."
	framerate(integer) : "Frames per 10 seconds" : 0 : "Framerate at which the beam texture should animate, if it has multiple frames."
	framestart(integer) : "Starting Frame" : 0 : "The frame to start the beam texture on."
	texture(sprite) : "Sprite Name" : "sprites/laserbeam.spr" : "The material used to draw the beam."
	texturescroll(integer) : "Texture Scroll Rate (0-100)" : 35 : "Rate at which the beam texture should scroll along the beam."
	damage(string) : "Damage / second" : 0 : "How much damage this beam does per second to things while active. For continuous damage, the value should be greater than 10 or it may not work."
	dissolvetype(choices) : "Dissolve Type" : -1 =
		[
		-1: "None"
		0: "Energy"
		1: "Heavy electrical"
		2: "Light electrical"
		3: "Core"
		]


	// Inputs
	input TurnOn(void) : "Turns the beam on."
	input TurnOff(void) : "Turns the beam off."
	input Toggle(void) : "Toggles the beam between on and off."
	input Noise(float) : "Set the noise of the beam, in pixels."
	input Width(float) : "Set the width of the beam, in pixels."
	input ScrollSpeed(float) : "Set the scroll speed in units per second (0 - 100)."
	input Alpha(integer) : "Sets the beam's alpha (0 - 255)."
	input Color(color255) : "Sets the beam's render color (R G B)."
	input ColorRedValue(float) : "Sets the red color channel's value (0 - 255)."
	input ColorGreenValue(float) : "Sets the green color channel's value (0 - 255)."
	input ColorBlueValue(float) : "Sets the blue color channel's value (0 - 255)."
	]

@BaseClass base(BaseEffectBrush) = BaseDustParticleSpawner
	[
	startdisabled(boolean) : "Start Disabled" : 0
	color(color255) : "Particle Color (R G B)" : "255 255 255"
	spawnrate(integer) : "Particle Per Second" : 40 : "Number of particles to spawn, per second."
	speedmax(integer) : "Maximum Particle Speed" : 13 : "Maximum speed that the particles can move after spawning."
	fallspeed(integer) : "Particle Fall Speed" : 0 : "How fast the particles fall to the ground. This value is subtracted from the particle speed in the Z-axis only."
	lifetimemin(integer) : "Minimum Particle Lifetime" : 3 : "Minimum number of seconds until each particle dies. Particles live for a random duration between this and 'Maximum Particle Lifetime'."
	lifetimemax(integer) : "Maximum Particle Lifetime" : 5 : "Maximum number of seconds until each particle dies. Particles live for a random duration between 'Minimum Particle Lifetime' and this. Will be clamped to a max of 15."
	distmax(integer) : "Maximum Visible Distance" : 1024 : "Maximum distance at which particles are visible. They fade to translucent at this distance."
	frozen(boolean) : "Frozen" : 0 : "When set, this entity spawns the number of particles in SpawnRate immediately, and then goes inactive."
	affectedbywind(boolean) : "Affected by Wind" : 1 : "When set, the dust will be affected by any env_wind entity settings in the map."
	linedivider_base(string) readonly : "----------------------------------------------------------------------------------------------------------"

	// Inputs
	input TurnOn(void) : "Turn on."
	input TurnOff(void) : "Turn off."
	]

@BaseClass base(BaseEntityPoint, RenderFields, Reflection, ToggleDraw, DamageFilter) = BaseEntityAnimating
	[
	linedivider_anim(string) readonly : "----------------------------------------------------------------------------------------------------------" : : "Model Appearance"
	effects(choices) : "Effect Flags" : 0 : "For configuring visual effects. If you want to combine effects, turn SmartEdit off and add the effect numbers together, i.e. 64 + 8 = 72." =
		[
		0: "None"
		1: "Bonemerge always, very expensive!!"
		2: "Bright, dynamic light at entity origin"
		4: "Dim, dynamic light at entity origin"
		8: "No movement interpolation"
		16: "Don't cast shadows"
		32: "Don't draw entity (entity is fully ignored by clients, NOT server)"
		64: "Don't receive dynamic shadows"
		128: "Bonemerge only in PVS, better performance but prone to disappearing. Use with Bonemerge."
		256: "Blinking glow"
		512: "Flag parent as always animating and realign each frame"
		1024: "Mark for fast reflections"
		2048: "No shadow depth, for use with env_cascade_light"
		4096: "Dont cache in shadow depthmap (render every frame)"
		8192: "No flashlight"
		16384: "No CSM"
		]

	solid(choices) : "Collisions" : 6 : "Method of collision for this entity. Can be changed at runtime with AddOutput." =
		[
		0: "None"
		1: "BSP (QPhysics)"
		2: "Bounding Box"
		3: "Oriented Bounding Box"
		4: "Oriented Bounding Box, constrained to Yaw only"
		5: "Custom (defined per-entity, if not defined the entity will have bizarre collision behavior)"
		6: "VPhysics"
		]

	body(integer) : "Bodygroup" : 0 : "Body Groups allow turning on and off parts of a model, so sections can be shown or hidden dynamically."
	setbodygroup(integer) : "(Set) Body Group" : 0 : "Identical to Body Group (body), ask Valve why this is duplicated. Body Groups allow turning on and off parts of a model, so sections can be shown or hidden dynamically."
	texframeindex(integer) : "Texture Frame" : : "The frame number for any animated textures on this entity."
	hitboxset(string) : "Hitbox Set" : : "Sets the $hboxset to use for collision testing."
	modelscale(float) : "Model Scale" : : "A multiplier for the size of the model."
	fademindist(float) : "Start Fade Distance/Pixels" : : "Distance at which the entity starts fading. If <0, the entity will disappear instantly when end fade is hit. The value will scale appropriately if the entity is in a 3D Skybox."
	fademaxdist(float) : "End Fade Distance/Pixels" : : "Distance at which the entity ends fading. If <0, the entity won't disappear at all. The value will scale appropriately if the entity is in a 3D Skybox."
	fadescale(float) : "Fade Scale" : 1 : "If you specify a fade in the worldspawn, then the engine will forcibly fade out props even if fademindist/fademaxdist isn't specified.This scale factor gives you some control over the fade. Using 0 here turns off the forcible fades. Numbers smaller than 1 cause the prop to fade out at further distances, and greater than 1 cause it to fade out at closer distances."
	linedivider_animbase(string) readonly : "----------------------------------------------------------------------------------------------------------" : : "Lighting"
	lightingorigin(target_destination) : "Lighting Origin" : : "Select any entity (not info_lighting!) from which to sample lighting instead of the entity's origin."
	lightingoriginhack(target_destination) : "Lighting Origin Offset" : : "The info_lighting_relative from which to sample lighting instead of the entity's origin."
	shadowcastdist(integer) : "Shadow Cast Distance" : : "Sets how far the entity casts dynamic shadows, in units. 0 means default distance from the shadow_control entity."
	disableshadows(boolean) : "Disable Shadows?" : 0 : "Prevent the entity from creating cheap render-to-texture/dynamic shadows."
	disablereceiveshadows(boolean) : "Disable Receiving Shadows?" : 0 : "Prevents dynamic shadows (e.g. player and prop shadows) from appearing on this entity."
	disableshadowdepth(boolean) : "Disable ShadowDepth" : 0 : "Used to disable rendering into shadow depth (for flashlight) for this entity."
	shadowdepthnocache(choices) : "Projected Texture Cache" : 0 : "Used to hint projected texture system whether it is sufficient to cache shadow volume of this entity or to force render it every frame instead." =
		[
		0: "Default"
		1: "No cache = render every frame"
		2: "Cache it = render only once"
		]

	disableflashlight(boolean) : "Disable flashlight" : 0 : "Used to disable flashlight (env_projectedtexture) lighting and shadows on this entity."
	drawincubemaps(boolean) : "Draw in Cubemaps" : 0 : "Whether or not this entity should be drawn in cubemaps. Moving entities like physics props or doors shouldn't be drawn into cubemaps."

	// Inputs
	input Skin(integer) : "Changes the model skin to the specified number."
	input SetBodyGroup(integer) : "Change the model's bodygroup to the specified index number."
	input Ignite(void) : "Makes the entity catch on fire indefinitely."
	input IgniteLifetime(float) : "Makes the entity catch on fire for a given amount of time."
	input IgniteNumHitboxFires(integer) : "Makes the entity catch on fire with a given number of hitbox fire particles."
	input IgniteHitboxFireScale(float) : "Makes the entity catch on fire with a given scale for hitbox fire particles."
	input BecomeRagdoll(void) : "Kills the entity and creates a client-side ragdoll from the model with ZERO force (just go limp). Input is only passed if the model contains ragdolling, for other models phys_convert can be used instead. OnDeath, OnHalfHealth, etc. outputs will **NOT** BE FIRED."
	input SetLightingOrigin(string) : "Sets the entity to use as the entity's lighting origin. Any entity can be used."
	input SetLightingOriginHack(string) : "Offsets the entity's lighting origin by their distance from an info_lighting_relative."
	input fademindist(float) : "Sets distance at which the entity starts fading. If <0, the entity will disappear instantly when end fade is hit. The value will scale appropriately if the entity is in a 3D Skybox."
	input fademaxdist(float) : "Sets distance at which the entity ends fading. If <0, the entity won't disappear at all. The value will scale appropriately if the entity is in a 3D Skybox."
	input DisableShadow(void) : "Allows the entity to draw a render target (dynamic) shadow."
	input EnableShadow(void) : "Prevents the entity from drawing a render target (dynamic) shadow."
	input DisableReceivingFlashlight(void) : "This object will not recieve light or shadows from projected textures (flashlights)."
	input EnableReceivingFlashlight(void) : "This object may recieve light or shadows from projected textures (flashlights)."
	input AlternativeSorting(bool) : "Used to attempt to fix sorting problems when rendering. True activates, false deactivates"
	input SetModelScale(vector) : "Sets the scale of the model. Secondary parameter (space delimited) sets the duration of time to scale the model."

	// Outputs
	output OnIgnite(void) : "Fired when this object catches fire."
	]

@BaseClass base(BaseEntityPoint, RenderFields, Reflection, DamageFilter) = BaseEntityPhysics
	[
	solid(choices) : "Collisions" : 6 : "Method of collision for this entity. Can be changed at runtime with AddOutput." =
		[
		0: "None"
		1: "BSP (QPhysics)"
		2: "Bounding Box"
		3: "Oriented Bounding Box"
		4: "Oriented Bounding Box, constrained to Yaw only"
		5: "Custom (defined per-entity, if not defined the entity will have bizarre collision behavior)"
		6: "VPhysics"
		]

	body(integer) : "Bodygroup" : 0 : "Sets the body group index for the model, starting with 0, if available."
	texframeindex(integer) : "Texture Frame" : : "The frame number for any animated textures on this entity."
	lightingorigin(target_destination) : "Lighting Origin" : : "Select any entity (not info_lighting!) from which to sample lighting instead of the entity's origin."
	lightingoriginhack(target_destination) : "Lighting Origin Offset" : : "The info_lighting_relative from which to sample lighting instead of the entity's origin."
	fademindist(float) : "Start Fade Distance/Pixels" : : "Distance at which the entity starts fading. If <0, the entity will disappear instantly when end fade is hit. The value will scale appropriately if the entity is in a 3D Skybox."
	fademaxdist(float) : "End Fade Distance/Pixels" : : "Distance at which the entity ends fading. If <0, the entity won't disappear at all. The value will scale appropriately if the entity is in a 3D Skybox."
	fadescale(float) : "Fade Scale" : 1 : "If you specify a fade in the worldspawn, then the engine will forcibly fade out props even if fademindist/fademaxdist isn't specified.This scale factor gives you some control over the fade. Using 0 here turns off the forcible fades. Numbers smaller than 1 cause the prop to fade out at further distances, and greater than 1 cause it to fade out at closer distances."
	shadowcastdist(integer) : "Shadow Cast Distance" : : "Sets how far the entity casts dynamic shadows, in units. 0 means default distance from the shadow_control entity."
	disableshadows(boolean) : "Disable Shadows?" : 0 : "Prevent the entity from creating cheap render-to-texture/dynamic shadows."
	disablereceiveshadows(boolean) : "Disable Receiving Shadows?" : 0 : "Prevents dynamic shadows (e.g. player and prop shadows) from appearing on this entity."
	modelscale(float) : "Model Scale" : : "A multiplier for the size of the model."
	linedivider_phys(string) readonly : "----------------------------------------------------------------------------------------------------------"

	// Inputs
	input Skin(integer) : "Changes the model skin to the specified number."
	input SetBodyGroup(integer) : "Change the model's bodygroup to the specified index number."
	input Ignite(void) : "Makes the entity catch on fire indefinitely."
	input IgniteLifetime(float) : "Makes the entity catch on fire for a given amount of time."
	input IgniteNumHitboxFires(integer) : "Makes the entity catch on fire with a given number of hitbox fire particles."
	input IgniteHitboxFireScale(float) : "Makes the entity catch on fire with a given scale for hitbox fire particles."
	input BecomeRagdoll(void) : "Kills the entity and creates a client-side ragdoll from the model. Input is only passed if the model contains ragdolling, for other models phys_convert can be used instead."
	input SetLightingOrigin(string) : "Sets the entity to use as the entity's lighting origin. Any entity can be used."
	input SetLightingOriginHack(string) : "Offsets the entity's lighting origin by their distance from an info_lighting_relative."
	input fademindist(float) : "Sets distance at which the entity starts fading. If <0, the entity will disappear instantly when end fade is hit. The value will scale appropriately if the entity is in a 3D Skybox."
	input fademaxdist(float) : "Sets distance at which the entity ends fading. If <0, the entity won't disappear at all. The value will scale appropriately if the entity is in a 3D Skybox."
	input DisableShadow(void) : "Allows the entity to draw a render target (dynamic) shadow."
	input EnableShadow(void) : "Prevents the entity from drawing a render target (dynamic) shadow."
	input AlternativeSorting(bool) : "Used to attempt to fix sorting problems when rendering. True activates, false deactivates"
	input SetModelScale(vector) : "Sets the scale of the model. Secondary parameter (space delimited) sets the duration of time to scale the model."

	// Outputs
	output OnIgnite(void) : "Fired when this object catches fire."
	]

@BaseClass base(BaseEntityBrush, RenderFields, ToggleDraw) = BaseEntityVisBrush
	[
	effects(choices) : "Effect Flags" : 0 : "For configuring visual effects. If you want to combine effects, turn SmartEdit off and add the effect numbers together, i.e. 64 + 8 = 72." =
		[
		0: "None"
		1: "Bonemerge always, very expensive!!"
		2: "Bright, dynamic light at entity origin"
		4: "Dim, dynamic light at entity origin"
		8: "No movement interpolation"
		16: "Don't cast shadows"
		32: "Don't draw entity (entity is fully ignored by clients, NOT server)"
		64: "Don't receive dynamic shadows"
		128: "Bonemerge only in PVS, better performance but prone to disappearing. Use with Bonemerge."
		256: "Blinking glow"
		512: "Flag parent as always animating and realign each frame"
		1024: "Mark for fast reflections"
		2048: "No shadow depth, for use with env_cascade_light"
		4096: "Dont cache in shadow depthmap (render every frame)"
		8192: "No flashlight"
		16384: "No CSM"
		]

	vrad_brush_cast_shadows(choices) : "VRAD Shadows" : 0 : "Determines if this entity will cast lightmap shadows." =
		[
		0: "Do not cast shadows"
		1: "Cast shadows"
		]

	_minlight(float) : "Minimum Light Level" : 0 : "The minimum level of ambient light that hits this brush."
	disablereceiveshadows(boolean) : "Disable Receiving Shadows?" : 0 : "Prevents dynamic shadows (e.g. player and prop shadows) from appearing on this entity."
	disableshadowdepth(boolean) : "Disable ShadowDepth" : 0 : "Used to disable rendering into shadow depth (for flashlight) for this entity."
	shadowdepthnocache(choices) : "Projected Texture Cache" : 0 : "Used to hint projected texture system whether it is sufficient to cache shadow volume of this entity or to force render it every frame instead." =
		[
		0: "Default"
		1: "No cache = render every frame"
		2: "Cache it = render only once"
		]

	disableflashlight(boolean) : "Disable flashlight" : 0 : "Used to disable flashlight (env_projectedtexture) lighting and shadows on this entity."
	linedivider_visbrush(string) readonly : "----------------------------------------------------------------------------------------------------------"

	// Inputs
	input DisableShadow(void) : "Allows the entity to draw a render target (dynamic) shadow."
	input EnableShadow(void) : "Prevents the entity from drawing a render target (dynamic) shadow."
	input DisableReceivingFlashlight(void) : "This object will not recieve light or shadows from projected textures (flashlights)."
	input EnableReceivingFlashlight(void) : "This object may recieve light or shadows from projected textures (flashlights)."
	input EnableDamageForces(void) : "Damaging the entity applies physics forces to it."
	input DisableDamageForces(void) : "Damaging the entity does not apply physics forces to it."
	input AlternativeSorting(bool) : "Used to attempt to fix sorting problems when rendering. True activates, false deactivates"
	]

@BaseClass base(BaseEntityPoint, EnableDisable) = BaseNPCMaker
	[
	startdisabled(boolean) : "Start Disabled" : 1
	spawnflags(flags)  =
		[
		16: "[16] Fade Corpse" : 0
		32: "[32] Infinite Children" : 0
		64: "[64] Do Not Drop" : 0
		128: "[128] Don't Spawn While Visible" : 0
		]

	maxnpccount(integer) : "Num. of NPCs" : 1 : "Number of NPCs that will spawn before this spawner is exhausted."
	spawnfrequency(string) : "Frequency" : 5 : "How often (in seconds) a new NPC will be spawned. If set to -1, a new NPC will be made when the last NPC dies."
	maxlivechildren(integer) : "Max Live NPCs" : 5 : "Maximum number of live children allowed at any one time (new ones will not be made until one dies). If set to -1, no limit is applied."
	hullcheckmode(choices) : "Hull Check Mode" : 0 : "How NPC's hull should be checked at spawn destination?" =
		[
		0: "Default"
		1: "No hull check"
		]


	// Inputs
	input Spawn(void) : "Spawns an NPC."
	input Toggle(void) : "Toggles the spawner enabled/disabled state."
	input Enable(void) : "Enables the spawner."
	input Disable(void) : "Disables the spawner."
	input AddMaxChildren(integer) : "Adds to the number of NPCs that can spawn before the spawner is exhausted. If an exhausted spawner is given some children to spawn, it still won't begin spawning until it is re-enabled with the Enable input."
	input SetMaxChildren(integer) : "Sets the number of NPCs that can spawn before the spawner is exhausted. If an exhausted spawner is given some children to spawn, it still won't begin spawning until it is re-enabled with the Enable input."
	input SetMaxLiveChildren(integer) : "Sets the maximum number of NPCs that can be alive at any one time from this spawner."
	input SetSpawnFrequency(float) : "Sets how often (in seconds) a new NPC will be spawned."

	// Outputs
	output OnSpawnNPC(target_destination) : "Fired when an NPC is spawned. The activator is the NPC, and the parameter is a pointer to the NPC."
	output OnAllSpawned(void) : "Fired when the spawned is exhausted (all children have been spawned)."
	output OnAllSpawnedDead(void) : "Fired when the spawner is exhausted (all children have been spawned) and all spawned children have died."
	output OnAllLiveChildrenDead(void) : "Fired when all spawned children have died. This does not mean the spawner is exhausted, so a new child may be spawned any time after this (unless the maker is disabled)."
	]

@BaseClass base(BaseEntityBrush) = BaseTank
	[
	spawnflags(flags)  =
		[
		1: "[1] Active" : 0
		16: "[16] Only Direct" : 0
		32: "[32] Controllable" : 0
		64: "[64] Damage Kick" : 0
		1024: "[1024] NPC Controllable" : 0
		2048: "[2048] NPC Set Controller" : 0
		4096: "[4096] Allow friendlies to hit player" : 0
		32768: "[32768] Non-solid." : 0
		131072: "[131072] Perfect accuracy every 3rd shot at player" : 0
		]

	control_volume(target_destination) : "Control Volume" : : "Name of a trigger the specifies the volume in which a player must be to control this tank."
	master(string) : "(Team) Master"
	yawrate(string) : "Yaw rate" : 30
	yawrange(string) : "Yaw range" : 180
	yawtolerance(string) : "Yaw tolerance" : 15
	pitchrate(string) : "Pitch rate" : 0
	pitchrange(string) : "Pitch range" : 0
	pitchtolerance(string) : "Pitch tolerance" : 5
	barrel(string) : "Barrel Length" : 0
	barrely(string) : "Barrel Horizontal" : 0
	barrelz(string) : "Barrel Vertical" : 0
	spritesmoke(sprite) : "Smoke Sprite" : : "A specific sprite to use for the muzzle's smoke effect."
	spriteflash(sprite) : "Flash Sprite" : : "A specific sprite to use for the muzzle's flash effect."
	spritescale(string) : "Sprite scale" : 1 : "The scale for smoke and flash sprites."
	rotatestartsound(sound) : "Rotate Start Sound"
	rotatesound(sound) : "Rotate Loop Sound"
	rotatestopsound(sound) : "Rotate Stop Sound"
	firerate(string) : "Rate of Fire" : 1
	bullet_damage(string) : "Damage Per Bullet" : 0 : "If set to 0, it'll use the base weapon bullet's damage."
	bullet_damage_vs_player(string) : "Damage Per Bullet Vs Player" : 0 : "If set to 0, it'll use the Damage Per Bullet value."
	persistence(string) : "Firing persistence" : 1 : "(Seconds) How long to keep firing at last known position after lose sight of target"
	persistence2(string) : "Firing persistence2" : 0 : "(Seconds) After lost enemy and persistence time has passed, how long to occasionally fire at enemy's last known position"
	firespread(choices) : "Bullet accuracy" : 0 =
		[
		0: "Perfect Shot"
		1: "Small cone"
		2: "Medium cone"
		3: "Large cone"
		4: "Extra-large cone"
		]

	minrange(string) : "Minimum target range" : 0
	maxrange(string) : "Maximum target range" : 0
	gun_base_attach(string) : "Gun Base Attachment" : : "If Parent is specified, this is the attachment point on the parent to aim from."
	gun_barrel_attach(string) : "Gun Barrel Attachment" : : "If Parent is specified, this is the attachment point on the parent to fire from. If you specify this, you'll want to specify the Gun Base Attachment too."
	gun_yaw_pose_param(string) : "Gun Yaw Pose Param" : : "If Parent + the Gun Pitch Pose Param is specified, then the gun itself will be invisible and the func_tank will steer a gun on the parent using the pose parameters."
	gun_yaw_pose_center(float) : "Gun Yaw Pose Center" : 0 : "The center yaw pose parameter of the gun on the parent"
	gun_pitch_pose_param(string) : "Gun Pitch Pose Param" : : "If Parent + the Gun Yaw Pose Param is specified, then the gun itself will be invisible and the func_tank will steer a gun on the parent using the pose parameters."
	gun_pitch_pose_center(float) : "Gun Pitch Pose Center" : 0 : "The center pitch pose parameter of the gun on the parent"
	ammo_count(integer) : "Ammunition Count" : -1 : "Only applies to player use. -1 = unlimited ammo."
	leadtarget(boolean) : "Lead Target" : 0
	npc_man_point(target_destination) : "NPC Man Point" : : "Point where NPC must stand to man this func_tank."
	playergraceperiod(float) : "Post-NPC Attack Grace Period" : 0 : "If specified, NPC's manning this func tank won't fire at the player, after firing at a non-player, for this amount of time."
	ignoregraceupto(float) : "Ignore Grace Upto" : 768 : "The player grace period is ignored if the player's under this distance from the func_tank."
	playerlocktimebeforefire(float) : "Player Lock Time" : 0 : "The tank must have the player as a target for this amount of time before it's allowed to fire."
	shouldfindnpcs(boolean) : "Automatically search for NPCs" : 1 : "If controllable by NPCs, sets whether we should automatically search for NPCs to use this func_tank or just wait for the player to set it. Identical to StartFindingNPCs and StopFindingNPCs."
	effecthandling(choices) : "Effect Handling" : 0 : "Special effect handling that influences sound and muzzle effects. Individual settings can override parts of it." =
		[
		0: "Use Individual Settings."
		1: "AR2"
		2: "Combine Cannon"
		]


	// Inputs
	input Activate(void) : "Turn the tank on"
	input Deactivate(void) : "Turn the tank off (go dormant)"
	input SetFireRate(string) : "How fast to fire (0 = don't fire)"
	input SetDamage(string) : "Set the Damage Per Bullet"
	input SetTargetPosition(string) : "World position that I should aim at"
	input SetTargetDir(vector) : "Direction to aim at."
	input SetTargetEntityName(target_destination) : "Name of entity I should follow/attack"
	input SetTargetEntity(string) : "Set the entity I should follow/attack to the passed in entity."
	input ClearTargetEntity(void) : "Clear the entity I should be attacking."
	input FindNPCToManTank(string) : "Find a nearby NPC to man this func_tank."
	input StartFindingNPCs(void) : "Start searching for NPCs to man this func_tank."
	input StopFindingNPCs(void) : "Stop searching for NPCs to man this func_tank."
	input ForceNPCOff(void) : "Force the NPC manning this func_tank (if any) to leave."
	input SetMaxRange(float) : "Set the max range of the func_tank."

	// Outputs
	output OnFire(void) : "Fires when the tank fires its bullets"
	output OnAquireTarget(void) : "Fires when target is newly in range and can be shot"
	output OnLoseTarget(void) : "Fires when when target goes out of range"
	output OnAmmoDepleted(void) : "Fires when tank runs out of ammo"
	output OnGotController(void) : "Fires when an NPC starts to control this tank. Players do NOT fire this input."
	output OnLostController(void) : "Fires when the NPC controller of the tank stops controlling it. Players do NOT fire this input."
	output OnGotPlayerController(void) : "Fires when a Player starts to control this tank. NPCs do NOT fire this input."
	output OnLostPlayerController(void) : "Fires when the Player controller of the tank stops controlling it. NPCs do NOT fire this input."
	output OnReadyToFire(void) : "Fires once when the tank is done waiting to fire between rounds"
	]

@BaseClass base(_Breakable, DamageFilter) = BreakableProp
	[
	spawnflags(flags)  =
		[
		16: "[16] Break on Touch" : 0
		32: "[32] Break on Pressure" : 0
		]


	// Inputs
	input EnableDamageForces(void) : "Damaging the entity applies physics forces to it."
	input DisableDamageForces(void) : "Damaging the entity does *not* apply physics forces to it."

	// Outputs
	output OnTakeDamage(void) : "Fired each time this breakable takes any damage."
	]

@BaseClass base(Angles) = Button
	[
	sounds(choices) : "Press Sound" : 0 : "Sound played when pressed. Choose from sounds in the Buttons.snd* category." =
		[
		0: "None (Silent)"
		100: "Light Switch"
		101: "Power Plug - Basic Electronics (soft)"
		1: "Buttons.snd1: Big zap & Warmup"
		2: "Buttons.snd2: Access Denied"
		3: "Buttons.snd3: Access Granted"
		4: "Buttons.snd4: Quick Combolock"
		5: "Buttons.snd5: Power Deadbolt 1"
		6: "Buttons.snd6: Power Deadbolt 2"
		7: "Buttons.snd7: Plunger"
		8: "Buttons.snd8: Small zap"
		9: "Buttons.snd9: Keycard Sound"
		10: "Buttons.snd10: Buzz"
		11: "Buttons.snd11: Buzz Off"
		12: "Buttons.snd12: Latch locked"
		13: "Buttons.snd13: Latch Unlocked"
		14: "Buttons.snd14: Lightswitch"
		15: "Buttons.snd15: Small bleek"
		16: "Buttons.snd16: Small deny"
		17: "Buttons.snd17: Small doop"
		18: "Buttons.snd18: Small tech deny"
		19: "Buttons.snd19: Click and combine screen fuzz"
		20: "Buttons.snd20: Roomy beep"
		21: "Buttons.snd21: Lever or Wheel: turn + move sqeek"
		22: "Buttons.snd22: Lever or Wheel: latch + release gas"
		23: "Buttons.snd23: Lever or Wheel: ratchet + sqeek"
		24: "Buttons.snd24: Lever or Wheel: large ratchet"
		25: "Buttons.snd25: Lever or Wheel: clanky + gas release"
		26: "Buttons.snd26: Lever or Wheel: latch + large metal thud"
		27: "Buttons.snd27: Lever or Wheel: smaller ratchet"
		28: "Buttons.snd28: Lever or Wheel: smaller lever move"
		31: "Buttons.snd31: Shock buzz (missing)"
		32: "Buttons.snd32: Clickbeep (missing)"
		33: "Buttons.snd33: Tech blip (missing)"
		34: "Buttons.snd34: Clickbeepbeep open"
		35: "Buttons.snd35: Small high blip"
		36: "Buttons.snd36: Small tech fuzz blip"
		37: "Buttons.snd37: Small click bleep (change to lightswitch)"
		40: "Buttons.snd40: Combine door lock - locked"
		41: "Buttons.snd41: Combine blip growl"
		42: "Buttons.snd42: Combine squick growl"
		43: "Buttons.snd43: Combine whine purr"
		44: "Buttons.snd44: Combine click talk"
		45: "Buttons.snd45: Combine click growl fizz"
		46: "Buttons.snd46: Combine click fizz (deny)"
		47: "Buttons.snd47: Combine click talker"
		]

	locked_sound(choices) : "Locked Sound" : 0 : "Sound played when the player tries to use the button, and fails because it's locked. These are sounds in the Buttons.snd* category." =
		[
		0: "None (Silent)"
		100: "Light Switch"
		101: "Power Plug - Basic Electronics (soft)"
		1: "Buttons.snd1: Big zap & Warmup"
		2: "Buttons.snd2: Access Denied"
		3: "Buttons.snd3: Access Granted"
		4: "Buttons.snd4: Quick Combolock"
		5: "Buttons.snd5: Power Deadbolt 1"
		6: "Buttons.snd6: Power Deadbolt 2"
		7: "Buttons.snd7: Plunger"
		8: "Buttons.snd8: Small zap"
		9: "Buttons.snd9: Keycard Sound"
		10: "Buttons.snd10: Buzz"
		11: "Buttons.snd11: Buzz Off"
		12: "Buttons.snd12: Latch locked"
		13: "Buttons.snd13: Latch Unlocked"
		14: "Buttons.snd14: Lightswitch"
		15: "Buttons.snd15: Small bleek"
		16: "Buttons.snd16: Small deny"
		17: "Buttons.snd17: Small doop"
		18: "Buttons.snd18: Small tech deny"
		19: "Buttons.snd19: Click and combine screen fuzz"
		20: "Buttons.snd20: Roomy beep"
		21: "Buttons.snd21: Lever or Wheel: turn + move sqeek"
		22: "Buttons.snd22: Lever or Wheel: latch + release gas"
		23: "Buttons.snd23: Lever or Wheel: ratchet + sqeek"
		24: "Buttons.snd24: Lever or Wheel: large ratchet"
		25: "Buttons.snd25: Lever or Wheel: clanky + gas release"
		26: "Buttons.snd26: Lever or Wheel: latch + large metal thud"
		27: "Buttons.snd27: Lever or Wheel: smaller ratchet"
		28: "Buttons.snd28: Lever or Wheel: smaller lever move"
		31: "Buttons.snd31: Shock buzz (missing)"
		32: "Buttons.snd32: Clickbeep (missing)"
		33: "Buttons.snd33: Tech blip (missing)"
		34: "Buttons.snd34: Clickbeepbeep open"
		35: "Buttons.snd35: Small high blip"
		36: "Buttons.snd36: Small tech fuzz blip"
		37: "Buttons.snd37: Small click bleep (change to lightswitch)"
		40: "Buttons.snd40: Combine door lock - locked"
		41: "Buttons.snd41: Combine blip growl"
		42: "Buttons.snd42: Combine squick growl"
		43: "Buttons.snd43: Combine whine purr"
		44: "Buttons.snd44: Combine click talk"
		45: "Buttons.snd45: Combine click growl fizz"
		46: "Buttons.snd46: Combine click fizz (deny)"
		47: "Buttons.snd47: Combine click talker"
		]

	unlocked_sound(choices) : "Unlocked Sound" : 0 : "Sound played when the button is unlocked. These are sounds in the Buttons.snd* category." =
		[
		0: "None (Silent)"
		100: "Light Switch"
		101: "Power Plug - Basic Electronics (soft)"
		1: "Buttons.snd1: Big zap & Warmup"
		2: "Buttons.snd2: Access Denied"
		3: "Buttons.snd3: Access Granted"
		4: "Buttons.snd4: Quick Combolock"
		5: "Buttons.snd5: Power Deadbolt 1"
		6: "Buttons.snd6: Power Deadbolt 2"
		7: "Buttons.snd7: Plunger"
		8: "Buttons.snd8: Small zap"
		9: "Buttons.snd9: Keycard Sound"
		10: "Buttons.snd10: Buzz"
		11: "Buttons.snd11: Buzz Off"
		12: "Buttons.snd12: Latch locked"
		13: "Buttons.snd13: Latch Unlocked"
		14: "Buttons.snd14: Lightswitch"
		15: "Buttons.snd15: Small bleek"
		16: "Buttons.snd16: Small deny"
		17: "Buttons.snd17: Small doop"
		18: "Buttons.snd18: Small tech deny"
		19: "Buttons.snd19: Click and combine screen fuzz"
		20: "Buttons.snd20: Roomy beep"
		21: "Buttons.snd21: Lever or Wheel: turn + move sqeek"
		22: "Buttons.snd22: Lever or Wheel: latch + release gas"
		23: "Buttons.snd23: Lever or Wheel: ratchet + sqeek"
		24: "Buttons.snd24: Lever or Wheel: large ratchet"
		25: "Buttons.snd25: Lever or Wheel: clanky + gas release"
		26: "Buttons.snd26: Lever or Wheel: latch + large metal thud"
		27: "Buttons.snd27: Lever or Wheel: smaller ratchet"
		28: "Buttons.snd28: Lever or Wheel: smaller lever move"
		31: "Buttons.snd31: Shock buzz (missing)"
		32: "Buttons.snd32: Clickbeep (missing)"
		33: "Buttons.snd33: Tech blip (missing)"
		34: "Buttons.snd34: Clickbeepbeep open"
		35: "Buttons.snd35: Small high blip"
		36: "Buttons.snd36: Small tech fuzz blip"
		37: "Buttons.snd37: Small click bleep (change to lightswitch)"
		40: "Buttons.snd40: Combine door lock - locked"
		41: "Buttons.snd41: Combine blip growl"
		42: "Buttons.snd42: Combine squick growl"
		43: "Buttons.snd43: Combine whine purr"
		44: "Buttons.snd44: Combine click talk"
		45: "Buttons.snd45: Combine click growl fizz"
		46: "Buttons.snd46: Combine click fizz (deny)"
		47: "Buttons.snd47: Combine click talker"
		]

	locked_sentence(choices) : "Locked Sentence" : 0 : "A sentence played when the player tries to use the button, and fails because it's locked." =
		[
		0: "None"
		1: "[NA] Gen. Access Denied"
		2: "[ND] Security Lockout"
		3: "[NF] Blast Door"
		4: "[NFIRE] Fire Door"
		5: "[NCHEM] Chemical Door"
		6: "[NRAD] Radiation Door"
		7: "[NCON] Gen. Containment"
		8: "[NH] Maintenance Door"
		9: "[NG] Broken Shut Door"
		]

	unlocked_sentence(choices) : "Unlocked Sentence" : 0 : "A sentence played when the button is unlocked." =
		[
		0: "None"
		1: "[EA] Gen. Access Granted"
		2: "[ED] Security Disengaged"
		3: "[EF] Blast Door"
		4: "[EFIRE] Fire Door"
		5: "[ECHEM] Chemical Door"
		6: "[ERAD] Radiation Door"
		7: "[ECON] gen. Containment"
		8: "[EH] Maintenance area"
		]


	// Inputs
	input Lock(void) : "Lock the button, preventing it from functioning."
	input Unlock(void) : "Unlock the button, allowing it to function."
	input Press(void) : "Activate the button as if it was pressed."
	input PressIn(void) : "Activate the button as if it was pressed, sending it to the bottom position."
	input PressOut(void) : "Unpress the button, sending it to the top position."

	// Outputs
	output OnDamaged(void) : "Fired when the button is damaged."
	output OnPressed(void) : "Fired when the button is pressed."
	output OnUseLocked(void) : "Fired when the button is used while locked."
	output OnIn(void) : "Fired when the button reaches the in/pressed position."
	output OnOut(void) : "Fired when the button reaches the out/released position."
	]

@BaseClass base(BaseEntityPoint) = CombineBallSpawners
	[
	spawnflags(flags)  =
		[
		4096: "[4096] Start inactive" : 1
		8192: "[8192] Combine power supply" : 0
		]

	ballcount(integer) : "Ball count" : 3 : "This is how many balls will be bouncing around inside the spawner"
	minspeed(float) : "Min ball speed" : "300.0" : "The minimum speed of balls that fly in the spawner"
	maxspeed(float) : "Max ball speed" : "600.0" : "The maximum speed of balls that fly in the spawner"
	ballradius(float) : "Ball radius" : "20.0" : "The radius of the energy balls."
	balltype(choices) : "Ball Type" : 0 =
		[
		0: "Combine Energy Ball 1"
		1: "Combine Energy Ball 2"
		2: "Combine Energy Ball 3"
		]

	ballrespawntime(float) : "Ball Respawn Time" : "4.0" : "The energy balls respawn time"

	// Inputs
	input Enable(void) : "Enable spawning of combine balls"
	input Disable(void) : "Disable spawning of combine balls"

	// Outputs
	output OnBallGrabbed(void) : "Fired when a combine ball is grabbed from the field by a mega physcannon"
	output OnBallReinserted(void) : "Fired when a combine ball is reinserted into the field (only gets triggered when Combine Power supply is checked)"
	output OnBallHitTopSide(void) : "Fired when a combine ball in hits the top side of the field (only gets triggered when Combine Power supply is checked)"
	output OnBallHitBottomSide(void) : "Fired when a combine ball in hits the bottom side of the field (only gets triggered when Combine Power supply is checked)"
	output OnLastBallGrabbed(void) : "Fired when the last combine ball is grabbed from the field by a mega physcannon"
	output OnFirstBallReinserted(void) : "Fired when the first combine ball is reinserted into the field (only gets triggered when Combine Power supply is checked)"
	]

@BaseClass base(BaseEntityPoint) = FollowGoal
	[
	actor(target_name_or_class) : "Actor(s) to affect"
	goal(string) : "Target Entity" : : "The name of the entity to follow. If blank, and the actor likes the player, then defaults to player"
	searchtype(choices) : "Search Type" : 0 : "How to search for the entities using the targetname." =
		[
		0: "Entity Name"
		1: "Classname"
		]

	startactive(boolean) : "Start Active" : 0
	maximumstate(choices) : "Maximum state" : 1 =
		[
		1: "Idle"
		2: "Alert"
		3: "Combat"
		]

	formation(choices) : "Formation" : 0 =
		[
		0: "Close circle"
		1: "Wide circle"
		2: "Antlion"
		3: "Commander"
		4: "Tight circle"
		5: "Medium circle"
		6: "Sidekick"
		7: "Hunter"
		8: "Vortigaunt"
		]


	// Inputs
	input Activate(void) : "Begin the follow behavior"
	input Deactivate(void) : "Cease the follow behavior"
	input UpdateActors(void) : "Forces an update on this goal's actors."
	]

@BaseClass base(BaseEntityPoint) = ForceController
	[
	spawnflags(flags)  =
		[
		1: "[1] Start On" : 0
		2: "[2] Apply Force" : 1
		4: "[4] Apply Torque" : 1
		8: "[8] Orient Locally" : 1
		16: "[16] Ignore Mass" : 0
		]

	attach1(target_destination) : "Attached Object" : : "Object to apply the force to."
	forcetime(float) : "Time of Force (0=inf)" : 0 : "Automatic shut-off after this time has passed (0 = stay on forever or until deactivated)"

	// Inputs
	input Activate(void) : "Turn the force on"
	input Deactivate(void) : "Turn the force off"
	input Scale(string) : "Set Force Scale"
	]

@BaseClass base(Node) = HintNode
	[
	spawnflags(flags)  =
		[
		65536: "[65536] Allow jump up" : 0
		]

	hinttype(choices) : "Hint" : 0 =
		[
		0: "None"
		1: "World: Door (Not Used)"
		2: "World: Window"
		12: "World: Act Busy Hint"
		13: "World: Visually Interesting"
		14: "World: Visually Interesting (Don't aim at)"
		15: "World: Inhibit Combine Mines within 15 feet"
		16: "World: Visually Interesting (Stealth mode)"
		100: "Tactical: Crouch Cover Medium"
		101: "Tactical: Crouch Cover Low"
		102: "Tactical: Spawn (Not Used)"
		103: "Tactical: Entrance / Exit Pinch"
		104: "Tactical: Guard (Not Used)"
		105: "Tactical: Enemy Disadvantage Point"
		106: "Tactical: Health Kit (Not Used)"
		107: "Tactical: High Ground"
		400: "Antlion: Burrow Point"
		401: "Antlion: Thumper Flee Point"
		450: "Headcrab: Burrow Point"
		451: "Headcrab: Exit Pod Point"
		500: "Roller: Patrol Point"
		501: "Roller: Cleanup Spot"
		700: "Crow: Fly to point"
		701: "Crow: Perch point"
		900: "Follower: Wait point"
		901: "Override jump permission"
		902: "Player squad transition point"
		903: "NPC exit point"
		904: "Strider node"
		950: "Player Ally: Push away destination"
		951: "PLayer Ally: Fear withdrawal destination"
		1000: "HL1 World: Machinery"
		1001: "HL1 World: Blinking Light"
		1002: "HL1 World: Human Blood"
		1003: "HL1 World: Alien Blood"
		1200: "Portal 2: Nest"
		]

	hintactivity(string) : "Hint Activity" : : "Activity associated with this hint node. Various parts of the NPC AI play this activity at times. i.e. Actbusy nodes will play this activity when an NPC acts busy on the node."
	nodefov(choices) : "Node FOV" : 180 : "Imagine this node requires that an NPC be in the node's field of view in order to use this hint." =
		[
		45: "45 Degrees"
		90: "90 Degrees"
		180: "180 Degrees"
		360: "360 Degrees"
		]

	starthintdisabled(boolean) : "Start Hint Disabled" : 0
	group(string) : "Hint Group" : : "If specified, gives the hint a specific group name.  Useful for hint nodes that need to be logically grouped together. NPCs may also refuse to use hint nodes that don't match their hint group."
	targetnode(node_dest) : "Target node" : -1 : "The node ID of an associated target node, if any."
	ignorefacing(choices) : "Ignore Facing" : 2 : "Don't pay attention to the facing of the node. May not apply to a given hint type." =
		[
		0: "No"
		1: "Yes"
		2: "Default"
		]

	minimumstate(choices) : "Minimum State" : 1 : "Require an NPC have a minimum state to use the hint." =
		[
		1: "Idle"
		2: "Alert"
		3: "Combat"
		]

	maximumstate(choices) : "Maximum State" : 3 : "Require an NPC have a maximum state to use the hint." =
		[
		1: "Idle"
		2: "Alert"
		3: "Combat"
		]

	radius(integer) : "Radius" : 0 : "How close an NPC must be to consider this hint. 0 means infinite."

	// Inputs
	input EnableHint(void) : "Enable hint."
	input DisableHint(void) : "Disable hint."
	]

@BaseClass base(BaseEntityPoint) = LeadGoalBase
	[
	actor(target_name_or_class) : "Actor(s) to affect"
	goal(string) : "Target Entity"
	waitpointname(target_destination) : "Point to wait at if the target's not visible"
	waitdistance(float) : "Wait until player gets this close"
	leaddistance(float) : "Lead Distance" : 64 : "The player is considered to be lagging if they are beyond this distance. The Actor will consider retrieving when the player is 4x 'Lead Distance' away."
	retrievedistance(float) : "Retrieve Distance" : 96 : "The distance from the player that the NPC should return to when retrieving a lagging player. Must be between ('Lead Distance' + 24) and ('Lead Distance' * 4) to avoid the leader ping-ponging."
	successdistance(float) : "Success Distance" : 0 : "The distance from the player (to the NPC) that the player must be within for the Lead to succeed, once the NPC has reached the goal. If set to 0, it'll use the lead distance instead (for legacy support)."
	run(boolean) : "Run instead of Walk" : 0
	retrieve(choices) : "Retrieve player?" : 1 =
		[
		0: "No, just idle and wait"
		1: "Yes, move to retrieve"
		]

	comingbackwaitforspeak(choices) : "Before Coming Back, Wait for speech?" : 1 =
		[
		0: "No, come back while speaking"
		1: "Yes, wait for speech to finish"
		]

	retrievewaitforspeak(choices) : "On Retrieve, Wait for speech?" : 1 =
		[
		0: "No, start leading while speaking"
		1: "Yes, wait for speech to finish"
		]

	dontspeakstart(choices) : "Speak start greeting?" : 0 =
		[
		0: "Yes, speak the start greeting"
		1: "No, don't speak the greeting"
		]

	leadduringcombat(choices) : "Lead during combat?" : 0 =
		[
		0: "No. Stop to fight, resume leading when safe."
		1: "Yes, lead while fighting."
		]

	gagleader(choices) : "Gag Leader?" : 0 =
		[
		0: "No. Speak lead concepts normally, respecting other lead speech settings."
		1: "Yes, don't speak any lead concepts at all, overriding all other lead speech settings."
		]

	attractplayerconceptmodifier(string) : "Attract player concept modifier" : : "Appended to the keyvalues passed into the response rules when the 'TLK_LEAD_ATTRACTPLAYER' concept is spoken."
	waitoverconceptmodifier(string) : "Player wait over concept modifier" : : "Appended to the keyvalues passed into the response rules when the 'TLK_LEAD_WAITOVER' concept is spoken."
	arrivalconceptmodifier(string) : "Arrival concept modifier" : : "Appended to the keyvalues passed into the response rules when the 'TLK_LEAD_ARRIVAL' concept is spoken."
	postarrivalconceptmodifier(string) : "Post-arrival concepts modifier"
	successconceptmodifier(string) : "Success concept modifier" : : "Appended to the keyvalues passed into the response rules when the 'TLK_LEAD_SUCCESS' concept is spoken."
	failureconceptmodifier(string) : "Failure concept modifier" : : "Appended to the keyvalues passed into the response rules when the 'lead_fail' concept is spoken."
	comingbackconceptmodifier(string) : "Coming Back concept modifier" : : "Appended to the keyvalues passed into the response rules when the 'TLK_LEAD_RETRIEVE' concept is spoken. Spoken as the NPC starts returning to the player to retrieve them."
	retrieveconceptmodifier(string) : "Retrieve concept modifier" : : "Appended to the keyvalues passed into the response rules when the 'TLK_LEAD_COMINGBACK' concept is spoken. Spoken when NPC has finally reached the player to retrieve them."
	spawnflags(flags)  =
		[
		1: "[1] No def success" : 0
		2: "[2] No def failure" : 0
		4: "[4] Use goal facing" : 1
		]


	// Inputs
	input Activate(void) : "Begin the leading behavior"
	input Deactivate(void) : "Stop the leading behavior"
	input SetSuccess(void) : "Notify success of leading"
	input SetFailure(void) : "Notify failure of leading"

	// Outputs
	output OnArrival(void) : "Fires when NPC reaches the lead point"
	output OnArrivalDone(void) : "Fires when NPC has played out any arrival speech"
	output OnSuccess(void) : "Fires when NPC achieves the goal"
	output OnFailure(void) : "Fires when NPC fails to achieves the goal"
	output OnDone(void) : "Fires when NPC completes behavior (any post-success or fail acting is complete)"
	]

@BaseClass base(SystemLevelChoice) = RopeKeyFrame
	[
	spawnflags(flags)  =
		[
		1: "[1] Auto Resize" : 0
		]

	nextkey(target_destination) : "Next Rope" : : "Name of the next rope along this path."
	slack(integer) : "Slack" : 25 : "How much extra length the rope has (by default it has the length between its two endpoints in the editor)."
	type(choices) : "Type" : 0 =
		[
		0: "Rope"
		1: "Semi-rigid"
		2: "Rigid"
		]

	subdiv(integer) : "Subdivision" : 2 : "Number of subdivisions between each rope segment. Maximum value is 8. Higher values make smoother ropes, but are slower to render."
	barbed(boolean) : "Barbed" : 0 : "Test effect that makes the rope look sharper and more barbed."
	width(float) : "Width (1-64)" : 2 : "Width of the rope."
	texturescale(float) : "Texture Scale" : 1 : "This changes the texture resolution. The default resolution is 4 pixels per unit. Larger values stretch the texture and smaller values scrunch it up."
	collide(boolean) : "Collide with world" : 0
	dangling(choices) : "Start Dangling" : 0 : "When set to Yes, the rope starts out detached from its target endpoint." =
		[
		0: "Start Attached"
		1: "Start Dangling"
		]

	breakable(choices) : "Breakable" : 0 : "When set to yes, the rope can be detached from either endpoint when shot." =
		[
		0: "Indestructible"
		1: "Breakable"
		]

	ropematerial(material) : "Rope Material" : "cable/cable.vmt" : "The material to use when rendering the rope."
	usewind(choices) : "Wind" : 0 : "Is the rope affected by wind?" =
		[
		0: "Ignore Wind"
		1: "Affected by Wind"
		]

	movespeed(integer) readonly : "Speed (unused)" : 64
	positioninterpolator(integer) readonly : "Position Interpolator" : 2 : "Curve Type. Currently only Rope is fully supported."

	// Inputs
	input SetScrollSpeed(float) : "Set the speed at which the texture scrolls."
	input SetForce(vector) : "Apply a force instantaneously to the rope. The parameter should be a vector containing the force to be applied (X Y Z)."
	input Break(void) : "Break the rope, if it's marked to do so."
	]

@BaseClass base(SetSkin) = SetModel
	[
	linedivider_prop(string) readonly : "----------------------------------------------------------------------------------------------------------" : : "Prop"
	model(studio) : "World Model" : : "The model to use for this entity."
	]

@BaseClass base(BaseEntityBrush) = TriggerOnce
	[
	spawnflags(flags)  =
		[
		1: "[1] Clients/Players" : 1
		2: "[2] NPCs" : 0
		4: "[4] func_pushable" : 0
		8: "[8] Physics Objects" : 0
		16: "[16] Only player ally NPCs" : 0
		64: "[64] Everything (not including physics debris)" : 0
		1024: "[1024] Physics debris" : 0
		4096: "[4096] Correctly account for object mass (trigger_push used to assume 100Kg) and multiple component physobjs (car, blob...)" : 1
		]

	startdisabled(boolean) : "Start Disabled?" : 0
	filtername(filterclass) : "Filter Name" : : "A filter entity to test potential activators against."

	// Inputs
	input Enable(void) : "Enable this trigger."
	input Disable(void) : "Disable this trigger, some trigger entities may also fire OnEndTouch when disabled."
	input Toggle(void) : "Toggles this trigger between enabled and disabled states."
	input TouchTest(void) : "Triggers either the OnTouching or OnNotTouching outputs for whether anything is touching this entity."
	input StartTouch(void) : "Fires the OnStartTouch output. If called by an entity inside the trigger, the OnStartTouch will be fired for them as the activator. Note that this input is passed even if the player is being treated as 'not' touching the trigger while inside it."

	// Outputs
	output OnTrigger(void) : "Fired whenever the trigger is activated."
	output OnStartTouch(void) : "Fired when an entity starts touching this trigger. The touching entity must pass this trigger's filters to cause this output to fire."
	output OnTouching(void) : "Fired when the TouchTest input is called, and an entity is touching this. Does not call activators."
	output OnNotTouching(void) : "Fired when the TouchTest input is called, and no entity is touching this. Does not call activators."
	]

@BaseClass base(BaseEntityPoint) = TwoObjectPhysics
	[
	spawnflags(flags)  =
		[
		1: "[1] No Collision until break" : 0
		4: "[4] Start inactive" : 0
		8: "[8] Change mass to keep stable attachment to world" : 0
		16: "[16] Do not connect entities until turned on" : 0
		]

	attach1(target_destination) : "Entity 1 (Yellow)" : : "The first entity to constrain. If blank the second entity will be constrained to the World."
	attach2(target_destination) : "Entity 2 (Blue)" : : "The second entity to constrain. If blank the first entity will be constrained to the World."
	constraintsystem(target_destination) : "Constraint System Manager" : : "The name of a phys_constraintsystem that this constraint should be a part of. All constraints on a set of entities should be placed in the same system, or they will fight each other during simulation."
	forcelimit(float) : "Force Limit to Break (lbs)" : 0 : "The amount of force an impact must apply to the constraint to break it. A way of calculating this is to set it to the mass of an object that would break this constraint if it were resting on the constrainted objects."
	torquelimit(float) : "Torque Limit to Break (lbs * distance)" : 0 : "The amount of torque required to break the constraint. A way of calculating this is to multiply any reference mass by the resting distance (from the center of mass of the object) needed to break the constraint."
	breaksound(sound) : "Play Sound on Break" : : "A sound played when the constraint is broken."
	teleportfollowdistance(float) : "Follow teleport distance" : 0 : "If one object teleports more than this many units away it will cause the other constrained object to teleport to an appropriate relative position."

	// Inputs
	input Break(void) : "Force the constraint to break."
	input TurnOn(void) : "Enable the constraint.  Do this when the objects don't exist when the constraint spawns - or when you have deactivated the constraint.  Broken constraints can NOT be turned on.  They have been deleted."
	input TurnOff(void) : "Disable this constraint."

	// Outputs
	output OnBreak(void) : "Fired when the constraint breaks."
	]

@BaseClass base(BaseEntityPoint, BaseFadeProp) = Weapon
	[
	spawnflags(flags)  =
		[
		1: "[1] Start constrained" : 0
		2: "[2] Deny player pickup (reserve for NPC)" : 0
		]


	// Outputs
	output OnPlayerUse(void) : "Fires when the player +uses this weapon."
	output OnPlayerPickup(void) : "Fires when the player picks up this weapon."
	output OnNPCPickup(void) : "Fires when an NPC picks up this weapon."
	output OnCacheInteraction(void) : "Fires when the player 'proves' they've found this weapon. Fires on: Player Touch and +USE pickup."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/ai_battle_line")
= ai_battle_line: "Battle line"
	[
	spawnflags(flags)  =
		[
		1: "[1] Use parent's orientation" : 0
		]

	actor(target_name_or_class) : "Actor(s) or squad to affect"
	active(boolean) : "Active" : 0
	strict(boolean) : "Strict" : 1 : "Player orders can override, applies to allies only"

	// Inputs
	input Activate(void)
	input Deactivate(void)
	]

@PointClass base(BaseEntityPoint) 
	sphere(radius)
	iconsprite("editor/ficool2/ai_changehintgroup")
= ai_changehintgroup: "Change Hint Group"
	[
	searchtype(choices) : "Search Type" : 0 : "How to search for the entities to change." =
		[
		0: "Entity Name"
		1: "Classname"
		2: "Old Hint Group"
		]

	searchname(string) : "Name to search for"
	newhintgroup(string) : "New Hint Group"
	radius(string) : "Search Radius" : "0.0" : "Radius to search (0 for all of map)"
	hintlimiting(boolean) : "Hint Limit Nav" : 0 : "Limits NPC to using specified hint group for navigation requests, does not limit local navigation."

	// Inputs
	input Kill(void) : "Removes this entity from the world"
	input Activate(void) : "Change the Hint Group"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ai_changetarget.vmt")
= ai_changetarget: "Changes the target keyvalue of an entity."
	[
	target(target_destination) : "Target entity" : : "Name of entity whose target will be changed."
	m_isznewtarget(string) : "New Target"

	// Inputs
	input Kill(void) : "Removes this entity from the world"
	input Activate(void) : "Changes the entities target"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/ai_goal_assault")
= ai_goal_assault: "AI Goal Assault"
	[
	actor(target_name_or_class) : "Actor(s) to affect" : : "NPC's that should perform this assault"
	rallypoint(target_destination) : "Rally Point Set" : : "Root name of rally points for this assault. Use an asterisk '*' after the root name to match all with the same root."
	searchtype(choices) : "Search Type" : 0 : "How to search for the entities using the targetname." =
		[
		0: "Entity Name"
		1: "Classname"
		]

	startactive(boolean) : "Start Active" : 0
	assaultcue(choices) : "Assault Cue" : 1 =
		[
		1: "Entity System Input"
		2: "Gunfire"
		3: "Don't wait for a cue."
		]

	rallyselectmethod(choices) : "Rally Point Selection Method" : 0 =
		[
		0: "Priority, Closest (default)"
		1: "Random"
		2: "Priority, Furthest"
		]

	branchmethod(choices) : "Branching Assault Selection Method" : 0 =
		[
		0: "Random (default)"
		1: "Closest"
		2: "Furthest"
		]


	// Inputs
	input Activate(void) : "Begin the assault behavior"
	input Deactivate(void) : "Cease the assault behavior"
	input BeginAssault(void) : "Begin assault phase"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/ai_goal_fightfromcover.vmt")
= ai_goal_fightfromcover: "AI Fight from Cover"
	[
	actor(target_destination) : "Actor(s) to affect"
	goal(target_destination) : "Target Entity" : : "The name of the entity to follow. If blank, and the actor likes the player, then defaults to player"
	directionalmarker(target_destination) : "Directional Marker" : : "Specify the entity that indicates the direction of battle"
	generichinttype(string) : "Generic Hint Type" : : "Behavior looks for 'generic' hints, and requires a text tag to search for"
	width(float) : "Zone Width" : 600 : "Width of the hint search area"
	length(float) : "Zone Length" : 480 : "Length of the hint search area"
	height(float) : "Zone Height" : 2400 : "Offset in the direction of the hint search area"
	bias(float) : "Zone Bias" : 60 : "Offset in the direction of the hint search area"
	startactive(boolean) : "Start Active" : 0

	// Inputs
	input Activate(void)
	input Deactivate(void)
	input SetDirectionalMarker(string) : "Specify the entity that indicates the direction of battle"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ai_goal_standoff.vmt")
= ai_goal_standoff: "AI Goal Standoff"
	[
	actor(target_name_or_class) : "Actor(s) to affect"
	searchtype(choices) : "Search Type" : 0 : "How to search for the entities using the targetname." =
		[
		0: "Entity Name"
		1: "Classname"
		]

	startactive(boolean) : "Start Active" : 0
	hintgroupchangereaction(choices) : "Reaction to tactical change" : 1 : "What to do if leader moves, threat is neutralized, hint group changes, etc" =
		[
		0: "Move when ready (default AI)"
		1: "Move when seek cover"
		2: "Move immediately"
		]

	aggressiveness(choices) : "Aggressiveness" : 2 =
		[
		0: "Very low"
		1: "Low"
		2: "Medium"
		3: "High"
		4: "Very High"
		5: "Custom"
		]

	playerbattleline(boolean) : "Player battleline" : 1 : "Player defines a battle line, applies to allies only"
	stayatcover(boolean) : "Stay at cover location" : 0 : "When have suitable cover, don't change it (disables advancing to battle line)"
	abandonifenemyhides(boolean) : "Abandon if enemies hide" : 0 : "If no enemy detected recently, stop the standoff"
	customcoveronreload(boolean) : "Custom: Take cover to reload" : 1
	custommintimeshots(float) : "Custom: Min time wait to shoot" : 2 : "Minimum duration of time after a burst of shooting before trying again"
	custommaxtimeshots(float) : "Custom: Max time wait to shoot" : 4 : "Minimum duration of time after a burst of shooting before trying again"
	customminshots(integer) : "Custom: Min shots in a burst" : 1
	custommaxshots(integer) : "Custom: Max shots in a burst" : 4
	customoddscover(integer) : "Custom: Odds cover on damage" : 25 : "If damaged, the chances react by taking immediate cover"

	// Inputs
	input Activate(void) : "Begin contesting position."
	input Deactivate(void) : "Cease contesting position."
	input UpdateActors(void) : "Forces an update on this goal's actors."
	input SetAggressiveness(integer) : "Set aggressiveness."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/ai_npc_eventresponsesystem")
= ai_npc_eventresponsesystem: "An entity that allows you to generate events for nearby friendly NPCs to respond to."
	[

	// Inputs
	input TriggerResponseEvent(string) : "Fire an NPC Response Event. The parameter should match the response rules concept that any nearby friendly NPCs will try to speak."
	input ForceTriggerResponseEvent(string) : "Fire an NPC Response Event, and force the first available NPC to speak the response (breaking them out of any scene they're in). The parameter should match the response rules concept that any nearby friendly NPCs will try to speak."
	input ForceTriggerResponseEventNoCancel(string) : "Fire an NPC Response Event, and force the first available NPC to speak the response (but don't break them out of any scene they're in). The parameter should match the response rules concept that any nearby friendly NPCs will try to speak."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ai_relationship.vmt")
	line(255 255 255, targetname, subject)
	line(255 255 255, targetname, subject, targetname, target)
	sphere(radius)
= ai_relationship: "AI Relationship - Sets relationships between groups of NPCs in the AI."
	[
	subject(target_name_or_class) : "Subject(s)" : : "This is the NPC(s) whose disposition will change. May be a targetname or a classname."
	target(target_name_or_class) : "Target(s)" : : "This is the NPC(s) about whom the Subject(s) will change their disposition. May be a targetname or a classname."
	disposition(choices) : "Disposition" : 3 : "Choose the way the Subject(s) should feel about the Target(s)" =
		[
		1: "Hate"
		2: "Fear"
		3: "Like"
		4: "Neutral"
		]

	radius(float) : "Radius for subject" : 0
	rank(integer) : "Disposition Priority" : 0 : "How much the Subject(s) should Like/Hate/Fear the Target(s). Higher priority = stronger feeling."
	startactive(boolean) : "Start Active" : 0
	reciprocal(boolean) : "Reciprocal" : 0 : "Set this to YES to have the new relationship mirrored by Target"
	spawnflags(flags)  =
		[
		1: "[1] Notify subject of target's location" : 0
		2: "[2] Notify target of subject's location" : 0
		]


	// Inputs
	input ApplyRelationship(void) : "Apply relationship changes. This will change all Subject entities' relationships to all Target entities. \n\nIMPORTANT: Once you ApplyRelationships, this entity is then 'ALWAYS ON' until you send a Disable input or RevertRelationship input. During the time this entity is 'ON', any entities that spawn who match the Subject or Target names will be affected. \n\nIMPORTANT: Unpredictable results may occur when two ai_relationship entities refer to the same set or subset of target or subject entities. This situation should be avoided."
	input RevertRelationship(void) : "Revert relationship changes. This will return the relationship to what it was at the time the ApplyRelationship input was called (or when this ai_relationship was spawned if StartActive is set)."
	input RevertToDefaultRelationship(void) : "Revert relationship changes to the default relationship, which may have changed since this ai_relationship was applied. This returns control of the entity relationship to the code."
	]

@PointClass base(BaseEntityPoint) 
	sphere(PlayerActorProximity)
	sphere(ActorTargetProximity)
	sphere(PlayerTargetProximity)
	line(255 255 0, targetname, actor)
	line(255 255 255, targetname, target)
	iconsprite("editor/ai_script_conditions.vmt")
= ai_script_conditions: "AI Script Conditions"
	[
	actor(target_destination) : "Actor (optional)" : : "NPC Target"
	startdisabled(boolean) : "Start Disabled" : 1
	minimumstate(choices) : "Minimum state" : 1 =
		[
		1: "Idle"
		2: "Alert"
		3: "Combat"
		]

	maximumstate(choices) : "Maximum state" : 3 =
		[
		1: "Idle"
		2: "Alert"
		3: "Combat"
		]

	scriptstatus(choices) : "Actor is running a script?" : 2 =
		[
		0: "No"
		1: "Yes"
		2: "Don't care"
		]

	requiredtime(float) : "Required Time" : 0 : "Duration of time that all the conditions must be true"
	mintimeout(float) : "Minimum time out" : 0 : "Minimum time before OnConditionsTimeout is fired. 0 = never expire."
	maxtimeout(float) : "Maximum time out" : 0 : "Maximum time before OnConditionsTimeout is fired. 0 = ignore (If you don't specify a Maximum timeout, conditions will time out at exactly Minimum Time Out. If you DO specify a Maximum time out, timeout will occur randomly between Minimum and Maximum time out values.)"
	actorseeplayer(choices) : "Actor Sees Player" : 2 =
		[
		0: "No"
		1: "Yes"
		2: "Don't care"
		]

	playeractorproximity(float) : "Player distance" : 0 : "The distance the player must/must not be to the actor. Negative values for NOT, 0 for ignore."
	playeractorfov(float) : "Player FOV for Actor " : 360 : "Specify angle of view cone in degrees. Negative value = NOT"
	playeractorfovtruecone(choices) : "Play FOV to Actor is a true view cone" : 0 : "Player's view cone is evaluated as a true cone, not pie slice " =
		[
		0: "No - Tall pie slice"
		1: "Yes - True view cone"
		]

	playeractorlos(choices) : "Player has LOS to Actor" : 2 : "Checks that the player has clear Line of Sight to the Actor." =
		[
		0: "No"
		1: "Yes"
		2: "Don't care"
		]

	target(target_destination) : "Target (Optional)" : : "Optional entity to include in conditions."
	actorseetarget(choices) : "Actor Sees Target" : 2 =
		[
		0: "No"
		1: "Yes"
		2: "Don't care"
		]

	actortargetproximity(float) : "Target distance" : 0 : "The distance the actor must/must not be to the Target. Negative values for NOT, 0 for ignore."
	playertargetproximity(float) : "Player distance from Target" : 0 : "The distance the player must/must not be to the Target. Negative values for NOT, 0 for ignore."
	playertargetfov(float) : "Player FOV for Target" : 360 : "Specify angle of view cone in degrees. Negative value = NOT"
	playertargetfovtruecone(choices) : "Player FOV to Target is a true view cone" : 0 : "Player's view cone is evaluated as a true cone, not pie slice " =
		[
		0: "No - Tall pie slice"
		1: "Yes - True view cone"
		]

	playertargetlos(choices) : "Player has LOS to Target" : 2 : "Checks that the player has clear Line of Sight to the Target" =
		[
		0: "No"
		1: "Yes"
		2: "Don't care"
		]

	playerblockingactor(choices) : "Player blocking Actor" : 2 : "Checks that the player is blocking the Actor's path" =
		[
		0: "No"
		1: "Yes"
		2: "Don't care"
		]

	actorinpvs(choices) : "Actor in Player's PVS" : 2 : "Checks that the actor is in the player's PVS" =
		[
		0: "No"
		1: "Yes"
		2: "Don't care"
		]

	spawnflags(flags)  =
		[
		1: "[1] Fire outputs with the Actor as Activator" : 0
		]


	// Inputs
	input Enable(void) : "Enable this entity"
	input Disable(void) : "Disable this entity"

	// Outputs
	output OnConditionsSatisfied(void) : "Fires when AI conditions satisfied"
	output OnConditionsTimeout(void) : "Fires when AI conditions timed out"
	output NoValidActor(void) : "Fires if/when there are no matching actors in the map."
	]

@PointClass base(BaseEntityPoint) 
	sphere(volume)
	line(255 255 255, targetname, locationproxy)
	line(255 255 255, targetname, target, targetname, locationproxy)
	iconsprite("editor/ai_sound.vmt")
= ai_sound: "This entity makes sounds or smells that can be sensed by NPCs, but not by the player. This can be used to cause reactions in nearby NPCs.\n\nSound Types\n  Combat: Will cause most NPCs to become alert\n  World: Will cause most NPCs to become alert\n  Danger: Will cause most NPCs to move away from the position of the sound\n  Bullet Impact: \n  Carcass: \n  Meat: \n  Garbage: \n  Thumper: causes antlions to run away briefly\n  Readiness: (Low, Medium, High) Causes player companions that can hear this sound to change readiness\n"
	[
	volume(integer) : "Volume" : 120 : "How far away this sound can be heard. This is a radius."
	duration(float) : "Duration" : "0.5" : "How long the sound persists each time you insert it."
	soundtype(choices) : "Sound Type" : 0 : "The type of sound or smell will determine the reaction of NPCs that sense it." =
		[
		0: "Select one"
		1: "Combat"
		2: "World"
		8: "Danger"
		16: "Bullet Impact"
		32: "Carcass"
		64: "Meat"
		128: "Garbage"
		256: "Thumper"
		512: "Bugbait"
		1024: "Physics Danger"
		2048: "Sniper Danger (only scares sniper)"
		4096: "Move Away - Most NPCs will clear the radius of this sound when heard."
		16384: "Readiness - Low"
		32768: "Readiness - Medium"
		65536: "Readiness - High"
		]

	soundcontext(choices) : "Additional sound context (optional)" : 0 : "Optional settings specifying such things as who can or cannot hear the sound." =
		[
		0: "Select one"
		1048576: "From sniper"
		2097152: "Gunfire (use with combat sound type)"
		4194304: "Mortar (pending explosion)"
		8388608: "Only Combine can hear"
		67108864: "Combine cannot can hear"
		16777216: "React to source (face sound owner)"
		33554432: "Explosion (use with combat sound type)"
		134217728: "Danger approach (run if see sound owner, turn to face if not)"
		268435456: "Only allies can hear"
		]

	locationproxy(target_destination) : "Location Proxy" : : "The name of an entity to use as a proxy to determine the location at which to make the sound. If you specify an entity here, the sound will be made at that entity's location (!player included)"

	// Inputs
	input EmitAISound(void) : "Make the sound."
	]

@PointClass base(BaseEntityPoint, ResponseContext, EnableDisable) 
	line(255 255 255, targetname, subject)
	iconsprite("editor/ficool2/ai_speechfilter.vmt")
= ai_speechfilter: "An entity that can be used to control the idle speech patterns of a set of NPCs."
	[
	subject(target_destination) : "Subject(s)" : : "This is the NPC(s) whose speech we're filtering. May be a targetname or a classname."
	idlemodifier(float) : "Idle modifier." : "1.0" : "Multiplier to the percentage chance that our NPC(s) will idle speak. Set to 0 to prevent all idle speech."
	neversayhello(boolean) : "Greet Player?" : 0 : "If set to Yes, our NPC(s) won't greet the player when they first meet them."

	// Inputs
	input SetIdleModifier(float) : "Allows designers to change the idle modifier at runtime"
	]

@PointClass base(BaseEntityPoint) 
	sphere(m_flRadius)
	color(255 0 255)
	iconsprite("editor/aiscripted_schedule")
	line(255 255 255, targetname, m_iszentity)
	line(255 255 255, targetname, m_iszentity, targetname, goalent)
= aiscripted_schedule: "Issues a command to an NPC without taking the NPC out of its AI. This does not seize control of the NPC as a scripted_sequence does."
	[
	m_iszentity(target_destination) : "Target NPC" : : "The name or classname of an NPC to use."
	m_flradius(integer) : "Search Radius (0=everywhere)" : 0 : "Radius to search within for an NPC to use. 0 searches everywhere."
	graball(boolean) : "All in radius" : 0 : "Whether to grab all matching NPCs in the specified radius, instead of just one."
	spawnflags(flags)  =
		[
		4: "[4] Repeatable" : 1
		1024: "[1024] Search Cyclically" : 0
		2048: "[2048] Don't Complain" : 0
		]

	forcestate(choices) : "AI state to set" : 0 =
		[
		0: "<None>"
		1: "Set state to IDLE"
		2: "Set state to ALERT"
		3: "Set state to COMBAT"
		]

	schedule(choices) : "Schedule to run" : 1 =
		[
		0: "<None>"
		1: "Walk to Goal Entity"
		2: "Run to Goal Entity"
		3: "Set enemy to Goal Entity"
		4: "Walk Goal Path"
		5: "Run Goal Path"
		6: "Set enemy to Goal Entity AND Run to Goal Entity"
		]

	interruptability(choices) : "Interruptability" : 0 =
		[
		0: "General"
		1: "Damage or Death"
		2: "Death"
		]

	goalent(target_destination) : "Goal entity" : : "Provides the name of a schedule-specific goal entity (see 'Schedule to run')"

	// Inputs
	input StartSchedule(void) : "Starts the scripted schedule. This will first locate an NPC that matches the given target, then tell the NPC to run the specified schedule."
	input StopSchedule(void) : "Tells the NPC to stop the scripted schedule"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ambient_generic.vmt")
	sphere(radius)
	line(255 255 0, targetname, sourceEntityName)
= ambient_generic: "Universal ambient sound. Use it to play and control a single sound."
	[
	spawnflags(flags)  =
		[
		1: "[1] Infinite Range" : 0
		16: "[16] Start Silent" : 1
		32: "[32] Is NOT Looped" : 1
		]

	message(sound) : "Sound Name" : : "Name of the GameSound entry for the sound to play. Also supports direct .wav filenames."
	health(integer) : "Volume" : 10 : "Sound volume, expressed as a range from 0 to 10, where 10 is the loudest."
	radius(float) : "Sound Range" : 1250 : "Maximum distance at which this sound is audible. Overridden by soundscripts."
	pitch(integer) : "Pitch" : 100 : "Sound pitch, expressed as a range from 1(low) to 255(high), where 100 is the sound's default pitch. Overridden by soundscripts."
	sourceentityname(target_destination) : "Source Entity" : : "If an entity is specified, sound will come from this named entity instead of the location of ambient_generic."
	soundflags(choices) : "Sound Flags" : 0 : "Additional options for your sound." =
		[
		0: "None"
		128: "[128] Pause when game is paused"
		256: "[256] Ignore phonemes (no lip-syncing)"
		1024: "[1024] Don't overwrite existing sound on channel (untested)"
		384: "Pause and ignore phonemes"
		1280: "Ignore phonemes and don't overwrite"
		1152: "Pause and don't overwrite"
		1408: "Pause, ignore phonemes and don't overwrite"
		]

	preset(choices) : "Dynamic Presets" : 0 : "If used, overrides many of the below properties (+pitch) to preset values." =
		[
		0: "None"
		1: "Huge Machine"
		2: "Big Machine"
		3: "Machine"
		4: "Slow Fade in"
		5: "Fade in"
		6: "Quick Fade in"
		7: "Slow Pulse"
		8: "Pulse"
		9: "Quick pulse"
		10: "Slow Oscillator"
		11: "Oscillator"
		12: "Quick Oscillator"
		13: "Grunge pitch"
		14: "Very low pitch"
		15: "Low pitch"
		16: "High pitch"
		17: "Very high pitch"
		18: "Screaming pitch"
		19: "Oscillate spinup/down"
		20: "Pulse spinup/down"
		21: "Random pitch"
		22: "Random pitch fast"
		23: "Incremental Spinup"
		24: "Alien"
		25: "Bizzare"
		26: "Planet X"
		27: "Haunted"
		]

	linedivider_snd(string) : "-----------------------" : : "More complex values below."
	volstart(integer) : "Transition Volume" : 0 : "The Volume to start/end with. Use with Fade In and Out times."
	fadeinsecs(integer) : "Volume Transition Time - Start (0-100)" : 0 : "Time in seconds for the sound to transition from the Transition Volume to the set volume as it starts playing."
	fadeoutsecs(integer) : "Volume Transition Time - Stop (0-100)" : 0 : "Time in seconds for the sound to transition from the set volume to the Transition Volume as it stops playing."
	pitchstart(integer) : "Transition Pitch" : 100 : "Pitch to start with/end. Use with Spin Up and Spin Down."
	spinup(integer) : "Pitch Transition Time - Start (0-100)" : 0 : "The time taken to change from the Transition Pitch to the final Pitch while the sound starts playing. Simulates the noise powering-up when an object is activated."
	spindown(integer) : "Pitch Transition Time - Stop (0-100)" : 0 : "The time taken to transition from the Pitch to the Transition pitch while the sound stops playing. Simulates the noise fading out as the object shuts down."
	lfotype(choices) : "LFO type" : 0 : "The kind of Low Frequency Oscillation to apply to the sound. Allows subtle modification to the sound. Square waves instantly switch between the high and low values, whereas Triangle Waves gradually switch between the two." =
		[
		0: "None"
		1: "Square Wave"
		2: "Triangle Wave"
		3: "Random"
		]

	lforate(integer) : "LFO rate (0-1000)" : 0 : "How often the Low Frequency Oscillation repeats itself."
	lfomodpitch(integer) : "LFO Effect On Pitch (0-100)" : 0 : "The amount the Low Frequency Oscillation affects the pitch."
	lfomodvol(integer) : "LFO Effect On Volume (0-100)" : 0 : "The amount the Low Frequency Oscillation affects the volume."
	cspinup(integer) : "Incremental Spinup Count" : 0 : "Appears non-functional."

	// Inputs
	input Pitch(integer) : "Sets the sound pitch, expressed as a range from 1 to 255, where 100 is the sound's default pitch."
	input PlaySound(void) : "Starts the sound or restart from beginning (if looped)."
	input StopSound(void) : "Stops the sound if it is playing. Only works properly if the looped flag is checked."
	input ToggleSound(void) : "Toggles the sound between playing and stopping."
	input Volume(integer) : "Sets the sound volume, expressed as a range from 0 to 10, where 10 is the loudest."
	input FadeIn(integer) : "Fades the sound up to full volume over a specified number of seconds, with a range from 0 to 100 seconds."
	input FadeOut(integer) : "Fades the sound to silence over a specified number of seconds, with a range from 0 to 100 seconds. Sound is forced to full volume first!"
	input SetSound(string) : "Sets the sound this ambient_generic should play."

	// Outputs
	output OnSoundFinished(void) : "Fires when the sound finishes playing. NOTE: This sound should be set to pause when the game is paused."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/assault_point.vmt")
	sphere(allowdiversionradius)
	line(255 255 255, targetname, nextassaultpoint)
= assault_assaultpoint: "(Assault) assault point"
	[
	assaultgroup(string) : "Assault Hint Group" : : "NPC's movements are constrained to this hint group once assault has begun"
	nextassaultpoint(target_destination) : "Next assault point (optional)"
	assaulttimeout(float) : "Assault time out" : "3.0" : "This point is cleared when no enemies are seen for this long (seconds)"
	clearoncontact(boolean) : "Clear on contact with enemies" : 0 : "If you come in contact with enemies while approaching the assault point, clear our assault point"
	allowdiversion(boolean) : "Allow diversion" : 0 : "If you come in contact with enemies while approaching the assault point, divert to kill them. Resume the assault once contact is lost."
	allowdiversionradius(float) : "Diversion Proximity" : 0 : "If Allow Diversion is set, NPC will only divert from assault to attack an enemy that is within this distance of the assault point. 0 = No limit."
	nevertimeout(boolean) : "Never Timeout" : 0 : "If set, the assault never ends for NPCs assaulting this point. Useful for forcing NPCs back to a point."
	strict(choices) : "Strict?" : 0 =
		[
		0: "No, NPC may move from point to attack"
		1: "Yes, NPC may not move to attack"
		]

	spawnflags(flags)  =
		[
		1: "[1] Clear this point upon arrival, UNCONDITIONALLY" : 0
		]

	forcecrouch(boolean) : "Force Crouch" : 0 : "NPCs using this assault point are forced into crouching while holding it."
	urgent(boolean) : "Urgent" : 0 : "If true, NPCs will consider movement to this assault point as Urgent Navigation."
	assaulttolerance(choices) : "Attack Tolerance" : 36 : "How far this NPC may move from the assault point to try to attack an enemy." =
		[
		36: "Tight (3ft)"
		72: "Medium (6ft)"
		120: "Large (10ft)"
		]


	// Inputs
	input SetClearOnContact(integer) : "Set the clear on contact flag. NPCs who spot enemies while running to the assault point, or while waiting at it, will immediately Clear it."
	input SetAllowDiversion(integer) : "Set the allow diversion flag. NPCs who spot enemies while running to the assault point, or while waiting on it, will divert away (leave Assault mode) to deal with the enemies. Upon losing enemies, they'll go back to Assault mode, and return to this assault point."
	input SetForceClear(integer) : "Set the Force Clear flag. NPCs who are currently running to the assault point will Clear it immediately. NPCs who acquire it in the future will Clear it automatically."

	// Outputs
	output OnArrival(void) : "Fires when the NPC reaches this assault point"
	output OnAssaultClear(void) : "Fires when this assault point is cleared of enemies"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/assault_rally.vmt")
	line(255 255 255, targetname, assaultpoint)
= assault_rallypoint: "(Assault) rally point"
	[
	assaultpoint(target_destination) : "Assault Point" : : "Location to move to as assault begins"
	assaultdelay(float) : "Assault Delay" : 0 : "How long to wait after cue is given before assault begins."
	rallysequence(string) : "Rally Sequence" : : "Override the NPC's wait activity by entering a sequence name."
	priority(integer) : "Priority" : 1 : "Higher priority rally points get selected first."
	forcecrouch(boolean) : "Force Crouch" : 0 : "NPCs using this assault point are forced into crouching while holding it."
	urgent(boolean) : "Urgent" : 0 : "If true, NPCs will consider movement to this rally point as Urgent Navigation. NPCs will ignore prop_physics obstructions, and eventually teleport to reach the point."
	lockpoint(boolean) : "Lock Point" : 1 : "Should this point be locked by a character using it."

	// Outputs
	output OnArrival(void) : "Fires when the NPC reaches this rally point."
	]

@PointClass base(BaseEntityPoint, Angles, SystemLevelChoice) 
	studio("models/editor/cone_helper.mdl")
	sphere(spotlightlength)
	sphere(spotlightwidth)
= beam_spotlight: "An entity to draw a spotlight. Will draw a beam when the player views it side on, and a halo when it's facing towards the player. Unless the 'No Dynamic Light' spawnflag is checked, it will also create a dynamic light wherever the end of the spotlight rests.This spotlight is entirely client side, it is not sync'd across clients."
	[
	spawnflags(flags)  =
		[
		1: "[1] Start On" : 1
		2: "[2] No Dynamic Light" : 0
		4: "[4] Start rotation on" : 0
		8: "[8] Reverse Direction" : 0
		16: "[16] X Axis" : 0
		32: "[32] Y Axis" : 0
		]

	maxspeed(integer) : "Max Rotation Speed" : 100 : "The maximum rotation speed of the spotlight, in degrees per second."
	spotlightlength(integer) : "Spotlight Length" : 500 : "Length of the spotlight beam."
	spotlightwidth(integer) : "Spotlight Width" : 50 : "Width of the spotlight beam."
	rendercolor(color255) : "Color (R G B)" : "255 255 255"
	hdrcolorscale(float) : "HDR color scale." : "0.7" : "float value to multiply sprite color by when running in HDR mode."

	// Inputs
	input LightOn(void) : "Turn the spotlight on."
	input LightOff(void) : "Turn the spotlight off"
	input Start(void) : "Start the rotator rotating."
	input Stop(void) : "Stop the rotator from rotating."
	input Reverse(void) : "Reverse the direction of rotation of the rotator."

	// Outputs
	output OnLightOn(void) : "Fires when light turns on."
	output OnLightOff(void) : "Fires when light turns off."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	sphere(minfalloff)
	sphere(maxfalloff)
	iconsprite("editor/color_correction.vmt")
= color_correction: "An entity to control the color correction in the map."
	[
	minfalloff(float) : "Lookup Falloff Start Distance" : "0.0" : "This is the distance to the start of the falloff region (-1 = everywhere)"
	maxfalloff(float) : "Lookup Falloff End Distance" : "200.0" : "This is the distance to the end of the falloff region (-1 = everywhere)"
	maxweight(float) : "Maximum Weight" : "1.0" : "This is the maximum weight for this lookup"
	filename(string) : "Lookup Table Filename" : : "This is the lookup table filename"
	fadeinduration(float) : "Lookup Fade In Duration" : "0.0" : "Duration of fade in on when enabled."
	fadeoutduration(float) : "Lookup Fade out Duration" : "0.0" : "Dration of fade out on when disabled."
	exclusive(boolean) : "Exlusive" : 0 : "An exclusive color_correction entity disables and fades out all other color corrections when it is enabled. There should only be one active exclusive color_correction ent at any time."

	// Inputs
	input SetFadeInDuration(float) : "Sets the 'fadeInDuration' variable, used to fade cc lookup usage when entity is enabled."
	input SetFadeOutDuration(float) : "Sets the 'fadeOutDuration' variable, used to fade cc lookup usage when entity is disabled."
	]

@SolidClass base(BaseEntityBrush, EnableDisable) = color_correction_volume: "An entity to control the color correction in the map."
	[
	fadeduration(float) : "Lookup Fade Duration" : "10.0" : "This is the duration for the lookup to fade in/out on extry/exit"
	maxweight(float) : "Maximum Weight" : "1.0" : "This is the maximum weight for this lookup"
	filename(string) : "Lookup Table Filename" : : "This is the lookup table filename"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/commentary_auto.vmt")
	color(0 100 250)
= commentary_auto: "Commentary-specific version of logic_auto."
	[

	// Outputs
	output OnCommentaryNewGame(void) : "Fired when a new game is started with commentary enabled."
	output OnCommentaryMidGame(void) : "Fired when commentary is enabled in the middle of a map."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/comp_choreo_sceneset.vmt")
= comp_choreo_sceneset: "Chains a set of choreographed scenes together."
	[
	delay(float) : "Delay between each" : "0.1" : "Add a delay between each scene."
	only_once(boolean) : "Clean up after starting" : 1 : "If set, Kill choreo scenes after starting so they only play once.If set, the Cancel input will not work properly."
	busyactor(choices) : "If an Actor is talking..." : 1 : "What to do if an actor this scene needs is already talking when this scene is told to start." =
		[
		0: "Start immediately"
		1: "Wait for actor to finish"
		2: "Interrupt at next interrupt event"
		3: "Cancel at next interrupt event"
		]

	onplayerdeath(choices) : "On player death" : 0 : "What should this entity do if the player dies" =
		[
		0: "Do Nothing"
		1: "Cancel Script and return to AI"
		]

	scene01(scene) : "Scene 1"
	scene02(scene) : "Scene 2"
	scene03(scene) : "Scene 3"
	scene04(scene) : "Scene 4"
	scene05(scene) : "Scene 5"
	scene06(scene) : "Scene 6"
	scene07(scene) : "Scene 7"
	scene08(scene) : "Scene 8"
	scene09(scene) : "Scene 9"
	scene10(scene) : "Scene 10"
	scene11(scene) : "Scene 11"
	scene12(scene) : "Scene 12"
	scene13(scene) : "Scene 13"
	scene14(scene) : "Scene 14"
	scene15(scene) : "Scene 15"
	scene16(scene) : "Scene 16"
	scene17(scene) : "Scene 17"
	scene18(scene) : "Scene 18"
	scene19(scene) : "Scene 19"
	scene20(scene) : "Scene 20"

	// Inputs
	input Start(void) : "Start the choreo sequence playing."
	input Cancel(void) : "Stop the choreo sequence at any point."

	// Outputs
	output OnStart(void) : "Fired when the sequence starts."
	output OnFinish(void) : "Fired when the sequence is complete."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/comp_flicker")
	line(255 255 255, targetname, target_mdl)
= comp_flicker: "Fires on/off inputs repeatedly to simulate a flicker-on effect. This converts to an info_target, and uses all of the FireUserX inputs/outputs."
	[
	target_mdl(target_destination) : "Model to Control" : : "An entity which will have skins swapped to turn on/off."
	mdl_skin_on(integer) : "On Skin" : 0 : "The 'on' skin for the model."
	mdl_skin_off(integer) : "Off Skin" : 1 : "The 'on' skin for the model."
	total_time(float) : "Total Time" : "1.5" : "The overall time taken to complete the on or off flicker."
	flicker_min(float) : "Flicker Min" : "0.05" : "The delay used at the start of the on cycle, or at the end of the off cycle."
	flicker_max(float) : "Flicker Max" : "0.2" : "The delay used at the end of the on cycle, or at the start of the off cycle."
	variance(float) : "Variance" : "0.0" : "Random variance added/subtracted for each delay."

	// Inputs
	input TurnOn(void) : "Turn the target entities on."
	input TurnOff(void) : "Turn the target entities off."
	input FlickerOn(void) : "Flicker the target gradually on."
	input FlickerOff(void) : "Flicker the target gradually off."

	// Outputs
	output OnTurnedOn(void) : "Fired when the target should turn on."
	output OnTurnedOff(void) : "Fired when the target should turn off."
	output OnFlickerOnStart(void) : "Fired after the flicker on effect has started."
	output OnFlickerOffStart(void) : "Fired after the flicker off effect has started."
	output OnFlickerOnEnd(void) : "Fired after the flicker on effect has finished."
	output OnFlickerOffEnd(void) : "Fired after the flicker off effect has finished."
	]

@PointClass base(Angles) 
	iconsprite("editor/comp_kv_setter")
= comp_kv_setter: "Sets a keyvalue on an entity to a new value. This is useful to compute spawnflags, or to adjust keyvalues when the target entity's options can't be set to a fixup variable."
	[
	target(target_destination) : "Target Entity" : : "The name of the entity or entities to set values on."
	mode(choices) : "Mode" : "kv" : "The type of value to set." =
		[
		"kv": "KeyValues"
		"flags": "SpawnFlags"
		]

	kv_name(string) : "Name / Mask" : : "The name of the keyvalue to set, or the bits to change for spawnflags."
	kv_value_global(string) : "Value - String" : : "The value to apply."
	kv_value_local(target_destination) : "Value - Ent Name" : : "If set, use this fixed-up entity name."
	invert(boolean) : "Invert Value" : 0 : "If enabled, invert the value so 0 and 1 are swapped."
	rotate(boolean) : "Rotate Value" : 0 : "If enabled, treat the value as a vector and rotate it by the angles set on this entity first."
	conv_ang(boolean) : "Convert To Angle" : 0 : "If enabled, convert a +X axis normal back into the Euler angle."

	// Outputs
	output OnUser1(void) : "Fired in response to FireUser1 input."
	output OnUser2(void) : "Fired in response to FireUser2 input."
	output OnUser3(void) : "Fired in response to FireUser3 input."
	output OnUser4(void) : "Fired in response to FireUser4 input."
	]

@PointClass base(Angles) 
	iconsprite("editor/comp_precache_model")
	studioprop()
= comp_precache_model: "Force a specific model to load, for runtime switching. Duplicates will be removed."
	[
	model(studio) : "Model" : : "The model to load."
	skin(integer) : "Skin" : : "Skin to show."
	]

@MoveClass base(StaticTargetName) 
	sphere(radius)
	animator()
	keyframe()
	iconsprite("editor/comp_prop_cable")
	line(128 128 128, targetname, bunting)
= comp_prop_cable: "Generates cables using a static prop. comp_prop_rope is an alternate name, they can be interchanged."
	[
	group(target_source) : "Group" : : "Each set of cables must have a group name. Each name will be compiled to one cable."
	nextkey(target_destination) : "Next Cable" : : "Name of the next cable along this path."
	slack(integer) : "Slack" : 25 : "How much extra length the cable has, for 'catenary' mode (by default it has the length between its two endpoints in the editor)."
	positioninterpolator(choices) : "Type" : 2 : "How to interpolate the cable. Straight makes it straight. Spline uses a spline curve, which smoothly blends between points (no visuals). Catenary makes it hang down, like the original move_rope." =
		[
		0: "Straight"
		1: "Spline Curve"
		2: "Catenary "
		]

	segments(integer) : "Segments" : 2 : "Number of nodes to generate between each cable. Higher values make smoother cables, but produce more faces."
	sides(integer) : "Sides" : 8 : "Number of faces for each cylindrical section. Only the value at the start of the cable is used."
	radius(float) : "Radius" : "1.0" : "Radius of this cable section."
	material(material) : "Cable Material" : "models/cables/generic_black" : "The material to use for the cable. Must be a model material."
	mat_scale(float) : "Lengthwise Material Scale" : 1 : "This changes the texture resolution along the cable, relative to the amount of width used. Larger values stretch the texture and smaller values scrunch it up."
	mat_rotate(choices) : "Material Orientation" : 0 : "Controls which direction the cable runs in the material, if your texture is rotated." =
		[
		0: "Vertical"
		1: "Horizontal"
		]

	u_min(float) : "Width Start" : "0.0" : "The distance along the texture to start. 0 is the left/bottom side, 1 is the right/top side. This allows using only part of the texture, if it contains multiple different cable styles."
	u_max(float) : "Width End" : "1.0" : "The distance along the texture to end. 0 is the left/bottom side, 1 is the right/top side. This allows using only part of the texture, if it contains multiple different cable styles."
	linedivider_staticprop(string) readonly : "----------------------------------------------------------------------------------------------------------"
	renderamt(integer) : "Alpha" : 255 : "Alpha of the fade, where 0 = fully transparent and 255 = fully opaque."
	rendercolor(color255) : "Color (R G B)" : "255 255 255"
	fademindist(float) : "Start Fade Dist/Pixels" : -1 : "Distance at which the prop starts to fade (<0 = use fademaxdist). If 'Screen Space Fade' is selected, this represents the number of pixels wide covered by the prop when it starts to fade."
	fademaxdist(float) : "End Fade Dist/Pixels" : 0 : "Maximum distance at which the prop is visible (0 = don't fade out). If 'Screen Space Fade' is selected, this represents the *minimum* number of pixels wide covered by the prop when it fades."
	fadescale(float) : "Fade Scale" : 1 : "If you specify a fade in the worldspawn, then the engine will forcibly fade out props even if fademindist/fademaxdist isn't specified.This scale factor gives you some control over the fade. Using 0 here turns off the forcible fades. Numbers smaller than 1 cause the prop to fade out at further distances, and greater than 1 cause it to fade out at closer distances."
	disableshadows(boolean) : "Disable Shadows" : 0
	disableselfshadowing(boolean) : "Disable Self-Shadowing" : 0
	disablevertexlighting(boolean) : "Disable Vertex lighting" : 0 : "Disable per-vertex lighting on this prop."
	drawinfastreflection(boolean) : "Render in Fast Reflections" : 0 : "If enabled, causes this entity/prop to to render in fast water reflections (i.e. when a water material specifies $reflectonlymarkedentities) and in the world impostor pass."
	enablelightbounce(boolean) : "Enable Bounced Lighting" : 0 : "Whether VRAD should create indirect lighting from this prop."
	movespeed(integer) readonly : "Speed (unused)" : 1 : "This needs to be greater than zero to show the preview lines."
	]

@MoveClass base(StaticTargetName) 
	sphere(radius)
	animator()
	keyframe()
	iconsprite("editor/comp_prop_rope")
	line(128 128 128, targetname, bunting)
= comp_prop_rope: "Generates ropes using a static prop. comp_prop_cable is an alternate name, they can be interchanged."
	[
	group(target_source) : "Group" : : "Each set of ropes must have a group name. Each name will be compiled to one rope."
	nextkey(target_destination) : "Next Rope" : : "Name of the next rope along this path."
	slack(integer) : "Slack" : 25 : "How much extra length the rope has, for 'catenary' mode (by default it has the length between its two endpoints in the editor)."
	positioninterpolator(choices) : "Type" : 2 : "How to interpolate the rope. Straight makes it straight. Spline uses a spline curve, which smoothly blends between points (no visuals). Catenary makes it hang down, like the original move_rope." =
		[
		0: "Straight"
		1: "Spline Curve"
		2: "Catenary "
		]

	segments(integer) : "Segments" : 2 : "Number of nodes to generate between each rope. Higher values make smoother ropes, but produce more faces."
	sides(integer) : "Sides" : 8 : "Number of faces for each cylindrical section. Only the value at the start of the rope is used."
	radius(float) : "Radius" : "1.0" : "Radius of this rope section."
	material(material) : "Rope Material" : "models/cables/generic_black" : "The material to use for the rope. Must be a model material."
	mat_scale(float) : "Lengthwise Material Scale" : 1 : "This changes the texture resolution along the rope, relative to the amount of width used. Larger values stretch the texture and smaller values scrunch it up."
	mat_rotate(choices) : "Material Orientation" : 0 : "Controls which direction the rope runs in the material, if your texture is rotated." =
		[
		0: "Vertical"
		1: "Horizontal"
		]

	u_min(float) : "Width Start" : "0.0" : "The distance along the texture to start. 0 is the left/bottom side, 1 is the right/top side. This allows using only part of the texture, if it contains multiple different rope styles."
	u_max(float) : "Width End" : "1.0" : "The distance along the texture to end. 0 is the left/bottom side, 1 is the right/top side. This allows using only part of the texture, if it contains multiple different rope styles."
	bunting(target_destination) : "Bunting Definition" : : "Set to the name of a comp_prop_rope_bunting, to define models which will be placed at each segment across the rope."
	linedivider_staticprop(string) readonly : "----------------------------------------------------------------------------------------------------------"
	renderamt(integer) : "Alpha" : 255 : "Alpha of the fade, where 0 = fully transparent and 255 = fully opaque."
	rendercolor(color255) : "Color (R G B)" : "255 255 255"
	fademindist(float) : "Start Fade Dist/Pixels" : -1 : "Distance at which the prop starts to fade (<0 = use fademaxdist). If 'Screen Space Fade' is selected, this represents the number of pixels wide covered by the prop when it starts to fade."
	fademaxdist(float) : "End Fade Dist/Pixels" : 0 : "Maximum distance at which the prop is visible (0 = don't fade out). If 'Screen Space Fade' is selected, this represents the *minimum* number of pixels wide covered by the prop when it fades."
	fadescale(float) : "Fade Scale" : 1 : "If you specify a fade in the worldspawn, then the engine will forcibly fade out props even if fademindist/fademaxdist isn't specified.This scale factor gives you some control over the fade. Using 0 here turns off the forcible fades. Numbers smaller than 1 cause the prop to fade out at further distances, and greater than 1 cause it to fade out at closer distances."
	disableshadows(boolean) : "Disable Shadows" : 0
	disableselfshadowing(boolean) : "Disable Self-Shadowing" : 0
	disablevertexlighting(boolean) : "Disable Vertex lighting" : 0 : "Disable per-vertex lighting on this prop."
	drawinfastreflection(boolean) : "Render in Fast Reflections" : 0 : "If enabled, causes this entity/prop to to render in fast water reflections (i.e. when a water material specifies $reflectonlymarkedentities) and in the world impostor pass."
	enablelightbounce(boolean) : "Enable Bounced Lighting" : 0 : "Whether VRAD should create indirect lighting from this prop."
	movespeed(integer) readonly : "Speed (unused)" : 1 : "This needs to be greater than zero to show the preview lines."
	]

@MoveClass base(StaticTargetName) 
	iconsprite("editor/comp_prop_rope_bunting")
= comp_prop_rope_bunting: "Specifies small props which will be placed at regular intervals across the compiled rope."
	[
	weight(integer) : "Weight" : 1 : "If multiple are defined with the same weighting, this specifies the relative probabilities.This works like a lottery - each model has this many 'tickets', and then one is chosen randomly each time. If you have two choices with a weight of 9 and 1, the first will be chosen 90% of the time."
	placement_interval(integer) : "Placement Interval" : 1 : "Place this prop every X segments, not including the start/end of the rope."
	distance(float) : "Placement Distance" : 0 : "If greater than zero, override Placement Interval, and instead place every this many units."
	model(studio) : "Model" : : "Specifies the model to place. This can either be an MDL which is placed as invidual prop_statics, or a SMD (relative to a game folder) which is merged into the rope model."
	angles(angle) : "Rotation" : "0 0 0" : "Rotate the model by this much, before applying the orientation of the rope. After this is applied, the X axis should be aligned with the rope direction."
	orient(choices) : "Orientation Mode" : "follow" : "Controls how the rope orientation affects the model." =
		[
		"follow": "Follow Rope"
		"yaw": "Yaw Only"
		"pitch_yaw": "Pitch and Yaw"
		"none": "No Rotation"
		"rand_yaw": "Random Yaw"
		"rand": "Random"
		]

	]

@PointClass base(Angles) 
	iconsprite("editor/comp_propcombine_set")
	wirebox(mins, maxs)
= comp_propcombine_set: "Specifies a group of props that will be combined together."
	[
	mins(vector) : "BBox Mins" : "-32 -32 -32" : "Minimum offset from the entity, defining the shape."
	maxs(vector) : "BBox Maxes" : "32 32 32" : "Maximum offset from the entity, defining the shape."
	name(string) : "Name" : : "Two sets with the same name will be treated as one."
	prop(studio) : "Group Model" : : "If set, a combinable model used to define which others will be combined."
	skin(integer) : "Group Skin" : 0 : "The skin for the Group Model."
	]

@PointClass base(StaticTargetName) 
	iconsprite("editor/comp_relay")
= comp_relay: "Simplified version of logic_relay which is able to be optimised away by the compiler.The various inputs and outputs are useful for bundling commands together, or using more appopriate verbs.Inputs only work if given directly from entities (or via instance redirection), not ingame or dynamically.All inputs/outputs may pass through any parameter, if no override is specified."
	[
	ctrl_type(choices) : "Control Type" : 0 : "Controls how the value is interpreted for whether to break the connection from this." =
		[
		0: "Is Enabled?"
		1: "Is Disabled?"
		]

	ctrl_value(boolean) : "Control Value" : 1 : "Decides whether to skip using the outputs from this. If the entity is disabled, all outputs are removed entirely."
	delay(float) : "Extra Delay" : "0.0" : "Add this delay to all outputs. This allows you to control this via $fixup values, for instance."

	// Inputs
	input Trigger(string) : "Trigger the relay and fire the output."
	input TurnOn(string) : "Fire the OnTurnedOn output."
	input TurnOff(string) : "Fire the OnTurnedOff output."
	input FireUser1(string) : "Causes this relay's OnUser1 output to be fired."
	input FireUser2(string) : "Causes this relay's OnUser2 output to be fired."
	input FireUser3(string) : "Causes this relay's OnUser3 output to be fired."
	input FireUser4(string) : "Causes this relay's OnUser4 output to be fired."
	input FireUser5(string) : "Causes this relay's OnUser5 output to be fired."
	input FireUser6(string) : "Causes this relay's OnUser6 output to be fired."
	input FireUser7(string) : "Causes this relay's OnUser7 output to be fired."
	input FireUser8(string) : "Causes this relay's OnUser8 output to be fired."

	// Outputs
	output OnTrigger(string) : "Fired when the relay is triggered."
	output OnTurnedOn(string) : "Fired when the relay is turned on."
	output OnTurnedOff(string) : "Fired when the relay is turned off."
	output OnUser1(string) : "Fired in response to a FireUser1 input."
	output OnUser2(string) : "Fired in response to a FireUser2 input."
	output OnUser3(string) : "Fired in response to a FireUser3 input."
	output OnUser4(string) : "Fired in response to a FireUser4 input."
	output OnUser5(string) : "Fired in response to a FireUser5 input."
	output OnUser6(string) : "Fired in response to a FireUser6 input."
	output OnUser7(string) : "Fired in response to a FireUser7 input."
	output OnUser8(string) : "Fired in response to a FireUser8 input."
	]

@PointClass base(Origin, Angles) 
	iconsprite("editor/comp_scriptvar_setter")
	studio("models/editor/cone_helper.mdl")
	line(255 255 255, targetname, target)
	line(255 255 255, targetname, ref)
= comp_scriptvar_setter: "Assigns data or a group of data to a variable in an entity's VScript scope or the global scope on spawn.\nTo set an array, provide an index in the variable name in the form 'varname[4]'. \nAll the comp_scriptvars pointing to that variable will be collected into a single array literal, with holes filled by *null*. \nIf the brackets are empty, these values will fill those holes and then append to the end in an arbitrary order."
	[
	target(target_destination) : "Script Entity" : : "The entity to set a variable on. Alternatively, leave this blank to assign the variable ::globally."
	variable(string) : "Variable Name" : : "The name of the variable to set. A specific array index can be set with the form 'varname[4]'. Alternatively use 'varname[]' to assign them to the first index available. Holes in the array are set to null. If this is a :;global name, the script entity is ignored."
	ref(target_destination) : "Reference Entity" : : "If set, a reference entity to use to obtain data from instead of this one."
	mode(choices) : "Mode" : "pos" : "The kind of data to read. For Constants, the position/reference is ignored completely. For Entity Handle to be useful, only one reference entity should exist. For Offset and Distance, it's the offset of the reference relative to this entity. For Entity KeyValue, the constant is the keyvalue name, then the value is converted to an appropriate Squirrel type. " =
		[
		"const": "Constant"
		"string": "Stringified Constant"
		"bool": "Boolean Constant"
		"inv_bool": "Inverted Boolean Constant"
		"name": "Entity Name"
		"handle": "Entity Handle"
		"keyvalue": "Entity KeyValue"
		"pos": "Position"
		"pos_x": "Position - X only"
		"pos_y": "Position - Y only"
		"pos_z": "Position - Z only"
		"ang": "Angle (as vector)"
		"off": "Offset to Reference"
		"dist": "Distance to Reference"
		"x": "Forward Direction"
		"y": "Left Direction"
		"z": "Up Direction"
		]

	const(string) : "Scale / Constant" : : "A scale factor for the data, or a constant to use directly in for those modes."
	]

@PointClass base(BaseEntityPoint) 
	studioprop("models/editor/vactubes/end_point.mdl")
	sphere(radius)
= comp_vactube_end: "Marks the end point of a vactube. Objects reaching here will be cleaned up."
	[
	radius(float) : "Cube Radius" : 0 : "The radius to search for cubes in for droppers. If zero, this is a regular endpoint, and the rest of the options have no effect."
	autorespawn(boolean) : "Auto Respawn" : 1 : "Automatically respawn cubes when destroyed."
	filtername(target_destination) : "Filter + Reference" : : "The filter_activator_name to set to point at the cube. This is also used as the location to determine the distance to the cube."
	template(target_destination) : "Template" : : "The point_template to set to spawn the cube."

	// Inputs
	input RequestSpawn(void) : "Request a cube to be spawned and routed here."
	input FireCubeUser1(void) : "FireUser1 at the cube, for dissolving existing ones."

	// Outputs
	output OnCubeArrived(void) : "Triggered when the cube has arrived to be dispensed."
	output OnFizzled(void) : "Fired when the cube is fizzled, and autorespawn is enabled."
	]

@PointClass base(Angles) 
	studioprop()
= comp_vactube_junction: "Marks a junction in a vactube, where they're forced to change direction. Scanner models near straight nodes will be detected automatically."
	[
	targetname(target_source) : "Junction Name" : : "Although junctions are linked automatically, this can be used to precisely link two junctions. You can use also this to help with identifying problems since the compiler will output it."
	model(choices) : "Type" : "models/editor/vactubes/straight.mdl" : "The size and type of junction. Splitters split the tube into multiple paths. You can simply overlap two junctions to join paths, however." =
		[
		"models/editor/vactubes/straight.mdl": "Straight / Scanner"
		"models/editor/vactubes/curve_1.mdl": "Curve: 1"
		"models/editor/vactubes/curve_2.mdl": "Curve: 2"
		"models/editor/vactubes/curve_3.mdl": "Curve: 3"
		"models/editor/vactubes/curve_4.mdl": "Curve: 4"
		"models/editor/vactubes/curve_5.mdl": "Curve: 5"
		"models/editor/vactubes/curve_6.mdl": "Curve: 6"
		"models/editor/vactubes/diag_curve.mdl": "Curve: 45 Deg"
		"models/editor/vactubes/diag_curve_mirror.mdl": "Curve: 45 Deg (Mirror)"
		"models/editor/vactubes/splitter_straight.mdl": "Splitter: Straight"
		"models/editor/vactubes/splitter_sides.mdl": "Splitter: Left/Right"
		"models/editor/vactubes/splitter_triple.mdl": "Splitter: Triple"
		]

	skin(choices) : "Curve Direction" : 0 : "Reverse the direction, to make placing easier. Does not apply to splitters." =
		[
		0: "Forward"
		1: "Backward"
		]

	persist_tv(choices) : "TV Screen behaviour" : 0 : "Determine how items are shown on Scanner TVs." =
		[
		0: "Return to blank when item leaves"
		1: "Continue displaying until replaced"
		]

	target(target_destination) : "Next junction (optional)" : : "Although junctions are linked automatically, you can specify the name of another to force it to connect to a further away or non-aligned node."
	target_sec(target_destination) : "Secondary junction" : : "For splitters, this is the second output from the junction."
	target_ter(target_destination) : "Tertiary junction" : : "For the triple splitter, this is the rightmost output."

	// Outputs
	output OnPass(void) : "Fired when a cube passes by."
	]

@MoveClass base(StaticTargetName, Angles) 
	sphere(radius)
	animator()
	keyframe()
	iconsprite("editor/comp_prop_rope")
= comp_vactube_spline: "Constructs a custom vactube model, using a set of path points."
	[
	nextkey(target_destination) : "Next Rope" : : "Name of the next spline node."
	opaque(boolean) : "Opaque Tube" : 0 : "Whether the tube should be glass, or the black opaque version."
	skin(choices) : "Mode" : 0 : "Whether this will link to comp_vactube_junctions, or just be a static prop." =
		[
		0: "Static Prop"
		1: "Vactube Junction"
		]

	segments(integer) : "Segments" : 2 : "Number of nodes to generate for this. Higher values make smoother tubes, but produce more faces."
	collisions(boolean) : "Enable Collisions" : 1 : "Sholuld a collision mesh should be generated?"
	linedivider_staticprop(string) readonly : "----------------------------------------------------------------------------------------------------------"
	fademindist(float) : "Start Fade Dist/Pixels" : -1 : "Distance at which the prop starts to fade (<0 = use fademaxdist). If 'Screen Space Fade' is selected, this represents the number of pixels wide covered by the prop when it starts to fade."
	fademaxdist(float) : "End Fade Dist/Pixels" : 0 : "Maximum distance at which the prop is visible (0 = don't fade out). If 'Screen Space Fade' is selected, this represents the *minimum* number of pixels wide covered by the prop when it fades."
	fadescale(float) : "Fade Scale" : 1 : "If you specify a fade in the worldspawn, or if the engine is running under dx7 [hl2/ep1/portal] or dx8 [ep2/tf], then the engine will forcibly fade out props even if fademindist/fademaxdist isn't specified. This scale factor gives you some control over the fade. Using 0 here turns off the forcible fades. Numbers smaller than 1 cause the prop to fade out at further distances, and greater than 1 cause it to fade out at closer distances."
	disableshadows(boolean) : "Disable Shadows" : 0
	disableselfshadowing(boolean) : "Disable Self-Shadowing" : 0
	disablevertexlighting(boolean) : "Disable Vertex lighting" : 0 : "Disable per-vertex lighting on this prop."
	movespeed(integer) readonly : "Speed (unused)" : 1 : "This needs to be greater than zero to show the preview lines."
	positioninterpolator(integer) readonly : "Rope Mode" : 1 : "Needs to be set to '1' to produce the spline curve preview."
	]

@PointClass base(BaseEntityPoint) 
	studioprop("models/editor/vactubes/start_point.mdl")
= comp_vactube_start: "Marks the start point of a vactube. This is where they spawn."
	[
	group(string) : "Object Group" : : "Only objects with the same group name will be spawned."
	speed(float) : "Object Speed" : "800.0" : "Set the speed of the objects produced from here, in units per second."
	seed(string) : "Rotation Seed" : : "If set, consistently produce the same rotation pattern as the seed. If not set, a random seed will be selected (and printed to the compile log)."
	timer(boolean) : "Trigger automatically" : 1 : "If true, generate a logic_timer to automatically trigger with a random time."
	time_min(float) : "Minimum Time" : "0.15" : "The minimum time between objects."
	time_max(float) : "Maximum Time" : "0.5" : "The maximum time between objects."

	// Inputs
	input ForceSpawn(void) : "Force an object to spawn immediately."
	input EnableTimer(void) : "Enable the automatic timer."
	input DisableTimer(void) : "Disable the automatic timer."

	// Outputs
	output OnSpawned(void) : "Fired when the cube spawns."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	sphere(minfalloff)
	sphere(maxfalloff)
	iconsprite("editor/color_correction.vmt")
	color(200 0 0)
= env_ambient_light: "An entity to control the color correction in the map."
	[
	color(color255) : "Color (R G B)" : "255 255 255"
	minfalloff(float) : "Lookup Falloff Start Distance" : "0.0" : "This is the distance to the start of the falloff region (-1 = everywhere)"
	maxfalloff(float) : "Lookup Falloff End Distance" : "200.0" : "This is the distance to the end of the falloff region (-1 = everywhere)"
	maxweight(float) : "Maximum Weight" : "1.0" : "This is the maximum weight for this lookup"
	fadeinduration(float) : "Lookup Fade In Duration" : "0.0" : "Duration of fade in on when enabled."
	fadeoutduration(float) : "Lookup Fade out Duration" : "0.0" : "Duration of fade out on when disabled."

	// Inputs
	input SetColor(color255) : "Sets the color."
	input SetFadeInDuration(float) : "Sets the 'fadeInDuration' variable, used to fade cc lookup usage when entity is enabled."
	input SetFadeOutDuration(float) : "Sets the 'fadeOutDuration' variable, used to fade cc lookup usage when entity is disabled."
	]

@PointClass base(BaseEntityPoint) 
	color(255 0 0)
	iconsprite("editor/env_blood.vmt")
= env_blood: "An entity used to spawn blood effects."
	[
	spraydir(angle) : "Spray Direction (Pitch Yaw Roll)" : "0 0 0" : "The general direction that the blood should spray and the direction to trace to apply the decal."
	color(choices) : "Blood Color" : 0 =
		[
		0: "Red (Human)"
		1: "Yellow (Alien)"
		]

	amount(string) : "Amount of blood (damage to simulate)" : 100
	spawnflags(flags)  =
		[
		1: "[1] Random Direction" : 0
		2: "[2] Blood Stream" : 0
		4: "[4] On Player" : 0
		8: "[8] Spray decals" : 0
		]


	// Inputs
	input EmitBlood(void) : "Triggers the blood effect."
	]

@SolidClass base(BaseEffectBrush) 
	color(200 200 0)
= env_bubbles: "An entity used to create a volume in which to spawn bubbles."
	[
	density(integer) : "Bubble density" : 2 : "The amount of bubbles per cycle. Final amount is inputted value plus one. -1 is max."
	frequency(integer) : "Bubble frequency" : 2 : "How frequent cycles occur. Values include negative numbers to 20, the final time between cycles is 2.5s minus X tenths of a second if positive, or 2.5s plus X tenths of a second if negative."
	current(integer) : "Speed of Current" : 0 : "The speed of the water current in the volume, used to move the bubbles."
	spawnflags(flags)  =
		[
		1: "[1] Start Off" : 0
		]


	// Inputs
	input Activate(void) : "Activates the bubbles."
	input Deactivate(void) : "Deactivates the bubbles."
	input Toggle(void) : "Toggles the bubbles on and off."
	input SetDensity(integer) : "Sets the bubble density."
	input SetFrequency(integer) : "Sets bubble emission rate in bubbles per second."
	input SetCurrent(integer) : "Sets current speed in units per second."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/env_cascade_light.vmt")
	lightprop("models/editor/spot.mdl")
= env_cascade_light: "An entity to control the sunlight that casts cascaded shadows in the map."
	[
	angles(angle) : "Pitch Yaw Roll (Y Z X)" : "50 43 0" : "This is the shadow casting direction. Pitch is rotation around the Y axis, yaw is the rotation around the Z axis, and roll is the rotation around the X axis. (Note that pitch is negated vs. light_environment's pitch.)"
	color(color255) : "Light Color" : "255 255 255 1" : "This is the color of the sunlight."
	maxshadowdistance(float) : "Max Shadow Distance" : 400 : "Maximum dynamic shadow distance. Higher values are slower, default on PC is 400 units."
	uselightenvangles(boolean) : "Use light_environment's angles" : 1 : "If true, the CSM shadow angles are automatically harvested from the light_environment's angles. If false, this entity's angles are used."
	csmvolumemode(choices) : "CSM_Volume_Mode" : 0 : "CSM Volume Modes - Auto: Static cache will update once every 10 frames (approx) covering max shadow distance or whole map around player. Manual : Static cache area coverage and updates are managed via csm volumes i/o. \n Use Manual mode for better quality and performence. \n In near future Auto mode will be removed from the game." =
		[
		0: "Auto"
		1: "Manual"
		]


	// Inputs
	input LightColor(color255) : "Set the light color."
	input LightColorScale(integer) : "Set the light color scale"
	input SetAngles(string) : "Set the sun direction."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ts2do/env_credits.vmt")
= env_credits: "The entity that controls the rolling credits, loaded from 'scripts/credits.txt'."
	[

	// Inputs
	input RollCredits(void) : "Start the intro credits rolling."
	input RollOutroCredits(void) : "Start the outro credits rolling."
	input ShowLogo(void) : "Show the HL2 logo."

	// Outputs
	output OnCreditsDone(void) : "Fired when the credits having finished rolling."
	]

@PointClass base(BaseEntityPoint, Angles) 
	sphere(fademindist)
	sphere(fademaxdist)
	iconsprite("editor/ficool2/env_detail_controller.vmt")
= env_detail_controller: "An entity that lets you control override the min and max fade distances for details sprites in the map."
	[
	fademindist(float) : "Start Fade Dist/Pixels" : 512 : "The distance at which the detail props will start fading away."
	fademaxdist(float) : "End Fade Dist/Pixels" : 1024 : "The distance at which the detail props will stop fading and stop drawing entirely."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/env_dof_controller.vmt")
	color(200 0 0)
	line(255 255 0, targetname, focus_target)
	sphere(near_blur)
	sphere(near_focus)
	sphere(far_blur)
	sphere(far_radius)
= env_dof_controller: "An entity that controls the depth of field settings for the player. Depth of field simulates camera blur of out-of-focus regions of the scene."
	[
	enabled(boolean) : "Enabled" : 0 : "Whether the effect should be active"
	near_blur(float) : "Near blur depth" : 20 : "Distance that the blurriness is at its peak near the viewpoint."
	near_focus(float) : "Near focus depth" : 100 : "Distance that the focus is in full effect near the viewpoint."
	near_radius(float) : "Near blur radius" : 8 : "Radius (in pixels) to blur the surrounding pixels."
	far_blur(float) : "Far blur depth" : 1000 : "Distance where blurriness is at its peak far from the viewpoint."
	far_focus(float) : "Far focus depth" : 500 : "Distance that the focus is in full effect far from the viewpoint."
	far_radius(float) : "Far blur radius" : 8 : "Radius (in pixels) to blur the surrounding pixels."
	focus_target(target_destination) : "Focus target" : : "Entity to use as a focal point."
	focus_range(float) : "Focus target range" : 200 : "Distance behind the focal plane to remain in focus."

	// Inputs
	input SetNearBlurDepth(float) : "Set the distance in front of the focus region at which the scene will be completely blurred using the near blur radius. Must be smaller than NearFocusDepth."
	input SetNearFocusDepth(float) : "The area between the near focus and far focus distances is perfectly in focus. Must be smaller than FarFocusDepth."
	input SetFarFocusDepth(float) : "The area between the near focus and far focus distances is perfectly in focus. Must be smaller than FarBlurDepth."
	input SetFarBlurDepth(float) : "Set the distance beyond the focus region at which the scene will be completely blurred using the far blur radius. Must be larger than FarFocusDepth."
	input SetNearBlurRadius(float) : "Set the blur radius (in pixels) to use at the near blur distance. Set to 0 to disable near blur."
	input SetFarBlurRadius(float) : "Set the blur radius (in pixels) to use at the far blur distance. Set to 0 to disable far blur."
	input SetFocusTarget(string) : "Set the focal target for the effect."
	input SetFocusTargetRange(float) : "Set the distance behind the focal point that will remain in focus."
	]

@PointClass base(BaseEntityPoint, Angles) 
	studio("models/editor/env_dustpuff.mdl")
= env_dustpuff: "An entity that can emit dust puffs."
	[
	scale(float) : "Scale" : 8 : "Size of the dust puff."
	speed(float) : "Speed" : 16 : "Speed at which the dust particles should move."
	color(color255) : "Dust color" : "128 128 128"

	// Inputs
	input SpawnDust(void) : "Spawn a dust puff."
	]

@SolidClass base(BaseEffectBrush) 
	color(200 200 0)
= env_embers: "An entity used to create a volume in which to spawn fire embers."
	[
	angles(angle) : "Pitch Yaw Roll (X Y Z)" : "0 0 0" : "This entity's orientation in the world. Roll is the rotation around the X axis, pitch is rotation around the Y axis and yaw is the rotation around the Z axis."
	particletype(choices) : "Ember type" : 0 =
		[
		0: "Normal"
		1: "Smooth Fade"
		2: "Pulled"
		]

	density(integer) : "Density (particles per second)" : 50
	lifetime(integer) : "Particle Lifetime (seconds)" : 4
	speed(integer) : "Particle Speed (units per second)" : 32
	rendercolor(color255) : "Ember Color (R G B)" : "255 255 255"
	spawnflags(flags)  =
		[
		1: "[1] Start On" : 0
		2: "[2] Toggle" : 0
		]

	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/env_entity_dissolver.vmt")
	line(255 255 255, targetname, target)
= env_entity_dissolver: "Dissolves the target entity when triggered. Only works on model entities. In Portal 2, this uses the Fizzler effects."
	[
	target(target_destination) : "Target to Dissolve" : : "Targetname of the entity you want to dissolve."
	magnitude(integer) : "Magnitude" : 250 : "How strongly to push away from the center."
	dissolvetype(choices) : "Dissolve Type" : 0 =
		[
		0: "Energy"
		1: "Heavy electrical"
		2: "Light electrical"
		3: "Citadel Core Effect"
		]


	// Inputs
	input Dissolve(string) : "Dissolve target, if no target is passed it'll use the target specified in the target field."
	]

@PointClass base(BaseEntityPoint) 
	color(200 200 0)
	line(255 128 0, targetname, target)
	iconsprite("editor/ficool2/env_entity_igniter.vmt")
= env_entity_igniter: "An entity that catches a target entity on fire. If the entity is an animating model, it will have sprite flames attached to its skeleton. Otherwise the entity will emit particle flame puffs."
	[
	target(target_destination) : "Entity to ignite" : : "Name of the entity to catch on fire."
	lifetime(float) : "Lifetime in seconds" : 10 : "Duration of flames."

	// Inputs
	input Ignite(void) : "Ignite the target entity."
	]

@PointClass base(BaseEntityPoint, Angles) 
	line(255 255 0, targetname, entitytemplate)
	iconsprite("editor/env_entity_maker.vmt")
	studio("models/editor/angle_helper.mdl")
= env_entity_maker: "Spawns the specified entity template at its origin. If set to auto-spawn, it will spawn the template whenever there's room and the player is looking elsewhere."
	[
	spawnflags(flags)  =
		[
		1: "[1] Enable AutoSpawn (will spawn whenever there's room)" : 0
		2: "[2] AutoSpawn: Wait for entity destruction" : 0
		4: "[4] AutoSpawn: Even if the player is looking" : 0
		8: "[8] ForceSpawn: Only if there's room" : 0
		16: "[16] ForceSpawn: Only if the player isn't looking" : 0
		]

	entitytemplate(target_destination) : "Point_template To Spawn" : : "Name of the point_template to spawn here."
	postspawnspeed(float) : "PostSpawn Movement Speed" : 0 : "If specified, all the entities created in the template will move this fast in the specified PostSpawn Movement Direction."
	postspawndirection(angle) : "PostSpawn Movement Direction" : "0 0 0" : "If a PostSpawn Movement Speed is specified, all the entities created in the template will move in this direction."
	postspawndirectionvariance(float) : "PostSpawn Direction Variance" : "0.15" : "This variance is applied to the PostSpawn Movement Direction for each spawned entity in the template. Use it to apply some randomness to the directions."
	postspawninheritangles(boolean) : "PostSpawn Inherit Angles" : 0 : "If in hierarchy, is spawn direction in world space, or object local space of parent."

	// Inputs
	input ForceSpawn(void) : "Spawn an instance of the template at this origin and angle."
	input ForceSpawnAtEntityOrigin(target_destination) : "Spawns an instance of the template that has the same origin and angles as the specified entity."

	// Outputs
	output OnEntitySpawned(void) : "Fired when an instance of the entity template has been spawned."
	output OnEntityFailedSpawn(void) : "Fired when a ForceSpawn input failed to spawn the template, either due to lack of space or being in player's view, depending on the spawnflags."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/env_explosion.vmt")
	color(200 200 0)
	sphere(iRadiusOverride)
	line(255 255 0, targetname, ignoredEntity)
= env_explosion: "An entity that creates an explosion at its origin."
	[
	imagnitude(integer) : "Magnitude" : 100 : "The amount of damage done by the explosion."
	iradiusoverride(integer) : "Radius Override" : 0 : "If specified, the radius in which the explosion damages entities. If unspecified, the radius will be based on the magnitude."
	fireballsprite(sprite) : "Fireball Sprite" : "sprites/zerogxplode.spr"
	rendermode(choices) : "Render Mode" : 5 =
		[
		0: "Normal"
		4: "Solid"
		5: "Additive"
		]

	spawnflags(flags)  =
		[
		1: "[1] No Damage" : 0
		2: "[2] Repeatable" : 0
		4: "[4] No Fireball" : 0
		8: "[8] No Smoke" : 0
		16: "[16] No Decal" : 0
		32: "[32] No Sparks" : 0
		64: "[64] No Sound" : 0
		128: "[128] Random Orientation" : 0
		256: "[256] No Fireball Smoke" : 0
		512: "[512] No particles" : 0
		1024: "[1024] No DLights" : 0
		2048: "[2048] Don't clamp Min" : 0
		4096: "[4096] Don't clamp Max" : 0
		8192: "[8192] Damage above surface only" : 0
		16384: "[16384] Generic damage" : 0
		]

	ignoredentity(target_destination) : "Ignored Entity" : : "Do not harm or affect the named entity."
	ignoredclass(choices) : "Ignored Class" : 0 : "Do not harm or affect this class." =
		[
		0: "None"
		1: "Players"
		2: "Player Allies"
		3: "Vital Player Allies"
		4: "Antlions"
		5: "Barnacles"
		6: "npc_bullseyes"
		7: "Citizens - Passive"
		8: "Citizens Rebel"
		9: "Combine"
		10: "Combine Gunships"
		11: "Conscripts"
		12: "Headcrabs"
		13: "Manhacks"
		14: "Metropolice"
		15: "Military"
		16: "Scanners"
		17: "Stalkers"
		18: "Vortigaunts"
		19: "Zombies"
		20: "Protosnipers"
		21: "Missiles"
		22: "Flares"
		23: "Earth Fauna"
		24: "Hacked Rollermines"
		25: "Combine Hunters"
		]


	// Inputs
	input Explode(void) : "Triggers the explosion."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/env_fade")
	color(200 0 0)
= env_fade: "An entity that controls screen fades."
	[
	spawnflags(flags)  =
		[
		1: "[1] Fade From" : 0
		2: "[2] Modulate" : 0
		8: "[8] Stay Out" : 0
		]

	duration(float) : "Duration (seconds)" : 2 : "The time that it will take to fade the screen in or out."
	holdtime(float) : "Hold Fade (seconds)" : 0 : "The time to hold the faded in/out state."
	renderamt(integer) : "Fade Alpha" : 255 : "Alpha of the fade, where 0 = fully transparent and 255 = fully opaque."
	rendercolor(color255) : "Fade Color (R G B)" : "0 0 0"
	reversefadeduration(float) : "Reverse Fade Duration (seconds)" : 2 : "The duration of the reverse fade."

	// Inputs
	input Fade(void) : "Start the screen fade."
	input FadeReverse(void) : "Begin doing the reverse of the current fade."

	// Outputs
	output OnBeginFade(void) : "Fired when the fade has begun."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/env_fire")
	color(200 200 0)
	sphere(firesize)
= env_fire: "An entity that handles a single flame at its origin. The flame causes heat 'damage' to other env_fire entities around it, and will eventually ignite non-flaming env_fire entities nearby, causing the fire to spread."
	[
	health(integer) : "Duration" : 30 : "Amount of time the fire will burn."
	firesize(integer) : "Size" : 64 : "Height (in world units) of the flame."
	fireattack(integer) : "Attack" : 4 : "Amount of time the fire takes to grow to full strength."
	firetype(choices) : "Type" : 0 =
		[
		0: "Natural"
		1: "Plasma"
		]

	spawnflags(flags)  =
		[
		1: "[1] Infinite Duration" : 0
		2: "[2] Smokeless" : 0
		4: "[4] Start On" : 0
		8: "[8] Start Full" : 0
		16: "[16] Don't drop" : 0
		32: "[32] No glow" : 0
		128: "[128] Delete when out" : 0
		256: "[256] Visible from above" : 0
		]

	ignitionpoint(float) : "Ignition Point" : 32 : "Amount of heat 'damage' to take before this flame should ignite."
	damagescale(float) : "Damage Scale" : "1.0" : "Multiplier of the burn damage done by the flame."

	// Inputs
	input StartFire(void) : "Start the fire."
	input Extinguish(float) : "Puts out the fire permanently in the number of seconds specified."
	input ExtinguishTemporary(float) : "Puts out the fire temporarily in the number of seconds specified."

	// Outputs
	output OnIgnited(void) : "Fires when the fire is first ignited."
	output OnExtinguished(void) : "Fires when the fire is fully extinguished."
	]

@PointClass base(BaseEntityPoint) 
	sphere(fireradius)
	color(200 200 0)
	iconsprite("editor/ficool2/env_firesensor.vmt")
= env_firesensor: "An entity that detects changes in heat nearby."
	[
	spawnflags(flags)  =
		[
		1: "[1] Start On" : 1
		]

	fireradius(float) : "Radius" : 128 : "The radius around this entity in which to detect heat changes."
	heatlevel(float) : "Heat level" : 32 : "The target heat level to check for. Outputs are fired when the heat moves over this target level (increasing or decreasing)."
	heattime(float) : "Time at level" : 0 : "The amount of time the heat level must spend over the target level before the 'OnHeatLevelStart' output is fired."

	// Inputs
	input Enable(void) : "Enable fire sensor."
	input Disable(void) : "Disable fire sensor."

	// Outputs
	output OnHeatLevelStart(void) : "Fires when the heat level has been sustained for the specified length of time."
	output OnHeatLevelEnd(void) : "Fires when the heat level drops below the target level."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/env_firesource")
	sphere(fireradius)
	color(200 200 0)
= env_firesource: "An entity that provides heat to all nearby env_fire entities. Cannot be extinguished."
	[
	spawnflags(flags)  =
		[
		1: "[1] Start On" : 0
		]

	fireradius(float) : "Radius" : 128 : "The radius around this entity in which to provide heat."
	firedamage(float) : "Intensity / Damage" : 10 : "Amount of heat 'damage' to apply to env_fire entities within the radius."

	// Inputs
	input Enable(void) : "Enable fire source."
	input Disable(void) : "Disable fire source."
	]

@PointClass base(BaseEntityPoint, SystemLevelChoice) 
	iconsprite("editor/fog_controller.vmt")
	color(200 0 0)
	studio("models/editor/cone_helper.mdl")
= env_fog_controller: "An entity that controls the fog and view distance in the map."
	[
	fogenable(boolean) : "Fog Enable" : 1 : "Whether or not the fog should start enabled."
	fogblend(boolean) : "Fog Blend" : 0 : "Enables color blending between the primary color and the secondary color. When looking at the Primary Fog Direction, the primary fog color will appear. When looking away, the secondary color will. Looking between directly at the direction and directly away will cause color blending."
	use_angles(boolean) : "Use Angles for Fog Dir" : 0
	fogcolor(color255) : "Primary Fog Color" : "255 255 255" : "The color of the fog. If fog blend is enabled, this color blends with the secondary color when not looking at the primary fog direction."
	fogcolor2(color255) : "Secondary Fog Color" : "255 255 255" : "The secondary fog color. If fog blend is disabled, this color will never appear."
	fogdir(string) : "Primary Fog Direction" : "1 0 0" : "If fog blend is enabled, this is the direction that shows only the primary color. Directly away is the secondary color and in-between the colors are blended."
	fogstart(string) : "Fog Start" : "500.0" : "The distance from the player the fog starts."
	fogend(string) : "Fog End" : "2000.0" : "The distance from the player the fog reaches the Fog Max Density keyvalue."
	fogmaxdensity(float) : "Fog Max Density [0..1]" : 1 : "The max density the fog can get to, 0-1."
	foglerptime(float) : "Interpolate time" : 0 : "The fade time for the StartFogTransition input."
	farz(string) : "Far Z Clip Plane" : -1 : "The distance at which the world will not be rendered."
	spawnflags(flags)  =
		[
		1: "[1] Master (Has priority if multiple env_fog_controllers exist)" : 0
		]

	hdrcolorscale(float) : "HDR Color Scale" : 1 : "Float value to multiply fog color by when running in HDR mode."
	zoomfogscale(float) : "Zoom Fog Scale" : 1 : "How much the fog min/max values will scale the default value by when players are zoomed in (scoped)."

	// Inputs
	input SetStartDist(float) : "Set the fog start distance."
	input SetEndDist(float) : "Set the fog end distance."
	input SetMaxDensity(float) : "Set the max density, 0 to 1"
	input TurnOn(void) : "Turn the fog on."
	input TurnOff(void) : "Turn the fog off."
	input SetColor(color255) : "Set the primary fog color."
	input SetColorSecondary(color255) : "Set the secondary fog color."
	input SetFarZ(integer) : "Set the far clip plane distance."
	input SetAngles(string) : "Set the angles to use for the secondary fog direction."
	input SetColorLerpTo(color255) : "Set the primary fog color."
	input SetColorSecondaryLerpTo(color255) : "Set the secondary fog color."
	input SetStartDistLerpTo(float) : "Set the fog start distance."
	input SetEndDistLerpTo(float) : "Set the fog end distance."
	input StartFogTransition(void) : "Start fog transition."
	input SetMaxDensityLerpTo(float) : "Set max density lerp to."
	input SetZoomFogScale(void) : "Set the value the fog will scale the default value by when players are zoomed in (scoped)."
	input ActivateAllPlayers(void) : "Activates this fog controller for all players"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/env_funnel")
	color(200 200 0)
= env_funnel: "The suck-in effect from the HL1 Resonance Cascade sequence."
	[
	spawnflags(flags)  =
		[
		1: "[1] Reverse (repel particles instead of suck in)" : 0
		]

	]

@PointClass base(BaseEntityPoint) 
	color(200 0 0)
	iconsprite("editor/env_global.vmt")
= env_global: "An entity to control a game-specific global states."
	[
	globalstate(string) : "Global State to Set"
	initialstate(choices) : "Initial State" : 0 =
		[
		0: "Off"
		1: "On"
		2: "Dead"
		]

	counter(integer) : "Counter" : 0 : "An integer counter value associated with this global."
	spawnflags(flags)  =
		[
		1: "[1] Set Initial State" : 0
		]


	// Inputs
	input TurnOn(void) : "Set state of global to ON."
	input TurnOff(void) : "Set state of global to OFF."
	input Toggle(void) : "Toggles state of global between ON and OFF."
	input Remove(void) : "Set state of global to DEAD."
	input SetCounter(integer) : "Sets the counter value of this global."
	input AddToCounter(integer) : "Adds to the counter value of this global. Negative numbers subtract."
	input GetCounter(void) : "Causes the Counter output to be fired, passing the current counter value for this global. This doesn't work properly."

	// Outputs
	output Counter(integer) : "Fired in response to the GetCounter input, passing the current value of the counter."
	]

@PointClass base(BaseEntityPoint, EnableDisable) = env_gunfire: "Gunfire Effect"
	[
	target(target_destination) : "Target" : : "Shoot at this target. REMEMBER - this is an effect only! It does not do damage!"
	minburstsize(integer) : "Min Burst Size" : 2 : "Minimum number of rounds in a burst."
	maxburstsize(integer) : "Max Burst Size" : 7 : "Maximum number of rounds in a burst."
	minburstdelay(float) : "Min Delay Between Bursts" : 2 : "Minimum delay between bursts. (seconds)"
	maxburstdelay(float) : "Max Delay Between Bursts" : 5 : "Maximum delay between bursts. (seconds)"
	rateoffire(float) : "Rate of fire" : 10 : "Expressed as rounds per second"
	spread(choices) : "Bullet spread" : 5 : "The 'cone of inaccuracy' of the shots fired by this entity." =
		[
		1: "1 Degree"
		5: "5 Degrees"
		10: "10 Degrees"
		15: "15 Degrees"
		]

	bias(choices) : "Bullet distribution should be..." : 1 : "How to distribute bullets within the spread. Even distribution is a true scatter throughout the spread. Biased towards the outside makes the shots 'miss' the target by tending towards the outside of the spread." =
		[
		1: "Evenly distributed"
		-1: "Biased towards the outside"
		]

	collisions(choices) : "Collision detection" : 0 : "Whether/how to handle bullet collision detection. NOTE: If you select NONE, this entity will be very cheap to use, but all bullets will stop short at their target's position in space and there will be no impact effects. Normal collision detection does the same things NPCs do when they fire their guns (except harm anything)." =
		[
		0: "None. Cheap for performance."
		1: "Normal collision detection."
		]

	shootsound(sound) : "Shoot Sound" : "Weapon_AR2.NPC_Single" : "Gunfire sound to make"
	tracertype(choices) : "Tracer" : "AR2TRACER" : "Type of tracer to display" =
		[
		"Tracer": "Default"
		"AR2TRACER": "AR2"
		"": "None"
		]

	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/env_hudhint.vmt")
= env_hudhint: "An entity to control the display of HUD hints. HUD hints are used to show the player what key is bound to a particular command."
	[
	spawnflags(flags)  =
		[
		]

	message(string) : "Hint Text (localized)" : : "This should be set to match the desired HUD hint entry in resource/valve_english.txt."

	// Inputs
	input ShowHudHint(void) : "Shows the hint message."
	input HideHudHint(void) : "Hides the hint message."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/env_instructor_hint.vmt")
	line(255 255 0, targetname, hint_target)
	sphere(hint_range)
= env_instructor_hint: "An entity that allows for creation and control of instructor lessons by map logic."
	[
	hint_replace_key(string) : "Replace Key" : : "Unique name so that messages with the same key will replace each other."
	hint_target(target_destination) : "Target Entity" : : "The entity to show this hint on top of. The entity used must exist on the client, info_target_instructor_hint can be parented to server only entities for this purpose."
	hint_static(choices) : "Positioning" : 0 : "Either show at the position of the Target Entity. Or show the hint directly on the hud at a fixed position." =
		[
		0: "Follow the Target Entity"
		1: "Show on the hud"
		]

	hint_allow_nodraw_target(choices) : "Allow invisible target" : 1 : "Do we allow the hint to follow entities with nodraw set?" =
		[
		0: "End immediately on nodraw"
		1: "Yes"
		]

	hint_caption(string) : "Caption" : : "The text of your hint."
	hint_activator_caption(string) : "Activator Caption" : : "The text of your hint shown to only the activating player."
	hint_color(color255) : "Caption Color" : "255 255 255" : "The color of the caption text"
	hint_forcecaption(choices) : "Show through walls" : 0 : "Do we show the caption text even if the hint is occluded by a wall?" =
		[
		0: "No"
		1: "Show when occluded"
		]

	hint_icon_onscreen(choices) : "Onscreen Icon" : "icon_tip" : "The icon to use when the hint is within the player's view." =
		[
		"use_binding": "Show controls instead"
		"icon_blank": "Blank"
		"icon_bulb": "Bulb"
		"icon_caution": "Caution"
		"icon_alert": "White Exclamation Mark"
		"icon_alert_red": "Red Exclamation Mark"
		"icon_tip": "Information"
		"icon_skull": "Eye"
		"icon_interact": "Interact/Pickup"
		"icon_button": "Button"
		"icon_door": "Door"
		"icon_useable_item": "Joystick"
		"icon_arrow_plain_white_dn": "Simple Down Arrow"
		"icon_arrow_plain_white_up": "Simple Up Arrow"
		"icon_arrow_up": "Up Arrow"
		"icon_arrow_right": "Right Arrow"
		"icon_mouseRight": "Right-Click"
		"icon_mouseLeft": "Left-Click"
		"icon_mouseWheel_up": "MouseWheel Up"
		"icon_mouseWheel_down": "MouseWheel Down"
		"icon_mouseThree": "Click Scrollwheel"
		"icon_key_generic": "Empty Key"
		"icon_key_wide": "Spacebar"
		"icon_key_right": "Right Key"
		"icon_key_left": "Left Key"
		"icon_key_down": "Down Key"
		"icon_key_up": "Up Key"
		"icon_dpad": "D-Pad"
		"icon_fire": "Fire"
		"icon_present": "Present"
		]

	hint_icon_offscreen(choices) : "Offscreen Icon" : "icon_tip" : "The icon to use when the hint is outside the player's view." =
		[
		"icon_blank": "Blank"
		"icon_bulb": "Bulb"
		"icon_caution": "Caution"
		"icon_alert": "White Exclamation Mark"
		"icon_alert_red": "Red Exclamation Mark"
		"icon_tip": "Information"
		"icon_skull": "Eye"
		"icon_interact": "Interact/Pickup"
		"icon_button": "Button"
		"icon_door": "Door"
		"icon_useable_item": "Joystick"
		"icon_arrow_plain_white_dn": "Simple Down Arrow"
		"icon_arrow_plain_white_up": "Simple Up Arrow"
		"icon_arrow_up": "Up Arrow"
		"icon_arrow_right": "Right Arrow"
		"icon_mouseRight": "Right-Click"
		"icon_mouseLeft": "Left-Click"
		"icon_mouseWheel_up": "MouseWheel Up"
		"icon_mouseWheel_down": "MouseWheel Down"
		"icon_mouseThree": "Click Scrollwheel"
		"icon_key_generic": "Empty Key"
		"icon_key_wide": "Spacebar"
		"icon_key_right": "Right Key"
		"icon_key_left": "Left Key"
		"icon_key_down": "Down Key"
		"icon_key_up": "Up Key"
		"icon_dpad": "D-Pad"
		"icon_fire": "Fire"
		"icon_present": "Present"
		]

	hint_nooffscreen(choices) : "Show offscreen" : 0 : "When the hint is offscreen, do we show an icon and arrow?" =
		[
		0: "Show"
		1: "Don't show"
		]

	hint_binding(choices) : "Bound Command" : : "If using 'show key bindings' for the onscreen icon, this field should be the command we want to show bindings for." =
		[
		"": "Unused"
		"+forward": "Forward"
		"+back": "Backward"
		"+left": "Strafe Left"
		"+right": "strafe Right"
		"+duck": "Crouch"
		"+jump": "Jump"
		"+attack": "Primary Attack"
		"+attack2": "Secondary Attack"
		"+use": "Use Key"
		"+zoom": "Zoom In"
		"-zoom": "Zoom Out"
		]

	hint_icon_offset(float) : "Icon Height Offset" : 0 : "A height offset from the target entity's origin to display the hint"
	hint_pulseoption(choices) : "Size Pulsing" : 0 : "The icon size can pulsate" =
		[
		0: "No Pulse"
		1: "Slow Pulse"
		2: "Fast Pulse"
		3: "Urgent Pulse"
		]

	hint_alphaoption(choices) : "Alpha Pulsing" : 0 : "The icon alpha can pulsate" =
		[
		0: "No Pulse"
		1: "Slow Pulse"
		2: "Fast Pulse"
		3: "Urgent Pulse"
		]

	hint_shakeoption(choices) : "Shaking" : 0 : "The icon can shake" =
		[
		0: "No Shaking"
		1: "Narrow Shake"
		2: "Wide Shake"
		]

	hint_timeout(integer) : "Timeout" : 0 : "The automatic timeout for the hint. 0 will persist until stopped with EndHint."
	hint_range(float) : "Display Range" : 0 : "The visible range of the hint."
	hint_gamepad_binding(string) : "Gamepad Bound Command" : : "If using 'show key bindings' for the onscreen icon, this field should be the command we want to show bindings for when gamepad is enabled"

	// Inputs
	input ShowHint(string) : "Start showing the hint. If an entity name is passed as a parameter, the hint is shown only to that entity."
	input EndHint(void) : "Stop showing the hint if it hasn't already timed out."
	]

@PointClass base(BaseEntityPoint, RenderFields) 
	color(255 128 0)
	studio("models/editor/axis_helper_thick.mdl")
	iconsprite("editor/ficool2/env_lightglow.vmt")
	sphere(minDist)
	sphere(maxDist)
	sphere(outerMaxDist)
	sphere(GlowProxySize)
= env_lightglow: "An entity that puts an additive glow in the world, mostly used over light sources."
	[
	rendercolor(color255) : "Color (R G B)" : "255 255 255"
	verticalglowsize(integer) : "Vertical Size" : 30
	horizontalglowsize(integer) : "Horizontal Size" : 30
	mindist(integer) : "Minimum Distance" : 500 : "The distance at which this effect will be fully translucent."
	maxdist(integer) : "Maximum Distance" : 2000 : "The distance at which this effect will be at full intensity."
	outermaxdist(integer) : "Outer Maximum Distance" : 0 : "If larger than the maximum distance, this is the length at which the glow will fade completely out, between the span of the maximum distance and this length."
	glowproxysize(float) : "Glow Proxy Geometry Size" : 2 : "Size of the glow to be rendered for visibility testing. Must be larger than the distance from the sprite center to empty space. So if this glow is inside geometry (like a light bulb), set this value to be bigger than the bulb's radius. Any time a sphere of this radius would be visible (poking through any nearby geometry), the glow will be rendered."
	hdrcolorscale(float) : "HDR color scale." : "0.5" : "float value to multiply sprite color by when running in HDR mode."
	spawnflags(flags)  =
		[
		1: "[1] Visible only from front" : 0
		]


	// Inputs
	input Color(color255) : "Change the render color of the glow. Format: <Red 0-255> <Green 0-255> <Blue 0-255>"
	]

@PointClass base(BaseEntityPoint) = env_lightrail_endpoint: "Special effects for the endpoints of the lightrail.|||Special effects for the endpoints of the Unstationary Scaffold."
	[
	spawnflags(flags)  =
		[
		1: "[1] Start On (w/ Small FX)" : 0
		]

	small_fx_scale(float) : "Scale Small FX" : 1 : "Scale of the small effect.  1 is the default size, 2 is twice that, etc."
	large_fx_scale(float) : "Scale Large FX" : 1 : "Scale of the large effect.  1 is the default size, 2 is twice that, etc."

	// Inputs
	input StartCharge(float) : "Start charging the endpoint from the small to large state over a specified amount of seconds."
	input StartSmallFX(void) : "Start discharging particles at the small effects state over specified number of seconds."
	input StartLargeFX(void) : "Start discharging particles at the large effects state over specified number of seconds."
	input Stop(float) : "Stops the effect at any point."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ts2do/env_message.vmt")
= env_message: "An entity that draws a text message on player's HUDs."
	[
	message(string) : "Message Text"
	spawnflags(flags)  =
		[
		1: "[1] Play Once" : 0
		]

	messagesound(sound) : "Sound Effect" : : "When the message is shown, this sound effect will be played, originating from this entity."
	messagevolume(string) : "Volume 0-10" : 10 : "Volume of the sound effect."
	messageattenuation(choices) : "Sound Radius" : 0 =
		[
		0: "Small Radius"
		1: "Medium Radius"
		2: "Large  Radius"
		3: "Play Everywhere"
		]


	// Inputs
	input ShowMessage(void) : "Shows the message and plays the sound."

	// Outputs
	output OnShowMessage(void) : "Fired when the message is activated."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/env_microphone.vmt")
	sphere(MaxRange)
	color(0 0 255)
	line(64 64 64, targetname, target)
	line(255 255 0, targetname, target, targetname, SpeakerName)
= env_microphone: "An entity that acts as a microphone. It works in one of two modes. If it has a 'Speaker' set, it picks up all sounds within the specified sound range, and rebroadcasts them through the Speaker entity. In this Speaker mode, it ignores the Hears X spawnflags and does not fire the SoundLevel output. If it has no Speaker set, it measures the sound level at a point, and outputs the sound level as a value between 0 and 1. In Measuring mode, it only hears sounds that match the Hear X spawnflags."
	[
	target(target_destination) : "Measure target" : : "If the speaker is in Measuring mode, this is the name of the entity where the sound level is to be measured."
	speakername(target_destination) : "Speaker target" : : "The name of an entity through which to play any sounds heard by this microphone. If specified, the microphone will consider itself in Speaker mode."
	listenfilter(filterclass) : "Listen Filter" : : "The name of an filter entity which specifies the only entities the microphone can hear. Sounds emitted by other entities will not be heard."
	speaker_dsp_preset(choices) : "Speaker DSP Preset" : 0 : "Only useful in Speaker mode. If specified, when the microphone is enabled, it'll set the global dsp_speaker preset to this value. Sounds played back through speakers will then be affected by the selected DSP." =
		[
		0: "Use Default"
		50: "1 NO EFFECT"
		51: "2 (DUPLICATE OF 1)"
		52: "3 (DUPLICATE OF 1)"
		53: "4 (DUPLICATE OF 1)"
		54: "5 (DUPLICATE OF 1)"
		55: "6 SPEAKER, LOUDER"
		56: "7 SPEAKER VERY SMALL"
		57: "8 LOUDSPEAKER, ECHO"
		58: "9 SPEAKER SMALL"
		59: "10 SPEAKER TINY"
		]

	spawnflags(flags)  =
		[
		1: "[1] Hears combat sounds" : 1
		2: "[2] Hears world sounds" : 1
		4: "[4] Hears player sounds" : 1
		8: "[8] Hears bullet impacts" : 1
		16: "[16] Swallows sounds routed through speakers" : 0
		32: "[32] Hears explosions" : 0
		64: "[64] Ignores non-attenuated sounds" : 0
		]

	sensitivity(float) : "Sensitivity (0 - 10)" : 1 : "Microphone sensitivity, 0=deaf, 1=default, 10=extremely sensitive). Only applicable in Measuring mode."
	smoothfactor(float) : "Smoothing (0 - 1)" : 0 : "Smoothing factor, 0=no smoothing, 1=maximum smoothing). Only applicable in Measuring mode."
	maxrange(float) : "Maximum hearing range (0=infinite)" : 240 : "Sounds beyond this range won't be heard, irrelevant of attenuation. WARNING: setting this to zero (or a value > 1024) when the microphone is in Speaker mode can be very bad for performance!!"

	// Inputs
	input SetSpeakerName(string) : "Set the microphone to output through a different speaker entity."

	// Outputs
	output SoundLevel(float) : "Fired in Measuring mode whenever the sound level changes."
	output OnRoutedSound(void) : "Fired whenever a sound is routed out through the specified speaker (if any)."
	output OnHeardSound(void) : "Fired whenever this microphone hears any sound it cares about."
	]

@PointClass base(BaseEntityPoint) = env_movieexplosion
	[
	]

@PointClass base(BaseEntityPoint) 
	studio("models/editor/env_muzzleflash.mdl")
= env_muzzleflash: "Muzzle Flash"
	[
	parentattachment(string) : "Parent Attachment" : : "The name of an attachment on the parent to hierarchically attach to."
	scale(float) : "Scale" : 1 : "Size of the muzzle flash."

	// Inputs
	input Fire(void) : "Fires the effect once."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/env_particle_performance_monitor")
= env_particle_performance_monitor: "An entity for turning on and off measuring and display of particle throughput."
	[

	// Inputs
	input TurnOnDisplay(void) : "Turn on display of particle simulation benchmark"
	input TurnOffDisplay(void) : "Turn off display of particle simulation benchmark"
	input StartMeasuring(void) : "Start measuring particle simulation speed"
	input StopMeasuring(void) : "Stop measuring particle simulation speed"
	]

@PointClass base(BaseEntityPoint) 
	color(200 200 0)
	line(200 200 200, targetname, psname)
	iconsprite("editor/ficool2/env_particlelight.vmt")
= env_particlelight: "An entity that can be used to light the smoke particles emitted by env_smokestack entities. Does not light any other particle types."
	[
	color(color255) : "Color" : "255 0 0" : "Color emitted by this light."
	intensity(integer) : "Intensity" : 5000
	directional(boolean) : "Directional" : 0 : "If this is specified, then this light will use the bump map on the particles. Each particle system can have one ambient and one directional light."
	psname(target_destination) : "Particle System Entity" : : "Set this to the name of the env_smokestack that you want this light to affect."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/env_effectscript")
	studioprop()
= env_particlescript: "An entity that has special animation events that can be fired by a model with an animation inside its .qc designed for use by this entity."
	[
	model(studio) : "Script Model" : : "Model to use for animation sequences."

	// Inputs
	input SetSequence(string) : "Sets the script model's sequence."
	]

@PointClass base(BaseEntityPoint) 
	sphere(inner_radius)
	iconsprite("editor/env_physexplosion.vmt")
	sphere(radius)
	line(255 255 0, targetname, targetEntityName)
	cylinder(255 0 0, targetname, targetname, radius, targetname, targetentityname)
	color(128 128 128)
= env_physexplosion: "An entity that creates an explosion at its origin. If the no-damage spawnflag is set, the explosion won't be visible, but will apply force to any physics objects within its radius."
	[
	magnitude(string) : "Magnitude" : 100 : "Amount of physics force applied by the explosion. A negative value can be used to suck entities inward."
	radius(string) : "Clamp Radius (0 = auto)" : 0 : "If specified, the radius in which the explosion damages entities. If unspecified, the radius will be based on the magnitude."
	targetentityname(target_destination) : "Limit to Entity" : : "If specified, the explosion will only affect the matching entity."
	spawnflags(flags)  =
		[
		1: "[1] No Damage - Only Force" : 1
		2: "[2] Push players" : 0
		4: "[4] Push radially - not as a sphere" : 0
		8: "[8] Test LOS before pushing" : 0
		16: "[16] Disorient player if pushed" : 0
		]

	inner_radius(float) : "Inner radius" : 0 : "If not zero, the LOS is calculated from a point intersecting this sphere."

	// Inputs
	input Explode(void) : "Trigger the explosion."
	input ExplodeAndRemove(void) : "Triggers the explosion and then removes the entity."

	// Outputs
	output OnPushedPlayer(void) : "Fires when the player is pushed by the explosion."
	]

@PointClass base(BaseEntityPoint) 
	line(255 255 255, targetname, directionentityname)
	iconsprite("editor/ficool2/env_physimpact.vmt")
	sphere(distance)
	color(128 128 128)
= env_physimpact: "An entity that will cause a physics impact on another entity."
	[
	angles(angle) : "Pitch Yaw Roll (Y Z X)" : "0 0 0" : "Direction to project the impact."
	magnitude(integer) : "Magnitude" : 100 : "Strength of the impact."
	distance(integer) : "Distance" : 0 : "How far to project the impact (if 0 uses a default value)."
	directionentityname(target_destination) : "Point to Entity" : : "If set, 'Distance' and Angle settings are ignored and the direction and distance to the target entity will be used."
	spawnflags(flags)  =
		[
		1: "[1] No fall-off" : 0
		2: "[2] Infinite Length" : 0
		4: "[4] Ignore Mass" : 0
		8: "[8] Ignore Surface Normal When Applying Force" : 1
		]


	// Inputs
	input Impact(void) : "Trigger the impact"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/env_player_surface_trigger.vmt")
	color(200 0 0)
= env_player_surface_trigger: "An entity that monitors the material of the surface the player is standing on, and fires outputs whenever it changes to/from a specific material."
	[
	gamematerial(choices) : "Game Material to Watch" : 0 : "The material to watch. When the player stands on/off this material, this entity's outputs will be fired." =
		[
		0: "Nonfunctional (air)"
		65: "A - Antlion"
		66: "B - Bloody Flesh"
		67: "C - Concrete"
		68: "D - Dirt"
		69: "E - Eggshell"
		70: "F - Flesh"
		71: "G - Grate"
		72: "H - Alien Flesh"
		73: "I - Clip"
		74: "J - Grass"
		75: "K - Snow"
		76: "L - Plastic"
		77: "M - Metal"
		78: "N - Sand"
		79: "O - Foliage"
		80: "P - Computer"
		81: "Q - Asphalt"
		82: "R - Brick"
		83: "S - Slosh"
		84: "T - Tile"
		85: "U - Cardboard"
		86: "V - Vent"
		87: "W - Wood"
		88: "X - Fake surfaces"
		89: "Y - Glass"
		90: "Z - Warp Shield"
		1: "1 - Clay"
		2: "2 - Plaster"
		3: "3 - Rock"
		4: "4 - Rubber"
		5: "5 - Sheet Rock"
		6: "6 - Cloth"
		7: "7 - Carpet"
		8: "8 - Paper"
		9: "9 - Upholstery"
		11: "11 - Mud"
		12: "12 - Sand Barrel"
		13: "13 - Dense Wood"
		]


	// Inputs
	input Enable(void) : "Start watching the player's surface."
	input Disable(void) : "Stop watching the player's surface."

	// Outputs
	output OnSurfaceChangedToTarget(void) : "Fired when the player moves onto the specified game material."
	output OnSurfaceChangedFromTarget(void) : "Fired when the player moves off the specified game material."
	]

@PointClass base(BaseEntityPoint) = env_player_viewfinder: "When enabled, the viewfinder screen overlay will turn on, like when gesturing to cameras. Applies to both Coop players."
	[

	// Inputs
	input ShowViewFinder(void) : "Shows the view finder screen overlay."
	input HideViewFinder(void) : "Hides the view finder screen overlay."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/env_portal_credits")
	color(200 0 0)
= env_portal_credits: "The entity that controls the Portal credits, loaded from 'scripts/credits.txt'."
	[

	// Inputs
	input RollCredits(void) : "Start the intro credits rolling."
	input RollOutroCredits(void) : "Start the outro credits rolling."
	input ShowLogo(void) : "Show the HL2 logo."
	input SetLogoLength(float) : "How long the logo shows."
	input RollPortalOutroCredits(void) : "Start the Portal greenscreen outro credits."

	// Outputs
	output OnCreditsDone(void) : "Fired when the credits having finished rolling."
	]

@PointClass base(BaseEntityPoint, SystemLevelChoice) 
	frustum(lightfov, nearz, farz, lightcolor, -1)
	studio("models/editor/cone_helper.mdl")
	iconsprite("editor/env_projectedtexture")
	line(255 255 255, targetname, target)
	sphere(nearz)
	sphere(farz)
= env_projectedtexture: "Projected texture entity."
	[
	spawnflags(flags)  =
		[
		1: "[1] Enabled" : 1
		2: "[2] Always Update (moving light)" : 0
		]

	target(target_destination) : "target" : : "target"
	lightfov(float) : "FOV" : "90.0" : "FOV"
	nearz(float) : "NearZ" : "4.0" : "Near Z for projected texture"
	farz(float) : "FarZ" : "750.0" : "Far Z for projected texture"
	enableshadows(boolean) : "Enable Shadows" : 1 : "Enables/disables shadows from this projected texture."
	shadowquality(choices) : "Shadow Quality" : 1 : "Quality of shadows." =
		[
		0: "Low"
		1: "High"
		]

	lightonlytarget(boolean) : "Light Only Target" : 0 : "Limit flashlight effect to only effect target entity."
	lightworld(boolean) : "Light World" : 1 : "Control whether flashlight effects static world geometry."
	simpleprojection(boolean) : "Simple Projection" : 0 : "Indicates if this is a simple, non-light casting texture projection"
	lightcolor(color255) : "Light Color" : "255 255 255 200" : "Light Color RGB-Intensity"
	brightnessscale(float) : "Brightness Scale" : "1.0" : "Scale the light color by this brightness"
	cameraspace(boolean) : "Camera Space" : 0 : "Angles are interpreted as being relative to camera."
	colortransitiontime(float) : "Color Transition Time" : "0.5" : "Amount of time it takes for a color change to occur."
	texturename(string) : "Texture Name" : "effects/flashlight001" : "VTF Texture to 'project' onto the enviroment. Please note that env_projectedtexture uses .vtf files directly when not in simple projection mode. The material browser is only available here to assist with finding textures since materials typically have the same name as their textures."
	moviename(string) : "Movie Name" : : "Show a movie instead of a static texture. Keep empty if you want to project a static texture. BUG: Video needs a black border to avoid glitchy artifacts"
	textureframe(integer) : "Texture Frame" : 0 : "If the VTF is multi-frame, specify the frame to use."
	volumetric(boolean) : "Enable Volumetrics" : 0 : "Enables/disables volumetrics from this projected texture."
	volumetricintensity(float) : "Volumetric Intensity" : "1.0" : "Sets the intensity of the volumetric lighting."
	volumetricfalloff(float) : "Volumetric Falloff" : "1.0" : "Sets the falloff exponent of the volumetric lighting."
	style(choices) : "Appearance" : 0 =
		[
		0: "Normal"
		10: "Fluorescent flicker"
		2: "Slow, strong pulse"
		11: "Slow pulse, noblack"
		5: "Gentle pulse"
		1: "Flicker A"
		6: "Flicker B"
		3: "Candle A"
		7: "Candle B"
		8: "Candle C"
		4: "Fast strobe"
		9: "Slow strobe"
		]

	pattern(string) : "Custom Appearance" : : "Set a custom pattern of light brightness for this light. Pattern format is a string of characters, where 'a' is total darkness, 'z' fully bright. i.e. 'aaggnnttzz' would be a steppy fade in from dark to light."

	// Inputs
	input TurnOn(void) : "Turn on the texture"
	input TurnOff(void) : "Turn off the texture"
	input FOV(float) : "Set FOV of projection."
	input Target(target_destination) : "Set a new target entity to point at."
	input CameraSpace(bool) : "Set Camera Space."
	input AlwaysUpdateOn(void) : "Turn on per frame updating (for moving lights)"
	input AlwaysUpdateOff(void) : "Turn off per frame updating (for moving lights)"
	input SpotlightTexture(string) : "Set the spotlight texture"
	input SetSpotlightTextureFrame(integer) : "Sets the spotlight texture frame"
	input EnableShadows(bool) : "Set if the shadows are enabled."
	input LightColor(color255) : "Change the light color/brightness"
	input SetLightStyle(integer) : "Change the lightstyle (see Appearance field for possible values)."
	input SetPattern(string) : "Set a custom pattern of light brightness for this light. The Pattern format is a string of characters, where 'a' is total darkness, 'z' fully bright. i.e. 'aaggnnttzz' would be a steppy fade in from dark to light."
	input SetNearZ(float) : "Sets the near Z distance."
	input SetFarZ(float) : "Sets the far Z distance."
	input LightOnlyTarget(bool) : "Set if the projected texture lights the target only."
	input LightWorld(bool) : "Set if the projected texture lights the world and static geometry."
	input EnableVolumetrics(void) : "Enables volumetrics."
	input DisableVolumetrics(void) : "Disables volumetrics."
	input SetVolumetricIntensity(float) : "Sets the volumetric lighting's intensity."
	input SetVolumetricFalloff(float) : "Sets the volumetric lighting's falloff exponent."
	input SetBrightnessScale(float) : "Sets the brightness."
	]

@PointClass base(BaseEntityPoint) = env_rockettrail: "Continuous rocket flame for HL2 RPG missiles."
	[
	]

@PointClass base(BaseEntityPoint) 
	color(200 0 0)
	iconsprite("editor/ficool2/env_screeneffect")
= env_screeneffect: "Allows screenspace effects to be played on the player's view."
	[
	type(choices) : "Effect Type" : 0 : "Which effect to use." =
		[
		0: "Advisor Stun"
		1: "Intro Blur"
		2: "Groggy Vision"
		]


	// Inputs
	input StartEffect(float) : "Start the effect with the duration in seconds as the passed parameter."
	input StopEffect(float) : "Stop the effect."
	]

@PointClass base(BaseEntityPoint) 
	color(200 0 0)
	iconsprite("editor/ficool2/env_screenoverlay")
= env_screenoverlay: "An entity that can display and control a set of screen overlays, to be displayed over the player's view. Useful for view effects like drunkenness, or teleporter afterimages, etc."
	[
	overlayname1(material) : "Overlay Name 1" : : "Name of the first overlay material to display."
	overlaytime1(float) : "Overlay Duration 1" : "1.0" : "Amount of time that the first overlay should be displayed for, after which it will begin showing the second overlay."
	overlayname2(material) : "Overlay Name 2" : : "Name of the second overlay material to display. If left blank, overlay displaying will finish, and this entity will consider itself done."
	overlaytime2(float) : "Overlay Duration 2" : "1.0" : "Amount of time that the second overlay should be displayed for, after which it will begin showing the third overlay."
	overlayname3(material) : "Overlay Name 3" : : "Name of the third overlay material to display. If left blank, overlay displaying will finish, and this entity will consider itself done."
	overlaytime3(float) : "Overlay Duration 3" : "1.0" : "Amount of time that the third overlay should be displayed for, after which it will begin showing the fourth overlay."
	overlayname4(material) : "Overlay Name 4" : : "Name of the fourth overlay material to display. If left blank, overlay displaying will finish, and this entity will consider itself done."
	overlaytime4(float) : "Overlay Duration 4" : "1.0" : "Amount of time that the fourth overlay should be displayed for, after which it will begin showing the fifth overlay."
	overlayname5(material) : "Overlay Name 5" : : "Name of the fifth overlay material to display. If left blank, overlay displaying will finish, and this entity will consider itself done."
	overlaytime5(float) : "Overlay Duration 5" : "1.0" : "Amount of time that the fifth overlay should be displayed for, after which it will begin showing the sixth overlay."
	overlayname6(material) : "Overlay Name 6" : : "Name of the sixth overlay material to display. If left blank, overlay displaying will finish, and this entity will consider itself done."
	overlaytime6(float) : "Overlay Duration 6" : "1.0" : "Amount of time that the sixth overlay should be displayed for, after which it will begin showing the seventh overlay."
	overlayname7(material) : "Overlay Name 7" : : "Name of the seventh overlay material to display. If left blank, overlay displaying will finish, and this entity will consider itself done."
	overlaytime7(float) : "Overlay Duration 7" : "1.0" : "Amount of time that the seventh overlay should be displayed for, after which it will begin showing the eighth overlay."
	overlayname8(material) : "Overlay Name 8" : : "Name of the eighth overlay material to display. If left blank, overlay displaying will finish, and this entity will consider itself done."
	overlaytime8(float) : "Overlay Duration 8" : "1.0" : "Amount of time that the eighth overlay should be displayed for, after which it will begin showing the ninth overlay."
	overlayname9(material) : "Overlay Name 9" : : "Name of the ninth overlay material to display. If left blank, overlay displaying will finish, and this entity will consider itself done."
	overlaytime9(float) : "Overlay Duration 9" : "1.0" : "Amount of time that the ninth overlay should be displayed for, after which it will begin showing the tenth overlay."
	overlayname10(material) : "Overlay Name 10" : : "Name of the tenth overlay material to display. If left blank, overlay displaying will finish, and this entity will consider itself done."
	overlaytime10(float) : "Overlay Duration 10" : "1.0" : "Amount of time that the tenth overlay should be displayed for, after which this entity will stop displaying overlays."

	// Inputs
	input StartOverlays(void) : "Start displaying the first overlay."
	input StopOverlays(void) : "Stop displaying any overlays."
	input SwitchOverlay(float) : "Switch to displaying a specific overlay. Pass in the desired overlay number in the parameter."
	]

@PointClass base(BaseEntityPoint) 
	sphere(radius)
	iconsprite("editor/env_shake.vmt")
	color(200 0 0)
= env_shake: "An entity to control screen shake on players."
	[
	spawnflags(flags)  =
		[
		1: "[1] GlobalShake" : 0
		4: "[4] In Air" : 0
		8: "[8] Physics" : 0
		16: "[16] Ropes" : 0
		32: "[32] DON'T shake view (for shaking ropes or physics only)" : 0
		64: "[64] DON'T Rumble Controller" : 0
		]

	amplitude(float) : "Amplitude (0-16)" : 4 : "The amount of noise in the screen shake. Should be a range between 0 and 16."
	radius(float) : "Effect Radius" : 500 : "The radius around this entity in which to affect players."
	duration(float) : "Duration (seconds)" : 1 : "The length of time in which to shake the player's screens."
	frequency(float) : "Frequency" : "2.5" : "The frequency used to apply the screen shake. Should be a value between 0 and 255, where 0.1 = jerk, and 255.0 = rumble."

	// Inputs
	input Amplitude(string) : "Set the amplitude (0-16)"
	input Frequency(string) : "Set the frequence. Should be a value between 0 and 255, where 0.1 = jerk, and 255.0 = rumble."
	input StartShake(void) : "Start the shake."
	input StopShake(void) : "Stop the shake."
	]

@PointClass base(BaseEntityPoint) 
	color(200 200 0)
	iconsprite("editor/env_smokestack.vmt")
	sphere(jetlength)
= env_smokestack: "An entity that spits out a constant stream of smoke. See particlezoo.vmf for sample usage. You can place up to two env_particlelight entities near the smoke stack to add ambient light to its particles."
	[
	initialstate(choices) : "Initial State" : 0 =
		[
		0: "Off"
		1: "On"
		]

	basespread(integer) : "Spread at the base" : 20 : "Amount of random spread in the origins of the smoke particles when they're spawned."
	spreadspeed(integer) : "Spread Speed" : 15 : "Amount of random spread in the velocity of the smoke particles after they're spawned."
	speed(integer) : "Speed" : 30 : "The speed at which the smoke particles move after they're spawned."
	startsize(integer) : "Particle start size" : 20 : "Size of the smoke particles when they're first emitted."
	endsize(integer) : "Particle end size" : 30 : "Size of the smoke particles at the point they fade out completely."
	rate(integer) : "Emission rate" : 20 : "Rate at which to emit smoke particles (i.e. particles to emit per second)."
	jetlength(integer) : "Length of smoke trail" : 180 : "Length of the smokestack. Lifetime of the smoke particles is derived from this & particle speed."
	windangle(integer) : "Wind X/Y Angle" : 0 : "This specifies the wind direction. It is an angle in the XY plane. WindSpeed specifies the strength of the wind."
	windspeed(integer) : "Wind Speed" : 0 : "The strength of the wind."
	smokematerial(material) : "Particle material" : "particle/SmokeStack.vmt" : "Material of the smoke particles emitted by this stack."
	twist(integer) : "Twist" : 0 : "The amount, in degrees per second, that the smoke particles twist around the origin."
	roll(float) : "Roll Speed" : 0 : "Amount of roll in degrees per second."
	rendercolor(color255) : "Base Color (R G B)" : "255 255 255"
	renderamt(integer) : "Translucency" : 255

	// Inputs
	input TurnOn(void) : "Turn on the smokestack."
	input TurnOff(void) : "Turn off the smokestack."
	input Toggle(void) : "Toggles the smokestack between on and off state."
	input JetLength(integer) : "Set the length of the smoke trail."
	input Rate(integer) : "Set the rate at which to emit smoke particles (particles per second)."
	input Speed(integer) : "Set the speed at which the smoke particles move after they're spawned."
	input SpreadSpeed(integer) : "Set the amount of random spread in the velocity of the smoke particles after they're spawned."
	]

@PointClass base(BaseEntityPoint) 
	color(200 50 0)
	iconsprite("editor/ficool2/env_smoketrail")
	sphere(spawnradius)
= env_smoketrail: "An entity that creates a smoke trail."
	[
	opacity(float) : "Sprite Opacity" : "0.75" : "Opacity of the sprites (range from 0 - 1)."
	spawnrate(float) : "Spawn Rate" : 20 : "Number of particles to emit each second."
	lifetime(float) : "Particle Life Time" : "5.0" : "Number of seconds until each particle dies."
	startcolor(color255) : "Start Color" : "192 192 192" : "Starting color of the emitted particles."
	endcolor(color255) : "End Color" : "160 160 160" : "Ending color of the emitted particles."
	emittime(float) : "Emitter Life Time" : 0 : "Number of seconds until the env_smoketrail stops emitting particles. 0 means never stop emitting particles."
	minspeed(float) : "Minimum Random Speed" : 10 : "Minimum randomly-directed speed to use for emitted particles."
	maxspeed(float) : "Maximum Random Speed" : 20 : "Maximum randomly-directed speed to use for emitted particles."
	mindirectedspeed(float) : "Minimum Directed Speed" : 0 : "Minimum speed along the env_smoketrail's forward direction (x axis) to use for emitted particles."
	maxdirectedspeed(float) : "Maximum Directed Speed" : 0 : "Maximum speed along the env_smoketrail's forward direction (x axis) to use for emitted particles."
	startsize(float) : "Starting particle size" : 15 : "Starting particle size."
	endsize(float) : "Ending particle size" : 50 : "Ending particle size."
	spawnradius(float) : "Spawn radius" : 15 : "Distance from env_smoketrail at which particles are emitted."
	firesprite(sprite) : "Fire Sprite" : "sprites/firetrail.spr"
	smokesprite(sprite) : "Smoke Puff" : "sprites/whitepuff.spr"
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	sphere(radius)
	iconsprite("editor/env_soundscape.vmt")
	line(255 255 255, targetname, position0)
	line(255 255 255, targetname, position1)
	line(255 255 255, targetname, position2)
	line(255 255 255, targetname, position3)
	line(255 255 255, targetname, position4)
	line(255 255 255, targetname, position5)
	line(255 255 255, targetname, position6)
	line(255 255 255, targetname, position7)
= env_soundscape: "An entity to control sound in an area. The active soundscape at any time is the last one that had line-of-sight to the player, and was within the radius."
	[
	radius(integer) : "Radius" : 128 : "If set to -1, then the player can hear the soundscape as long as they can see it (regardless of distance to it)."
	soundscape(choices) : "Soundscape" : "Nothing" : "The name of the soundscape to use. Corresponds to an entry in the soundscapes*.txt file in the scripts/ directory." =
		[
		"Nothing": "Nothing"
		"Automatic": "Automatic"
		"Automatic_Dialog": "Automatic (dialog)"
		"GenericIndoor": "Indoor"
		"GenericOutdoor": "Outdoor"
		]

	position0(target_destination) : "Sound Position 0" : : "A sound position that will be referenced inside the soundscape text file. Usually used to position a set of sounds within the world."
	position1(target_destination) : "Sound Position 1" : : "A sound position that will be referenced inside the soundscape text file. Usually used to position a set of sounds within the world."
	position2(target_destination) : "Sound Position 2" : : "A sound position that will be referenced inside the soundscape text file. Usually used to position a set of sounds within the world."
	position3(target_destination) : "Sound Position 3" : : "A sound position that will be referenced inside the soundscape text file. Usually used to position a set of sounds within the world."
	position4(target_destination) : "Sound Position 4" : : "A sound position that will be referenced inside the soundscape text file. Usually used to position a set of sounds within the world."
	position5(target_destination) : "Sound Position 5" : : "A sound position that will be referenced inside the soundscape text file. Usually used to position a set of sounds within the world."
	position6(target_destination) : "Sound Position 6" : : "A sound position that will be referenced inside the soundscape text file. Usually used to position a set of sounds within the world."
	position7(target_destination) : "Sound Position 7" : : "A sound position that will be referenced inside the soundscape text file. Usually used to position a set of sounds within the world."

	// Inputs
	input Enable(void) : "Enable the soundscape."
	input Disabled(void) : "Disable the soundscape."
	input ToggleEnabled(void) : "Toggle the soundscape enabled state."

	// Outputs
	output OnPlay(void) : "Fired when this soundscape becomes the active one."
	]

@PointClass base(BaseEntityPoint) 
	sphere(radius)
	line(255 255 255, targetname, MainSoundscapeName)
	iconsprite("editor/env_soundscape_proxy.vmt")
= env_soundscape_proxy: "An entity that acts like a soundscape but gets all of its sound parameters from another env_soundscape entity."
	[
	mainsoundscapename(target_destination) : "Soundscape Entity" : : "The soundscape to get all sound parameters from."
	radius(integer) : "Radius" : 128

	// Inputs
	input Enable(void) : "Enable the soundscape."
	input Disabled(void) : "Disable the soundscape."
	input ToggleEnabled(void) : "Toggle the soundscape enabled state."

	// Outputs
	output OnPlay(void) : "Fired when this soundscape becomes the active one."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/env_spark.vmt")
	color(200 200 0)
	studio("models/editor/cone_helper.mdl")
= env_spark: "An entity used to create sparks at its origin."
	[
	maxdelay(string) : "Max Delay" : 0 : "The longest delay between sparks (in seconds)."
	magnitude(choices) : "Magnitude" : 1 : "The size of the sparks." =
		[
		1: "Small"
		2: "Medium"
		5: "Large"
		8: "Huge"
		]

	traillength(choices) : "Spark Trail Length" : 1 =
		[
		1: "Short"
		2: "Medium"
		3: "Long"
		]

	spawnflags(flags)  =
		[
		64: "[64] Start ON" : 0
		128: "[128] Glow" : 0
		256: "[256] Silent" : 0
		512: "[512] Directional" : 0
		]


	// Inputs
	input StartSpark(void) : "Start the spark effect."
	input StopSpark(void) : "Stop the spark effect."
	input ToggleSpark(void) : "Toggle the on/off state of the spark effect."
	input SparkOnce(void) : "Spark once."

	// Outputs
	output OnSpark(void) : "Fired every time this entity sparks."
	]

@PointClass base(BaseEntityPoint, ResponseContext) 
	iconsprite("editor/ambient_generic.vmt")
= env_speaker: "Announcement Speaker"
	[
	delaymin(string) : "Min Delay Between Announcements" : 15
	delaymax(string) : "Max Delay Between Announcements" : 135
	spawnflags(flags)  =
		[
		1: "[1] Start Silent" : 0
		2: "[2] Play Everywhere" : 0
		]

	rulescript(string) : "Context rule script" : : "Script file containing rules for playing appropriate sounds."
	concept(string) : "Concept name" : : "High level concept name used as primary search key."

	// Inputs
	input TurnOn(void) : "Turn on the random announcements."
	input TurnOff(void) : "Turn off the random announcements."
	input Toggle(void) : "Toggle the random announcements off and on."
	]

@PointClass base(BaseEntityPoint) 
	color(32 200 255)
	studio("models/editor/env_splash.mdl")
= env_splash: "An entity that creates a splash effect at its origin. If the 'find water surface' spawnflag is set, it will instead trace down below itself to find the water surface on which to create splashes."
	[
	scale(float) : "Scale of the splash" : "8.0"
	spawnflags(flags)  =
		[
		1: "[1] Automatically find water surface (place entity above water)" : 0
		2: "[2] Diminish with depth (diminished completely in 10 feet of water)" : 1
		]


	// Inputs
	input Splash(void) : "Create a splash effect."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/ficool2/env_sporeexplosion.vmt")
= env_sporeexplosion: "Bugbait Spore Effect"
	[
	spawnrate(float) : "Spawn Rate (as percentage)" : 25 : "How dense the spore effect is"
	]

@PointClass base(BaseEntityPoint, RenderFields, SystemLevelChoice) 
	studio("models/editor/axis_helper_white.mdl")
	sprite()
	color(20 140 20)
	sphere(GlowProxySize)
= env_sprite: "An entity that controls the drawing of a sprite in the world."
	[
	framerate(float) : "Framerate" : "10.0" : "Rate at which the sprite should animate, if at all."
	model(sprite) : "Sprite Name" : "sprites/glow01.spr" : "Material of the sprite to be drawn."
	scale(float) : "Scale" : "0.25" : "Scale multiplier of the sprite."
	spawnflags(flags)  =
		[
		1: "[1] Start on" : 0
		2: "[2] Play Once" : 0
		]

	rendermode(choices) : "Render Mode" : 9 : "Specify the sprite rendering behaviour." =
		[
		3: "Glow"
		9: "World Space Glow"
		0: "Normal"
		1: "Color"
		2: "Texture"
		4: "Solid"
		5: "Additive"
		7: "Additive Fractional Frame"
		10: "Don't Render"
		]

	glowproxysize(float) : "Size of Glow Proxy Geometry." : "2.0" : "Size of the glow to be rendered for visibility testing. Must be larger than the distance from the sprite center to empty space. So if this glow is inside geometry (like a light bulb), set this value to be bigger than the bulb's radius. Any time a sphere of this radius would be visible (poking through any nearby geometry), the glow will be rendered."
	hdrcolorscale(float) : "HDR color scale." : "0.7" : "float value to multiply sprite color by when running in HDR mode."

	// Inputs
	input ColorRedValue(float) : "Sets the red color channel's value (0 - 255)."
	input ColorGreenValue(float) : "Sets the green color channel's value (0 - 255)."
	input ColorBlueValue(float) : "Sets the blue color channel's value (0 - 255)."
	input SetScale(float) : "Set the sprite's scale (0 - 8.0)."
	input HideSprite(void) : "Hide the sprite. Won't be drawn until the 'ShowSprite' input is received."
	input ShowSprite(void) : "Show the sprite."
	input ToggleSprite(void) : "Toggle the sprite between hidden and shown."
	]

@PointClass base(BaseEntityPoint, RenderFields) 
	iconsprite("editor/env_spritetrail.vmt")
	sphere(startwidth)
	sphere(endwidth)
= env_spritetrail: "A magical trail you can parent to anything you heart desires."
	[
	lifetime(float) : "Lifetime" : "0.5"
	startwidth(float) : "Start Width" : "8.0"
	endwidth(float) : "End Width" : "1.0"
	spritename(sprite) : "Sprite Name" : "sprites/bluelaser1.vmt"
	renderamt(integer) : "FX Amount (0 - 255)" : 255 : "The FX amount is used by the selected Render Mode."
	rendercolor(color255) : "FX Color (R G B)" : "255 255 255" : "The FX color is used by the selected Render Mode."
	rendermode(choices) : "Render Mode" : 5 =
		[
		0: "Normal"
		4: "Solid"
		5: "Additive"
		]


	// Inputs
	input ColorRedValue(float) : "Sets the red color channel's value (0 - 255)."
	input ColorGreenValue(float) : "Sets the green color channel's value (0 - 255)."
	input ColorBlueValue(float) : "Sets the blue color channel's value (0 - 255)."
	input SetScale(float) : "Set the sprite's scale (0 - 8.0)."
	input HideSprite(void) : "Hide the sprite. Won't be drawn until the 'ShowSprite' input is received."
	input ShowSprite(void) : "Show the sprite."
	input ToggleSprite(void) : "Toggle the sprite between hidden and shown."
	]

@PointClass base(BaseEntityPoint, RenderFields) 
	color(200 200 0)
	studioprop("models/editor/spot_cone_fixed.mdl")
	frustum(spreadspeed, _frustum_near, jetlength, rendercolor, -1)
= env_steam: "An entity used to create a jet of steam."
	[
	spawnflags(flags)  =
		[
		1: "[1] Emissive" : 0
		]

	initialstate(boolean) : "Start Enabled" : 0
	type(choices) : "Particle Type" : 0 =
		[
		0: "Normal"
		1: "Heat Wave"
		]

	spreadspeed(integer) : "Spread Speed" : 15 : "The amount of random spread in the particle's velocity after they spawn."
	speed(integer) : "Speed" : 120 : "The default speed at which the particles move after they spawn."
	startsize(integer) : "Particle start size" : 10 : "The initial size of the particles after they spawn."
	endsize(integer) : "Particle end size" : 25 : "The size of the particles at the point at which they are removed."
	rate(integer) : "Emission rate" : 26 : "The rate of particle emission. i.e. particles per second."
	rendercolor(color255) : "Color (R G B)" : "60 65 68" : "The color of the steam. Only has an effect if the Emissive flag is on, but can otherwise be used to set the color shown in Hammer."
	jetlength(integer) : "Length of steam jet" : 80 : "The length of the jet determines the lifetime of each particle."
	renderamt(integer) : "Translucency" : 255
	rollspeed(float) : "Spin Speed" : 8 : "How fast do the particles spin"

	// Inputs
	input TurnOn(void) : "Turns the steam jet on."
	input TurnOff(void) : "Turns the steam jet off."
	input Toggle(void) : "Toggles the steam jet between on and off."
	input JetLength(integer) : "Sets the length of steam jet."
	input Rate(integer) : "Sets the particle emission rate in particles per second."
	input Speed(integer) : "Sets the default speed of the particles in units per second."
	input SpreadSpeed(integer) : "Sets the spread speed in units per second."
	]

@PointClass base(BaseEntityPoint, RenderFields, SystemLevelChoice) 
	color(200 0 0)
	iconsprite("editor/env_sun.vmt")
	line(255 255 0, targetname, target)
= env_sun: "An entity to control & draw a sun effect in the sky."
	[
	target(target_destination) : "Viewer entity" : : "Name of an entity used to determine where the sun is in the skybox. The sun should be lined up on a line from this entity to the env_sun entity."
	use_angles(boolean) : "UseAngles" : 0 : "The old way to orient env_sun is to point it at a target. The new way is to specify the angles. If you use the new way, set this property to YES."
	pitch(integer) : "Pitch" : 0
	rendercolor(color255) : "Sun Color (R G B)" : "100 80 80"
	overlaycolor(color255) : "Overlay Color (R G B)" : "0 0 0" : "A value of 0 0 0 will act the old way."
	size(integer) : "Size" : 16
	overlaysize(integer) : "Overlay Size" : -1 : "A value of -1 means the overlay will act the old way."
	material(sprite) : "Material Name" : "sprites/light_glow02_add_noz" : "Material of the inner glow."
	overlaymaterial(sprite) : "Overlay Material Name" : "sprites/light_glow02_add_noz" : "Material of the overlay glow."
	hdrcolorscale(float) : "HDR color scale." : "0.5" : "float value to multiply sprite color by when running in HDR mode."
	glowdistancescale(float) : "Glow Distance Scale" : "0.99" : "Scales the distance used to test for sun glow occlusion, 0.99 will act the old way."

	// Inputs
	input TurnOn(void) : "Enable sun rendering."
	input TurnOff(void) : "Disable sun rendering."
	input SetColor(color255) : "Change the sun's color. Format: <Red 0-255> <Green 0-255> <Blue 0-255>"
	]

@PointClass base(StaticTargetName) = env_surface_teleport: "Teleports the player to the Remote Destination when they stand on a specified material."
	[
	target(target_destination) : "Remote Destination" : : "The entity specifying the point to which the player should be teleported."
	gamematerial(choices) : "Game Material to Watch" : 0 : "The material to watch. When the player stands on this material, they will get teleported" =
		[
		0: "None (player's in the air)"
		65: "A - Antlion"
		66: "B - Bloody Flesh"
		67: "C - Concrete"
		68: "D - Dirt"
		69: "E - Eggshell"
		70: "F - Flesh"
		71: "G - Grate"
		72: "H - Alien Flesh"
		73: "I - Clip"
		74: "J - Grass"
		75: "K - Snow"
		76: "L - Plastic"
		77: "M - Metal"
		78: "N - Sand"
		79: "O - Foliage"
		80: "P - Computer"
		81: "Q - Asphalt"
		82: "R - Brick"
		83: "S - Slosh"
		84: "T - Tile"
		85: "U - Cardboard"
		86: "V - Vent"
		87: "W - Wood"
		88: "X - Fake surfaces"
		89: "Y - Glass"
		90: "Z - Warp Shield"
		1: "1 - Clay"
		2: "2 - Plaster"
		3: "3 - Rock"
		4: "4 - Rubber"
		5: "5 - Sheet Rock"
		6: "6 - Cloth"
		7: "7 - Carpet"
		8: "8 - Paper"
		9: "9 - Upholstery"
		11: "11 - Mud"
		12: "12 - Sand Barrel"
		13: "13 - Dense Wood"
		]


	// Inputs
	input Enable(void) : "Start watching the player's surface."
	input Disable(void) : "Stop watching the player's surface."

	// Outputs
	output OnSurfaceChangedToTarget(void) : "Fired when the player moves onto the specified game material."
	output OnSurfaceChangedFromTarget(void) : "Fired when the player moves off the specified game material."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/env_texturetoggle.vmt")
	line(255 255 0, targetname, target)
= env_texturetoggle: "An entity that allows you to change the textures on other brush-built entities, or on overlays."
	[
	target(target_destination) : "Target Brush or Overlay name."

	// Inputs
	input IncrementTextureIndex(void) : "Increments target brush's current texture frame by one."
	input SetTextureIndex(integer) : "Sets target brush's texture frame to the specified index."
	]

@PointClass base(BaseEntityPoint) 
	sphere(radius)
	studio("models/editor/axis_helper_thick.mdl")
	color(200 0 0)
= env_tilt: "An entity to control screen tilt on players."
	[
	spawnflags(flags)  =
		[
		1: "[1] GlobalTilt" : 0
		128: "[128] Ease in/out" : 0
		]

	radius(float) : "Effect Radius" : 500 : "The radius around this entity in which to affect players."
	duration(float) : "Duration (seconds)" : 1 : "The length of time in which to tilt the player's screens."
	tilttime(float) : "Tilt time (seconds)" : "2.5" : "How long it takes to reach full tilt."

	// Inputs
	input StartTilt(void) : "Start the shake."
	input StopTilt(void) : "Stop the tilt."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/env_tonemap_controller.vmt")
	color(200 0 0)
= env_tonemap_controller: "An entity that controls the HDR tonemapping for the player. Think of it as a method of controlling the exposure of the player's eyes."
	[
	spawnflags(flags)  =
		[
		1: "[1] Master (Has priority if multiple env_tonemap_controllers exist)" : 0
		]


	// Inputs
	input SetTonemapScale(integer) : "Set the player's tonemap scale. It should be a value between 0 and 2, where 0 is the eyes fully closed, 1 is use the unchanged autoexposure (default), and 2 is the eye fully wide open."
	input BlendTonemapScale(string) : "Blend from the player's current tonemap scale to a new one. The parameter syntax is as follows: <target tonemap scale> <blend duration>. For example: '0.5 10' would blend from the current tonemap scale to 0.5 over a period of 10 seconds. Tonemap scale is a value between 0 and 2, where 0 is the eyes fully closed, 1 is use the unchanged autoexposure (default), and 2 is the eye fully wide open."
	input UseDefaultAutoExposure(void) : "Revert to using the default tonemap auto exposure."
	input SetAutoExposureMin(float) : "Set a custom tonemap auto exposure minimum."
	input SetAutoExposureMax(float) : "Set a custom tonemap auto exposure maximum."
	input SetBloomScale(float) : "Set a custom bloom scale."
	input UseDefaultBloomScale(void) : "Revert to using the default bloom scale."
	input SetBloomScaleRange(string) : "Specify a base and minimum bloom scale. Format is <max bloom> <min bloom>."
	input SetTonemapRate(float) : "Set the rate for autoexposure adjustment."
	input SetBloomExponent(float) : "Set a custom bloom exponent."
	input SetBloomSaturation(float) : "Set a custom bloom saturation."
	input SetTonemapPercentBrightPixels(float) : "Set a target for percentage of pixels above a certain brightness. (default: 2)"
	input SetTonemapPercentTarget(float) : "Set a custom brightness target for SetTonemapPercentBrightPixels. (default: 60)"
	input SetTonemapMinAvgLum(float) : "Sets custom tonemapping param (ask Alex for details; default: 3)."
	]

@PointClass base(BaseEntityPoint) 
	sphere(radius)
	iconsprite("editor/ficool2/env_viewpunch.vmt")
	color(200 200 0)
= env_viewpunch: "Causes a view punch on players."
	[
	spawnflags(flags)  =
		[
		1: "[1] Punch all players (ignore radius)" : 0
		2: "[2] Punch players in the air" : 0
		]

	punchangle(angle) : "Punch angles" : "0 0 90" : "The punch angles to apply."
	radius(float) : "Effect Radius" : 500 : "The radius around this entity in which to affect players."

	// Inputs
	input ViewPunch(void) : "Performs the view punch."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/env_wind.vmt")
	color(200 0 0)
	sphere(windradius)
	sphere(windradiusinner)
= env_wind: "An entity to control wind in the map. Partially functional."
	[
	spawnflags(flags)  =
		[
		1: "[1] Start disabled" : 0
		]

	minwind(integer) : "Min normal speed" : 20 : "Minimum speed of the wind while idling."
	maxwind(integer) : "Max normal speed" : 50 : "Maximum speed of the wind while idling."
	mingust(integer) : "Min gust speed" : 100 : "Minimum speed of wind gusts."
	maxgust(integer) : "Max gust speed" : 250 : "Maximum speed of wind gusts."
	mingustdelay(integer) : "Min gust delay" : 10 : "Minimum time delay between random gusts."
	maxgustdelay(integer) : "Max gust delay" : 20 : "Maximum time delay between random gusts."
	gustduration(integer) : "Gust Duration" : 5 : "How long will the wind gust for."
	gustdirchange(integer) : "Max gust dir change (degrees)" : 20 : "Maximum amount that the wind's direction changes due to a gust."

	// Inputs
	input Enable(void) : "Enables the wind."
	input Disable(void) : "Disables the wind."
	input Toggle(void) : "Toggles the wind."

	// Outputs
	output OnGustStart(void) : "Fired when a wind gust begins."
	output OnGustEnd(void) : "Fired when a wind gust ends."
	]

@PointClass base(BaseEntityPoint) 
	color(200 0 0)
	iconsprite("editor/ficool2/env_zoom.vmt")
= env_zoom: "An entity that can be used to control the player's FOV. Useful for scenes where the player's view is being controlled, or player-usable binoculars/telescopes, etc."
	[
	rate(float) : "Seconds to reach target" : "1.0" : "Amount of time it should take to reach the specified FOV."
	fov(integer) : "Target FOV" : 75 : "FOV that this entity should set the player's FOV to when active."
	spawnflags(flags)  =
		[
		1: "[1] Allow Suit Zoom" : 0
		]


	// Inputs
	input Zoom(void) : "Start controlling the player's FOV."
	input UnZoom(void) : "Stop controlling the player's FOV."
	]

@FilterClass base(BaseEntityPoint) 
	color(0 255 0)
	iconsprite("editor/ficool2/filter_base.vmt")
= filter_base: "Base filter, which all other filters are based off of. This filter passes any entity whatsoever."
	[
	negated(choices) : "Filter Mode" : 0 : "If set to Allow, only entities who match the criteria will pass the filter. If set to Disallow, only entities who do NOT match the criteria will pass the filter." =
		[
		0: "Allow entities that match criteria"
		1: "Disallow entities that match criteria"
		]

	passcallerwhentested(boolean) : "Pass caller when tested" : 0 : "When tested with TestActivator or TestEntity, this causes the OnPass and OnFail outputs to use either this filter as the caller or the entity that called the test as the caller."

	// Inputs
	input TestActivator(void) : "Test the activator against the filter and fires OnPass or OnFail output."
	input TestEntity(target_destination) : "Tests the target entity against the specified entity and fires the OnPass or OnFail output."
	input SetField(string) : "Sets this filter's primary test criteria. (e.g. the name to test against the activator)"

	// Outputs
	output OnPass(void) : "Fired in response to TestActivator input if the activator passes the filter."
	output OnFail(void) : "Fired in response to TestActivator input if the activator fails to pass the filter."
	]

@SolidClass base(BaseEntityBrush, EnableDisable) 
	line(255 255 0, targetname, fogname)
	line(255 255 0, targetname, postprocessname)
	line(255 255 0, targetname, colorcorrectionname)
= fog_volume: "An entity to control the fog in the map."
	[
	fogname(target_destination) : "Fog Name" : : "The name of the fog entity associated with this volume."
	postprocessname(target_destination) : "Postprocess Name" : : "The name of the postprocess entity associated with this volume."
	colorcorrectionname(target_destination) : "ColorCorrection Name" : : "The name of the color_correction entity associated with this volume."
	]

@SolidClass base(BaseEntity) 
	color(0 255 255)
= func_areaportal: "A portal brush used to manage visibility in maps. Portals define areas, which are spaces that are connected in the map. Both sides of a portal cannot touch the same area, for example, a doughnut shaped map would require at least two portals to divide the map into two areas. A linear map could be divided into two areas with a single area portal."
	[
	target(target_destination) : "Name of Linked Door" : : "(Optional) The name of a prop_door_rotating or func_door whose open/closed state controls the on/off state of this area portal."
	startopen(choices) : "Initial State" : 1 =
		[
		0: "Closed"
		1: "Open"
		]

	portalversion(integer) readonly : "Portal Version" : 1 : "(Don't change). Differentiates between shipping HL2 maps and maps using new engine features."

	// Inputs
	input Open(void) : "Open the portal. When the portal is open is can be seen through."
	input Close(void) : "Close the portal. When the portal is closed it cannot be seen through."
	input Toggle(void) : "Toggle the open/closed state of the portal."
	]

@SolidClass base(BaseEntity) 
	color(0 128 255)
	sphere(FadeStartDist)
	sphere(FadeDist)
	line(255 255 0, targetname, target)
	line(255 255 0, targetname, backgroundbmodel)
= func_areaportalwindow: "An entity that can be used to optimize the visibility in a map. If you seal off an area with them, when the viewer moves the specified distance away from them, they will go opaque and the parts inside the area will not be drawn. The window brush should enclose the func_areaportal window so no parts of it are culled by the window. If you use the optional foreground brush, then it should enclose the window brush. Both brush models will have their drawing disabled as the areaportal will render them itself."
	[
	target(target_destination) : "Rendered Window" : : "The name of a brush model to render as the window."
	fadestartdist(integer) : "Fade Start Distance" : 128 : "When the viewer is closer than this distance, the alpha is set to 'TranslucencyLimit'."
	fadedist(integer) : "Fade End Distance" : 512 : "When the viewer is at this distance, the portal becomes solid and closes off. If set to zero, the window will always be closed."
	translucencylimit(float) : "Translucency limit" : 0 : "This can be used to limit the translucency of the window, preventing it from becoming entirely invisible. This could be used with an opaque material, acting as a window."
	backgroundbmodel(target_destination) : "Foreground Brush" : : "(Optional) brush model that is drawn after the fading brush model. This model should be translucent so you can see through it."
	portalversion(integer) readonly : "Portal Version" : 1 : "(Don't change). Differentiates between shipping HL2 maps and maps using new engine features."

	// Inputs
	input SetFadeStartDistance(integer) : "Set fade start distance."
	input SetFadeEndDistance(integer) : "Set fade end distance. If set to zero, this will force the window closed."
	]

@SolidClass base(BaseEntityBrush) = func_clip_vphysics: "A brush entity that's considered solid to vphysics."
	[
	filtername(filterclass) : "Filter Name" : : "Filter to use to see if activator collides with me. See filter_activator_name for more explanation. Allow means 'Allow to Block' for this entity."
	startdisabled(boolean) : "Start Disabled?" : 0

	// Inputs
	input Enable(void) : "Enable this entity."
	input Disable(void) : "Disable this entity."
	]

@PointClass base(Angles) 
	instance()
	size(-2 -2 -2, 2 2 2)
= func_instance: "An entity for placing an instance of a map file.  You may translate and rotate this entity. You can use the replace keys to do parameter changes on the instance contents in a $ at the beginning of a variable name. Then just use the $variable name inside of the instance contents on any value portion of a key/value pair."
	[
	targetname(target_source) : "Fix Up Name" : : "The name that all entities will be fixed up with based upon the fix up style."
	file(instance_file) : "VMF Filename" : : "This indicates a map file relative to the map's file name. This is also looked up relative to sdk_content/maps/, if one exists in the parent directories."
	fixup_style(choices) : "Entity Name Fix Up" : 0 : "Fixup style for instanced entity names.  Uses the 'Fix Up Name' field." =
		[
		0: "Prefix"
		1: "Postfix"
		2: "None"
		]

	replace01(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace02(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace03(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace04(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace05(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace06(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace07(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace08(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace09(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace10(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace11(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace12(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace13(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace14(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace15(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace16(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace17(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace18(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace19(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace20(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace21(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace22(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace23(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace24(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace25(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace26(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace27(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace28(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace29(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	replace30(instance_variable) : "Replace Variable" : : "This is a replacement parameter.  It goes in the form of $variable value.  All entities inside of that instance that have $variable somewhere will be replaced with the value contents.  Example: $color 255 0 0"
	]

@PointClass base(BaseEntityPoint) 
	size(-16 -16 0, 16 16 72)
	color(127 127 127)
= func_ladderendpoint: "An entity used to specify the endpoints of a ladder. This entity is functional, but has been replaced by the easier-to-use func_useableladder entity. Left in only for backwards-compatibility!\n\nTo be valid, a full sized player hull traced between the start and end points must not be obstructed at level activation time. The angle determines in which direction the player leaves the ladder if the player presses the +jump button.\n\nNote: This entity is non-functional in Counter-Strike: Source. In CS:S, use func_ladder instead."
	[
	target(target_destination) : "Other" : : "A ladder goes between any two func_ladderendpoints pointing at each other."
	]

@SolidClass base(BaseEntityBrush, Origin) = func_noportal_volume: "A region which prevents portal placement."
	[
	spawnflags(flags)  =
		[
		1: "[1] Start inactive" : 0
		]


	// Inputs
	input Deactivate(void) : "Turn off blocking functionality"
	input Activate(void) : "Turn on blocking functionality"
	input Toggle(void) : "Toggle blocking functionality"
	]

@SolidClass base(BaseEntity) 
	color(0 255 255)
= func_occluder: "A occluder brush used to manage dynamic visibility in maps. Occluders are used to dynamically determine what things are behind them, to prevent trying to draw them at all."
	[
	startactive(choices) : "Initial State" : 1 =
		[
		0: "Inactive"
		1: "Active"
		]


	// Inputs
	input Deactivate(void) : "Deactivate the occluder, When inactive, it can be seen through."
	input Activate(void) : "Activate the occluder. When active, it cannot be seen through."
	input Toggle(void) : "Toggle the active/inactive state of the occluder."
	]

@SolidClass base(BaseEntityBrush, Origin) = func_portal_bumper: "A region which 'bumps' portals outside of it, but will still allow portals to be placed on it."
	[
	spawnflags(flags)  =
		[
		1: "[1] Start inactive" : 0
		]


	// Inputs
	input Deactivate(void) : "Turn off bumping functionality"
	input Activate(void) : "Turn on bumping functionality"
	input Toggle(void) : "Toggle bumping functionality"
	]

@SolidClass base(BaseEntityBrush, Origin) = func_portal_detector: "A region that fires an output if a portal is placed inside it."
	[
	spawnflags(flags)  =
		[
		1: "[1] Start inactive" : 0
		]

	linkagegroupid(integer) : "Portal pair ID that it detects" : 0
	checkallids(boolean) : "Check all portals" : 0 : "Ignore the Group ID and check for all portals."

	// Inputs
	input Disable(void) : "Turn off detecting functionality"
	input Enable(void) : "Turn on detecting functionality"
	input Toggle(void) : "Toggle detecting functionality"

	// Outputs
	output OnStartTouchPortal1(void) : "Fired when the Blue portal is placed intersecting the portal detector."
	output OnStartTouchPortal2(void) : "Fired when the Orange portal is placed intersecting the portal detector."
	output OnStartTouchLinkedPortal(void) : "Fired when linked portal is placed intersecting the portal detector."
	output OnStartTouchBothLinkedPortals(void) : "Fired when both of a pair of portals is placed intersecting the portal detector."
	output OnStartTouchPortal(void) : "Fired when any portal touches the detector."
	output OnEndTouchPortal(void) : "Fired when any portal leaves the detector bounds."
	output OnEndTouchPortal1(void) : "Fired when the Blue portal has left the volume of the detector."
	output OnEndTouchPortal2(void) : "Fired when the Orange portal has left the volume of the detector."
	output OnEndTouchLinkedPortal(void) : "Fired when a portal with a linked partner has left the volume of the detector."
	output OnEndTouchBothLinkedPortals(void) : "Fired when both portals have left the volume of the detector."
	]

@SolidClass base(BaseEntityBrush, EnableDisable) = func_portal_orientation: "Adjusts a portal's rotation to match a specified angle. The 'front' of the portal points in the specified direction. In Portal 2, portals are only reoriented when the entity is sent an Enable input, so this will need to be done every time a portal is placed."
	[
	anglestoface(angle) : "Angles to face" : "0 0 0" : "The angles to rotate portals to. An easy way to figure out what to set this to is to place a prop_portal, rotate it to the desired orientation, then look at its angles."
	matchlinkedangles(boolean) : "Match linked angles." : 0 : "If set, portals placed in this volume will have their angles match their linked portals. This only works for floor or ceiling portals with a linked partner that is on a surface with the same orientation."
	]

@SolidClass base(BaseEffectBrush) = func_precipitation: "A brush entity that creates rain and snow inside its volume."
	[
	renderamt(integer) : "Density (0-100%)" : 5 : "This is the amount of particles that fall down from top side of brush. However distance from first particle to second depends on a brush volume size!"
	rendercolor(color255) : "Color (R G B)" : "100 100 100" : "Color added to sprites which are rendered transparently (probably rain and snow particles)"
	preciptype(choices) : "Precipitation Type" : 0 =
		[
		0: "Rain"
		1: "Snow"
		2: "Ash"
		3: "Snowfall"
		4: "Particle Rain"
		5: "Particle Ash"
		6: "Particle Rainstorm"
		7: "Particle Snow"
		]

	innerdistance(float) : "Inner particle distance" : -1 : "Distance between the inner and outer particle systems. If not set, this will be automatically selected from the precipitation type keyvalue."
	innernearparticle(particlesystem) : "Inner near system" : : "Name of the inner near particle system. If not set, this will be automatically selected from the precipitation type keyvalue."
	innerfarparticle(particlesystem) : "Inner far system" : : "Name of the inner far particle system. If not set, this will be automatically selected from the precipitation type keyvalue."
	outerparticle(particlesystem) : "Outer system" : : "Name of the outer particle system. If not set, this will be automatically selected from the precipitation type keyvalue."

	// Inputs
	input Alpha(integer) : "Changes the density of the rain, and may add additional particle effects like fog or leaves. Accepts inputs from -1 to 255."
	]

@SolidClass base(BaseEntityBrush) = func_precipitation_blocker: "A brush entity that prevents rain and snow from func_precipitation inside its volume."
	[
	]

@SolidClass base(BaseEntityBrush) = func_proprrespawnzone: "Zone that handles respawning and distribution of clientside physics props."
	[
	]

@SolidClass base(BaseEffectBrush) = func_smokevolume: "A brush entity that spawns smoke particles within its volume."
	[
	spawnflags(flags)  =
		[
		1: "[1] Emissive" : 0
		]

	color1(color255) : "Particle Color1 (R G B)" : "255 255 255"
	color2(color255) : "Particle Color2 (R G B)" : "255 255 255"
	material(material) : "Material" : "particle/particle_smokegrenade" : "The material to use for the particles"
	particledrawwidth(float) : "Particle Draw Width (units)" : 120 : "The size of the particles, in units."
	particlespacingdistance(float) : "Particle Spacing Distance (units)" : 80 : "The distance between the particles inside the volume. The lower the number, the denser the particles, and the more overdraw there will be. It is best to keep it as high as you can without it looking bad."
	densityrampspeed(float) : "Density Ramp Speed (seconds)" : 1 : "Time to go from density 0 to density 1, in seconds."
	rotationspeed(float) : "Rotation Speed (degrees/sec)" : 10 : "The speed that the particles should rotate, in degrees per second."
	movementspeed(float) : "Movement Speed (units/sec)" : 10 : "The speed that the particles should move around, in units per second."
	density(float) : "Density [0..1]" : 1
	maxdrawdistance(float) : "Max Draw Distance (0 is unlimited)" : 0

	// Inputs
	input SetRotationSpeed(float) : "Set the particle rotation speed (in degrees per second)."
	input SetMovementSpeed(float) : "Set the particle movement speed (in units per second)."
	input SetDensity(float) : "Set the particle density. It should be a range from 0 to 1."
	]

@PointClass base(BaseEntityPoint) 
	sweptplayerhull()
= func_useableladder: "A Half-Life 2 ladder. Handles player auto mount/unmount, as well as +use to get onto the ladder. \n\nSee also 'info_ladder_dismount', used to specify ladder auto-dismount points.\n\nNote: This entity is non-functional in Counter-Strike: Source. Use func_ladder instead."
	[
	spawnflags(flags)  =
		[
		1: "[1] Fake Ladder" : 0
		]

	point0(vector) : "Start" : : "Ladder end point."
	point1(vector) : "End" : : "Ladder end point."
	startdisabled(boolean) : "Start Disabled" : 0
	laddersurfaceproperties(string) : "Surface properties (optional)"

	// Inputs
	input Enable(void) : "Enable this ladder."
	input Disable(void) : "Disable this ladder."

	// Outputs
	output OnPlayerGotOnLadder(void) : "Fired whenever a player gets on this ladder."
	output OnPlayerGotOffLadder(void) : "Fired whenever a player gets off this ladder."
	]

@SolidClass base(BaseEntityBrush) = func_wall: "Legacy support for Half-Life. Use func_brush instead. A general brush entity."
	[
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/game_gib_manager")
	color(200 0 0)
= game_gib_manager: "An entity to control the number of gibs in the world, for performance reasons."
	[
	maxpieces(integer) : "Max Gib Count" : -1 : "Sets the max number of gib that can be spawned at a time. (-1=no limit)"
	allownewgibs(boolean) : "Allow New Gibs To Spawn" : 0 : "If true, when the max gib count is reached, oldest gibs are removed as new gibs spawn. If false, new gibs will not be spawned once the gib limit is reached."

	// Inputs
	input SetMaxPieces(integer) : "Set the max gib count."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	size(-8 -8 -8, 8 8 8)
= game_globalvars: "Outputs a few global variables when requested."
	[

	// Inputs
	input GetCurtime(void) : "Gets curtime."
	input GetFrameCount(void) : "Gets frame count."
	input GetFrametime(void) : "Gets frame time."
	input GetTickCount(void) : "Gets tick count."
	input GetIntervalPerTick(void) : "Gets interval per tick."

	// Outputs
	output OutCurtime(float) : "Outputs curtime."
	output OutFrameCount(integer) : "Outputs frame count."
	output OutFrametime(float) : "Outputs frame time."
	output OutTickCount(integer) : "Outputs tick count."
	output OutIntervalPerTick(integer) : "Outputs interval per tick."
	]

@PointClass base(BaseEntityPoint, MasterEnt) 
	line(255 255 255, targetname, master)
	iconsprite("editor/ficool2/game_player_equip")
= game_player_equip: "An entity that gives equipment to the player who activates it. To use, add new keys to this entity, where each key is the classname of a weapon/item, and the corresponding value is the number of those weapons/items to give to the player who uses this entity. "
	[
	spawnflags(flags)  =
		[
		1: "[1] Use Only" : 0
		]

	]

@PointClass base(BaseEntityPoint) 
	color(200 0 0)
	iconsprite("editor/ficool2/game_ragdoll_manager")
= game_ragdoll_manager: "An entity to control the number of ragdolls in the world, for performance reasons."
	[
	maxragdollcount(integer) : "Max Ragdoll Count" : -1 : "Sets the max number of ragdolls that can be in the world at a time (if they are flagged to fade). Set to -1 if you want to use the default value (g_ragdoll_maxcount)."
	saveimportant(boolean) : "Save Important Ragdolls" : 0 : "Should the ragdoll manager make sure ally ragdolls aren't deleted?"

	// Inputs
	input SetMaxRagdollCount(integer) : "Set the Max Ragdoll Count."
	]

@PointClass base(BaseEntityPoint, MasterEnt) 
	line(255 255 255, targetname, master)
	iconsprite("editor/game_text.vmt")
	color(200 0 0)
= game_text: "An entity that displays text on player's screens."
	[
	spawnflags(flags)  =
		[
		]

	message(string) : "Message Text" : : "Message to display onscreen."
	x(float) : "X Position" : -1 : "Horizontal position on the player's screens to draw the text. The value should be between 0 and 1, where 0 is the far left of the screen and 1 is the far right. -1 centers the text."
	y(float) : "Y Position" : "0.6" : "Vertical position on the player's screens to draw the text. The value should be between 0 and 1, where 0 is the top of the screen and 1 is the bottom. -1 centers the text."
	effect(choices) : "Text Effect" : 0 =
		[
		0: "Fade In/Out"
		1: "Credits"
		2: "Scan Out"
		]

	color(color255) : "Text Color" : "100 100 100" : "The main color of the text."
	color2(color255) : "Transition Color" : "240 110 0" : "Secondary color used when revealing text."
	fadein(float) : "Fade in Time/Character Scan Time" : "1.5" : "The time it should take for the text to fully fade in."
	fadeout(float) : "Fade Out Time" : "0.5" : "The time it should take for the text to fade out, after the hold time has expired."
	holdtime(float) : "Hold Time" : "1.2" : "The time the text should stay onscreen, after fading in, before it begins to fade out."
	fxtime(float) : "Scan time (scan effect only)" : "0.25" : "If the 'Text Effect' is set to Scan Out, this is the time it should take to scan out all the letters in the text."
	channel(choices) : "Text Channel" : 1 : "You can have up to six individual game_text messages onscreen at once, stored in channels. Select which channel this text should be placed in, which will overwrite any active message already in that channel." =
		[
		0: "Channel 0 (unused)"
		1: "Channel 1 (medium text size)"
		2: "Channel 2 (small text size)"
		3: "Channel 3 (large text size)"
		4: "Channel 4 (medium text size)"
		5: "Channel 5 (unused)"
		]


	// Inputs
	input Display(void) : "Display the message text."
	input SetText(string) : "Set the text to display."
	input SetPosX(float) : "Set the X position of the text. (0 - 1.0 = left to right) (-1 centers)"
	input SetPosY(float) : "Set the Y position of the text. (0 - 1.0 = top to bottom) (-1 centers)"
	input SetTextColor(color255) : "Set color of the front text."
	input SetTextColor2(color255) : "Set color of the transition text."
	]

@PointClass base(BaseEntityPoint) 
	color(200 0 0)
	iconsprite("editor/ficool2/game_ui.vmt")
= game_ui: "An entity used to override player input when the player is looking at it."
	[
	spawnflags(flags)  =
		[
		32: "[32] Freeze Player" : 1
		64: "[64] Hide Weapon" : 1
		128: "[128] +Use Deactivates" : 1
		256: "[256] Jump Deactivates" : 1
		]

	fieldofview(float) : "FieldOfView" : "-1.0" : "The amount of tolerance in the view checking when determining whether the player's input is still under control. 1.0 = straight ahead, 0.0 = +/- 90 degrees, -1.0 = all directions. If the player isn't within the tolerance, the player regains control."

	// Inputs
	input Deactivate(void) : "Return Player Control."
	input Activate(string) : "Take Player Control."

	// Outputs
	output PlayerOn(void) : "Fired whenever this entity starts controlling the player's input."
	output PlayerOff(void) : "Fired whenever this entity stops controlling the player's input."
	output PressedMoveLeft(void) : "Fired whenever the player presses the moveleft key."
	output PressedMoveRight(void) : "Fired whenever the player presses the moveright key."
	output PressedForward(void) : "Fired whenever the player presses the forward key."
	output PressedBack(void) : "Fired whenever the player presses the backward key."
	output PressedAttack(void) : "Fired whenever the player presses the attack key."
	output PressedAttack2(void) : "Fired whenever the player presses the secondary attack key."
	output UnpressedMoveLeft(void) : "Fired whenever the player releases the moveleft key."
	output UnpressedMoveRight(void) : "Fired whenever the player releases the moveright key."
	output UnpressedForward(void) : "Fired whenever the player releases the forward key."
	output UnpressedBack(void) : "Fired whenever the player releases the backward key."
	output UnpressedAttack(void) : "Fired whenever the player releases the attack key."
	output UnpressedAttack2(void) : "Fired whenever the player releases the secondary attack key."
	output XAxis(string) : "An output that fires whenever the X axis of the player's input changes. i.e. -1 when the player has moveleft key down, 1 when the player has moveright key down, and 0 if neither."
	output YAxis(string) : "An output that fires whenever the Y axis of the player's input changes. i.e. -1 when the player has backward key down, 1 when the player has forward key down, and 0 if neither."
	output AttackAxis(string) : "An output that fires whenever the state of the player's attack key changes. i.e. 1 when the player has the attack key down, 0 otherwise."
	output Attack2Axis(string) : "An output that fires whenever the state of the player's secondary attack key changes. i.e. 1 when the player has the secondary attack key down, 0 otherwise."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/game_weapon_manager")
= game_weapon_manager: "An entity used to limit the number of a particular weapon type in the world. Useful in places where NPCs are spawning rapidly, dying, and dropping weapons."
	[
	weaponname(string) : "Weapon Classname" : : "Classname of the weapon type to limit."
	maxpieces(integer) : "Max Allowed in Level" : 0 : "The maximum amount of the specified weapon type allowed in the world."
	ammomod(float) : "Ammo modifier" : 1 : "Modifier for amount of ammo dropped by a weapon."

	// Inputs
	input SetAmmoModifier(float) : "Adjust the ammo modifier."
	input SetMaxPieces(integer) : "Set the max amount of weapons of the specified type allowed to be in the world."
	]

@SolidClass base(BaseEntityBrush) = game_zone_player: "An entity used to count the number of players within a zone."
	[

	// Inputs
	input CountPlayersInZone(void) : "Count the number of players in the zone, and fire the corresponding outputs."

	// Outputs
	output OnPlayerInZone(void) : "Fired whenever a count finds a player inside the zone, with the player as the activator."
	output OnPlayerOutZone(void) : "Fired whenever a count finds a player outside the zone, with the player as the activator."
	output PlayersInCount(integer) : "Fired after a count, and contains the number of players found inside the zone."
	output PlayersOutCount(integer) : "Fired after a count, and contains the number of players found outside the zone."
	]

@BaseClass base(BaseEntityPoint) = gibshooterbase
	[
	angles(angle) : "Gib Direction (Pitch Yaw Roll)" : "0 0 0" : "The direction the gibs will fly."
	m_igibs(integer) : "Number of Gibs" : 3 : "Total number of gibs to shoot each time it's activated."
	delay(float) : "Delay between shots" : 0 : "Delay (in seconds) between shooting each gib. If 0, all gibs shoot at once."
	gibangles(angle) : "Gib Angles (Pitch Yaw Roll)" : "0 0 0" : "The orientation of the spawned gibs."
	gibanglevelocity(float) : "Max angular velocity" : 0 : "How fast (degrees/sec) the gib pieces should spin. They will spin on x and y axis at between 10% and 100% of this speed."
	m_flvelocity(integer) : "Gib Velocity" : 200 : "Speed of the fired gibs."
	m_flvariance(float) : "Course Variance" : "0.15" : "How much variance in the direction gibs are fired."
	m_flgiblife(float) : "Gib Life" : 4 : "Time in seconds for gibs to live +/- 5%."
	simulation(choices) : "Simulate" : 0 =
		[
		0: "Point"
		1: "Physics"
		2: "Ragdoll"
		]

	lightingorigin(target_destination) : "Lighting Origin" : : "Select an info_lighting to specify a location to sample lighting from for all gibs spawned by this shooter, instead of their own origins."
	spawnflags(flags)  =
		[
		1: "[1] Repeatable" : 0
		]


	// Inputs
	input Shoot(void) : "Force the gibshooter to create and shoot a gib."
	]

@PointClass base(BaseEntityPoint) 
	color(200 0 0)
	iconsprite("editor/ficool2/hammer_updateignorelist")
	line(200 0 0, targetname, ignoredname01)
	line(200 0 0, targetname, ignoredname02)
	line(200 0 0, targetname, ignoredname03)
	line(200 0 0, targetname, ignoredname04)
	line(200 0 0, targetname, ignoredname05)
	line(200 0 0, targetname, ignoredname06)
	line(200 0 0, targetname, ignoredname07)
	line(200 0 0, targetname, ignoredname08)
	line(200 0 0, targetname, ignoredname09)
	line(200 0 0, targetname, ignoredname10)
	line(200 0 0, targetname, ignoredname11)
	line(200 0 0, targetname, ignoredname12)
	line(200 0 0, targetname, ignoredname13)
	line(200 0 0, targetname, ignoredname14)
	line(200 0 0, targetname, ignoredname15)
	line(200 0 0, targetname, ignoredname16)
= hammer_updateignorelist: "Specifies entities that are to be ignored by the hammer_update_safe_entities console command. Enter the targetnames of entities that you want to exclude into the list of fields here. Several of these may exist in a map."
	[
	ignoredname01(target_destination) : "Ignored Name 01" : : "Do not send this entity's information back to hammer during hammer_update_safe_entities."
	ignoredname02(target_destination) : "Ignored Name 02" : : "Do not send this entity's information back to hammer during hammer_update_safe_entities."
	ignoredname03(target_destination) : "Ignored Name 03" : : "Do not send this entity's information back to hammer during hammer_update_safe_entities."
	ignoredname04(target_destination) : "Ignored Name 04" : : "Do not send this entity's information back to hammer during hammer_update_safe_entities."
	ignoredname05(target_destination) : "Ignored Name 05" : : "Do not send this entity's information back to hammer during hammer_update_safe_entities."
	ignoredname06(target_destination) : "Ignored Name 06" : : "Do not send this entity's information back to hammer during hammer_update_safe_entities."
	ignoredname07(target_destination) : "Ignored Name 07" : : "Do not send this entity's information back to hammer during hammer_update_safe_entities."
	ignoredname08(target_destination) : "Ignored Name 08" : : "Do not send this entity's information back to hammer during hammer_update_safe_entities."
	ignoredname09(target_destination) : "Ignored Name 09" : : "Do not send this entity's information back to hammer during hammer_update_safe_entities."
	ignoredname10(target_destination) : "Ignored Name 10" : : "Do not send this entity's information back to hammer during hammer_update_safe_entities."
	ignoredname11(target_destination) : "Ignored Name 11" : : "Do not send this entity's information back to hammer during hammer_update_safe_entities."
	ignoredname12(target_destination) : "Ignored Name 12" : : "Do not send this entity's information back to hammer during hammer_update_safe_entities."
	ignoredname13(target_destination) : "Ignored Name 13" : : "Do not send this entity's information back to hammer during hammer_update_safe_entities."
	ignoredname14(target_destination) : "Ignored Name 14" : : "Do not send this entity's information back to hammer during hammer_update_safe_entities."
	ignoredname15(target_destination) : "Ignored Name 15" : : "Do not send this entity's information back to hammer during hammer_update_safe_entities."
	ignoredname16(target_destination) : "Ignored Name 16" : : "Do not send this entity's information back to hammer during hammer_update_safe_entities."
	]

@PointClass base(BaseEntityPoint) 
	studio("models/editor/camera.mdl")
	iconsprite("editor/info_camera_link.vmt")
	line(255 255 0, targetname, target)
	line(255 255 0, targetname, target, targetname, Pointcamera)
= info_camera_link: "An entity that can use point_cameras to render images for materials used by entities. To author the material, use the special identifier _rt_Camera for the $baseTexture (or whatever texture you want, like envmap, etc.) in the .vmt then connect the 'target' field to the entity which uses that material, and the 'PointCamera' field to the point_camera you want to have appear on that entity's material."
	[
	target(target_destination) : "Entity Whose Material Uses _rt_camera"
	pointcamera(target_destination) : "Camera Name" : : "The name of a point_camera entity in the map that the material should be rendered from."

	// Inputs
	input SetCamera(string) : "Set the camera to use. The parameter should be the name of a point_camera entity in the map."
	]

@PointClass base(BaseEntityPoint) 
	halfgridsnap
	iconsprite("editor/info_constraint_anchor.vmt")
	color(128 128 128)
	line(128 128 128, targetname, parentname)
= info_constraint_anchor: "An entity used to attach constraints to a local position on an entity. Usually constraints will attach to the center of mass of an object. Attach the desired constraint to this entity, and then parent this entity to the entity you want the constraint to apply to."
	[
	massscale(float) : "Mass Scale" : 1 : "Amount to scale the mass of this body in the constraint solver."
	]

@PointClass base(BaseEntityPoint) 
	color(0 255 0)
	studioprop()
= info_coop_spawn: "Player spawns for cooperative mode."
	[
	enabled(choices) : "Initial State" : 1 =
		[
		0: "Disabled"
		1: "Enabled"
		]

	startingteam(choices) : "Player" : 0 : "Which player to spawn." =
		[
		0: "Any"
		2: "P-Body"
		3: "ATLAS"
		]

	model(choices) : "[H] Player" : "models/editor/playerstart.mdl" : "The player model to show in Hammer." =
		[
		"models/editor/playerstart.mdl": "Default"
		"models/player/ballbot/ballbot.mdl": "ATLAS"
		"models/player/eggbot/eggbot.mdl": "P-Body"
		]

	forcegunonspawn(boolean) : "Force Gun On Spawn" : 0 : "Give the player a Portal Gun on spawn. Coop players always have a Dual Portal Device."

	// Inputs
	input Enable(void) : "Enable the spawn point to be used."
	input SetAsActiveSpawn(void) : "Enable the spawn point to be used, disabling all other spawn points that do not share the same name."
	input Disable(void) : "Disable the spawn point from being used."
	input SetTeam(integer) : "Set the player this spawn point is for - 0 and 1 are any player, 2 is P-Body, 3 is ATLAS."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/info_game_event_proxy.vmt")
	sphere(range)
= info_game_event_proxy: "Entity that, when seen, generates a simple game event."
	[
	event_name(string) : "Event Name" : : "The event to trigger by name from modevents.res"
	range(float) : "Range" : 512 : "Distance that the player must be before the event is generated."
	spawnflags(flags)  =
		[
		1: "[1] Automatically detect visibility" : 1
		]


	// Inputs
	input GenerateGameEvent(void) : "Generate my game event. (This entity is sent as the SUBJECT)"
	]

@PointClass base(BaseEntityPoint) 
	size(-16 -16 0, 16 16 4)
	color(255 128 255)
= info_ladder_dismount: "An entity to handle endpoints for multiple ladders that are too close to each other."
	[
	target(target_destination) : "Ladder Name" : : "If multiple ladders are near multiple endpoints, use this to stop them from interfering with each other."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/info_landmark")
	color(200 0 0)
= info_landmark: "An entity that acts as a landmark for transitions to another level. There should be a corresponding info_landmark entity in the next map. Entities will be transitioned to the next level relative to the info_landmark entities."
	[
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/info_landmark")
= info_landmark_entry: "Entry landmark"
	[
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/info_landmark")
= info_landmark_exit: "Exit landmark"
	[
	]

@PointClass base(StaticTargetName) 
	iconsprite("editor/info_lighting.vmt")
	halfgridsnap
	line(255 255 255, lightingorigin, targetname)
= info_lighting: "An entity that can be used to change the lighting origin of a prop_static. Set the prop_static's Lighting Origin to point at this entity to make the prop_static light as if it was at the info_lighting's origin.  Good for prop_static entities that are embedded in world geometry (like rocks/windows/etc)."
	[
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/info_lighting_relative.vmt")
	halfgridsnap
= info_lighting_relative
	[
	lightinglandmark(target_destination) : "Lighting Landmark" : : "Entity at which the reference origin is contained.  If empty, the info_lighting_relative's origin will be used."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/info_npc_spawn_destination.vmt")
= info_npc_spawn_destination: "NPC Spawn Destination. (Consult npc_template_maker help for more info)"
	[
	reusedelay(float) : "Reuse Delay" : 1 : "After an NPC is spawned at this destination, the delay before this destination is eligible for selection again."
	renamenpc(target_source) : "New NPC Name" : : "If an NPC spawns at this destination, change that NPC's targetname to this."

	// Outputs
	output OnSpawnNPC(void) : "Fired when an NPC spawns at this destination."
	]

@PointClass base(BaseEntityPoint) 
	color(200 0 0)
	iconsprite("editor/ficool2/info_null.vmt")
= info_null: "An entity that's immediately removed on spawning. Useful as a spotlight target."
	[
	]

@PointClass base(BaseEntityPoint) 
	color(80 150 225)
	studio("models/editor/overlay_helper_box.mdl")
	sphere(fademindist)
	sphere(fademaxdist)
	overlay()
= info_overlay: "An entity that places an overlay on the world."
	[
	material(material) : "Material" : : "Material to use for the overlay."
	sides(sidelist) : "Brush faces" : : "The brush faces this overlay is applied to."
	renderorder(choices) : "Render Order" : 0 : "Higher values render after lower values. This value can be 0-3." =
		[
		0: "First"
		1: "Second"
		2: "Third"
		3: "Fourth"
		]

	startu(float) : "U Start" : "0.0" : "A value between 0-1, defining the starting X axis position in the overlay material."
	endu(float) : "U End" : "1.0" : "A value between 0-1, defining the ending X axis position in the overlay material."
	startv(float) : "V Start" : "0.0" : "A value between 0-1, defining the starting Y axis position in the overlay material."
	endv(float) : "V End" : "1.0" : "A value between 0-1, defining the ending Y axis position in the overlay material."
	basisorigin(vector) readonly : "Overlay Basis Origin(Read-Only)" : : "Center of the overlay on the surface(s) the overlay is applied to."
	basisu(vector) : "Overlay Basis U" : : "The direction the X-axis of the material points."
	basisv(vector) : "Overlay Basis V" : : "The direction the Y-axis of the material points."
	basisnormal(vector) readonly : "Overlay Basis Normal(Read-Only)" : : "Normal of the surface(s) the overlay is applied to."
	uv0(vector) : "Overlay Point 1" : : "Corner 1 of the overlay."
	uv1(vector) : "Overlay Point 2" : : "Corner 2 of the overlay."
	uv2(vector) : "Overlay Point 3" : : "Corner 3 of the overlay."
	uv3(vector) : "Overlay Point 4" : : "Corner 4 of the overlay."
	fademindist(float) : "Start Fade Dist" : -1 : "Distance at which the overlay starts to fade (<0 = use fademaxdist)."
	fademaxdist(float) : "End Fade Dist" : 0 : "Maximum distance at which the overlay is visible (0 = don't fade out)."
	]

@PointClass base(BaseEntityPoint, BasePaintType) 
	line(255 255 255, targetname, light_position_name)
	sphere(blob_spread_radius)
	studioprop("models/editor/info_paint_sprayer.mdl")
= info_paint_sprayer: "An entity that sprays Gel."
	[
	maxblobcount(integer) : "Max number of blobs" : 250 : "Max number of blobs that sprayer can spawn in the world (1-250)."
	light_position_name(target_destination) : "Light Position Name" : : "Name of the entity we want to use as blobs light position."
	start_active(boolean) : "Start Active?" : 0
	silent(boolean) : "Silent?" : 0 : "If this flag is true, blobs will only paint, appearing entirely invisible."
	drawonly(boolean) : "Draw Only?" : 0 : "If this flag is true, blobs will only render, vanishing on contact with surfaces."
	rendermode(choices) : "Render Mode" : 0 : "The mode to render blobs. Appears non-functional." =
		[
		0: "Blobulator"
		1: "Fast Sphere"
		]

	ambientsound(choices) : "Ambient Sound" : 0 : "The sound to play when paint is flowing." =
		[
		0: "None (silent)"
		1: "Drip"
		2: "Medium Flow"
		3: "Heavy Flow"
		]

	blobs_per_second(float) : "Blobs per second" : 20 : "The number of paint blobs sprayed per second."
	min_speed(float) : "Min blob speed" : 100 : "The minimum speed of the sprayed blobs."
	max_speed(float) : "Max blob speed" : 100 : "The maximum speed of the sprayed blobs."
	blob_spread_radius(float) : "Blob spread radius" : 0 : "Blobs will spawn randomly within this radius."
	blob_spread_angle(float) : "Blob spread angle" : 8 : "The spread of the blobs along its direction vector (in degrees)."
	blob_streak_percentage(float) : "Blob streak percentage" : 0 : "The percentage of blobs that will streak (0 - 100)."
	min_streak_time(float) : "Blob min streak time" : "0.2" : "The minimum time that the blobs will streak for."
	max_streak_time(float) : "Blob max streak time" : "0.5" : "The maximum time that the blobs will streak for."
	min_streak_speed_dampen(float) : "Blob min streak speed dampen" : 500 : "The minimum speed dampening while streaking."
	max_streak_speed_dampen(float) : "Blob max streak speed dampen" : 1000 : "The maximum speed dampening while streaking."
	start_radius_min(float) : "Min blob start size" : "0.5" : "The minimum start size of the sprayed blobs."
	start_radius_max(float) : "Max blob start size" : "0.7" : "The maximum start size of the sprayed blobs."
	end_radius_min(float) : "Min blob end size" : "0.5" : "The minimum end size of the sprayed blobs."
	end_radius_max(float) : "Max blob end size" : "0.7" : "The maximum end size of the sprayed blobs."
	radius_grow_time_min(float) : "Min grow time" : "0.5" : "The minimum time to grow from start to end size."
	radius_grow_time_max(float) : "Max grow time" : 1 : "The maximum time to grow from start to end size."

	// Inputs
	input Start(void) : "Start shooting Gel."
	input Stop(void) : "Stop shooting Gel."
	input ChangePaintType(integer) : "Change the type of Gel being sprayed. Values between 0-4, higher values are unstable."
	]

@PointClass base(BaseEntityPoint, Reflection) 
	studio("models/editor/cone_helper.mdl")
	line(255 255 255, targetname, cpoint1)
	line(255 255 255, targetname, cpoint2)
	line(255 255 255, targetname, cpoint3)
	line(255 255 255, targetname, cpoint4)
	line(255 255 255, targetname, cpoint5)
	line(255 255 255, targetname, cpoint6)
	line(255 255 255, targetname, cpoint7)
	line(255 255 255, targetname, cpoint8)
	line(255 255 255, targetname, cpoint9)
	line(255 255 255, targetname, cpoint10)
	line(255 255 255, targetname, cpoint11)
	line(255 255 255, targetname, cpoint12)
	line(255 255 255, targetname, cpoint13)
	line(255 255 255, targetname, cpoint14)
	line(255 255 255, targetname, cpoint15)
	line(255 255 255, targetname, cpoint16)
	line(255 255 255, targetname, cpoint17)
	line(255 255 255, targetname, cpoint18)
	line(255 255 255, targetname, cpoint19)
	line(255 255 255, targetname, cpoint20)
	line(255 255 255, targetname, cpoint21)
	line(255 255 255, targetname, cpoint22)
	line(255 255 255, targetname, cpoint23)
	line(255 255 255, targetname, cpoint24)
	line(255 255 255, targetname, cpoint25)
	line(255 255 255, targetname, cpoint26)
	line(255 255 255, targetname, cpoint27)
	line(255 255 255, targetname, cpoint28)
	line(255 255 255, targetname, cpoint29)
	line(255 255 255, targetname, cpoint30)
	line(255 255 255, targetname, cpoint31)
	line(255 255 255, targetname, cpoint32)
	line(255 255 255, targetname, cpoint33)
	line(255 255 255, targetname, cpoint34)
	line(255 255 255, targetname, cpoint35)
	line(255 255 255, targetname, cpoint36)
	line(255 255 255, targetname, cpoint37)
	line(255 255 255, targetname, cpoint38)
	line(255 255 255, targetname, cpoint39)
	line(255 255 255, targetname, cpoint40)
	line(255 255 255, targetname, cpoint41)
	line(255 255 255, targetname, cpoint42)
	line(255 255 255, targetname, cpoint43)
	line(255 255 255, targetname, cpoint44)
	line(255 255 255, targetname, cpoint45)
	line(255 255 255, targetname, cpoint46)
	line(255 255 255, targetname, cpoint47)
	line(255 255 255, targetname, cpoint48)
	line(255 255 255, targetname, cpoint49)
	line(255 255 255, targetname, cpoint50)
	line(255 255 255, targetname, cpoint51)
	line(255 255 255, targetname, cpoint52)
	line(255 255 255, targetname, cpoint53)
	line(255 255 255, targetname, cpoint54)
	line(255 255 255, targetname, cpoint55)
	line(255 255 255, targetname, cpoint56)
	line(255 255 255, targetname, cpoint57)
	line(255 255 255, targetname, cpoint58)
	line(255 255 255, targetname, cpoint59)
	line(255 255 255, targetname, cpoint60)
	line(255 255 255, targetname, cpoint61)
	line(255 255 255, targetname, cpoint62)
	line(255 255 255, targetname, cpoint63)
	color(200 200 0)
= info_particle_system: "An entity that spawns a particle system built using the particle editor."
	[
	effect_name(particlesystem) : "Particle System Name"
	start_active(boolean) : "Start Active?" : 0
	cpoint1(target_destination) : "Control Point 1" : : "If set, control point 1 of the effect will be at this entity's location."
	cpoint2(target_destination) : "Control Point 2" : : "If set, control point 2 of the effect will be at this entity's location. If control point 1 is not set, this will be ignored."
	cpoint3(target_destination) : "Control Point 3" : : "If set, control point 3 of the effect will be at this entity's location. If control point 2 is not set, this will be ignored."
	cpoint4(target_destination) : "Control Point 4" : : "If set, control point 4 of the effect will be at this entity's location. If control point 3 is not set, this will be ignored."
	cpoint5(target_destination) : "Control Point 5" : : "If set, control point 5 of the effect will be at this entity's location. If control point 4 is not set, this will be ignored."
	cpoint6(target_destination) : "Control Point 6" : : "If set, control point 6 of the effect will be at this entity's location. If control point 5 is not set, this will be ignored."
	cpoint7(target_destination) : "Control Point 7" : : "If set, control point 7 of the effect will be at this entity's location. If control point 6 is not set, this will be ignored."
	cpoint8(target_destination) : "Control Point 8" : : "If set, control point 8 of the effect will be at this entity's location. If control point 7 is not set, this will be ignored."
	cpoint9(target_destination) : "Control Point 9" : : "If set, control point 9 of the effect will be at this entity's location. If control point 8 is not set, this will be ignored."
	cpoint10(target_destination) : "Control Point 10" : : "If set, control point 10 of the effect will be at this entity's location. If control point 9 is not set, this will be ignored."
	cpoint11(target_destination) : "Control Point 11" : : "If set, control point 11 of the effect will be at this entity's location. If control point 10 is not set, this will be ignored."
	cpoint12(target_destination) : "Control Point 12" : : "If set, control point 12 of the effect will be at this entity's location. If control point 11 is not set, this will be ignored."
	cpoint13(target_destination) : "Control Point 13" : : "If set, control point 13 of the effect will be at this entity's location. If control point 12 is not set, this will be ignored."
	cpoint14(target_destination) : "Control Point 14" : : "If set, control point 14 of the effect will be at this entity's location. If control point 13 is not set, this will be ignored."
	cpoint15(target_destination) : "Control Point 15" : : "If set, control point 15 of the effect will be at this entity's location. If control point 14 is not set, this will be ignored."
	cpoint16(target_destination) : "Control Point 16" : : "If set, control point 16 of the effect will be at this entity's location. If control point 15 is not set, this will be ignored."
	cpoint17(target_destination) : "Control Point 17" : : "If set, control point 17 of the effect will be at this entity's location. If control point 16 is not set, this will be ignored."
	cpoint18(target_destination) : "Control Point 18" : : "If set, control point 18 of the effect will be at this entity's location. If control point 17 is not set, this will be ignored."
	cpoint19(target_destination) : "Control Point 19" : : "If set, control point 19 of the effect will be at this entity's location. If control point 18 is not set, this will be ignored."
	cpoint20(target_destination) : "Control Point 20" : : "If set, control point 20 of the effect will be at this entity's location. If control point 19 is not set, this will be ignored."
	cpoint21(target_destination) : "Control Point 21" : : "If set, control point 21 of the effect will be at this entity's location. If control point 10 is not set, this will be ignored."
	cpoint22(target_destination) : "Control Point 22" : : "If set, control point 22 of the effect will be at this entity's location. If control point 21 is not set, this will be ignored."
	cpoint23(target_destination) : "Control Point 23" : : "If set, control point 23 of the effect will be at this entity's location. If control point 22 is not set, this will be ignored."
	cpoint24(target_destination) : "Control Point 24" : : "If set, control point 24 of the effect will be at this entity's location. If control point 23 is not set, this will be ignored."
	cpoint25(target_destination) : "Control Point 25" : : "If set, control point 25 of the effect will be at this entity's location. If control point 24 is not set, this will be ignored."
	cpoint26(target_destination) : "Control Point 26" : : "If set, control point 26 of the effect will be at this entity's location. If control point 25 is not set, this will be ignored."
	cpoint27(target_destination) : "Control Point 27" : : "If set, control point 27 of the effect will be at this entity's location. If control point 26 is not set, this will be ignored."
	cpoint28(target_destination) : "Control Point 28" : : "If set, control point 28 of the effect will be at this entity's location. If control point 27 is not set, this will be ignored."
	cpoint29(target_destination) : "Control Point 29" : : "If set, control point 29 of the effect will be at this entity's location. If control point 28 is not set, this will be ignored."
	cpoint30(target_destination) : "Control Point 30" : : "If set, control point 30 of the effect will be at this entity's location. If control point 29 is not set, this will be ignored."
	cpoint31(target_destination) : "Control Point 31" : : "If set, control point 31 of the effect will be at this entity's location. If control point 30 is not set, this will be ignored."
	cpoint32(target_destination) : "Control Point 32" : : "If set, control point 32 of the effect will be at this entity's location. If control point 31 is not set, this will be ignored."
	cpoint33(target_destination) : "Control Point 33" : : "If set, control point 33 of the effect will be at this entity's location. If control point 32 is not set, this will be ignored."
	cpoint34(target_destination) : "Control Point 34" : : "If set, control point 34 of the effect will be at this entity's location. If control point 33 is not set, this will be ignored."
	cpoint35(target_destination) : "Control Point 35" : : "If set, control point 35 of the effect will be at this entity's location. If control point 34 is not set, this will be ignored."
	cpoint36(target_destination) : "Control Point 36" : : "If set, control point 36 of the effect will be at this entity's location. If control point 35 is not set, this will be ignored."
	cpoint37(target_destination) : "Control Point 37" : : "If set, control point 37 of the effect will be at this entity's location. If control point 36 is not set, this will be ignored."
	cpoint38(target_destination) : "Control Point 38" : : "If set, control point 38 of the effect will be at this entity's location. If control point 37 is not set, this will be ignored."
	cpoint39(target_destination) : "Control Point 39" : : "If set, control point 39 of the effect will be at this entity's location. If control point 38 is not set, this will be ignored."
	cpoint40(target_destination) : "Control Point 40" : : "If set, control point 40 of the effect will be at this entity's location. If control point 39 is not set, this will be ignored."
	cpoint41(target_destination) : "Control Point 41" : : "If set, control point 41 of the effect will be at this entity's location. If control point 40 is not set, this will be ignored."
	cpoint42(target_destination) : "Control Point 42" : : "If set, control point 42 of the effect will be at this entity's location. If control point 41 is not set, this will be ignored."
	cpoint43(target_destination) : "Control Point 43" : : "If set, control point 43 of the effect will be at this entity's location. If control point 42 is not set, this will be ignored."
	cpoint44(target_destination) : "Control Point 44" : : "If set, control point 44 of the effect will be at this entity's location. If control point 43 is not set, this will be ignored."
	cpoint45(target_destination) : "Control Point 45" : : "If set, control point 45 of the effect will be at this entity's location. If control point 44 is not set, this will be ignored."
	cpoint46(target_destination) : "Control Point 46" : : "If set, control point 46 of the effect will be at this entity's location. If control point 45 is not set, this will be ignored."
	cpoint47(target_destination) : "Control Point 47" : : "If set, control point 47 of the effect will be at this entity's location. If control point 46 is not set, this will be ignored."
	cpoint48(target_destination) : "Control Point 48" : : "If set, control point 48 of the effect will be at this entity's location. If control point 47 is not set, this will be ignored."
	cpoint49(target_destination) : "Control Point 49" : : "If set, control point 49 of the effect will be at this entity's location. If control point 48 is not set, this will be ignored."
	cpoint50(target_destination) : "Control Point 50" : : "If set, control point 50 of the effect will be at this entity's location. If control point 49 is not set, this will be ignored."
	cpoint51(target_destination) : "Control Point 51" : : "If set, control point 51 of the effect will be at this entity's location. If control point 50 is not set, this will be ignored."
	cpoint52(target_destination) : "Control Point 52" : : "If set, control point 52 of the effect will be at this entity's location. If control point 51 is not set, this will be ignored."
	cpoint53(target_destination) : "Control Point 53" : : "If set, control point 53 of the effect will be at this entity's location. If control point 52 is not set, this will be ignored."
	cpoint54(target_destination) : "Control Point 54" : : "If set, control point 54 of the effect will be at this entity's location. If control point 53 is not set, this will be ignored."
	cpoint55(target_destination) : "Control Point 55" : : "If set, control point 55 of the effect will be at this entity's location. If control point 54 is not set, this will be ignored."
	cpoint56(target_destination) : "Control Point 56" : : "If set, control point 56 of the effect will be at this entity's location. If control point 55 is not set, this will be ignored."
	cpoint57(target_destination) : "Control Point 57" : : "If set, control point 57 of the effect will be at this entity's location. If control point 56 is not set, this will be ignored."
	cpoint58(target_destination) : "Control Point 58" : : "If set, control point 58 of the effect will be at this entity's location. If control point 57 is not set, this will be ignored."
	cpoint59(target_destination) : "Control Point 59" : : "If set, control point 59 of the effect will be at this entity's location. If control point 58 is not set, this will be ignored."
	cpoint60(target_destination) : "Control Point 60" : : "If set, control point 60 of the effect will be at this entity's location. If control point 59 is not set, this will be ignored."
	cpoint61(target_destination) : "Control Point 61" : : "If set, control point 61 of the effect will be at this entity's location. If control point 60 is not set, this will be ignored."
	cpoint62(target_destination) : "Control Point 62" : : "If set, control point 62 of the effect will be at this entity's location. If control point 61 is not set, this will be ignored."
	cpoint63(target_destination) : "Control Point 63" : : "If set, control point 63 of the effect will be at this entity's location. If control point 62 is not set, this will be ignored."
	cpoint1_parent(integer) : "Control Point 1's Parent" : 0 : "If set and nonzero, control point 1 of the effect will use this control point for its parent."
	cpoint2_parent(integer) : "Control Point 2's Parent" : 0 : "If set and nonzero, control point 2 of the effect will use this control point for its parent."
	cpoint3_parent(integer) : "Control Point 3's Parent" : 0 : "If set and nonzero, control point 3 of the effect will use this control point for its parent."
	cpoint4_parent(integer) : "Control Point 4's Parent" : 0 : "If set and nonzero, control point 4 of the effect will use this control point for its parent."
	cpoint5_parent(integer) : "Control Point 5's Parent" : 0 : "If set and nonzero, control point 5 of the effect will use this control point for its parent."
	cpoint6_parent(integer) : "Control Point 6's Parent" : 0 : "If set and nonzero, control point 6 of the effect will use this control point for its parent."
	cpoint7_parent(integer) : "Control Point 7's Parent" : 0 : "If set and nonzero, control point 7 of the effect will use this control point for its parent."

	// Inputs
	input Start(void) : "Tell the particle system to start emitting."
	input Stop(void) : "Tell the particle system to stop emitting."
	input StopPlayEndCap(void) : "Tell the particle system to stop emitting and play its End Cap Effect."
	input DestroyImmediately(void) : "Destroy the particle system and remove all particles immediately."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	line(255 255 0, targetname, proxy_name)
	line(255 255 0, targetname, attach_target_name)
	sphere(radius, 255 128 0)
	studioprop("models/editor/placement_helper.mdl")
= info_placement_helper: "Portal Placement Helper, indicates where portals will snap to. The arrow points to the 'up' diection for the portal."
	[
	radius(float) : "Radius" : 16 : "Radius in which to influence placement."
	proxy_name(target_destination) : "Proxy Entity Name" : : "Name of the entity we want to use for our real placement position."
	attach_target_name(target_destination) : "Attach Entity Name" : : "Name of the entity we want to force our attachment to. Ensures this applies to the correct brush. Needs parent!"
	snap_to_helper_angles(boolean) : "Use helper's angles" : 0 : "Portals will lock to the angles, instead of rotating in all directions.."
	force_placement(boolean) : "Force Placement" : 0 : "Force portals to lock to this helper, no matter what. With this disabled the helper will automatically deactivate temporarily, so that you can place portals finely."

	// Outputs
	output OnObjectPlaced(void) : "A portal has been successfully placed using us as a guide."
	output OnObjectPlacedSize(integer) : "When a portal is successfully placed, this sends the scale level as an out value"
	]

@PointClass base(BaseEntityPoint) 
	color(0 255 0)
	studio("models/editor/playerstart.mdl")
= info_player_deathmatch
	[
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/info_player_ping_detector.vmt")
	line(255 255 0, targetname, functankname)
= info_player_ping_detector: "Detects a specific Co-op player's pings, and optionally rotates a func_tank to face towards them (as seen in the Calibration Course)"
	[
	functankname(target_destination) : "Func_Tank Entity" : : "Name of the func_tank that will be told to look at the ping location when detected."
	teamtolookat(choices) : "Player to Observe" : 2 : "Which player's pings to look at." =
		[
		1: "Both"
		3: "ATLAS"
		2: "P-Body"
		]

	enabled(choices) : "Default State" : 1 : "Is this entity enabled by default or not?" =
		[
		0: "Disabled"
		1: "Enabled"
		]


	// Inputs
	input Enable(void) : "Starts listening for pings and will fire outputs when found."
	input Disable(void) : "Disable this entity from listening for pings."
	input Toggle(void) : "Toggle from Enabled to Disabled and vice versa."

	// Outputs
	output OnPingDetected(void) : "Fired when a ping is detected."
	]

@PointClass base(BaseEntityPoint) 
	color(0 255 0)
	studio("models/player/chell/player.mdl")
= info_player_start: "This entity indicates the position and facing direction at which the player will spawn. Any number of info_player_start entities may be placed in a map for when working in cordoned-off portions of the map. When multiple info_player_start entities are present in a map, set the 'Master' spawnflag on one of them to indicate which one should be used when running the entire map."
	[
	spawnflags(flags)  =
		[
		1: "[1] Master (Has priority if multiple info_player_starts exist)" : 0
		]

	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/info_target.vmt")
= info_playtest_manager: "Manages playtest sessions."
	[

	// Inputs
	input BeginPlaytest(void) : "Starts the playtest session"
	input EndPlaytest(void) : "Ends playtest session"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/info_target.vmt")
= info_portal_gamerules: "Determines game various rules for gameplay"
	[
	enableregen(boolean) : "Enable health regeneration" : 1
	equipboots(boolean) : "Equip long-fall boots" : 1 : "Disabling this will essentially enable fall damage"
	equipportalgun(choices) : "Equip Portal Gun" : 0 =
		[
		0: "None"
		1: "Orange"
		2: "Blue"
		3: "Dual Portal Device"
		4: "Potato Gun"
		]

	equippaintgun(choices) : "Equip paint gun" : 0 =
		[
		0: "None"
		1: "Basic paint gun"
		2: "Fully-upgraded paint gun"
		]

	maxhealth(integer) : "Max health for players" : 100
	gametype(choices) : "Co-op Game type" : 0 : "Sets the co-op game type. This is ignored if the game isn't running in co-op mode." =
		[
		0: "Default"
		1: "Co-op 2-guns"
		2: "Co-op versus mode"
		3: "Co-op versus mode and 2-guns"
		]

	]

@PointClass base(BaseEntityPoint) 
	decal()
	studio("models/editor/decal_helper.mdl")
	sphere(distance)
= info_projecteddecal: "An entity that projects a decal onto the world (or props). If the decal has no target name, it will immediately apply itself when the level is loaded. If it has a name specified, it won't apply until it receives the 'Activate' input."
	[
	texture(material) : "Texture" : : "The texture used for the decal."
	distance(float) : "Distance" : 64 : "Distance from the origin to project the decal."

	// Inputs
	input Activate(void) : "Force the decal to apply itself to the world."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/info_target.vmt")
	studio("models/editor/axis_helper.mdl")
	halfgridsnap
= info_target: "An entity that does nothing. Very useful as a positioning entity for other entities to refer to (i.e. the endpoint of an env_beam)"
	[
	spawnflags(flags)  =
		[
		1: "[1] Transmit to client (respect PVS)" : 0
		2: "[2] Always transmit to client (ignore PVS)" : 0
		]

	]

@PointClass base(BaseEntityPoint) 
	halfgridsnap
	studio("models/editor/axis_helper.mdl")
	iconsprite("editor/info_target_instructor_hint.vmt")
= info_target_instructor_hint: "A generic target that gets replicated to the client for hud hint targeting."
	[
	]

@PointClass base(BaseEntityPoint) 
	sphere(radius)
= info_target_personality_sphere: "Personality Sphere Info Target"
	[
	sphereline(string) : "Sphere Line" : : "Line sphere will speak when we are looking at this target."
	radius(float) : "Radius" : 16 : "Radius of this object. "
	]

@PointClass base(BaseEntityPoint) 
	studio("models/editor/playerstart.mdl")
= info_teleport_destination: "An entity that does nothing itself, but can be used to specify the destination for a trigger_teleport entity. An info_target can be used instead."
	[
	]

@PointClass base(BaseEntityPoint) 
	decal()
	studio("models/editor/decal_helper.mdl")
= infodecal: "An entity that places a decal on the world. If the decal has no target name, it will immediately apply itself when the level is loaded.If it has a name specified, it won't apply until it receives the 'Activate' input."
	[
	texture(material) : "Texture" : : "The texture used for the decal."
	lowpriority(boolean) : "Low Priority" : 1 : "Allow the decal to be overwritten by other decals when needed. This also makes the decal not persist across savegames."

	// Inputs
	input Activate(void) : "Force the decal to apply itself to the world."
	]

@KeyframeClass base(BaseEntityPoint, KeyFrame) 
	line(255 255 255, targetname, nextkey)
	size(-6 -6 -6, 6 6 6)
	color(255 200 0)
	keyframe()
= keyframe_track: "Animation KeyFrame"
	[
	]

@PointClass base(BaseEntityPoint, BaseLight) 
	sphere(_fifty_percent_distance)
	sphere(_zero_percent_distance)
	sphere(_distance)
	color(255 255 0)
	light()
	iconsprite("editor/light.vmt")
	line(255 255 255, targetname, target)
= light: "An invisible omnidirectional lightsource."
	[
	_removeaftercompile(boolean) : "Remove After Compile" : 0 : "If set, removes this entity after processing the map with VRAD"
	spawnflags(flags)  =
		[
		1: "[1] Initially dark" : 0
		]

	]

@PointClass base(Angles) 
	color(255 255 0)
	iconsprite("editor/light_directional.vmt")
= light_directional: "A directional light with no falloff. Similar to sunlight in light_environment."
	[
	pitch(integer) : "Pitch" : 0 : "The downward pitch of the light from the sun. 0 is horizontal, -90 is straight down."
	_light(color255) : "Brightness" : "255 255 255 200"
	_lighthdr(color255) : "BrightnessHDR" : "-1 -1 -1 1"
	_lightscalehdr(float) : "BrightnessScaleHDR" : "0.7" : "Amount to scale the light by when compiling for HDR."
	sunspreadangle(float) : "SpreadAngle" : 0 : "The angular extent of the light for casting soft shadows. Higher numbers are more diffuse. 5 is a good starting value."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/light_dynamic.vmt")
	sphere(distance)
	lightcone()
	line(255 255 255, targetname, target)
= light_dynamic: "An invisible lightsource that changes in some way over time."
	[
	target(target_destination) : "Entity to point at" : : "The name of an entity in the map that the dynamic light will point at."
	_light(color255) : "Light color" : "255 255 255 200"
	brightness(integer) : "Light brightness" : 0
	_inner_cone(integer) : "Inner (bright) angle" : 30
	_cone(integer) : "Outer (fading) angle" : 45
	pitch(integer) : "Pitch" : -90
	distance(float) : "Maximum distance" : 120 : "This is the distance that light is allowed to cast, in units."
	spotlight_radius(float) : "Spotlight end radius" : 80 : "This is the radius of the light, in units, at the object that it is hitting."
	style(choices) : "Appearance" : 0 =
		[
		0: "Normal"
		10: "Fluorescent flicker"
		2: "Slow, strong pulse"
		11: "Slow pulse, noblack"
		5: "Gentle pulse"
		1: "Flicker A"
		6: "Flicker B"
		3: "Candle A"
		7: "Candle B"
		8: "Candle C"
		4: "Fast strobe"
		9: "Slow strobe"
		]

	spawnflags(flags)  =
		[
		1: "[1] Do not light world (better perf)" : 0
		2: "[2] Do not light models" : 0
		4: "[4] Add Displacement Alpha" : 0
		8: "[8] Subtract Displacement Alpha" : 0
		]


	// Inputs
	input Color(color255) : "Set the light's render color (R G B)."
	input brightness(integer) : "Set the light brightness."
	input distance(float) : "Set the maximum light distance."
	input _inner_cone(integer) : "Set the inner (bright) angle."
	input _cone(integer) : "Set the outer (fading) angle."
	input spotlight_radius(float) : "Set the radius of the spotlight at the end point."
	input style(integer) : "Change the lightstyle (see Appearance field for possible values)."
	input TurnOn(void) : "Turn the light off."
	input TurnOff(void) : "Turn the light on."
	input Toggle(void) : "Toggle the light on/off."
	]

@PointClass base(BaseEntityPoint, Angles) 
	iconsprite("editor/ficool2/light_environment.vmt")
	color(255 255 0)
	lightprop("models/editor/spot.mdl")
= light_environment: "Sets the color and angle of the light from the sun and sky."
	[
	pitch(angle_negative_pitch) : "Pitch" : 0 : "The downward pitch of the light from the sun. 0 is horizontal, -90 is straight down."
	_light(color255) : "Brightness" : "255 255 255 200"
	_ambient(color255) : "Ambient light" : "255 255 255 20"
	_lighthdr(color255) : "BrightnessHDR" : "-1 -1 -1 1"
	_lightscalehdr(float) : "BrightnessScaleHDR" : 1 : "Amount to scale the light by when compiling for HDR."
	_ambienthdr(color255) : "AmbientHDR" : "-1 -1 -1 1"
	_ambientscalehdr(float) : "AmbientScaleHDR" : 1 : "Amount to scale the ambient light by when compiling for hdr."
	sunspreadangle(float) : "SunSpreadAngle" : 5 : "The angular extent of the sun for casting soft shadows. Higher numbers are more diffuse. 5 is a good starting value."
	style(choices) : "Appearance" : 0 =
		[
		0: "Normal"
		10: "Fluorescent flicker"
		2: "Slow, strong pulse"
		11: "Slow pulse, noblack"
		5: "Gentle pulse"
		1: "Flicker A"
		6: "Flicker B"
		3: "Candle A"
		7: "Candle B"
		8: "Candle C"
		4: "Fast strobe"
		9: "Slow strobe"
		12: "Underwater light mutation"
		]

	pattern(string) : "Custom Appearance" : : "Set a custom pattern of light brightness for this light. Pattern format is a string of characters, where 'a' is total darkness, 'z' fully bright. i.e. 'aaggnnttzz' would be a steppy fade in from dark to light."

	// Inputs
	input TurnOn(void) : "Turn the Sun on."
	input TurnOff(void) : "The the Sun off."
	input Toggle(void) : "Toggle the Sun's current state."
	input SetPattern(string) : "Set a custom pattern of light brightness for the Sun. Pattern format is a string of characters, where 'a' is total darkness, 'z' fully bright. i.e. 'aaggnnttzz' would be a steppy fade in from dark to light."
	input FadeToPattern(string) : "Fades from first value in old pattern, to first value in the new given pattern. Pattern format is a string of characters, where 'a' is total darkness, 'z' fully bright. i.e. 'aaggnnttzz' would be a steppy fade in from dark to light."
	]

@PointClass base(BaseEntityPoint, BaseLight) 
	sphere(_fifty_percent_distance)
	sphere(_zero_percent_distance)
	sphere(_distance)
	color(255 255 0)
	lightprop("models/editor/spot.mdl")
	lightcone()
	line(255 255 255, targetname, target)
= light_spot: "An invisible and directional spotlight."
	[
	target(target_destination) : "Entity to point at" : : "The name of an entity in the map that the spotlight will point at. This will override the spotlight's angles."
	_inner_cone(integer) : "Inner (bright) angle" : 30
	_cone(integer) : "Outer (fading) angle" : 45
	_exponent(integer) : "Focus" : 1
	_removeaftercompile(boolean) : "Remove After Compile" : 0 : "If set, removes this entity after processing the map with VRAD"
	pitch(angle_negative_pitch) : "Pitch" : -90
	spawnflags(flags)  =
		[
		1: "[1] Initially dark" : 0
		]

	]

@PointClass base(BaseEntityPoint, LinkedPortalDoor, ToggleDraw) 
	line(255 255 0, targetname, partnername)
	studio("models/editor/angle_helper.mdl")
	iconsprite("editor/portal_dual.vmt")
= linked_portal_door: "A door which is linked by a portal to another 'linked_portal_door' entity. Portal shots will pass through, and no effect appears at the edges."
	[
	partnername(target_destination) : "Linked Partner" : : "Another 'linked_portal_door' entity which will link to this one."
	width(integer) : "Half-Width (G)" : 64 : "Half the width of the portal, on the Green axis."
	height(integer) : "Half-Height (B)" : 64 : "Half the height of the portal, on the Blue axis."
	isstatic(boolean) : "Static Portal" : 0 : "If set to true, this portal does not ever move or toggle, and allows VRAD to cast light through it."
	startactive(boolean) : "Start Active" : 1 : "Whether to start the linkage as active from the start."

	// Inputs
	input SetWidth(float) : "Sets the width of this portal and the partner. Clamped to 1-1024"
	input SetHeight(float) : "Sets the height of this portal and the partner. Clamped to 1-1024"
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/logic_achievement")
= logic_achievement: "Sends an achievement system related event from the map to the achievement system."
	[
	achievementname(string) : "Achievement Name" : : "The name of the achievement to be awarded when this entity receives a 'FireEvent' input."

	// Inputs
	input Toggle(void) : "Toggle the relay between enabled and disabled."
	input FireEvent(void) : "Tells the achievement system the specifed event has occured."
	input SetTargetPlayer(target_destination) : "Set the player who will be awarded this achievement."

	// Outputs
	output OnFired(void) : "When the event fires, this fires."
	]

@PointClass base(BaseEntityPoint) 
	color(200 0 0)
	iconsprite("editor/logic_active_autosave.vmt")
= logic_active_autosave: "An entity that is used to look for opportunities to autosave."
	[
	minimumhitpoints(integer) : "Initiation Hit Points" : 30 : "Start looking for an opportunity to save if player drops below this hitpoint level."
	triggerhitpoints(integer) : "Trigger Hit Points" : 75 : "If started looking for an opportunity, save when hitpoints reach this level."
	timetotrigget(float) : "Time to trigger" : 0 : "If > 0, how long to try and get a save off before giving up."
	dangeroustime(float) : "Dangerous time" : 10 : "If 0, just autosave. Otherwise, do an autosavedangerous with this time threshold."

	// Inputs
	input Enable(void) : "Enable the entity"
	input Disable(void) : "Enable the entity"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/logic_auto.vmt")
	color(0 100 250)
= logic_auto: "Fires outputs when a map spawns. If 'Remove on fire' flag is set the logic_auto is deleted after firing. It can be set to check a global state before firing. This allows you to only fire events based on what took place in a previous map."
	[
	spawnflags(flags)  =
		[
		1: "[1] Remove on fire" : 1
		]

	globalstate(choices) : "Global State to Read" : : "If set, this specifies a global state to check before firing. The OnMapSpawn output will only fire if the global state is set." =
		[
		"": "--- None ---"
		"is_console": "Game is running on a console"
		"is_pc": "Game is running on a PC"
		]


	// Outputs
	output OnMapSpawn(void) : "Fired when the map is loaded for any reason."
	output OnNewGame(void) : "Fired when the map is loaded to start a new game."
	output OnLoadGame(void) : "Fired when the map is loaded from a saved game."
	output OnMapTransition(void) : "Fired when the map is loaded due to a level transition."
	output OnBackgroundMap(void) : "Fired when the map is loaded as a background to the main menu."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/logic_autosave.vmt")
	color(200 0 0)
= logic_autosave: "An entity that is used to force an autosave."
	[
	newlevelunit(boolean) : "Force New Level Unit" : 0 : "If set, the save will discard any savedata from previous levels, for the purpose of keeping savegame filesizes down. Can only be safely used if there is no way for the player to return to previous levels."
	minimumhitpoints(integer) : "Minimum Hit Points" : 0 : "Don't save dangerous when player has less than this many hitpoints."
	minhitpointstocommit(integer) : "Minimum Hit Points to Commit" : 0 : "Minimum hitpoints required to commit to save. The save will be made if you have at least Minimum Hit Points, but when the autosave timer expires, the autosave is only kept if you have at least Min Hitpoints to Commit."

	// Inputs
	input Save(void) : "Force an autosave."
	input SaveDangerous(float) : "Force an autosave as autosavedangerous.sav. If the player is alive after the passed number of seconds it replaces the standard auto save."
	input SetMinHitpointsThreshold(integer) : "Set MinimumHitPoints to this."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/logic_branch.vmt")
	color(0 100 250)
= logic_branch: "Tests a boolean value and fires an output based on whether the value is true or false. Use this entity to branch between two potential sets of events."
	[
	initialvalue(choices) : "Initial value" : 0 : "Initial value for the boolean value (0 or 1)." =
		[
		0: "0 (False)"
		1: "1 (True)"
		]


	// Inputs
	input SetValue(bool) : "Set the boolean value without performing the comparison. Use this to hold a value for a future test."
	input SetValueTest(bool) : "Set the boolean value and test it, firing OnTrue or OnFalse based on the new value."
	input Toggle(void) : "Toggle the boolean value between true and false."
	input ToggleTest(void) : "Toggle the boolean value and tests it, firing OnTrue or OnFalse based on the new value."
	input Test(void) : "Test the input value and fire OnTrue or OnFalse based on the value."

	// Outputs
	output OnTrue(bool) : "Fired when the input value is true (nonzero)."
	output OnFalse(bool) : "Fired when the input value is false (zero)."
	]

@PointClass base(BaseEntityPoint) 
	color(0 100 250)
	iconsprite("editor/logic_branch_listener.vmt")
	line(255 255 0, targetname, branch01)
	line(255 255 0, targetname, branch02)
	line(255 255 0, targetname, branch03)
	line(255 255 0, targetname, branch04)
	line(255 255 0, targetname, branch05)
	line(255 255 0, targetname, branch06)
	line(255 255 0, targetname, branch07)
	line(255 255 0, targetname, branch08)
	line(255 255 0, targetname, branch09)
	line(255 255 0, targetname, branch10)
	line(255 255 0, targetname, branch11)
	line(255 255 0, targetname, branch12)
	line(255 255 0, targetname, branch13)
	line(255 255 0, targetname, branch14)
	line(255 255 0, targetname, branch15)
	line(255 255 0, targetname, branch16)
= logic_branch_listener: "Contains a list of logic_branch entities and fires outputs when the state of any of the logic_branches changes.\n\nThis entity is used to fire an event when a set of conditions are all satisfied."
	[
	branch01(target_destination) : "Logic Branch 01" : : "The name of one or more logic_branches (wildcards allowed)."
	branch02(target_destination) : "Logic Branch 02" : : "The name of one or more logic_branches (wildcards allowed)."
	branch03(target_destination) : "Logic Branch 03" : : "The name of one or more logic_branches (wildcards allowed)."
	branch04(target_destination) : "Logic Branch 04" : : "The name of one or more logic_branches (wildcards allowed)."
	branch05(target_destination) : "Logic Branch 05" : : "The name of one or more logic_branches (wildcards allowed)."
	branch06(target_destination) : "Logic Branch 06" : : "The name of one or more logic_branches (wildcards allowed)."
	branch07(target_destination) : "Logic Branch 07" : : "The name of one or more logic_branches (wildcards allowed)."
	branch08(target_destination) : "Logic Branch 08" : : "The name of one or more logic_branches (wildcards allowed)."
	branch09(target_destination) : "Logic Branch 09" : : "The name of one or more logic_branches (wildcards allowed)."
	branch10(target_destination) : "Logic Branch 10" : : "The name of one or more logic_branches (wildcards allowed)."
	branch11(target_destination) : "Logic Branch 11" : : "The name of one or more logic_branches (wildcards allowed)."
	branch12(target_destination) : "Logic Branch 12" : : "The name of one or more logic_branches (wildcards allowed)."
	branch13(target_destination) : "Logic Branch 13" : : "The name of one or more logic_branches (wildcards allowed)."
	branch14(target_destination) : "Logic Branch 14" : : "The name of one or more logic_branches (wildcards allowed)."
	branch15(target_destination) : "Logic Branch 15" : : "The name of one or more logic_branches (wildcards allowed)."
	branch16(target_destination) : "Logic Branch 16" : : "The name of one or more logic_branches (wildcards allowed)."

	// Inputs
	input Test(void) : "Tests the state of all the logic_branches in the list and fires the appropriate output."
	input UniqueStateOn(void) : "Set the state of a logic_branch unique to this input entity to 1. This will generate a branch added to the listener."
	input UniqueStateOff(void) : "Set the state of a logic_branch unique to this input entity to 0. This will generate a branch added to the listener."
	input UniqueStateSet(bool) : "Set the state of a logic_branch unique to this input entity to the provided value. This will generate a branch added to the listener."
	input UniqueStateToggle(void) : "Toggle the state of a logic_branch unique to this input entity. This will generate a branch added to the listener."

	// Outputs
	output OnAllTrue(void) : "Fired when all the logic_branches in the list become true."
	output OnAllFalse(void) : "Fired when all the logic_branches in the list become false."
	output OnMixed(void) : "Fired when one of the logic branches in the list changes, but some are true and some are false."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/logic_case.vmt")
	color(0 100 250)
= logic_case: "Compares an input to up to 16 preset values. If the input value is the same as any of the preset values, an output corresponding to that value is fired.\n\nFor example: if Case01 is set to 2 and Case02 is set to 5, and the input value is 5, the OnCase02 output will be fired.\n\nThis entity can also be used to select from a number of random targets via the PickRandom input. One of the OnCase outputs that is connected to another entity will be picked at random and fired."
	[
	multiplecasesallowed(boolean) : "Multiple case hits allowed" : 0 : "If an input value matches a given case, are we allowed to test the rest of the cases or should we stop there? Don't worry about this if you're only using this entity for PickRandom."
	case01(string) : "Case 01" : : "If the input value matches this, fire the corresponding output."
	case02(string) : "Case 02" : : "If the input value matches this, fire the corresponding output."
	case03(string) : "Case 03" : : "If the input value matches this, fire the corresponding output."
	case04(string) : "Case 04" : : "If the input value matches this, fire the corresponding output."
	case05(string) : "Case 05" : : "If the input value matches this, fire the corresponding output."
	case06(string) : "Case 06" : : "If the input value matches this, fire the corresponding output."
	case07(string) : "Case 07" : : "If the input value matches this, fire the corresponding output."
	case08(string) : "Case 08" : : "If the input value matches this, fire the corresponding output."
	case09(string) : "Case 09" : : "If the input value matches this, fire the corresponding output."
	case10(string) : "Case 10" : : "If the input value matches this, fire the corresponding output."
	case11(string) : "Case 11" : : "If the input value matches this, fire the corresponding output."
	case12(string) : "Case 12" : : "If the input value matches this, fire the corresponding output."
	case13(string) : "Case 13" : : "If the input value matches this, fire the corresponding output."
	case14(string) : "Case 14" : : "If the input value matches this, fire the corresponding output."
	case15(string) : "Case 15" : : "If the input value matches this, fire the corresponding output."
	case16(string) : "Case 16" : : "If the input value matches this, fire the corresponding output."

	// Inputs
	input InValue(string) : "Compares the Input value to the case values, and fires the appropriate output, if any."
	input InValueNoTest(string) : "Stores the input value to be tested later."
	input Test(void) : "Compares the stored value to the case values, and fires the appropriate output, if any."
	input PickRandom(void) : "Fires a random OnCase output with at least one connection."
	input PickRandomShuffle(void) : "Fires a random OnCase output with at least one connection, with no repeats until all cases have been picked, at which point the shuffle starts over."

	// Outputs
	output OnCase01(void) : "Fired when the input value equals the Case01 value."
	output OnCase02(void) : "Fired when the input value equals the Case02 value."
	output OnCase03(void) : "Fired when the input value equals the Case03 value."
	output OnCase04(void) : "Fired when the input value equals the Case04 value."
	output OnCase05(void) : "Fired when the input value equals the Case05 value."
	output OnCase06(void) : "Fired when the input value equals the Case06 value."
	output OnCase07(void) : "Fired when the input value equals the Case07 value."
	output OnCase08(void) : "Fired when the input value equals the Case08 value."
	output OnCase09(void) : "Fired when the input value equals the Case09 value."
	output OnCase10(void) : "Fired when the input value equals the Case10 value."
	output OnCase11(void) : "Fired when the input value equals the Case11 value."
	output OnCase12(void) : "Fired when the input value equals the Case12 value."
	output OnCase13(void) : "Fired when the input value equals the Case13 value."
	output OnCase14(void) : "Fired when the input value equals the Case14 value."
	output OnCase15(void) : "Fired when the input value equals the Case15 value."
	output OnCase16(void) : "Fired when the input value equals the Case16 value."
	output OnDefault(string) : "Fired when the input value does not equal any of the Case values. Passes the input value."
	output OnUsed(string) : "Fired when an input value is received, regardless of whether it matches a case. Passes the input value."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/choreo_scene.vmt")
	color(240 180 250)
	line(240 180 250, targetname, target1)
	line(240 180 250, targetname, target2)
	line(240 180 250, targetname, target3)
	line(240 180 250, targetname, target4)
	line(240 180 250, targetname, target5)
	line(240 180 250, targetname, target6)
	line(240 180 250, targetname, target7)
	line(240 180 250, targetname, target8)
= logic_choreographed_scene: "Manages a choreographed scene of one or more actors."
	[
	scenefile(scene) : "Scene file" : : "The scene that will play when this entity is triggered."
	target1(target_destination) : "Target 1"
	target2(target_destination) : "Target 2"
	target3(target_destination) : "Target 3"
	target4(target_destination) : "Target 4"
	target5(target_destination) : "Target 5"
	target6(target_destination) : "Target 6"
	target7(target_destination) : "Target 7"
	target8(target_destination) : "Target 8"
	busyactor(choices) : "If an Actor is talking..." : 1 : "What to do if an actor this scene needs is already talking when this scene is told to start." =
		[
		0: "Start immediately"
		1: "Wait for actor to finish"
		2: "Interrupt at next interrupt event"
		3: "Cancel at next interrupt event"
		]

	onplayerdeath(choices) : "On Player Death" : 0 : "What should this entity do if the player dies" =
		[
		0: "Do Nothing"
		1: "Cancel Script and return to AI"
		]


	// Inputs
	input Start(void) : "Starts playback of the scene file"
	input Pause(void) : "Pauses playback of the scene file"
	input Resume(void) : "Resumes playback of the scene if it has been paused"
	input Cancel(void) : "Cancels playback of the scene"
	input CancelAtNextInterrupt(void) : "Cancels playback of the scene at the next interrupt event in the scene."
	input PitchShift(float) : "Multiplies the the pitch"
	input InterjectResponse(string) : "Finds an actor who can respond to the specified concept string while the scene continues playing"
	input StopWaitingForActor(void) : "Stop waiting on an actor to stop talking."
	input Trigger(integer) : "Fires the OnTrigger output of the specified number."
	input SetTarget1(target_destination) : "Sets Target 1 to the specified entity."
	input SetTarget2(target_destination) : "Sets Target 2 to the specified entity."
	input SetTarget3(target_destination) : "Sets Target 3 to the specified entity."
	input SetTarget4(target_destination) : "Sets Target 4 to the specified entity."

	// Outputs
	output OnStart(void) : "The scene has started"
	output OnCompletion(void) : "The scene has completed"
	output OnCanceled(void) : "The scene has been canceled"
	output OnTrigger1(void) : "Scene trigger 1"
	output OnTrigger2(void) : "Scene trigger 2"
	output OnTrigger3(void) : "Scene trigger 3"
	output OnTrigger4(void) : "Scene trigger 4"
	output OnTrigger5(void) : "Scene trigger 5"
	output OnTrigger6(void) : "Scene trigger 6"
	output OnTrigger7(void) : "Scene trigger 7"
	output OnTrigger8(void) : "Scene trigger 8"
	output OnTrigger9(void) : "Scene trigger 9"
	output OnTrigger10(void) : "Scene trigger 10"
	output OnTrigger11(void) : "Scene trigger 11"
	output OnTrigger12(void) : "Scene trigger 12"
	output OnTrigger13(void) : "Scene trigger 13"
	output OnTrigger14(void) : "Scene trigger 14"
	output OnTrigger15(void) : "Scene trigger 15"
	output OnTrigger16(void) : "Scene trigger 16"
	]

@PointClass base(BaseEntityPoint) 
	color(128 128 128)
	iconsprite("editor/ficool2/logic_collision_pair.vmt")
	line(128 128 128, attach1, attach2)
= logic_collision_pair: "An entity that can be used to enables/disable vphysics collisions between two target entities."
	[
	attach1(target_destination) : "Attachment 1" : : "The first entity."
	attach2(target_destination) : "Attachment 2" : : "The second entity."
	startdisabled(boolean) : "Start with collisions disabled" : 1

	// Inputs
	input EnableCollisions(void) : "Enable collisions between the first and second entity."
	input DisableCollisions(void) : "Disable collisions between the first and second entity."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/logic_compare.vmt")
	color(0 100 250)
= logic_compare: "Compares an input value to another value. If the input value is less than the compare value, the OnLessThan output is fired with the input value. If the input value is equal to the compare value, the OnEqualTo output is fired with the input value. If the input value is greater than the compare value, the OnGreaterThan output is fired with the input value."
	[
	initialvalue(string) : "Initial value" : : "Initial value for the input value."
	comparevalue(string) : "Compare value" : : "The value to compare against."
	strlenallowed(boolean) : "Use string length" : 0 : "Use the length of the string in the compare value rather than its actual value."

	// Inputs
	input Compare(void) : "Force a compare of the input value with the compare value."
	input SetValue(string) : "Set the value that will be compared against the compare value."
	input SetValueCompare(string) : "Set the value that will be compared against the compare value and performs the comparison."
	input SetCompareValue(string) : "Set the compare value."
	input SetCompareValueCompare(string) : "Sets the compare value and performs the comparison."

	// Outputs
	output OnLessThan(string) : "Fired when the input value is less than the compare value. Sends the input value as data."
	output OnEqualTo(string) : "Fired when the input value is equal to the compare value. Sends the input value as data."
	output OnNotEqualTo(string) : "Fired when the input value is different from the compare value. Sends the input value as data."
	output OnGreaterThan(string) : "Fired when the input value is greater than the compare value. Sends the input value as data."
	output OnGreaterThanOrEqualTo(string) : "Fired when the input value is greater than or equal to the compare value. Sends the input value as data."
	output OnLessThanOrEqualTo(string) : "Fired when the input value is greater than or equal to the compare value. Sends the input value as data."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/logic_console.vmt")
= logic_console: "Sends messages to the console. Not to be confused with point_clientcommand or point_servercommand."
	[
	setdevlvl(integer) : "Developer Level" : 1 : "What level developer messages should appear at."
	setmsgcolor(color255) : "Message Color" : "210 250 255 255" : "The color of standard messages."
	setwarningcolor(color255) : "Warning Color" : "255 210 210 255" : "The color of warning messages."
	setnewlinenotauto(boolean) : "Don't automatically append \n?" : 0 : "Prevents this logic_console from automatically appending a new line each time it prints."

	// Inputs
	input SendMsg(string) : "Sends a message to the console."
	input SendWarning(string) : "Sends a message to the console in red text."
	input SendDevMsg(string) : "Sends a message to the console that can only be viewed in developer mode."
	input SendDevWarning(string) : "Sends a red-colored message to the console that can only be viewed in developer mode."
	input SetDevLvl(integer) : "Sets the level developer messages should appear at."
	input SetMsgColor(color255) : "Sets the color of standard messages."
	input SetWarningColor(color255) : "Sets the color of warning messages."
	input SetNewLineNotAuto(bool) : "Enables or disables this logic_console's ability to append \n to each message."
	input NewLine(void) : "Manually sends \n."
	input DevNewLine(void) : "Manually sends \n in the specified developer level."
	input ClearConsole(void) : "Clears the console of all output."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/logic_context_accessor.vmt")
	line(255 255 255, targetname, target)
= logic_context_accessor: "A logic entity that could read an entity's response contexts. Use the target and context name keyvalues if you want to store a specific target and/or context. Use the 'Test' input to look for the context on the target. The 'OutValue' output will fire with the context's value if it is found."
	[
	target(target_destination) : "Target Entity" : : "The entity with the context to measure."
	context(string) : "Context Name" : : "The name of the context to measure."

	// Inputs
	input Test(void) : "Gets the stored context's value from stored target."
	input TestContext(string) : "Tests the specified context against the target instead of using the stored context. Does not change the stored context."
	input TestTarget(target_destination) : "Tests the specified target against the context instead of using the stored target. Does not change the stored target."
	input SetContext(string) : "Sets the context to measure."
	input SetValue(string) : "Sets the stored target's stored context value to the specified string."
	input SetTarget(target_destination) : "Sets the target entity."

	// Outputs
	output OutValue(string) : "Fires when a context is found. Passes its value."
	output OnFailed(void) : "Fires when this entity fails to find the specified context."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/logic_convar.vmt")
= logic_convar: "A powerful entity that can read the specified ConVar's value. It functions similarly to a logic_branch, except you could also output the value directly. Due to theoretical abuse, players have the option to disable logic_ConVar usage on a map. Use the 'OnDenied' output to prevent any issues from players who have disabled logic_ConVar."
	[
	setconvar(string) : "ConVar" : : "The ConVar to read. Can be serverside or clientside(?)"
	settestvalue(string) : "Compare value" : : "The value to compare with the ConVar's value during comparisons. You could use <, !=, etc. at the beginning similar to a Response System criterion."

	// Inputs
	input SetConVar(string) : "Sets the ConVar whose variable will be retrieved."
	input SetTestValue(string) : "Sets the value that will be compared with the ConVar variable during comparisons."
	input GetValue(void) : "Retrieves the ConVar's value, firing OutValue with its value."
	input Test(void) : "Compares the ConVar's value with the compare value."

	// Outputs
	output OnTrue(void) : "Fired when a comparison is true."
	output OnFalse(void) : "Fired when a comparison is false."
	output OutValue(string) : "Fired with the GetValue input. Passes the ConVar's current value."
	output OnDenied(void) : "Fires when the ConVar is requested and logic_convar is not allowed by the server."
	]

@PointClass base(BaseEntityPoint) 
	color(0 100 250)
	iconsprite("editor/logic_coop_manager.vmt")
= logic_coop_manager: "Manages two sets of values and can fire outputs based on the state of those values. Useful in coop where you can have players independently setting states on buttons, switches, etc."
	[
	defaultplayerstatea(choices) : "Default State A" : 0 : "The default state of A" =
		[
		0: "False"
		1: "True"
		]

	defaultplayerstateb(choices) : "Default State B" : 0 : "The default state of B" =
		[
		0: "False"
		1: "True"
		]


	// Inputs
	input SetStateATrue(void) : "Set A to TRUE"
	input SetStateBTrue(void) : "Set B to TRUE"
	input SetStateAFalse(void) : "Set A to FALSE"
	input SetStateBFalse(void) : "Set B to FALSE"
	input ToggleStateA(void) : "Toggle A"
	input ToggleStateB(void) : "Toggle B"

	// Outputs
	output OnChangeToAllTrue(void) : "Fires when ALL of the values change to TRUE for the first time."
	output OnChangeToAnyTrue(void) : "Fires when ANY of the values change to TRUE for the first time."
	output OnChangeToAllFalse(void) : "Fires when ALL of the values change to FALSE for the first time."
	output OnChangeToAnyFalse(void) : "Fires when ANY of the values change to FALSE for the first time."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/logic_datadesc_accessor.vmt")
	line(255 255 255, targetname, target)
= logic_datadesc_accessor: "A logic entity that could read or write any field in an entity's data description, keyvalue or not, based on its internal name. It otherwise functions identically to logic_keyfield.\n\nYou'd better know what you're doing."
	[
	target(target_destination) : "Target Entity" : : "The entity whose data description will be measured."
	keyname(string) : "Element Name" : : "The internal name (e.g. m_iName) of the field to measure. Use the ''ent_info_datatable'' command followed by an entity's class name to see all of their fields."

	// Inputs
	input Test(void) : "Gets the stored field's value from stored target."
	input TestKey(string) : "Tests the specified field against the target instead of using the stored field. Does not change the stored field."
	input TestTarget(target_destination) : "Tests the specified target against the field instead of using the stored target. Does not change the stored target."
	input SetKey(string) : "Sets the field to measure."
	input SetValue(string) : "Sets the stored target's stored field to the specified string."
	input SetTarget(target_destination) : "Sets the target entity."

	// Outputs
	output OutValue(string) : "Fires when a field is found. Passes its value."
	output OnFailed(void) : "Fires when this entity fails to find the specified field."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/logic_entity_position.vmt")
	line(255 255 255, targetname, target)
= logic_entity_position: "Outputs an entity's position. Prediction operations can be performed as well."
	[
	target(target_destination) : "Target" : : "Who's position should be measured? Use the SetTarget input to change mid-game."
	positiontype(choices) : "Position Type" : 0 : "What position should be measured." =
		[
		0: "Origin (default)"
		1: "Local Origin"
		2: "Worldspace Center"
		3: "Eyes"
		4: "Ears"
		5: "Attachment (use parameter keyvalue)"
		]

	positionparameter(string) : "Position Type Parameter" : : "If using an attachment's position, enter the name of the attachment here."

	// Inputs
	input GetPosition(void) : "Gets the target's position."
	input SetPosition(vector) : "Sets the target's position. Using the default 'Origin' will set absolute origin while using 'Local Origin' will set local origin."
	input PredictPosition(float) : "Predicts what position the target will be at in the specified number of seconds."

	// Outputs
	output OutPosition(vector) : "Outputs the position."
	output OutAngles(vector) : "Outputs the angles."
	]

@PointClass base(BaseEntityPoint) 
	color(200 0 0)
	iconsprite("editor/logic_eventlistener.vmt")
= logic_eventlistener: "An entity that can listen to events fired from code and fire an output when it happens."
	[
	eventname(string) : "Event Name" : : "The name of the event that you want to listen for."
	isenabled(boolean) : "Start Enabled" : 1
	fetcheventdata(boolean) : "Fetch Event Data" : 0 : "If set, will write the data from the event into the table 'event_data' on this entity."

	// Inputs
	input Enable(void) : "Enable the logic_eventlistener."
	input Disable(void) : "Disable the logic_eventlistener."

	// Outputs
	output OnEventFired(void) : "Fired when the event has been detected."
	]

@PointClass base(BaseEntityPoint) = logic_eventlistener_itemequip: "An entity that can listen to the item_equip event fired from code and fire and output when it happens and the weapon class or type defined, match."
	[
	weapontype(choices) : "Weapon Type" : -1 =
		[
		-1: "Don't care"
		0: "Knife"
		1: "Pistol"
		2: "Submachinegun"
		3: "Rifle"
		4: "Shotgun"
		5: "Sniper Rifle"
		6: "Machinegun"
		7: "C4"
		8: "Grenade"
		]

	weaponclassname(string) : "Weapon Classname" : : "The exact weapon class name you want to check for.  i.e. weapon_deagle, weapon_awp, weapon_knife, etc."
	isenabled(boolean) : "Start Enabled" : 1

	// Inputs
	input Enable(void) : "Enable the logic_eventlistener_itemequip."
	input Disable(void) : "Disable the logic_eventlistener_itemequip."

	// Outputs
	output OnEventFired(void) : "Fired when the event has been detected."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/logic_format.vmt")
= logic_format: "Formats a line of text akin to C# String.Format.\nAs curly brackets cannot be used in the help window, please see Mapbase documentation for clear instructions."
	[
	setinputvalue(string) : "Input Value" : : "The input value. Should contain {0}, {1}, etc, which will be replaced by the parameters and then output as OutFormattedValue."
	setparameter0(string) : "Parameter 0" : : "Will replace all instances of {0} in the input value."
	setparameter1(string) : "Parameter 1" : : "Will replace all instances of {1} in the input value."
	setparameter2(string) : "Parameter 2" : : "Will replace all instances of {2} in the input value."
	setparameter3(string) : "Parameter 3" : : "Will replace all instances of {3} in the input value."
	setparameter4(string) : "Parameter 4" : : "Will replace all instances of {4} in the input value."
	setparameter5(string) : "Parameter 5" : : "Will replace all instances of {5} in the input value."
	setparameter6(string) : "Parameter 6" : : "Will replace all instances of {6} in the input value."
	setparameter7(string) : "Parameter 7" : : "Will replace all instances of {7} in the input value."
	setbackupparameter(string) : "Backup Parameter" : : "If an invalid parameter is used (e.g. null parameter or asks for a parameter beyond {7}), then this will be used instead. Otherwise just uses '<null>'."

	// Inputs
	input GetFormattedValue(void) : "Fires OutFormattedValue, which passes the formatted input value."
	input SetInputValue(string) : "Sets the input value. Should contain {0}, {1}, etc. enclosed by curly brackets, which will be replaced by the parameters and then output as OutFormattedValue."
	input SetParameter0(string) : "Sets the text that will replace all instances of {0}."
	input SetParameter1(string) : "Sets the text that will replace all instances of {1}."
	input SetParameter2(string) : "Sets the text that will replace all instances of {2}."
	input SetParameter3(string) : "Sets the text that will replace all instances of {3}."
	input SetParameter4(string) : "Sets the text that will replace all instances of {4}."
	input SetParameter5(string) : "Sets the text that will replace all instances of {5}."
	input SetParameter6(string) : "Sets the text that will replace all instances of {6}."
	input SetParameter7(string) : "Sets the text that will replace all instances of {7}."
	input SetBackupParameter(string) : "Sets the text that will replace all invalid parameters."

	// Outputs
	output OutFormattedValue(string) : "Fired when the formatted value is requested. Outputs the formatted value."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/logic_gate.vmt")
	color(255 123 2)
= logic_gate: "A general logic gate with two inputs. Supports AND, OR, NOT, NAND, NOR, XOR, and XNOR operations, which can also be changed through inputs."
	[
	spawnflags(flags)  =
		[
		1: "[1] Spawn A enabled" : 0
		2: "[2] Spawn B enabled" : 0
		4: "[4] Output on every input (even if result doesn't change)" : 0
		]

	mode(choices) : "Compare mode" : 1 : "The current compare mode. This can be changed through the SetMode input." =
		[
		0: "AND (Both)"
		1: "OR (Either)"
		2: "NOT (Negation)"
		3: "NAND (Neither And)"
		4: "NOR (Neither Or)"
		5: "XOR (Odd)"
		6: "XNOR (Equals)"
		]


	// Inputs
	input GetValue(void) : "When triggered, the current state will be outputted as OutValue."
	input SetStateA(integer) : "Sets the A state."
	input SetStateB(integer) : "Sets the B state."
	input SetMode(integer) : "Sets the mode. 0=AND,1=OR,2=NOT,3=NAND,4=NOR,5=XOR,6=XNOR"

	// Outputs
	output OnResultTrue(void) : "Triggered when the state reaches true."
	output OnResultFalse(void) : "Triggered when the state reaches false."
	output OutValue(void) : "When this entity is triggered by GetValue, this output will be called with the current state as the parameter"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/logic_keyfield.vmt")
	line(255 255 255, targetname, target)
= logic_keyfield: "A logic entity that could read an entity's keyfields. Use the target and key name options if you want to store a specific target and/or keyvalue. Use the 'Test' input to look for the key within the target's datadesc. The 'OutValue' output will fire with the keyfield's value if it is found.\n\nPlease note that some keyvalues do not work with this entity. (most do though, so don't worry about it)"
	[
	target(target_destination) : "Target Entity" : : "The entity with the key to measure."
	keyname(string) : "Key Name" : : "The name of the key to measure."

	// Inputs
	input Test(void) : "Gets the stored key's value from stored target."
	input TestKey(string) : "Tests the specified key against the target instead of using the stored key. Does not change the stored key."
	input TestTarget(target_destination) : "Tests the specified target against the key instead of using the stored target. Does not change the stored target."
	input SetKey(string) : "Sets the key to measure."
	input SetValue(string) : "Sets the stored target's stored key value to the specified string."
	input SetTarget(target_destination) : "Sets the target entity."

	// Outputs
	output OutValue(string) : "Fires when a keyfield is found. Passes its value."
	output OnFailed(void) : "Fires when this entity fails to find the specified keyfield."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/logic_lineto")
	color(0 100 250)
	line(255 255 0, targetname, source, targetname, target)
= logic_lineto: "An entity that calculates and outputs a vector from one entity to another."
	[
	source(target_destination) : "Start entity" : : "Name of the entity the line should start from."
	target(target_destination) : "End entity" : : "Name of the entity that line should end at."

	// Outputs
	output Line(vector) : "Fired when the vector, from the start entity to the end entity, changes. Passes along the vector as a parameter."
	]

@PointClass base(BaseEntityPoint) 
	color(0 100 250)
	iconsprite("editor/logic_measure_movement.vmt")
	line(255 255 0, targetname, measureReference)
	line(255 0 255, targetname, measureTarget, targetname, measureReference)
	line(255 255 0, targetname, targetReference)
	line(255 0 255, targetname, target, targetname, TargetReference)
= logic_measure_movement: "An entity that can measure the movement of an entity relative to another entity and apply that movement to a third entity."
	[
	measuretarget(target_destination) : "Entity to Measure" : : "Entity whose movement you want to measure."
	measurereference(target_destination) : "Measure Reference" : : "The movement of Entity to Measure will be measured relative to this entity."
	target(target_destination) : "Entity to Move" : : "This entity will be moved to mimic the motions of Entity to Measure."
	targetreference(target_destination) : "Movement Reference" : : "The Entity to Move will move relative to this entity."
	targetscale(float) : "Movement scale" : 1 : "A scale to divide the measured movements by, before applying those movements to the Entity to Move. 1 = target entity moves as much as the measured entity, 2 = target entity moves half as far as the measured entity, and 0.5 = target entity moves twice as far as the measured entity."
	shouldoutputposition(boolean) : "Fire position outputs" : 0 : "Allows OutPosition and OutAngles to be fired with the resulting position while this entity is active. Does not apply to the GetPosition input."
	measuretype(choices) : "Measurement Type" : 0 =
		[
		0: "Position"
		1: "Eye position"
		2: "Attachment point"
		]

	spawnflags(flags)  =
		[
		1: "[1] Ignore X" : 0
		2: "[2] Ignore Y" : 0
		4: "[4] Ignore Z" : 0
		8: "[8] Use 'Ignore' flags for origin instead of angles" : 0
		16: "[16] Use new teleportation rules (smoother movement)" : 1
		32: "[32] Don't change target's angles" : 0
		]

	measureattachment(string) : "Measurement Attachment" : : "Only useful for the ''Attachment point'' measurement type. This attachment should be on the Entity to Measure and measurements will correspond to its position and angles."

	// Inputs
	input SetMeasureTarget(string) : "Set the Entity to Measure, whose movement should be measured."
	input SetMeasureReference(string) : "Set the Measure Reference entity."
	input Target(string) : "Set the Entity to Move, which will be moved to mimic the measured entity."
	input SetTargetReference(string) : "Set the Movement Reference entity."
	input SetTargetScale(float) : "Set the scale to divide the measured movements by."
	input SetMeasureType(integer) : "Sets the measurement type."
	input SetMeasureAttachment(string) : "Sets the measurement attachment."
	input ShouldOutputPosition(bool) : "Sets whether we are allowed to fire position outputs while this entity is active."
	input GetPosition(void) : "Initiates a single measurement with the current settings, only firing OutPosition and OutAngles without moving anything. (it doesn't need a target to be available)\nThis input ignores the 'Fire position outputs' keyvalue and instead repurposes it to modify who the outputs' activator should be.\nIf 'Fire position outputs' is enabled, the target will be used as the activator if it is available.\nIf 'Fire position outputs' is disabled, the activator that fired GetPosition will be used instead."
	input Enable(void) : "Enable the logic_measure_movement."
	input Disable(void) : "Disable the logic_measure_movement."

	// Outputs
	output OutPosition(vector) : "Outputs the resulting position when allowed."
	output OutAngles(vector) : "Outputs the resulting angles when allowed."
	]

@PointClass base(BaseEntityPoint) 
	size(-8 -8 -8, 8 8 8)
	line(255 255 255, targetname, target)
= logic_modelinfo: "Gets and outputs some model information from an entity."
	[
	target(target_destination) : "Target" : : "The entity whose model will be evaluated."
	poseparametername(string) : "Pose Parameter Name" : : "(Optional) The pose parameter to use for pose parameter-related I/O."

	// Inputs
	input SetTarget(target_destination) : "Sets this entity's target."
	input GetNumSkins(void) : "Gets the number of skins on the target entity."
	input LookupSequence(string) : "Looks up the specified sequence on the target entity."
	input LookupActivity(string) : "Looks up the specified activity on the target entity. Uses the sequence outputs and outputs the first sequence with the given activity."
	input SetPoseParameterName(string) : "Sets the pose parameter to target."
	input SetPoseParameterValue(float) : "Sets the target pose parameter's current value."
	input GetPoseParameter(void) : "Gets the current value of the target pose parameter and fires OutPoseParameterValue with it."

	// Outputs
	output OutNumSkins(integer) : "Outputs number of skins."
	output OnHasSequence(integer) : "Fires when the target has the sequence requested. Outputs the sequence's index."
	output OnLacksSequence(void) : "Fires when the target does not have the sequence requested."
	output OutPoseParameterValue(float) : "Fires when the pose parameter value is requested, outputting its current value."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/logic_multicompare.vmt")
= logic_multicompare: "Compares a set of inputs to each other. If they are all the same, fires an OnEqual output. If any are different, fires the OnNotEqual output. It is not possible to clear the memory, so this only works once."
	[
	integervalue(integer) : "Integer Value (optional)" : : "The value all inputs are compared to if ''Should use Reference Value'' is enabled."
	shouldcomparetovalue(boolean) : "Should use Integer Value" : 0 : "If enabled, all inputs are compared to the reference value. If not enabled, they are instead compared to the last input added."
	strlenallowed(boolean) : "Use string length" : 0 : "Use the length of the string in the compare value rather than its actual value."

	// Inputs
	input InputValue(integer) : "Adds a value to our set of inputs and fires CompareValues automatically, comparing existing inputs to this one if set to do so."
	input CompareValues(void) : "Compares the values and fires appropriate outputs."

	// Outputs
	output OnEqual(void) : "Fires if all of the values are equal."
	output OnNotEqual(void) : "Fires if any of the values are not equal."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/logic_navigation")
	line(128 128 128, targetname, target)
= logic_navigation: "An entity that is used to set navigation properties on other entities. Useful to make NPCs ignore physics props in their way that they can easily push."
	[
	target(target_destination) : "Navigation Entity" : : "Name of the entity to set navigation properties on."
	spawnflags(flags)  =
		[
		1: "[1] Start On" : 1
		]

	navprop(string) : "Nav Property" : "Ignore" : "The only valid property is to ignore this entity, so NPCs will bump into it."

	// Inputs
	input TurnOn(void) : "Turn on. The Navigation Entity will have its navigation properties set."
	input TurnOff(void) : "Turn off. The Navigation Entity will have its navigation properties returned to the default settings."
	input Toggle(void) : "Toggle on/off."
	]

@PointClass base(BaseEntityPoint, DamageFilter) 
	color(200 0 0)
	iconsprite("editor/logic_playerproxy.vmt")
= logic_playerproxy: "An entity that is used to relay inputs/outputs to the player and back to the world."
	[

	// Inputs
	input AddPotatosToPortalgun(void) : "Change portalgun bodygroup to show potatos."
	input RemovePotatosFromPortalgun(void) : "Change portalgun bodygroup to not show potatos."
	input SetDropEnabled(bool) : "Set wether the player is allowed to drop a carried object."
	input ForceVMGrabController(void) : "Force the player to use the view model grab controller for all objects that are picked up."
	input ForcePhysicsGrabController(void) : "Force the player to use the physics grab controller for all objects that are picked up."
	input ResetGrabControllerBehavior(void) : "Resets the grab controller used by the player to its default behavior."
	input SetMotionBlurAmount(float) : "Forces the motion blur effect on the player. Set to < 0 to disable this override."
	input GivePortalGunFull(void) : "Gives the player a portal gun with both colors. (Overrides if player is already holding one)"
	input GivePortalGunPrimary(void) : "Gives the player a portal gun with primary color. (Overrides if player is already holding one)"
	input GivePortalGunSecondary(void) : "Gives the player a portal gun with only secondary color. (Overrides if player is already holding one)"
	input GivePortalGunNone(void) : "Gives the player a portal gun with no activated colors. (Overrides if player is already holding one)"
	input GiveBoots(void) : "Gives the player long fall boots."
	input RemoveBoots(void) : "Removes long fall boots from the player, if they have them."
	input GivePaintGunFull(void) : "Gives the player a fully upgraded paint gun."
	input GivePaintGunBasic(void) : "Gives the player a non-upgraded paint gun."
	input RemovePortalGun(void) : "Removes the portal gun from the player, if they have it."
	input RemovePaintGun(void) : "Removes the paint gun from the player, if they have it."
	input SetFallDamageEnabled(bool) : "Whether or not fall damage is enabled"

	// Outputs
	output PlayerDied(void) : "Fires when the player dies."
	output OnStartSlowingTime(void) : "Fired when a Portal player initiates slow time."
	output OnStopSlowingTime(void) : "Fired when a Portal player stops slowing time."
	output OnDuck(void) : "Fired when a player starts to duck."
	output OnUnDuck(void) : "Fired when a player releases the duck button."
	output OnJump(void) : "Fired when a player jumps."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/logic_playmovie")
= logic_playmovie: "Plays a movie and allows for various playback options"
	[
	moviefilename(string) : "Movie to display" : : "The movie to display from the media/ folder. The BIK file extension must be included."
	allowskip(boolean) : "Allow User to Skip" : 0 : "Whether or not the user may skip the video with common keys"
	loopvideo(boolean) : "Loop Video" : 0 : "If set to true, the movie will loop forever"
	fadeintime(float) : "Fade In Time" : 0 : "Time it takes for the video to fade in"

	// Inputs
	input PlayMovie(void) : "Play the movie."
	input PlayLevelTransitionMovie(string) : "Plays a movie with specific settings used for level transitions.  Pass the name of the movie in the parameters.  To be fired at the end of a level."
	input FadeAllMovies(void) : "Fade movies out for all players connected."

	// Outputs
	output OnPlaybackFinished(void) : "Fired when the movie has completed playing back or was skipped by the user."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/logic_random_outputs.vmt")
	color(0 100 250)
= logic_random_outputs: "A message forwarder. Fires up to eight separate outputs, each with a different chance of firing."
	[
	spawnflags(flags)  =
		[
		1: "[1] Only trigger once" : 0
		2: "[2] Allow fast retrigger" : 0
		]

	ontriggerchance1(float) : "OnTrigger1 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger1 output firing when this entity is triggered."
	ontriggerchance2(float) : "OnTrigger2 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger2 output firing when this entity is triggered."
	ontriggerchance3(float) : "OnTrigger3 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger3 output firing when this entity is triggered."
	ontriggerchance4(float) : "OnTrigger4 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger4 output firing when this entity is triggered."
	ontriggerchance5(float) : "OnTrigger5 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger5 output firing when this entity is triggered."
	ontriggerchance6(float) : "OnTrigger6 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger6 output firing when this entity is triggered."
	ontriggerchance7(float) : "OnTrigger7 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger7 output firing when this entity is triggered."
	ontriggerchance8(float) : "OnTrigger8 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger8 output firing when this entity is triggered."

	// Inputs
	input Trigger(void) : "Trigger this entity, causing its OnTrigger outputs to fire if it is enabled."
	input Toggle(void) : "Toggle this entity between enabled and disabled."
	input EnableRefire(void) : "Allow this relay to trigger again quickly, if fast retrigger is disabled."

	// Outputs
	output OnSpawn(void) : "Fired when this entity is spawned. If this entity is set to only trigger once, it will delete itself after firing this output."
	output OnTrigger1(void) : "This output has a chance to fire when the entity is triggered."
	output OnTrigger2(void) : "This output has a chance to fire when the entity is triggered."
	output OnTrigger3(void) : "This output has a chance to fire when the entity is triggered."
	output OnTrigger4(void) : "This output has a chance to fire when the entity is triggered."
	output OnTrigger5(void) : "This output has a chance to fire when the entity is triggered."
	output OnTrigger6(void) : "This output has a chance to fire when the entity is triggered."
	output OnTrigger7(void) : "This output has a chance to fire when the entity is triggered."
	output OnTrigger8(void) : "This output has a chance to fire when the entity is triggered."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	color(0 100 250)
	iconsprite("editor/logic_register_activator")
= logic_register_activator: "Stores an entity and sends messages with it as the activator\nUseful for keeping track of entities with mangled names due to template spawners and instances."
	[

	// Inputs
	input Toggle(void) : "Toggle between enabled and disabled."
	input FireRegisteredAsActivator1(void) : "Trigger the OnRegisteredActivate1 output, with the activator being registered entity."
	input FireRegisteredAsActivator2(void) : "Trigger the OnRegisteredActivate2 output, with the activator being registered entity."
	input FireRegisteredAsActivator3(void) : "Trigger the OnRegisteredActivate3 output, with the activator being registered entity."
	input FireRegisteredAsActivator4(void) : "Trigger the OnRegisteredActivate4 output, with the activator being registered entity."
	input RegisterEntity(target_destination) : "Stores an entity to later be used as an activator."

	// Outputs
	output OnRegisteredActivate1(void) : "Fired to send a message using the registered entity as the activator."
	output OnRegisteredActivate2(void) : "Fired to send a message using the registered entity as the activator."
	output OnRegisteredActivate3(void) : "Fired to send a message using the registered entity as the activator."
	output OnRegisteredActivate4(void) : "Fired to send a message using the registered entity as the activator."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/logic_relay.vmt")
	color(0 100 250)
= logic_relay: "A message forwarder. Fires an OnTrigger output when triggered, and can be disabled to prevent forwarding outputs.\n\nUseful as an intermediary between one entity and another for turning on or off an I/O connection, or as a container for holding a set of outputs that can be triggered from multiple places."
	[
	spawnflags(flags)  =
		[
		1: "[1] Only trigger once" : 0
		2: "[2] Allow fast retrigger" : 0
		]


	// Inputs
	input Trigger(void) : "Trigger the relay, causing its OnTrigger output to fire if it is enabled."
	input TriggerWithParameter(string) : "Triggers the relay with a parameter, causing its OnTriggerParameter output to fire if it is enabled."
	input Toggle(void) : "Toggle the relay between enabled and disabled."
	input EnableRefire(void) : "Allow this relay to trigger again quickly, if fast retrigger is disabled. This input allows the relay to fire again early if it is in this state.This is automatically triggered 0.01s after the last OnTrigger output."

	// Outputs
	output OnSpawn(void) : "Fired when the relay is spawned. If the relay is set to only trigger once, it will delete itself after firing this output."
	output OnTrigger(void) : "Fired when the relay is triggered. If the relay is set to only trigger once, it will delete itself after firing this output."
	output OnTriggerParameter(string) : "Fired when the relay is triggered with a parameter. If the relay is set to only trigger once, it will delete itself after firing this output."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/logic_relay_queue.vmt")
= logic_relay_queue: "A special variant of logic_relay designed to queue trigger inputs. If the relay is still handling its I/O connections after being triggered, additional Trigger inputs will be queued and automatically fire when the relay is able to be re-fired. Activator, output ID, and parameter are all kept and saved. Inputs are added to the queue each time Trigger or TriggerWithParameter are received while the relay is disabled or still handling its current I/O connections. The first one in the queue will trigger the moment an opportunity becomes available and the next one in the queue will wait for that one.\n\nThis is useful for when you don't want something to happen multiple times at once, but don't want to discard further requests either."
	[
	setmaxqueueitems(integer) : "Maximum Items" : 3 : "The maximum number of Trigger and TriggerWithParameter inputs allowed in the queue. Any others received while this value is full will be discarded. Keep in mind this does not count the I/O chain currently being handled."
	dontqueuewhendisabled(boolean) : "Don't queue when disabled" : 0 : "Prevents the relay from queuing inputs when disabled. This means inputs will only be queued when enabled and still handling its current I/O connections."
	spawnflags(flags)  =
		[
		1: "[1] Only trigger once" : 0
		2: "[2] Allow fast retrigger" : 0
		]


	// Inputs
	input Trigger(void) : "Triggers the relay, causing its OnTrigger output to fire if it is enabled."
	input TriggerWithParameter(string) : "Triggers the relay with a parameter, causing its OnTriggerParameter output to fire if it is enabled."
	input Toggle(void) : "Toggle the relay between enabled and disabled."
	input EnableRefire(void) : "If fast retrigger is disabled, the relay will not be able to fire again until its most delayed output has been fired. This input allows the relay to fire again early if it is in this state.This is automatically triggered 0.01s after the last OnTrigger output."
	input ClearQueue(void) : "Clears the input queue."
	input SetMaxQueueItems(integer) : "Sets the maximum queue items."

	// Outputs
	output OnTrigger(void) : "Fired when the relay is triggered."
	output OnTriggerParameter(string) : "Fired when the relay is triggered with a parameter."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/logic_scene_list_manager.vmt")
	color(240 180 250)
	line(240 180 250, targetname, scene0)
	line(240 180 250, targetname, scene1)
	line(240 180 250, targetname, scene2)
	line(240 180 250, targetname, scene3)
	line(240 180 250, targetname, scene4)
	line(240 180 250, targetname, scene5)
	line(240 180 250, targetname, scene6)
	line(240 180 250, targetname, scene7)
	line(240 180 250, targetname, scene8)
	line(240 180 250, targetname, scene9)
	line(240 180 250, targetname, scene10)
	line(240 180 250, targetname, scene11)
	line(240 180 250, targetname, scene12)
	line(240 180 250, targetname, scene13)
	line(240 180 250, targetname, scene14)
	line(240 180 250, targetname, scene15)
= logic_scene_list_manager: "Manages a list of logic_choreographed_scene entities. Store choreo scenes in them in order that they will be played by other inputs. Whenever a scene plays, the manager will remove all scenes before that one in the list. The name of another logic_scene_list_manager can be entered in a slot instead of an invididual scene, which will cause all scenes in that manager to be removed when a later scene in this list is played."
	[
	scene0(target_destination) : "Scene 1" : : "The name of a logic_choreographed_scene, or logic_scene_list_manager."
	scene1(target_destination) : "Scene 2" : : "The name of a logic_choreographed_scene, or logic_scene_list_manager."
	scene2(target_destination) : "Scene 3" : : "The name of a logic_choreographed_scene, or logic_scene_list_manager."
	scene3(target_destination) : "Scene 4" : : "The name of a logic_choreographed_scene, or logic_scene_list_manager."
	scene4(target_destination) : "Scene 5" : : "The name of a logic_choreographed_scene, or logic_scene_list_manager."
	scene5(target_destination) : "Scene 6" : : "The name of a logic_choreographed_scene, or logic_scene_list_manager."
	scene6(target_destination) : "Scene 7" : : "The name of a logic_choreographed_scene, or logic_scene_list_manager."
	scene7(target_destination) : "Scene 8" : : "The name of a logic_choreographed_scene, or logic_scene_list_manager."
	scene8(target_destination) : "Scene 9" : : "The name of a logic_choreographed_scene, or logic_scene_list_manager."
	scene9(target_destination) : "Scene 10" : : "The name of a logic_choreographed_scene, or logic_scene_list_manager."
	scene10(target_destination) : "Scene 11" : : "The name of a logic_choreographed_scene, or logic_scene_list_manager."
	scene11(target_destination) : "Scene 12" : : "The name of a logic_choreographed_scene, or logic_scene_list_manager."
	scene12(target_destination) : "Scene 13" : : "The name of a logic_choreographed_scene, or logic_scene_list_manager."
	scene13(target_destination) : "Scene 14" : : "The name of a logic_choreographed_scene, or logic_scene_list_manager."
	scene14(target_destination) : "Scene 15" : : "The name of a logic_choreographed_scene, or logic_scene_list_manager."
	scene15(target_destination) : "Scene 16" : : "The name of a logic_choreographed_scene, or logic_scene_list_manager."

	// Inputs
	input Shutdown(void) : "Remove the manager and all scenes referenced by it (and all scenes referenced by logic_scene_list_manager's embedded in this one)."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/logic_script.vmt")
	color(200 200 200)
	line(200 200 200, targetname, group00)
	line(200 200 200, targetname, group08)
	line(200 200 200, targetname, group01)
	line(200 200 200, targetname, group09)
	line(200 200 200, targetname, group02)
	line(200 200 200, targetname, group10)
	line(200 200 200, targetname, group03)
	line(200 200 200, targetname, group11)
	line(200 200 200, targetname, group04)
	line(200 200 200, targetname, group12)
	line(200 200 200, targetname, group05)
	line(200 200 200, targetname, group13)
	line(200 200 200, targetname, group06)
	line(200 200 200, targetname, group14)
	line(200 200 200, targetname, group07)
	line(200 200 200, targetname, group15)
= logic_script: "An entity that acts as a container for scripts."
	[
	group00(target_destination) : "EntityGroup[0]"
	group01(target_destination) : "EntityGroup[1]"
	group02(target_destination) : "EntityGroup[2]"
	group03(target_destination) : "EntityGroup[3]"
	group04(target_destination) : "EntityGroup[4]"
	group05(target_destination) : "EntityGroup[5]"
	group06(target_destination) : "EntityGroup[6]"
	group07(target_destination) : "EntityGroup[7]"
	group08(target_destination) : "EntityGroup[8]"
	group09(target_destination) : "EntityGroup[9]"
	group10(target_destination) : "EntityGroup[10]"
	group11(target_destination) : "EntityGroup[11]"
	group12(target_destination) : "EntityGroup[12]"
	group13(target_destination) : "EntityGroup[13]"
	group14(target_destination) : "EntityGroup[14]"
	group15(target_destination) : "EntityGroup[15]"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/logic_sequence.vmt")
= logic_sequence: "Coordinates a sequence out of up to 16 preset values. If the input value matches the sequence's current case value, an output is fired and (by default) the sequence increments to the next case.\n\nThis is intended for things like passwords in keypads, which usually demand a specific combination of numbers."
	[
	initialcase(integer) : "Initial Case" : 1 : "Which case to start on, meaning inputs will initially compare with this case. Uses the case's index. (e.g. 4 for Case 04)"
	startdisabled(boolean) : "Start Disabled" : 0 : "If this entity is disabled, it will not accept any case tests. It will still accept other inputs, like SetSequenceIndex."
	case01(string) : "Case 01"
	case02(string) : "Case 02"
	case03(string) : "Case 03"
	case04(string) : "Case 04"
	case05(string) : "Case 05"
	case06(string) : "Case 06"
	case07(string) : "Case 07"
	case08(string) : "Case 08"
	case09(string) : "Case 09"
	case10(string) : "Case 10"
	case11(string) : "Case 11"
	case12(string) : "Case 12"
	case13(string) : "Case 13"
	case14(string) : "Case 14"
	case15(string) : "Case 15"
	case16(string) : "Case 16"
	dontincrementonpass(boolean) : "Suppress auto increment" : 0 : "Prevents automatically incrementing the sequence each time a case passes."

	// Inputs
	input Enable(void) : "Enables this entity."
	input Disable(void) : "Disables this entity."
	input Toggle(void) : "Toggles whether this entity is disabled."
	input InValue(string) : "Tests the input value against the current case."
	input SetCurrentCase(integer) : "Sets the sequence's current case. This will fire OutCurCase."
	input SetCurrentCaseNoFire(integer) : "Sets the sequence's current case without firing OutCurCase."
	input IncrementSequence(integer) : "Increments the current case by the specified number. (1 if blank)"
	input ResetSequence(void) : "Resets the sequence to Case 01."

	// Outputs
	output OutCurCase(integer) : "Fires each time the sequence's current case value changes, e.g. when it's incremented by a passing case."
	output OnCasePass(string) : "Fires when a case is matched, passing the input value."
	output OnCaseFail(string) : "Fires when a case fails, passing the input value."
	output OnSequenceComplete(string) : "Fires when the last case is matched and sequence is complete."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/logic_timer.vmt")
	color(0 100 250)
= logic_timer: "An entity that fires a timer event at regular, or random, intervals. It can also be set to oscillate between a high and low end, in which case it will fire alternating high/low outputs each time it fires."
	[
	spawnflags(flags)  =
		[
		1: "[1] Oscillator (alternates between OnTimerHigh and OnTimerLow outputs)" : 0
		]

	userandomtime(boolean) : "Use Random Time" : 0
	lowerrandombound(string) : "Minimum Random Interval" : : "If 'Use Random Time' is set, this is the minimum time between timer fires. The time will be a random number between this and the 'Maximum Random Interval'."
	upperrandombound(string) : "Maximum Random Interval" : : "If 'Use Random Time' is set, this is the maximum time between timer fires. The time will be a random number between the 'Minimum Random Interval' and this."
	refiretime(string) : "Refire Interval" : : "If 'Use Random Time' isn't set, this is the time between timer fires, in seconds."

	// Inputs
	input RefireTime(integer) : "Set a new Refire Interval."
	input ResetTimer(void) : "Reset the timer. It will fire after the Refire Interval expires."
	input FireTimer(void) : "Force the timer to fire immediately."
	input Enable(void) : "Enable the timer."
	input Disable(void) : "Disable the timer."
	input Toggle(void) : "Toggle the timer on/off."
	input LowerRandomBound(float) : "Set a new Minimum Random Interval."
	input UpperRandomBound(float) : "Set a new Maximum Random Interval."
	input AddToTimer(float) : "Add time to the timer if it is currently enabled.  Does not change the Refire Interval."
	input SubtractFromTimer(float) : "Subtract time from the timer if it is currently enabled.  Does not change the Refire Interval."
	input UseRandomTime(integer) : "0 or 1, whether random time is enabled. If random time starts enabled and gets disabled here, the refire interval is set to the Maximum Random Interval."

	// Outputs
	output OnTimer(void) : "Fired when the timer expires."
	output OnTimerHigh(void) : "Fired every other time for an oscillating timer."
	output OnTimerLow(void) : "Fired every other time for an oscillating timer."
	]

@PointClass base(BaseEntityPoint) 
	color(0 100 250)
	iconsprite("editor/logic_timescale.vmt")
= logic_timescale: "Changes the server's timescale."
	[
	blendtime(float) : "Blend Time" : 0 : "The amount of time it takes to ramp to the desired timescale when triggered."

	// Inputs
	input SetDesiredTimescale(float) : "Sets the desired timescale and starts slowing time (will blend to desired using the specified blend time)."
	input SetTimescaleBlendTime(float) : "Set the amount of time that it takes to ramp to the desired timescale when triggered."
	]

@PointClass base(BaseEntityPoint) 
	color(0 100 250)
	line(255 255 0, targetname, parentname)
	iconsprite("editor/ficool2/material_modify_control.vmt")
= material_modify_control: "An entity that can be used to directly control material vars. To use it, you need to add the MaterialModify or MaterialModifyAnimated proxy to the material you intend to change. Parent this entity the entity who's material you want to control. If not parented, this applies to all materials in the map with the given name."
	[
	materialname(string) : "Material to modify."
	materialvar(string) : "Material variable to modify."

	// Inputs
	input SetMaterialVar(string) : "Fire to modify a material variable. The argument is the value to set the variable to."
	input SetMaterialVarToCurrentTime(void) : "This sets the material variable to the current time on the server."
	input StartAnimSequence(string) : "Force an animated material with the MaterialModifyAnimated proxy to play a set of animation frames. Format is: <Frame Start> <Frame End> <Frame Rate> <Loop>. Setting <Frame End> to -1 uses the last frame of the texture. <Loop> should be 1 or 0."
	input StartFloatLerp(string) : "Force a material with the MaterialModify proxy to lerp a material var between two floating point values. Format is: <Start Value> <End Value> <Transition Time> <Loop>. <Loop> should be 1 or 0."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/math_bits.vmt")
= math_bits: "A math_counter variant that specializes in bitwise operations."
	[
	startvalue(integer) : "Initial Value" : 0 : "The bits this entity should start with."

	// Inputs
	input Add(integer) : "Adds bit(s) to this entity's value and fires the OutValue output with the result."
	input Subtract(integer) : "Subtracts bit(s) to this entity's value and fires the OutValue output with the result."
	input ShiftLeft(integer) : "Shifts this entity's value to the left by the specified number and fires the OutValue output with the result."
	input ShiftRight(integer) : "Shifts this entity's value to the right by the specified number and fires the OutValue output with the result."
	input SetValue(integer) : "Changes this entity's value and fires the OutValue output with the result."
	input SetValueNoFire(integer) : "Changes this entity's value without firing any outputs."
	input GetValue(void) : "Causes this entity to fire its OnGetValue output with its current bits. Used for polling the current bits when you don't want constant updates from the OutValue output."
	input ContainsBits(integer) : "Tests whether this entity's current value contains at least one of the specified bit(s)."
	input ContainsAllBits(integer) : "Tests whether this entity's current value contains all of the specified bit(s)."

	// Outputs
	output OutValue(integer) : "Fired when the value changes."
	output OnGetValue(integer) : "Fired in response to the GetValue input. Used for polling the current bits when you don't want constant updates from the OutValue output."
	output OnTrue(void) : "Fired by ContainsBits when the current value contains the specified bit."
	output OnFalse(void) : "Fired by ContainsBits when the current value does not contain the specified bit."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/math_calculator.vmt")
	color(255 123 2)
= math_calculator: "An algebra calculation entity similar to logic_gate, but instead accepting float numbers and doing arithmetic calculations."
	[
	spawnflags(flags)  =
		[
		4: "[4] Output on every input (even if result doesn't change)" : 0
		]

	mode(choices) : "Compare mode" : 1 : "The current compare mode. This can be changed through the SetMode input." =
		[
		16: "Add"
		17: "Subtract"
		18: "Multiply"
		19: "Divide"
		20: "Modulo"
		21: "Power"
		23: "Min"
		24: "Max"
		32: "Square Root"
		33: "Absolute"
		]


	// Inputs
	input GetValueInt(void) : "When triggered, the result will be outputted to OutValue as a whole number."
	input GetValueFloat(void) : "When triggered, the result will be outputted to OutValue as a floating point number."
	input SetValueA(integer) : "Sets the A value."
	input SetValueB(integer) : "Sets the B value."
	input SetMode(integer) : "Sets the mode."

	// Outputs
	output OnResult(float) : "Triggered when the value changes."
	output OutValue(void) : "When this entity is triggered by GetValue, this output will be called with the result as the parameter"
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/math_clamp.vmt")
= math_clamp: "Clamps a value between two values. Supports integers, floats, and vectors."
	[
	setmax(string) : "Max" : : "The maximum value. Can be an integer, a float, or a vector."
	setmin(string) : "Min" : : "The minimum value. Can be an integer, a float, or a vector."

	// Inputs
	input ClampValue(string) : "Clamps the specified value. Can be an integer, a float, or a vector."
	input SetMax(string) : "Sets the max value. Can be an integer, a float, or a vector."
	input SetMin(string) : "Sets the max value. Can be an integer, a float, or a vector."

	// Outputs
	output OutValue(string) : "Outputs the clamped value."
	output OnBeforeMin(string) : "Fires when a clamped value was before the minimum value. Outputs the clamped value."
	output OnBeyondMax(string) : "Fires when a clamped value was beyond the maximum value. Outputs the clamped value."
	]

@PointClass base(BaseEntityPoint) 
	color(0 100 250)
	iconsprite("editor/math_colorblend.vmt")
= math_colorblend: "Used to create a blend between two colors for controlling the color of another entity."
	[
	spawnflags(flags)  =
		[
		1: "[1] Ignore out of range input values" : 1
		]

	inmin(integer) : "Minimum Valid Input Value" : 0 : "Input values below this value will be ignored."
	inmax(integer) : "Maximum Valid Input Value" : 1 : "Input values above this value will be ignored."
	colormin(color255) : "Output RGB color when input is min." : "0 0 0" : "When the input value is equal to 'Minimum Valid Input Value', this is the output RGB color."
	colormax(color255) : "Output RGB color when input is max." : "255 255 255" : "When the input value is equal to 'Maximum Valid Input Value', this is the output RGB color."

	// Inputs
	input InValue(float) : "Input a value and fire the output with the remapped value."

	// Outputs
	output OutColor(color255) : "Fired when the InValue input is received, with the remapped RGB color as the parameter."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/math_counter.vmt")
	color(0 100 250)
= math_counter: "Holds a numeric value and performs arithmetic operations upon it. If either the minimum or maximum legal value is nonzero, OutValue will be clamped to the legal range, and the OnHitMin/OnHitMax outputs will be fired at the appropriate times. If both min and max are set to zero, no clamping is performed and only the OutValue output will be fired."
	[
	startvalue(float) : "Initial Value" : 0 : "Starting value for the counter."
	min(float) : "Minimum Legal Value" : 0 : "Minimum legal value for the counter. If min=0 and max=0, no clamping is performed."
	max(float) : "Maximum Legal Value" : 0 : "Maximum legal value for the counter. If min=0 and max=0, no clamping is performed."

	// Inputs
	input Add(float) : "Add an amount to the counter and fire the OutValue output with the result."
	input Divide(float) : "Divide the counter by an amount and fire the OutValue output with the result."
	input Multiply(float) : "Multiply the counter by an amount and fire the OutValue output with the result."
	input SetValue(float) : "Set the counter to a new value and fire the OutValue output with the result."
	input SetValueNoFire(float) : "Set the counter to a new value without firing any outputs."
	input Subtract(float) : "Subtract an amount from the counter and fire the OutValue output with the result."
	input SetHitMax(float) : "Set the upper bound of the counter and fire the OutValue output with the current value."
	input SetHitMin(float) : "Set the lower bound of the counter and fire the OutValue output with the current value."
	input GetValue(void) : "Causes the counter fire its OnGetValue output with the current value of the counter. Used for polling the counter when you don't want constant updates from the OutValue output."
	input SetMaxValueNoFire(float) : "Set the upper bound of the counter without firing any outputs."
	input SetMinValueNoFire(float) : "Set the lower bound of the counter without firing any outputs."

	// Outputs
	output OutValue(float) : "Fired when the counter value changes."
	output OnHitMin(void) : "Fired when the counter value meets or goes below the min value. The counter must go back above the min value before the output will fire again."
	output OnHitMax(void) : "Fired when the counter value meets or exceeds the max value. The counter must go below the max value before the output will fire again."
	output OnGetValue(float) : "Fired in response to the GetValue input. Used for polling the counter when you don't want constant updates from the OutValue output."
	output OnChangedFromMin(void) : "Fired when the counter value changes from the minimum value."
	output OnChangedFromMax(void) : "Fired when the counter value changes from the max value."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/math_generate.vmt")
= math_generate: "Continuously generates numbers using various generation modes based on material proxies."
	[
	startdisabled(boolean) : "Start Disabled" : 1
	generatetype(choices) : "Generation Type" : 1 =
		[
		0: "Sine Wave (param 1 = time offset, param 2 = sine period)"
		1: "Linear Ramp (param 1 = rate)"
		2: "Uniform Noise"
		3: "Gaussian Noise (param 1 = mean, param 2 = half width)"
		4: "Exponential (param 1 = scale, param 2 = offset)"
		]

	initialvalue(float) : "Initial Value" : 0 : "Starting value for the math_generate."
	sethitmin(float) : "Minimum Legal Value" : 0 : "Minimum legal value for generation."
	sethitmax(float) : "Maximum Legal Value" : 1 : "Maximum legal value for generation."
	setparam1(float) : "Parameter 1" : 0 : "Multi-purpose parameter #1 for the generation algorithms to use for their own needs."
	setparam2(float) : "Parameter 2" : 0 : "Multi-purpose parameter #2 for the generation algorithms to use for their own needs."

	// Inputs
	input SetValue(float) : "Sets the math_generate to a new value and fires the OutValue output with the result, performing all generation from that value."
	input SetValueNoFire(float) : "Sets the math_generate to a new value without firing any outputs."
	input GetValue(void) : "Causes the math_generate to fire its OnGetValue output with the current value. Used for polling the value when you don't want constant updates from the OutValue output."
	input SetGenerateType(integer) : "Sets the type of generation this math_generate should perform."
	input Enable(void) : "Enables this entity."
	input Disable(void) : "Disables this entity."
	input Toggle(void) : "Toggles whether this entity is disabled."
	input SetHitMin(float) : "Set minimum legal value for generation"
	input SetHitMax(float) : "Set maximum legal value for generation"
	input SetParam1(float) : "Set the value for parameter one"
	input SetParam2(float) : "Set the value for parameter two"

	// Outputs
	output OutValue(string) : "Fires each tick while generation is active, passing the value continuously generated by the math_generate."
	output OnHitMin(void) : "Fired when generation meets the min value. Generation must go back above the min value before the output will fire again."
	output OnHitMax(void) : "Fired when generation meets the max value. Generation must go below the max value before the output will fire again."
	output OnGetValue(float) : "Fired in response to the GetValue input. Used for polling the value when you don't want constant updates from the OutValue output."
	output OnChangedFromMin(void) : "Fired when the current generation value changes from the minimum value."
	output OnChangedFromMax(void) : "Fired when the current generation value changes from the maximum value."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/math_lightpattern.vmt")
= math_lightpattern: "A logic entity that attempts to replicate light patterns that can be used on named lights.\n\nWARNING: This is currently out of sync with default light patterns. TODO: Fix that!"
	[
	style(choices) : "Appearance" : : "Which preset pattern to use." =
		[
		"": "None"
		0: "Normal"
		10: "Fluorescent flicker"
		2: "Slow, strong pulse"
		11: "Slow pulse, noblack"
		5: "Gentle pulse"
		1: "Flicker A"
		6: "Flicker B"
		3: "Candle A"
		7: "Candle B"
		8: "Candle C"
		4: "Fast strobe"
		9: "Slow strobe"
		]

	pattern(string) : "Custom Appearance" : : "A custom pattern to use. a = fully dark, z = fully bright. This should always contain lowercase letters for light patterns. Uppercase letters or other types of characters won't work with actual light patterns. (although they shouldn't break the whole entity either)"
	patternspeed(float) : "Pattern Speed" : "0.1" : "The speed of the pattern."

	// Inputs
	input SetStyle(integer) : "Sets the pattern from the style presets."
	input SetPattern(string) : "Sets the pattern directly."
	input Enable(void) : "Enables this entity."
	input Disable(void) : "Disables this entity."
	input Toggle(void) : "Toggles this entity."

	// Outputs
	output OutValue(float) : "Outputs with a brightness equivalent to the current letter."
	output OutLetter(string) : "Outputs with the current letter itself."
	output OnLightOn(void) : "Fires when the current letter is equivalent to 'on' (greater than a)."
	output OnLightOff(void) : "Fires when the current letter is equivalent to 'off' (equal to a)."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/math_mod.vmt")
= math_mod: "A lightweight entity that performs simple calculations on the fly without needing a complicated I/O chain. This is useful for values that are outputted on a per-frame basis and might not work with a math_counter chain."
	[
	startvalue(string) : "Mod Value" : 0 : "The value that is applied to input values."
	setoperator(choices) : "Operator" : 43 : "What calculation to perform with the mod value. (input value _ mod value)" =
		[
		43: "Addition"
		45: "Subtraction"
		42: "Multiplication"
		47: "Division"
		]


	// Inputs
	input SetMod(string) : "Sets the mod value."
	input ModInt(integer) : "Applies modification to the specified integer."
	input ModFloat(float) : "Applies modification to the specified float."
	input ModVector(vector) : "Applies modification to the specified vector."
	input SetOperator(string) : "Sets the operator. Use +, -, *, or / to choose addition, subtraction, multiplication, or division respectively."

	// Outputs
	output OutInt(integer) : "Outputs the modified integer."
	output OutFloat(float) : "Outputs the modified float."
	output OutVector(vector) : "Outputs the modified vector."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	color(0 100 250)
	iconsprite("editor/math_remap.vmt")
= math_remap: "An entity that remaps a range of input values to a given range of output values."
	[
	spawnflags(flags)  =
		[
		1: "[1] Ignore out of range input values" : 1
		2: "[2] Clamp output to output range" : 0
		]

	in1(integer) : "Minimum Valid Input Value" : 0 : "Input values below this value will be ignored."
	in2(integer) : "Maximum Valid Input Value" : 1 : "Input values above this value will be ignored."
	out1(integer) : "Output Value When Input Is Min." : : "When the input value is equal to 'Minimum Valid Input Value', this is the output value."
	out2(integer) : "Output Value When Input Is Max." : : "When the input value is equal to 'Maximum Valid Input Value', this is the output value."

	// Inputs
	input InValue(float) : "Input a value and fire the output with the remapped value."

	// Outputs
	output OutValue(float) : "Fired when the InValue input is received, with the remapped input value as the parameter."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/math_vector.vmt")
= math_vector: "A math_counter variant that specializes in vector operations."
	[
	startvalue(vector) : "Initial Value" : "0 0 0" : "The vector this entity shuold start with."
	spawnflags(flags)  =
		[
		1: "[1] Disable X" : 0
		2: "[2] Disable Y" : 0
		4: "[4] Disable Z" : 0
		]


	// Inputs
	input Add(vector) : "Adds a vector to this entity's current value and fires the OutValue output with the result."
	input Divide(vector) : "Divides a vector from this entity's current value and fire the OutValue output with the result."
	input Multiply(vector) : "Multiplies a vector from this entity's current value and fires the OutValue output with the result."
	input SetValue(vector) : "Sets this entity's current vector to a new value and fires the OutValue output with the result."
	input SetValueNoFire(vector) : "Sets this entity's current vector to a new value without firing any outputs."
	input Subtract(vector) : "Subtracts a vector from this entity's current value and fires the OutValue output with the result."
	input GetValue(void) : "Causes this entity to fire its OnGetValue output with its current vector. Used for polling the counter when you don't want constant updates from the OutValue output."
	input PointAtLocation(vector) : "Creates an angle pointing from the entity's current vector to the specified point and fires the OutValue output with the result."
	input PointAtEntity(target_destination) : "Creates an angle pointing from the entity's current vector to the specified entity and fires the OutValue output with the result."
	input VectorAngles(void) : "Converts this entity's vector to an angle, assuming the current vector is a direction vector. Fires the OutValue output with the result."
	input AngleVectorForward(void) : "Converts this entity's vector angles to a vector in the forward direction. Fires the OutValue output with the result."
	input AngleVectorRight(void) : "Converts this entity's vector angles to a vector in the right direction. Fires the OutValue output with the result."
	input AngleVectorUp(void) : "Converts this entity's vector angles to a vector in the up direction. Fires the OutValue output with the result."
	input Normalize(void) : "Normalizes this entity's vector and fires the OutValue output with the result."
	input NormalizeAngles(void) : "Normalizes this entity's vector as angles and fires the OutValue output with the result."
	input SetX(float) : "Sets this entity's X coordinate."
	input SetY(float) : "Sets this entity's Y coordinate."
	input SetZ(float) : "Sets this entity's Z coordinate."
	input GetX(void) : "Gets this entity's X coordinate."
	input GetY(void) : "Gets this entity's Y coordinate."
	input GetZ(void) : "Gets this entity's Z coordinate."
	input AddX(float) : "Adds to this entity's X coordinate."
	input AddY(float) : "Adds to this entity's Y coordinate."
	input AddZ(float) : "Adds to this entity's Z coordinate."
	input SubtractX(float) : "Subtracts from this entity's X coordinate."
	input SubtractY(float) : "Subtracts from this entity's Y coordinate."
	input SubtractZ(float) : "Subtracts from this entity's Z coordinate."

	// Outputs
	output OutValue(vector) : "Fired when the value changes."
	output OutX(float) : "Fired when the value changes, passing the resulting X coordinate."
	output OutY(float) : "Fired when the value changes, passing the resulting Y coordinate."
	output OutZ(float) : "Fired when the value changes, passing the resulting Z coordinate."
	output OnGetValue(vector) : "Fired in response to the GetValue input. Used for polling this entity's current value when you don't want constant updates from the OutValue output."
	output OnGetX(float) : "Fired in response to the GetX input."
	output OnGetY(float) : "Fired in response to the GetY input."
	output OnGetZ(float) : "Fired in response to the GetZ input."
	]

@MoveClass base(BaseEntityPoint, KeyFrame, Mover) 
	line(255 255 255, targetname, nextkey)
	size(-8 -8 -8, 8 8 8)
	color(255 170 0)
	animator()
= move_keyframed: "Keyframed Move Behavior"
	[
	]

@MoveClass base(BaseEntityPoint, Mover, KeyFrame) 
	line(255 255 255, targetname, nextkey)
	size(-8 -8 -8, 8 8 8)
	color(255 0 0)
	animator()
= move_track: "Track Move Behavior"
	[
	wheelbaselength(integer) : "Distance between the wheels" : 50
	damage(integer) : "Damage done to blocking entities" : 0
	norotate(boolean) : "Turn to face down path" : 0
	]

@PointClass base(BaseEntityPoint) 
	sphere(radius)
	iconsprite("editor/paint_sphere.vmt")
= paint_sphere: "Paint brushes inside the sphere."
	[
	paint_type(choices) : "Paint Type" : 0 : "The type of Gel created." =
		[
		0: "Repulsion Gel"
		1: "Reflection Gel"
		2: "Propulsion Gel"
		3: "Conversion Gel"
		4: "Cleansing Gel"
		5: "Adhesion Gel"
		]

	radius(float) : "Radius" : "60.f" : "Radius of paint sphere"
	alpha_percent(float) : "Alpha Percent" : "1.0" : "Alpha percent to control the density of paint, the value must be between 0 to 1"

	// Inputs
	input Paint(void) : "Apply paint with specified paint type inside the paint sphere"
	]

@PointClass base(BaseEntityPoint) 
	line(255 255 255, targetname, target)
	iconsprite("editor/ficool2/path_corner")
	studio("models/editor/angle_helper.mdl")
	color(247 181 82)
= path_corner: "Path points for func_train or NPC entities to follow."
	[
	spawnflags(flags)  =
		[
		1: "[1] Wait for retrigger" : 0
		2: "[2] Teleport to THIS path_corner" : 0
		]

	target(target_destination) : "Next stop target"
	wait(integer) : "Wait here (secs)" : 0
	speed(integer) : "New Train Speed" : 0
	yaw_speed(integer) : "New Train rot. Speed" : 0

	// Inputs
	input SetNextPathCorner(target_destination) : "Sets next pathcorner"

	// Outputs
	output OnPass(void) : "Fires when a path follower passes this point"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/path_corner_crash")
	color(255 0 0)
= path_corner_crash: "Helicopter Crash Path"
	[
	target(target_destination) : "Next stop target"
	]

@PointClass base(BaseEntityPoint) 
	cylinder(255 255 255, targetname, target, radius, targetname, targetname, radius)
	color(255 192 0)
	studio("models/editor/angle_helper.mdl")
	sphere(radius)
	iconsprite("editor/ficool2/path_track")
= path_track: "An entity used to build paths for other entities to follow. Each path_track is a node on the path, each holding the name of the next path_track in the path."
	[
	spawnflags(flags)  =
		[
		1: "[1] Disabled" : 0
		4: "[4] Branch Reverse" : 0
		8: "[8] Disable train" : 0
		16: "[16] Teleport to THIS path track" : 0
		32768: "[32768] Alternate path" : 0
		]

	target(target_destination) : "Next Stop Target" : : "The next path_track in the path."
	altpath(target_destination) : "Branch Path" : : "An alternative path_track to be the next node in the path. Useful for making branching paths. Use the ToggleAlternatePath / EnableAlternatePath inputs to make the alternative path active."
	speed(float) : "New Train Speed" : 0 : "When the train reaches this path_track, it will set its speed to this speed. This speed must be a positive value that is less than the train's max speed. A value of 0 will cause no change in the train's speed."
	radius(float) : "Path radius" : 0 : "Used by NPCs who follow track paths (attack chopper/gunship). This tells them the maximum distance they're allowed to be from the path at this node."
	orientationtype(choices) : "Orientation Type" : 1 : "The way that the path follower faces as it moves through this path track." =
		[
		0: "No change"
		1: "Face direction of motion"
		2: "Face this path_track's angles"
		]


	// Inputs
	input ToggleAlternatePath(void) : "Cause the track to toggle to/from its alternate path."
	input EnableAlternatePath(void) : "Enable the alternate path of the track."
	input DisableAlternatePath(void) : "Disable the alternate path of the track."
	input TogglePath(void) : "Cause the track to toggle on/off/"
	input EnablePath(void) : "Enable the track."
	input DisablePath(void) : "Disable the track."

	// Outputs
	output OnPass(void) : "Fired when any entity following this path passes this path_track node."
	output OnTeleport(void) : "Fired when any entity following this path teleports directly to this path_track node."
	]

@MoveClass base(BaseEntityPoint) 
	cylinder(255 255 255, targetname, target, radius, targetname, targetname, radius)
	color(255 192 0)
	studio("models/editor/angle_helper.mdl")
	sphere(radius)
	animator()
	keyframe("target")
= path_vphysics: "An entity that spawns invisible tractor beams in the path specified"
	[
	spawnflags(flags)  =
		[
		]

	target(target_destination) : "Next Target" : : "The next path_vphysics in the path."
	speed(float) : "Speed" : 100 : "Speed at which to move the objects."
	radius(float) : "Radius" : 32 : "Radius of the triggers."
	damping(float) : "Damping" : 5 : "How much to dampen the movement."
	filtername(filterclass) : "Filter" : : "Filter to apply to the spawned triggers."

	// Inputs
	input Enable(void) : "Enables the trigger."
	input Disable(void) : "Disables the trigger."
	input Toggle(void) : "Toggles the trigger."
	]

@PointClass base(BaseEntityPoint) 
	color(128 128 128)
	iconsprite("editor/phys_constraintsystem.vmt")
= phys_constraintsystem: "An entity used to manage a group of interacting constraints and keep them stable. All constraints on a set of entities should be placed in the same system, or they will fight each other during simulation."
	[
	additionaliterations(integer) : "Additional System Iterations" : 0 : "Adding iterations makes the interactions among constraints in a system tighter. It will not compensate for errors due to collision, but will help in cases where objects of disparate mass are constrained to each other."
	]

@PointClass base(BaseEntityPoint) 
	color(128 128 128)
	line(255 255 0, targetname, target)
	iconsprite("editor/phys_convert.vmt")
= phys_convert: "Turns an arbitrary entity into a physically simulated entity. i.e. brush entities will behave like func_physbox, model entities behave like prop_physics."
	[
	spawnflags(flags)  =
		[
		1: "[1] Convert Asleep" : 0
		2: "[2] Convert As Debris" : 0
		]

	target(target_destination) : "Entity to convert" : : "Name of the entity or entities that will be converted to a physics object when the ConvertTarget input is fired. Maximum of 512 entities."
	swapmodel(target_destination) : "Model Swap Entity" : : "If specified, the entity will be switched to use this entity's model instead of its own. Only one entity will be converted."
	massoverride(float) : "Mass Override" : 0 : "Sets the mass when the object(s) are converted (0 means auto-calculate)"

	// Inputs
	input ConvertTarget(void) : "Converts this entity's target to a physically simulated object."

	// Outputs
	output OnConvert(void) : "Fires after the conversion has taken place."
	]

@PointClass base(BaseEntityPoint) 
	color(128 128 128)
	iconsprite("editor/ficool2/phys_keepupright.vmt")
	line(128 128 128, targetname, attach1)
= phys_keepupright: "A controller that tries to keep an entity facing a particular direction."
	[
	spawnflags(flags)  =
		[
		1: "[1] Start inactive" : 0
		]

	attach1(target_destination) : "Target Entity" : : "The entity to align to the desired angles."
	angularlimit(float) : "Angular Limit" : 15 : "The maximum angular velocity that this controller can compensate for, in degrees per second."

	// Inputs
	input TurnOn(void) : "Enable the controller."
	input TurnOff(void) : "Disable the controller."
	]

@PointClass base(BaseEntityPoint) 
	halfgridsnap
	color(128 128 128)
	line(128 128 128, targetname, attach1)
	iconsprite("editor/ficool2/phys_motor")
= phys_motor: "An entity that tries to spin a target entity at a particular speed."
	[
	speed(float) : "Rotation Speed" : 0 : "Angular speed (units are degress/second)"
	spinup(float) : "Spin up time" : 1 : "spin up time in seconds (also affects the rate at which speed changes happen)"
	inertiafactor(float) : "System Interia Scale" : "1.0" : "Make this larger if the object being driven is constrained to a set of heavier objects."
	axis(vecline) : "Rotation Axis"
	spawnflags(flags)  =
		[
		1: "[1] Start On" : 1
		2: "[2] No world collision" : 0
		4: "[4] Hinge Object" : 1
		]

	attach1(target_destination) : "Attached Object" : : "Object to apply the force to"

	// Inputs
	input SetSpeed(float) : "Sets target speed"
	input TurnOn(void) : "Turns motor on"
	input TurnOff(void) : "Turns motor off"
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/ficool2/phys_ragdollmagnet")
	sphere(radius)
	line(255 255 0, targetname, target)
	color(128 128 128)
= phys_ragdollmagnet: "An entity that acts like a magnet for ragdolls. Useful for crafting exaggerated ragdoll behavior (i.e. guys falling over rails on death). If the Bar Magnet spawnflag is set, the magnet works like it was a cylindrical magnet i.e. it attracts ragdolls to the nearest point on a line."
	[
	axis(vecline) : "Bar Magnet Axis" : : "If the Bar Magnet spawnflag is set, ragdolls will be attracted to any point on this line."
	radius(float) : "Effective Radius" : 512 : "Radius in which ragdolls are affected around this entity's origin."
	force(float) : "Force" : 5000 : "Magnetic force to apply to ragdolls within the radius. Expressed as kilograms per unit per second. So a force of 1000 will add 10 units/second to a 100kg man. It will add 100 units per second to a 10kg headcrab."
	target(target_destination) : "Entity to affect" : : "If specified, the phys_ragdollmagnet will only affect the target entity."
	spawnflags(flags)  =
		[
		2: "[2] Bar Magnet (use axis helper)" : 0
		]

	]

@PointClass base(BaseEntityPoint) 
	halfgridsnap
	color(128 128 128)
	iconsprite("editor/ficool2/phys_spring")
	line(128 128 128, targetname, attach1)
	line(128 128 128, targetname, attach2)
	line(128 128 128, targetname, attach1, targetname, attach2)
	sphere(length)
	sphere(breaklength)
= phys_spring: "A physically simulated spring. 'Length' is what's known as the 'natural spring length'. This is how long the spring would be if it was at rest (nothing hanging on it or attached). When you attach something to the spring, it will stretch longer than its 'natural length'. The amount of stretch is determined by the 'Sprint Constant'. The larger the spring constant the less stretch the spring."
	[
	spawnflags(flags)  =
		[
		1: "[1] Force only on stretch" : 0
		]

	attach1(target_destination) : "Entity 1"
	attach2(target_destination) : "Entity 2"
	springaxis(vecline) : "Spring Axis" : : "Use the helper. Drag it out to match the virtual spring."
	length(string) : "Spring Length" : 0 : "How long the spring would be if it was at rest (nothing hanging on it or attached). 0 means the length of the brush."
	constant(string) : "Spring Constant" : 50 : "Stiffness of the spring.  The larger the number the less the spring will stretch."
	damping(string) : "Damping Constant" : "2.0" : "How much energy the spring loses.  The larger the number, the less bouncy the spring."
	relativedamping(string) : "Relative Damping Constant" : "0.1" : "The amount of energy the spring loses proportional to the relative velocity of the two objects the spring is attached to."
	breaklength(string) : "Break on Length" : 0 : "If the spring's length ever exceeds this length, the spring breaks."

	// Inputs
	input SetSpringConstant(float) : "Set the Spring Constant."
	input SetSpringLength(float) : "Set the Spring Length."
	input SetSpringDamping(float) : "Set the Spring Damping."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/player_loadsaved")
= player_loadsaved: "Load Auto-Saved game"
	[
	duration(string) : "Fade Duration (seconds)" : 2
	holdtime(string) : "Hold Fade (seconds)" : 0
	renderamt(integer) : "Fade Alpha" : 255
	rendercolor(color255) : "Fade Color (R G B)" : "0 0 0"
	loadtime(string) : "Reload delay" : 0

	// Inputs
	input Reload(void) : "Ends this game and reloads"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/player_speedmod.vmt")
= player_speedmod: "Speeds up or slows down player velocity over time (slow mo/fast forward)"
	[
	spawnflags(flags)  =
		[
		1: "[1] Suppress weapons" : 0
		2: "[2] Suppress HUD" : 0
		4: "[4] Suppress jump" : 0
		8: "[8] Suppress duck" : 0
		16: "[16] Suppress use" : 0
		32: "[32] Suppress sprint" : 0
		64: "[64] Suppress attack" : 0
		128: "[128] Suppress zoom" : 0
		256: "[256] Don't suppress flashlight" : 0
		]

	additionalbuttons(integer) : "Additional Buttons" : 0 : "Additional buttons to suppress, other than those listed in the spawnflags. Advanced users only."

	// Inputs
	input ModifySpeed(float) : "Modifies player speed by X amount."
	input Enable(void) : "Enables the spawnflag abilities without actually modifying the player's speed."
	input Disable(void) : "Disables the spawnflag abilities without actually modifying the player's speed."
	input SetAdditionalButtons(integer) : "Sets the additional suppressed buttons."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/player_weaponstrip.vmt")
= player_weaponstrip: "Removes weapons from the player."
	[

	// Inputs
	input Strip(void) : "Removes all weapons."
	input StripWeaponsAndSuit(void) : "Strip player's weapons and suit"
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/ficool2/point_anglesensor")
	color(0 100 250)
	line(0 100 250, targetname, target)
	line(0 100 250, targetname, target, targetname, lookatname)
= point_anglesensor: "An entity that detects if another entity points in a given direction for a period of time."
	[
	target(target_destination) : "Target Entity Name" : : "Name of the entity whose angles will be sensed."
	lookatname(target_destination) : "Look At Entity" : : "The entity we want to check to see if the Target Entity is looking at."
	duration(float) : "Duration" : : "The amount of time the Target Entity must look at the 'Look at Entity' to trigger this entity, in seconds."
	tolerance(integer) : "Tolerance" : : "The tolerance, in degrees, in the checking to determine when the Target Entity is looking at the Look At Entity."
	spawnflags(flags)  =
		[
		1: "[1] Use target entity's angles (NOT position)" : 0
		]


	// Inputs
	input Toggle(void) : "Toggle the sensor between enabled and disabled."
	input Test(void) : "Check to see if the Target Entity is facing the Look At Entity within the specified tolerance, firing either the OnFacingLookat or OnNotFacingLookat output based on the result."
	input SetTargetEntity(string) : "Set the target entity"

	// Outputs
	output TargetDir(vector) : "Fired when the forward direction of the Target Entity changes. Passes the new forward direction as a parameter."
	output OnFacingLookat(void) : "Fired when the Target Entity points at the Look At Entity for more than the specified Duration, or in response to a Test input."
	output OnNotFacingLookat(void) : "Fires in response to a Test input when the Target Entity is not pointing at the Look At Entity."
	output FacingPercentage(float) : "Normalized value (0..1) where 1 is facing directly at target and 0 is at or beyond the angle of tolerance."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/point_angularvelocitysensor")
	color(0 100 250)
	line(0 100 250, targetname, target)
= point_angularvelocitysensor: "An entity that detects if another entity's angular velocity meets or exceeds a threshold value."
	[
	target(target_destination) : "Target Entity Name" : : "Name of the entity whose angular velocity will be sensed."
	threshold(float) : "Threshold Velocity" : 0 : "The threshold angular velocity to compare against, in degrees per second."
	fireinterval(float) : "Fire Interval" : "0.2" : "Angular velocity must cross the threshold for at least this long to fire."
	axis(vecline) : "Axis"
	usehelper(boolean) : "Use Axis Helper" : 0 : "Use axis helper to determine rotation values (clockwise/counter-clockwise)."

	// Inputs
	input Test(void) : "Checks to see if the Target Entity's angular velocity meets or exceeds the Threshold Velocity, firing either the OnGreaterThanOrEqualTo or OnLessThan output based on the result."
	input TestWithInterval(void) : "Checks to see if the Target Entity's angular velocity meets or exceeds the Threshold Velocity. Once the Fire Interval expires, fires the appropriate test result output if the result is stable throughout the Fire Interval."

	// Outputs
	output AngularVelocity(float) : "Fired when the Target's Angular Velocity changes, passing the new magnitude of the angular velocity."
	output OnGreaterThan(void) : "Fired when the Target Entity goes from slower than the threshold angular velocity to faster than the threshold angular velocity."
	output OnGreaterThanOrEqualTo(void) : "Fired when the Target Entity goes from slower than the threshold angular velocity to faster than the threshold angular velocity."
	output OnLessThan(void) : "Fired when the Target Entity goes from faster than the threshold angular velocity to slower than the threshold angular velocity."
	output OnLessThanOrEqualTo(void) : "Fired when the Target Entity goes from faster than the threshold angular velocity to slower than the threshold angular velocity."
	output OnEqualTo(void) : "Fired when the Target Entity reaches the threshold angular velocity from a different velocity."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/point_bonusmaps_accessor")
	color(200 0 0)
= point_bonusmaps_accessor: "An entity that relays bonus maps changes."
	[
	filename(string) : "File Name"
	mapname(string) : "Map Name"

	// Inputs
	input Unlock(void) : "Unlocks the filename/map combination."
	input Complete(void) : "Completes the filename/map combination."
	input Save(void) : "Saves bonus map data."
	]

@PointClass base(BaseEntityPoint) 
	studioprop("models/editor/camera.mdl")
	frustum(FOV, fogstart, fogend, _frustum_color, -1)
= point_camera: "Camera"
	[
	spawnflags(flags)  =
		[
		1: "[1] Start Off" : 0
		]

	fov(float) : "FOV" : 90 : "Field of view in degrees"
	usescreenaspectratio(boolean) : "Screen Aspect Ratio" : 0
	fogenable(boolean) : "Fog Enable" : 0
	fogcolor(color255) : "Fog Color" : "0 0 0"
	fogstart(float) : "Fog Start" : 2048 : "The near fog plane."
	fogend(float) : "Fog End" : 4096 : "The far fog/clipping plane."
	fogmaxdensity(float) : "Fog Max Density [0..1]" : 1 : "The maximum fog density. 0=no fog, 1=full fog."

	// Inputs
	input ChangeFOV(string) : "Changes camera's FOV over time"
	input SetOnAndTurnOthersOff(void) : "Turn the camera on, and turn all other cameras off."
	input SetOn(void) : "Turn the camera on."
	input SetOff(void) : "Turn the camera off."
	input Activate(void) : "Turn the camera on, activate it and deactivate all other cameras."
	input Deactivate(void) : "Turn the camera off, deactivate it."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/game_end.vmt")
= point_changelevel: "Level Change Entity"
	[

	// Inputs
	input ChangeLevel(string) : "Changes the level to the map name supplied as a parameter."
	input ChangeLevelPostFade(string) : "Immediately set screen to black rather than fade out, then change the level to the map name supplied."

	// Outputs
	output OnChangeLevel(void) : "Fired when the level is about to change."
	]

@PointClass base(BaseEntityPoint) 
	color(200 0 0)
	iconsprite("editor/point_clientcommand.vmt")
= point_clientcommand: "An entity that issues commands to the client console, as if it was typed in by the player (if activator is a player, or the local player in single player)."
	[

	// Inputs
	input Command(string) : "Command to execute."
	]

@PointClass base(BaseEntityPoint) 
	studioprop("models/editor/camera.mdl")
	iconsprite("editor/point_devshot_camera.vmt")
	frustum(fov, _frustum_near, _frustum_far, _frustum_color, -1)
= point_devshot_camera: "An entity used by the -makedevshots system, which automatically takes screenshots at the position of every devshot camera in the level."
	[
	cameraname(string) : "Camera Name" : : "Used as the name of the directory to store screenshots from this camera. Must be unique within the level."
	fov(integer) : "Camera FOV" : 90 : "FOV of this camera."
	_frustum_far(integer) readonly : "<Far Plane>" : 1024 : "Ignore, needed to display the view frustum preview."

	// Inputs
	input TakeScreenshot(void) : "Takes a single screenshot from this camera only"
	]

@PointClass base(BaseEntityPoint) 
	line(255 255 255, targetname, parentname)
	iconsprite("editor/ficool2/point_enable_motion_fixup")
= point_enable_motion_fixup: "An entity used to move a motion-disabled prop when it enables motion. Parent this entity to the prop, and when the prop has its motion enabled, it will immediately teleport to the origin of this entity."
	[
	]

@PointClass base(BaseEntityPoint) 
	line(255 255 0, targetname, referencename)
	line(255 255 0, targetname, filtername)
	color(0 100 250)
	iconsprite("editor/point_entity_finder")
= point_entity_finder: "An entity that will find an entity and pass it along as the !caller with the OutEntity output. Requires using !caller as the parameter on the input."
	[
	filtername(filterclass) : "Filter Name" : : "Filter to use to narrow set of findable entities. See filter_activator_name for more explanation."
	referencename(target_destination) : "Reference Entity" : : "Name of the entity to use when evaluating criteria. For example, when using 'Nearest', this is the entity that distance will be measured from. If left blank will use the point_entity_finder."
	method(choices) : "Search Method" : 0 =
		[
		0: "Nearest"
		1: "Farthest"
		2: "Random"
		]


	// Inputs
	input FindEntity(void) : "Find an entity that meets the specified criteria.  Will fire OutEntity if found and pass the entity as !Caller."

	// Outputs
	output OnFoundEntity(void) : "Fired when FindEntity is input and an entity was found. Passes the found entity as !Caller."
	]

@PointClass base(BaseEntityPoint) 
	studio("models/editor/angle_helper.mdl")
	iconsprite("editor/point_futbol_shooter")
= point_futbol_shooter: "Fires prop_exploding_futbols at a target entity. Used in Wheatley's boss fight."
	[
	launchspeed(float) : "Launch speed" : 100 : "Speed to launch the futbol."

	// Inputs
	input SetTarget(target_destination) : "Set new launch target."
	input ShootFutbol(void) : "Shoot a futbol at the target."

	// Outputs
	output OnShootSuccess(void) : "Called when a futbol is successfully fired."
	output OnShootFail(void) : "Called when a futbol fails to fire."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/ficool2/point_gamestats_counter")
	color(0 255 0)
= point_gamestats_counter: "Generic game statistics counter."
	[
	name(string) : "Name of statistic counter"

	// Inputs
	input SetName(string) : "Changes name of statistic counter"
	input Increment(float) : "Increments named statistic counter by specified value"
	]

@PointClass base(BaseEntityPoint, DamageType) 
	sphere(DamageRadius)
	line(255 0 0, targetname, damagetarget)
	iconsprite("editor/ficool2/point_hurt")
= point_hurt: "An entity that does damage to all entities in a radius around itself, with a specified delay. If 'Target Entity' is specified, the damage is only done to that entity."
	[
	damagetarget(target_destination) : "Target Entity" : : "If specified, only this entity will take damage. Otherwise, all entities within the Radius will take damage."
	damageradius(float) : "Radius" : 256 : "All entities within this radius of this entity will take damage. If a 'Target Entity' is specified, only that entity will take damage."
	damage(integer) : "Damage" : 5 : "Damage done to all affected entities each time this entity fires."
	damagedelay(float) : "Delay" : 1 : "Delay between refires, in seconds."
	spawnflags(flags)  =
		[
		1: "[1] Start Active" : 0
		]


	// Inputs
	input Hurt(void) : "Force a single fire, damaging either the Target Entity or all entities within the radius."
	input TurnOn(void) : "Enable this entity. It will start damaging entities everytime it fires, and refire based upon the specified Delay."
	input TurnOff(void) : "Disable this entity. It will stop damaging entities."
	input Toggle(void) : "Toggle this entity between On/Off state."
	]

@PointClass base(BaseEntityPoint, SRCIndicator) 
	line(255 110 0, targetname, indicatorname)
	studio("models/editor/axis_helper.mdl")
	iconsprite("editor/point_laser_target.vmt")
= point_laser_target: "Invisible Discouragement Beam detector, for logic use. The entity will fire outputs when struck and unstruck."
	[
	terminalpoint(boolean) : "Terminal Point" : 1 : "Whether to behave like a laser catcher or a relay. When on, lasers will auto-aim towards this, and lasers that hit it will not show end sparks or be able to activate later laser targets. When off, these behaviors do not occur, and it has a taller hitbox to match a laser relay."
	filtercolor(color255) : "Laser Filter Color (R G B A)" : "255 255 255 255" : "Filter lasers by this colour."

	// Outputs
	output OnPowered(void) : "Fired when a laser hits the target."
	output OnUnpowered(void) : "Fired when a laser has stopped hitting the target."
	]

@PointClass base(BaseEntityPoint) 
	studio("models/editor/axis_helper.mdl")
	color(200 200 0)
	iconsprite("editor/ficool2/point_message.vmt")
	sphere(radius)
= point_message: "An entity that displays a text message in the world, at its origin."
	[
	spawnflags(flags)  =
		[
		1: "[1] Start Disabled" : 0
		]

	message(string) : "Entity Message"
	radius(integer) : "Show message radius" : 128 : "Distance the player must be within to see this message."
	developeronly(boolean) : "Developer Only?" : 0 : "If set, this message will only be visible when developer mode is on."

	// Inputs
	input Enable(void) : "Start displaying the message text, if the player is within the message radius."
	input Disable(void) : "Stop displaying the message text."
	]

@PointClass base(BaseEntityPoint) 
	color(0 100 250)
	line(0 100 250, targetname, target)
	line(10 10 10, targetname, filtername)
	iconsprite("editor/point_gel_sensor.vmt")
	sidelist()
	sphere(radius)
= point_paint_sensor: "An entity that detects when surfaces are painted."
	[
	radius(float) : "Search Radius" : 64 : "Radius to search inside, -1 to disable."
	sides(sidelist) : "Target Brush Faces" : : "Faces on which to watch for paint."
	target(target_destination) : "Target Entity" : : "Entity for which to watch for paint."
	filtername(filterclass) : "Filter Name" : : "Filter to use to narrow set of findable entities. See filter_activator_name for more explanation."

	// Outputs
	output OnPainted(integer) : "Gets called when paint is detected. Parameter is set to the paint type index."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/point_playermoveconstraint.vmt")
	sphere(radius)
= point_playermoveconstraint: "An entity that constrains players to a radius around itself, slowing them down the closer they get to the edge of the radius."
	[
	radius(float) : "Radius" : 256 : "Radius to constrain players to."
	width(float) : "Constraint Width" : "75.0" : "Width of the constraint edge. This is the distance in which to start slowing players down as they approach the edge of the radius."
	speedfactor(float) : "Speed Factor" : "0.15" : "Factor applied to the player's max speed as they approach the radius edge."

	// Inputs
	input TurnOn(void) : "Start constraining any players within the radius."
	input TurnOff(void) : "Stop constraining any players previously constrained."

	// Outputs
	output OnConstraintBroken(void) : "Fired when a player breaks through the constraint."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/point_posecontroller")
	line(255 255 0, targetname, propname)
= point_posecontroller: "An entity that controls a pose parameter of a prop and cycles the pose clientside."
	[
	propname(target_destination) : "Target" : : "Name of the prop to control. Can be any animating entity."
	poseparametername(string) : "Pose Parameter Name" : : "Name of the pose parameter to control. Setting this to an invalid value will crash the game!"
	posevalue(float) : "Pose Parameter Value" : 0 : "Normalized value for the pose parameter from 0.0 and 1.0 (maps to min and max range)."
	interpolationtime(float) : "Interpolation Time" : 0 : "Number of seconds (0.0 to 10.0) for client to match absolue pose values."
	interpolationwrap(boolean) : "Interpolation Wrap" : 0 : "Should wrap from 0.0 to 1.0 when interpolating."
	cyclefrequency(float) : "Cycle Frequency" : 0 : "Base cycles per second from -10.0 to 10.0."
	fmodulationtype(choices) : "Frequency Modulation Type" : 0 =
		[
		0: "None"
		1: "Sine"
		2: "Square"
		3: "Triangle"
		4: "Sawtooth"
		5: "Noise"
		]

	fmodtimeoffset(float) : "Frequency Modulation Time Offset" : 0 : "Modulation time offset from -1.0f to 1.0."
	fmodrate(float) : "Frequency Modulation Rate" : 0 : "Modulation cycles per second from -10.0f to 10.0."
	fmodamplitude(float) : "Frequency Modulation Amplitude" : 0 : "Modulation extents from 0.0f to 10.0."

	// Inputs
	input SetPoseParameterName(string) : "Sets the pose parameter to control."
	input SetPoseValue(float) : "Set the pose parameter to a normalized value between 0.0 and 1.0 (maps to min and max range)."
	input SetInterpolationTime(float) : "Set the interpolation time to a number of seconds between 0.0 and 10.0."
	input SetCycleFrequency(float) : "Set the pose parameter's base cycles per second from -10.0f to 10.0."
	input SetFModType(integer) : "Set the type of frequency modulation."
	input SetFModTimeOffset(float) : "Set the modulation time offset from -1.0f to 1.0."
	input SetFModRate(float) : "Set the modulation cycles per second from -10.0f to 10.0."
	input SetFModAmplitude(float) : "Set the modulation extents from 0.0f to 10.0."
	input RandomizeFMod(float) : "Randomize the frequency modulation by an extremeness of 0.0 to 1.0."
	input GetFmod(void) : "Outputs the current modulation settings in console."
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	color(0 100 250)
	line(0 100 250, targetname, target)
	iconsprite("editor/point_proximity_sensor.vmt")
= point_proximity_sensor: "An entity that detects another entity's proximity to a target position."
	[
	target(target_destination) : "Target Entity Name" : : "Name of the entity whose position will be sensed."
	spawnflags(flags)  =
		[
		1: "[1] Test the distance as measured along the axis specified by our direction." : 0
		]


	// Inputs
	input Toggle(void) : "Toggle the sensor between enabled and disabled."

	// Outputs
	output Distance(float) : "Distance of the target entity away from this entity."
	]

@PointClass base(BaseEntityPoint) 
	sphere(radius)
	sphere(inner_radius)
	studio("models/editor/cone_helper.mdl")
	iconsprite("editor/ficool2/point_push")
	frustum(influence_cone, inner_radius, radius, _frustum_color, -1)
= point_push: "Pulls objects to, or pushes them away from a point. In Portal 2, if a portal is placed nearby it will transfer the suction and produce a 'broken_tube_suck' effect for Diversity Vents."
	[
	spawnflags(flags)  =
		[
		1: "[1] Test LOS before pushing" : 0
		2: "[2] Use angles for push direction" : 0
		4: "[4] No falloff (constant push at any distance)" : 0
		8: "[8] Push players" : 1
		16: "[16] Push physics" : 1
		]

	enabled(boolean) : "Start Enabled" : 1
	magnitude(float) : "Magnitude" : 100 : "How strongly to push away from the center."
	radius(float) : "Radius" : 128 : "Radius to affect items in."
	inner_radius(float) : "LOS Radius" : 128 : "If 'Test LOS' is enabled, collision checks will check this far from the center. This allows models to be placed in the middle."
	influence_cone(float) : "Cone of Influence" : 0 : "If greater than zero, the cone (in degrees) within which the object must lie for it to be affected."

	// Inputs
	input Enable(void) : "Enable the push."
	input Disable(void) : "Disable the push."
	]

@PointClass base(BaseEntityPoint) 
	color(200 0 0)
	iconsprite("editor/point_servercommand.vmt")
= point_servercommand: "An entity that issues commands to the server console."
	[

	// Inputs
	input Command(string) : "Command to execute."
	]

@PointClass base(BaseEntityPoint, SystemLevelChoice) 
	studio("models/editor/cone_helper.mdl")
	sphere(spotlightlength)
	sphere(spotlightwidth)
= point_spotlight: "An entity to draw a spotlight. Will draw a beam when the player views it side on, and a halo when it's facing towards the player. Unless the 'No Dynamic Light' spawnflag is checked, it will also create a dynamic light wherever the end of the spotlight rests."
	[
	spawnflags(flags)  =
		[
		1: "[1] Start On" : 1
		2: "[2] No Dynamic Light" : 1
		]

	spotlightlength(integer) : "Spotlight Length" : 500 : "Length of the spotlight beam."
	spotlightwidth(integer) : "Spotlight Width" : 50 : "Width of the spotlight beam."
	rendercolor(color255) : "Color (R G B)" : "255 255 255"
	hdrcolorscale(float) : "HDR color scale." : "0.7" : "float value to multiply sprite color by when running in HDR mode."
	ignoresolid(boolean) : "Ignore Solid" : 0 : "If set, this spotlight won't trace for solids."
	brightness(integer) : "Brightness" : 64 : "Integer value representing spotlight brightness (0-255)"

	// Inputs
	input LightOn(void) : "Turn the spotlight on."
	input LightOff(void) : "Turn the spotlight off"
	input SetColor(color255) : "Change the color of the spotlight."
	input ForceUpdate(void) : "Force an update of the spotlight position and orientation."
	input SetBrightness(integer) : "Set the brightness of the spotlight."

	// Outputs
	output OnLightOn(void) : "Fires when light turns on."
	output OnLightOff(void) : "Fires when light turns off."
	]

@PointClass base(BaseEntityPoint) = point_survey: "Displays a survey to the player."
	[
	surveyname(string) : "Survey Script Name" : "end_puzzle_survey" : "Name of a survey keyvalues file, from the 'scripts/surveys' folder."

	// Inputs
	input ShowSurvey(void) : "Displays the survey."

	// Outputs
	output OnSurveyComplete(void) : "Fired when the player completes or cancels the survey."
	]

@PointClass base(BaseEntityPoint) 
	studioprop()
	iconsprite("editor/point_teleport.vmt")
	line(255 255 255, targetname, target)
= point_teleport: "An entity that teleports a target entity to this position and angles. If 'Teleport Home' spawn flag is set, teleports the target entity to its spawn position instead. If object is physically simulated, simulation is turned off when teleported."
	[
	target(target_destination) : "Entity To Teleport" : : "Name of the entity that will be teleported."
	model(studio) : "[H] Model" : "models/editor/angle_helper.mdl" : "The model shown in Hammer, to use for positioning."
	spawnflags(flags)  =
		[
		1: "[1] Teleport Home" : 0
		2: "[2] Into Duck (episodic)" : 0
		]


	// Inputs
	input Teleport(void) : "Teleport the target entity."
	input TeleportToCurrentPos(void) : "Teleport the target entity to wherever the point_teleport entity is currently. The Teleport input teleports to the initial position of the point_teleport, so this input was added to avoid breaking old content."
	input TeleportEntity(target_destination) : "Teleport the entity specified by the parameter override. Use this to teleport an entity other than the one specified in the Entity To Teleport field."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/point_template.vmt")
	line(255 255 0, targetname, Template01)
	line(255 255 0, targetname, Template09)
	line(255 255 0, targetname, Template02)
	line(255 255 0, targetname, Template10)
	line(255 255 0, targetname, Template03)
	line(255 255 0, targetname, Template11)
	line(255 255 0, targetname, Template04)
	line(255 255 0, targetname, Template12)
	line(255 255 0, targetname, Template05)
	line(255 255 0, targetname, Template13)
	line(255 255 0, targetname, Template06)
	line(255 255 0, targetname, Template14)
	line(255 255 0, targetname, Template07)
	line(255 255 0, targetname, Template15)
	line(255 255 0, targetname, Template08)
	line(255 255 0, targetname, Template16)
= point_template: "Turns an entity, or set of entities, into a single template that can be instanced anywhere, and multiple times. If there are interdependencies (entity I/O, hierarchy, or other name references) between the entities in the template, the entities in the template will have their names changed and the interdependencies will be reconnected to the changes names. The name change format is as follows: '<original name>&0000', where the 0000 will be replaced with the current global template instance, so wildcard searches for '<original name>*' will still find them.\nIf you don't want the name fixup to happen, because you're only spawning the template once, or you want inputs to trigger all instances of the template, check the 'Preserve entity names' spawnflag. \nTo spawn the template in other places, use an env_entity_maker."
	[
	spawnflags(flags)  =
		[
		1: "[1] Don't remove template entities" : 0
		2: "[2] Preserve entity names (Don't do name fixup)" : 1
		]

	template01(target_destination) : "Template 1"
	template02(target_destination) : "Template 2"
	template03(target_destination) : "Template 3"
	template04(target_destination) : "Template 4"
	template05(target_destination) : "Template 5"
	template06(target_destination) : "Template 6"
	template07(target_destination) : "Template 7"
	template08(target_destination) : "Template 8"
	template09(target_destination) : "Template 9"
	template10(target_destination) : "Template 10"
	template11(target_destination) : "Template 11"
	template12(target_destination) : "Template 12"
	template13(target_destination) : "Template 13"
	template14(target_destination) : "Template 14"
	template15(target_destination) : "Template 15"
	template16(target_destination) : "Template 16"

	// Inputs
	input ForceSpawn(void) : "Spawn an instance of the template at the original position."

	// Outputs
	output OnEntitySpawned(void) : "Fired after spawning an instance of this template."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/point_tesla")
	color(200 200 0)
	line(255 255 0, targetname, m_SourceEntityName)
	sphere(m_flRadius)
= point_tesla: "An entity that creates tesla lightning arcs around its origin."
	[
	m_bon(boolean) : "Start Enabled" : 0 : "Should the tesla start active?"
	m_sourceentityname(target_destination) : "Source Entity" : : "If specified, tesla lightning will originate from the specified entity. Otherwise, they originate from this entity."
	m_soundname(sound) : "Sound Name" : "DoSpark" : "Sound to be played whenever lightning is created."
	texture(sprite) : "Sprite Name" : "sprites/physbeam.vmt" : "Material to use for the tesla lightning beams."
	m_color(color255) : "Color" : "255 255 255"
	m_flradius(float) : "Radius" : 200 : "Radius around the origin to find a point to strike with a tesla lightning beam."
	beamcount_min(integer) : "Min # of Beams" : 6 : "Minimum number of tesla lightning beams to create when creating an arc."
	beamcount_max(integer) : "Max # of Beams" : 8 : "Maximum number of tesla lightning beams to create when creating an arc."
	thick_min(float) : "Min Beam Width" : 4 : "Minimum width of the tesla lightning beams."
	thick_max(float) : "Max Beam Width" : 5 : "Maximum width of the tesla lightning beams."
	lifetime_min(float) : "Min Time Visible" : "0.3" : "Minimum lifetime of the tesla lightning beams."
	lifetime_max(float) : "Max Time Visible" : "0.3" : "Maximum lifetime of the tesla lightning beams."
	interval_min(float) : "Min Time Between Arcs" : "0.5" : "Minimum time delay between random arcing."
	interval_max(float) : "Max Time Between Arcs" : 2 : "Maximum time delay between random arcing."

	// Inputs
	input TurnOn(void) : "Turn emitter on."
	input TurnOff(void) : "Turn emitter off."
	input DoSpark(void) : "Force a single arc."
	]

@PointClass base(BaseEntityPoint) 
	color(0 100 250)
	line(0 100 250, targetname, target)
	iconsprite("editor/ficool2/point_velocitysensor")
= point_velocitysensor: "An entity that detects and outputs an entity's velocity."
	[
	target(target_destination) : "Target Entity Name" : : "Name of the entity whose velocity will be sensed."
	axis(vecline) : "Measurement Axis"
	enabled(boolean) : "Start Enabled" : 1 : "Whether or not to start enabled and active."

	// Inputs
	input Enable(void) : "Enable the sensor."
	input Disable(void) : "Disable the sensor."

	// Outputs
	output Velocity(float) : "Fired when the Target's Velocity changes, passing the new magnitude of the velocity."
	]

@PointClass base(BaseEntityPoint) 
	studioprop("models/editor/camera.mdl")
	color(200 0 0)
	frustum(fov, _frustum_near, _frustum_far, _frustum_color, -1)
	line(255 255 0, targetname, target)
	line(255 255 0, targetname, moveto)
= point_viewcontrol: "A camera entity that controls the player's view. While it's active, the player will see out of the camera."
	[
	target(target_destination) : "Entity to Look At" : : "Name of the entity that the camera should point at and track while active."
	targetattachment(string) : "Target Attachment Name" : : "If set, the camera will focus on the specified attachment on the 'Entity to Look At'."
	wait(integer) : "Hold Time" : 10 : "The amount of time the camera should control the player's view for, after which it deactivates itself. If the camera should stay active until told to deactive, set the 'Infinite Hold Time' spawnflag."
	moveto(target_destination) : "Path Corner" : : "The first path corner in a track that the camera should move along once it's activated. If not specified, the camera won't move."
	interpolatepositiontoplayer(boolean) : "Interpolate Position To Player" : 0 : "Gradually interpolate player's position to here on start. (Episodic only)"
	spawnflags(flags)  =
		[
		1: "[1] Start At Player" : 1
		2: "[2] Follow Player" : 1
		4: "[4] Freeze Player" : 0
		8: "[8] Infinite Hold Time" : 0
		16: "[16] Snap to goal angles" : 0
		32: "[32] Make Player non-solid" : 0
		64: "[64] Interruptable by Player" : 0
		128: "[128] Set Fov" : 0
		256: "[256] Freelook" : 0
		]

	speed(float) : "Initial Speed" : 0 : "The starting speed that the camera moves at, if it's on a path track."
	acceleration(float) : "Acceleration units/sec^2" : 500 : "The speed at which the camera accelerates to path corner's desired speeds."
	deceleration(float) : "Stop Deceleration units/sec^2" : 500 : "The speed at which the camera decelerates to path corner's desired speeds."
	trackspeed(float) : "Tracking Speed of the camera" : 40 : "The speed that the camera tries to follow it's look target."
	fov(float) : "Field of view" : 90 : "Player FOV (if Set FOV spawnflag is set)"
	fov_rate(float) : "Seconds to reach FOV target" : "1.0" : "Amount of time it should take to reach the specified FOV"
	freelook_range(float) : "Free Look Range" : 0 : "The maximum distance in degrees the player can move the camera from it's starting position."
	dontsetplayerview(boolean) : "Don't set player view" : 0 : "Prevents this point_viewcontrol from actually controlling the player's view. FOV, player-affecting spawnflags, etc. may still happen."
	_frustum_far(integer) readonly : "<Far Plane>" : 1024 : "Ignore, needed to display the view frustum preview."

	// Inputs
	input Enable(void) : "Enable the point_viewcontrol, and start controlling the player's view."
	input Disable(void) : "Disable the point_viewcontrol, and stop controlling the player's view."
	input EnableFreelook(void) : "Enable the player to move the camera around freely."
	input DisableFreelook(void) : "Disable the player to move the camera around freely and ease view back to the camera's starting position."
	input SetTarget(target_destination) : "Set a new target for the camera to point at."
	input SetTargetAttachment(string) : "Set a new attachment on the target for the camera to point at."
	input ReturnToEyes(void) : "Return the camera view to the player's eyes."
	input TeleportToView(void) : "Teleport the player to the current position of the camera."
	input SetTrackSpeed(float) : "Set the speed that the camera will try to track it's target."
	input SetPath(string) : "Have the camera start following a new path."

	// Outputs
	output OnEndFollow(void) : "Fired when the point_viewcontrol deactivates, due to the Disable input being received, the Entity to Look At being destroyed, or the Hold Time expiring."
	]

@PointClass base(BaseEntityPoint) 
	color(200 0 0)
	studioprop("models/editor/camera.mdl")
	line(255 255 0, targetname, proxy)
= point_viewproxy: "A camera entity that moves the player's view. Use this if you want the player to retain control of where the player looks but want to move the position to another location."
	[
	spawnflags(flags)  =
		[
		4: "[4] Freeze Player" : 0
		32: "[32] Make Player non-solid" : 0
		]

	offsettype(choices) : "Offset type " : 0 : "How the player's view moves to the view of the camera." =
		[
		0: "Snap to camera"
		1: "Ease to camera"
		2: "Keep offset"
		]

	proxy(target_destination) : "Proxy Entity" : : "Name of the entity that the camera uses to translate the view."
	proxyattachment(string) : "Attachment Point" : : "Use this attachment on the proxy's parent for position and orientation."
	tiltfraction(float) : "Tilt Fraction" : "0.5" : "How much the angle of the proxy affects the angle of the view. 0.0 will keep the players view angles unmodified. 1.0 will add in the whole tilt from the proxy."
	usefakeacceleration(boolean) : "Use Fake Acceleration" : 0 : "If the player maintains an offset from the proxy apply fake acceleration on the player based on the movement of the proxy."
	skewaccelerationforward(boolean) : "Skew Acceleration Forward" : 1 : "If this is set fake acceleration will be more noticeable in the direction of the proxy."
	accelerationscalar(float) : "Acceleration Scalar" : "1.0" : "Multiply the fake acceleration by this ammount."
	easeanglestocamera(boolean) : "Ease Angles To Camera" : 0 : "Move the player's angles to the camera - this will stop them from looking around."

	// Inputs
	input Enable(void) : "Enable the view proxy, and start modifying the player's view."
	input Disable(void) : "Disable the view proxy, and start modifying the player's view."
	input TeleportPlayerToProxy(void) : "Move the player to the view proxy."
	]

@PointClass base(BaseEntityPoint) 
	worldtext()
= point_worldtext: "An entity that displays a text message oriented in the world, at its origin."
	[
	spawnflags(flags)  =
		[
		1: "[1] Start Disabled" : 0
		]

	message(string) : "Entity Message"
	textsize(float) : "Text Size" : 10 : "Text Size."
	color(color255) : "Color" : "255 255 255"
	font(material) : "Font Material" : "editor/worldtext" : "The font material atlas to use for the text"

	// Inputs
	input Enable(void) : "Start displaying the message text, if the player is within the message radius."
	input Disable(void) : "Stop displaying the message text."
	input Toggle(void) : "Toggles the display status"
	input SetMessage(string) : "Set the message text."
	]

@PointClass base(BaseEntityPoint) = portalmp_gamerules: "Proxy entity for Portal 2 Gamerules. Appears nonfunctional."
	[

	// Inputs
	input AddRedTeamScore(integer) : "Add to P-Body's score (can be a negative number)"
	input AddBlueTeamScore(integer) : "Add to ATLAS's score (can be a negative number)"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/postprocess_controller.vmt")
	color(255 255 255)
= postprocess_controller: "An entity that controls the postprocess settings in the map."
	[
	fadetime(float) : "Fade-in time" : 2
	localcontraststrength(float) : "Local contrast strength [-1..x]" : 0
	localcontrastedgestrength(float) : "Local contrast edge strength [0..1]" : 0
	vignettestart(float) : "Vignette start distance [0..1]" : "0.8"
	vignetteend(float) : "Vignette end distance [0..x]" : "1.1"
	vignetteblurstrength(float) : "Vignette blur strength [0..1]" : 0
	fadetoblackstrength(float) : "Fade to black strength [0..1]" : 0
	depthblurfocaldistance(float) : "Depth-blur focal plane distance [0..1]" : 0
	depthblurstrength(float) : "Depth-blur effect strength [0..x]" : 0
	screenblurstrength(float) : "Full-screen blur strength [0..1]" : 0
	filmgrainstrength(float) : "Film grain strength [0..x]" : 0
	spawnflags(flags)  =
		[
		1: "[1] Master (Has priority if multiple postprocess_controllers exist)" : 0
		]


	// Inputs
	input SetFadeTime(float) : "Set the fade time between post process settings."
	input SetLocalContrastStrength(float) : "Set the local contrast strength."
	input SetLocalContrastEdgeStrength(float) : "Set the local contrast strength at the edge of the screen (controlled by vignette)."
	input SetVignetteStart(float) : "Set the vignette start distance (from screen center)."
	input SetVignetteEnd(float) : "Set the vignette end distance."
	input SetVignetteBlurStrength(float) : "Set the strength of the desaturated blur on the vignette."
	input SetFadeToBlackStrength(float) : "Set the fadeout strength."
	input SetDepthBlurFocalDistance(float) : "Set the focal distance of the depth blur effect (in the range [0,1])."
	input SetDepthBlurStrength(float) : "Set the depth blur effect strength."
	input SetScreenBlurStrength(float) : "Set the screen blur effect strength."
	input SetFilmGrainStrength(float) : "Set the film grain effect strength."
	]

@PointClass base(BaseEntityPoint) = projected_wall_entity: "A Hard Light Bridge. Probably not spawnable in Hammer. Can be detected with triggers that have the 'Everything' flag set."
	[
	]

@PointClass base(Origin, Angles, DetailPropBase) 
	studioprop()
= prop_detail: "Allows manually placing model-based detail props. These are normally generated by VBSP on materials with %detailtype set."
	[
	model(studio) : "World model" : : "The model to use for this prop."
	]

@PointClass base(Origin, Angles, DetailPropBase) 
	iconsprite("editor/ficool2/prop_detail_sprite")
	wirebox(position_ul, position_lr)
= prop_detail_sprite: "Allows manually placing sprite-based detail props. These are normally generated by VBSP on materials with %detailtype set."
	[
	position_ul(vector) : "Upper-Left Position" : "-10 20" : "Position of the upper-left corner of the sprite in the world."
	position_lr(vector) : "Lower-Right Position" : "10 0" : "Position of the lower-right corner of the sprite in the world."
	tex_ul(vector) : "Upper-Left Sprite Position" : "0 0" : "Position of the upper-left corner of the sprite in the texture."
	tex_size(vector) : "Sprite Size" : "64 64" : "Width and height of the sprite in the texture."
	tex_total_size(float) : "Spritesheet Size" : 512 : "The width of the spritesheet texture. \nValve Bug: the aspect ratio must match the default detail/detailsprites!"
	]

@PointClass base(BaseEntityPoint) 
	studio("models/editor/angle_helper.mdl")
= prop_glass_futbol_socket: "Invisible entity that holds futbols and fires an output. When a futbol comes close it will snap into place."
	[

	// Outputs
	output OnFutbolReleased(void) : "Player has taken the futbol out of this socket."
	output OnFutbolCaught(void) : "This socket has captured a futbol."
	]

@PointClass base(BaseEntityPoint) 
	studioprop("models/props/futbol_dispenser.mdl")
= prop_glass_futbol_spawner: "Spawns futbols. Will re-create a futbol when its created futbol breaks."
	[
	startwithfutbol(boolean) : "Start with Futbol" : 1 : "Set true if this spawner starts with a futbol in it. Set to false if this spawner's futbol will be manually placed in the map."

	// Inputs
	input ForceSpawn(void) : "Spawns a new futbol. Usually isn't necessary, because futbols respawn automatically if broken."

	// Outputs
	output OnFutbolSpawned(void) : "Created a new futbol."
	output OnFutbolGrabbed(void) : "Player has taken the futbol out of this spawner."
	]

@PointClass base(BaseEntityPoint) 
	studioprop("models/editor/prop_indicator_panel.mdl")
	line(255 255 0, targetname, IndicatorLights)
= prop_indicator_panel: "Indicator signs for the end of modern antlines. Shows either a tick/cross, or a circular countdown. Can also function as a env_texturetoggle for indicator lights."
	[
	timerduration(float) : "Timer Duration" : 0 : "Amount of time the counter will count down."
	enabled(boolean) : "Start visible?" : 1 : "Appears non-functional."
	istimer(choices) : "Starting State" : 0 : "Does this start as a checkmark or countdown display? Firing the appropriate inputs will switch the mode automatically." =
		[
		0: "Checkmark"
		1: "Timer"
		]

	ischecked(boolean) : "Starts checked?" : 0 : "If this is a checkmark sign, whether this starts checked or not."
	indicatorlights(target_destination) : "Indicator Lights" : : "If supplied, assumes this is a group of indicators lights to toggle when the indicator is toggled."
	skin(choices) : "[H] Skin" : 0 : "What kind of indicator to show as inside Hammer." =
		[
		0: "Check"
		1: "Cross"
		2: "Timer"
		]


	// Inputs
	input Check(void) : "Sets the indicator state to be 'checked', switching the screen to tick/cross mode."
	input Uncheck(void) : "Sets the indicator state to be 'unchecked'."
	input Start(void) : "Start counting down, switching the screen to timer mode."
	input Stop(void) : "Stop the counter at its current value."
	input Reset(void) : "Reset the timer back to its default value."
	]

@PointClass base(BaseEntityPoint, PortalBase) 
	studioprop("models/editor/prop_portal.mdl")
	bbox(-32 -16 -64, 32 16 64)
= prop_portal: "A portal."
	[
	activated(choices) : "Start Activated" : 0 : "An inactive portal will not be drawn and will not teleport entites" =
		[
		0: "Inactive"
		1: "Active"
		]

	portaltwo(choices) : "Portal Number" : 1 : "Which of the pair is this portal?" =
		[
		0: "Portal 1 (Blue/Cyan/Yellow)"
		1: "Portal 2 (Orange/Purple/Red)"
		]

	linkagegroupid(integer) : "Portal Group" : 0 : "Portal pair ID that it belongs to, 0=SP, 1=ATLAS, 2=P-Body"
	skin(choices) : "Hammer Skin" : 1 : "Which portal to show as?" =
		[
		0: "Blue Portal"
		1: "Orange Portal"
		3: "Cyan Portal"
		4: "Purple Portal"
		5: "Yellow Portal"
		6: "Red Portal"
		2: "Generic Portal"
		]

	halfwidth(float) : "Half-Width of the Portal." : 0
	halfheight(float) : "Half-Height of the Portal." : 0

	// Inputs
	input SetName(string) : "Naming your portals is fun"
	input SetActivatedState(bool) : "An inactive portal will not be drawn and will not teleport entites"
	input Fizzle(void) : "Makes a cool visual fizzle and properly shuts down the portal"
	input NewLocation(string) : "Sets this portals location and angles. This expects 6 floats with space delimiters, the format is 'x y z pitch yaw roll'"
	input Resize(string) : "Resizes the portal. Format is 'halfwidth halfheight'"
	input SetLinkageGroupId(integer) : "Sets the portal linkage ID.  If portal is open it will close and reopen with new portal linked."

	// Outputs
	output OnPlacedSuccessfully(void) : "When a portal is placed without failure, this output is fired."
	output OnEntityTeleportFromMe(void) : "When any entity is teleported from this portal to the linked partner."
	output OnPlayerTeleportFromMe(void) : "When the player is teleported from this portal to the linked partner."
	output OnEntityTeleportToMe(void) : "When any entity is teleported from this linked partner to the portal."
	output OnPlayerTeleportToMe(void) : "When the player is teleported from this linked partner to the portal."
	]

@PointClass base(Angles) 
	color(255 255 0)
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_static: "A prop that doesn't move and doesn't animate."
	[
	model(studio) : "World Model" : : "Specify the model to place."
	skin(integer) : "Skin" : 0 : "Some models have multiple versions of their textures, called skins. Set this to a number other than 0 to use that skin instead of the default."
	renderamt(integer) : "Alpha" : 255 : "Alpha of the fade, where 0 = fully transparent and 255 = fully opaque."
	rendercolor(color255) : "Color (R G B)" : "255 255 255"
	uniformscale(float) : "Uniform Scale Override" : 1 : "Resize the static prop uniformly."
	scale(vector) : "Scale Override" : "1 1 1" : "Resize the static prop."
	solid(choices) : "Collisions" : 6 =
		[
		0: "Not Solid"
		1: "Use BSP (QPhysics)"
		2: "Use Bounding Box"
		3: "Use Oriented Bounding Box"
		4: "Use Oriented Bounding Box, constrained to Yaw only"
		6: "Use VPhysics"
		]

	linedivider_levels(string) readonly : "----------------------------------------------------------------------------------------------------------"
	mincpulevel(choices) : "Minimum CPU Level" : 0 =
		[
		0: "default (low)"
		1: "low"
		2: "medium"
		3: "high"
		]

	maxcpulevel(choices) : "Maximum CPU Level" : 0 =
		[
		0: "default (high)"
		1: "low"
		2: "medium"
		3: "high"
		]

	mingpulevel(choices) : "Minimum GPU Level" : 0 =
		[
		0: "default (very low)"
		1: "very low"
		2: "low"
		3: "medium"
		4: "high"
		]

	maxgpulevel(choices) : "Maximum GPU Level" : 0 =
		[
		0: "default (high)"
		1: "very low"
		2: "low"
		3: "medium"
		4: "high"
		]

	linedivider_light(string) readonly : "----------------------------------------------------------------------------------------------------------"
	disableshadows(boolean) : "Disable Shadows" : 0 : "Prevent the entity from casting VRAD shadows"
	disableshadowdepth(boolean) : "Disable ShadowDepth" : 0 : "Used to disable rendering into shadow depth (for projected textures and CSM) for this entity."
	disablevertexlighting(boolean) : "Disable Vertex lighting" : 0 : "Disable per-vertex lighting on this prop."
	disableselfshadowing(boolean) : "Disable Self-Shadowing" : 0 : "When vertex lighting is enabled, prevent the geometry from self-shadowing -- casting shadows onto itself."
	ignorenormals(boolean) : "Ignore Surface Normal" : 0 : "When vertex lighting is enabled, ignore the surface normal of faces when calculating the vertex lighting. Useful for thin, translucent objects such as leaves on foliage props."
	enablelightbounce(boolean) : "Enable Bounced Lighting" : 0 : "Whether VRAD should create indirect lighting from this prop."
	drawinfastreflection(boolean) : "Render in Fast Reflections" : 0 : "If enabled, causes this entity/prop to to render in fast water reflections (i.e. when a water material specifies $reflectonlymarkedentities) and in the world impostor pass."
	lightingorigin(target_destination) : "Lighting Origin" : : "Select an info_lighting to specify a location to sample lighting from, instead of using this entity's origin."
	linedivider_fade(string) readonly : "----------------------------------------------------------------------------------------------------------"
	screenspacefade(boolean) : "Screen Space Fade" : 0 : "The method by which the fading distance should be determined. If 'No', the fade distances is the distance from the player's view to the object, in units. If 'Yes', the fade distance is the size of the object onscreen, in pixels."
	fademindist(float) : "Start Fade Dist/Pixels" : -1 : "Distance at which the prop starts to fade (<0 = use fademaxdist). If 'Screen Space Fade' is selected, this represents the number of pixels wide covered by the prop when it starts to fade."
	fademaxdist(float) : "End Fade Dist/Pixels" : 0 : "Maximum distance at which the prop is visible (0 = don't fade out). If 'Screen Space Fade' is selected, this represents the *minimum* number of pixels wide covered by the prop when it fades."
	fadescale(float) : "Fade Scale" : 1 : "If you specify a fade in the worldspawn, then the engine will forcibly fade out props even if fademindist/fademaxdist isn't specified.This scale factor gives you some control over the fade. Using 0 here turns off the forcible fades. Numbers smaller than 1 cause the prop to fade out at further distances, and greater than 1 cause it to fade out at closer distances."
	]

@PointClass base(BaseEntityPoint) 
	studioprop("models/editor/prop_testchamber_sign.mdl")
= prop_testchamber_sign: "Portal 2 Test chamber sign"
	[
	spawnflags(flags)  =
		[
		1: "[1] Icon 0 active" : 0
		2: "[2] Icon 1 active" : 0
		4: "[4] Icon 2 active" : 0
		8: "[8] Icon 3 active" : 0
		16: "[16] Icon 4 active" : 0
		32: "[32] Icon 5 active" : 0
		64: "[64] Icon 6 active" : 0
		128: "[128] Icon 7 active" : 0
		256: "[256] Icon 8 active" : 0
		512: "[512] Icon 9 active" : 0
		]

	enabled(boolean) : "Enabled" : 1 : "Whether or not to start on"
	sign_levelname(string) : "Level name" : : "Name of the puzzle to display above the main number"
	sign_startup_sequence(choices) : "Default Startup Sequence" : "Normal Flicker" : "Name of the startup sequence to use" =
		[
		"normal_flicker": "Normal Flicker"
		"dirty_flicker": "Dirty Flicker"
		"broken_flicker": "Broken Flicker"
		]

	sign_current(integer) : "Current level number" : : "Number of the level you are currently in"
	sign_total(integer) : "Total level number" : : "Number of levels in the testing track"
	sign_dirt(choices) : "Dirt amount" : -1 : "How dirty the sign should be" =
		[
		-1: "Clean"
		0: "Not very dirty"
		1: "A bit dirty"
		2: "Very dirty"
		]

	sign_icon0name(choices) : "Icon 0 Type" =
		[
		"": "Empty"
		"cube_drop": "Cube Drop"
		"cube_button": "Cube Button"
		"cube_bonk": "Cube Bonk"
		"drink_water": "Drink Water"
		"goop": "Goop"
		"crushers": "Crushers"
		"laser_cube": "Laser Cube"
		"laser_power": "Laser Power"
		"turret": "Turret"
		"turret_burn": "Turret Burn"
		"portal_fling": "Portal Fling 1"
		"portal_fling_2": "Portal Fling 2"
		"plate_fling": "Plate Fling"
		"bridges": "Bridges"
		"bridge_block": "Bridge Block"
		"grinders": "Grinders"
		"tbeams": "Tractor Beam"
		"tbeam_polarity": "Tractor Beam Polarity"
		"paint_bounce": "Paint Bounce"
		"paint_speed": "Paint Speed"
		"handoff": "Coop Handoff"
		"button_stand": "Button Stand"
		"danger_field": "Danger Field"
		]

	sign_icon1name(choices) : "Icon 1 Type" =
		[
		"": "Empty"
		"cube_drop": "Cube Drop"
		"cube_button": "Cube Button"
		"cube_bonk": "Cube Bonk"
		"drink_water": "Drink Water"
		"goop": "Goop"
		"crushers": "Crushers"
		"laser_cube": "Laser Cube"
		"laser_power": "Laser Power"
		"turret": "Turret"
		"turret_burn": "Turret Burn"
		"portal_fling": "Portal Fling 1"
		"portal_fling_2": "Portal Fling 2"
		"plate_fling": "Plate Fling"
		"bridges": "Bridges"
		"bridge_block": "Bridge Block"
		"grinders": "Grinders"
		"tbeams": "Tractor Beam"
		"tbeam_polarity": "Tractor Beam Polarity"
		"paint_bounce": "Paint Bounce"
		"paint_speed": "Paint Speed"
		"handoff": "Coop Handoff"
		"button_stand": "Button Stand"
		"danger_field": "Danger Field"
		]

	sign_icon2name(choices) : "Icon 2 Type" =
		[
		"": "Empty"
		"cube_drop": "Cube Drop"
		"cube_button": "Cube Button"
		"cube_bonk": "Cube Bonk"
		"drink_water": "Drink Water"
		"goop": "Goop"
		"crushers": "Crushers"
		"laser_cube": "Laser Cube"
		"laser_power": "Laser Power"
		"turret": "Turret"
		"turret_burn": "Turret Burn"
		"portal_fling": "Portal Fling 1"
		"portal_fling_2": "Portal Fling 2"
		"plate_fling": "Plate Fling"
		"bridges": "Bridges"
		"bridge_block": "Bridge Block"
		"grinders": "Grinders"
		"tbeams": "Tractor Beam"
		"tbeam_polarity": "Tractor Beam Polarity"
		"paint_bounce": "Paint Bounce"
		"paint_speed": "Paint Speed"
		"handoff": "Coop Handoff"
		"button_stand": "Button Stand"
		"danger_field": "Danger Field"
		]

	sign_icon3name(choices) : "Icon 3 Type" =
		[
		"": "Empty"
		"cube_drop": "Cube Drop"
		"cube_button": "Cube Button"
		"cube_bonk": "Cube Bonk"
		"drink_water": "Drink Water"
		"goop": "Goop"
		"crushers": "Crushers"
		"laser_cube": "Laser Cube"
		"laser_power": "Laser Power"
		"turret": "Turret"
		"turret_burn": "Turret Burn"
		"portal_fling": "Portal Fling 1"
		"portal_fling_2": "Portal Fling 2"
		"plate_fling": "Plate Fling"
		"bridges": "Bridges"
		"bridge_block": "Bridge Block"
		"grinders": "Grinders"
		"tbeams": "Tractor Beam"
		"tbeam_polarity": "Tractor Beam Polarity"
		"paint_bounce": "Paint Bounce"
		"paint_speed": "Paint Speed"
		"handoff": "Coop Handoff"
		"button_stand": "Button Stand"
		"danger_field": "Danger Field"
		]

	sign_icon4name(choices) : "Icon 4 Type" =
		[
		"": "Empty"
		"cube_drop": "Cube Drop"
		"cube_button": "Cube Button"
		"cube_bonk": "Cube Bonk"
		"drink_water": "Drink Water"
		"goop": "Goop"
		"crushers": "Crushers"
		"laser_cube": "Laser Cube"
		"laser_power": "Laser Power"
		"turret": "Turret"
		"turret_burn": "Turret Burn"
		"portal_fling": "Portal Fling 1"
		"portal_fling_2": "Portal Fling 2"
		"plate_fling": "Plate Fling"
		"bridges": "Bridges"
		"bridge_block": "Bridge Block"
		"grinders": "Grinders"
		"tbeams": "Tractor Beam"
		"tbeam_polarity": "Tractor Beam Polarity"
		"paint_bounce": "Paint Bounce"
		"paint_speed": "Paint Speed"
		"handoff": "Coop Handoff"
		"button_stand": "Button Stand"
		"danger_field": "Danger Field"
		]

	sign_icon5name(choices) : "Icon 5 Type" =
		[
		"": "Empty"
		"cube_drop": "Cube Drop"
		"cube_button": "Cube Button"
		"cube_bonk": "Cube Bonk"
		"drink_water": "Drink Water"
		"goop": "Goop"
		"crushers": "Crushers"
		"laser_cube": "Laser Cube"
		"laser_power": "Laser Power"
		"turret": "Turret"
		"turret_burn": "Turret Burn"
		"portal_fling": "Portal Fling 1"
		"portal_fling_2": "Portal Fling 2"
		"plate_fling": "Plate Fling"
		"bridges": "Bridges"
		"bridge_block": "Bridge Block"
		"grinders": "Grinders"
		"tbeams": "Tractor Beam"
		"tbeam_polarity": "Tractor Beam Polarity"
		"paint_bounce": "Paint Bounce"
		"paint_speed": "Paint Speed"
		"handoff": "Coop Handoff"
		"button_stand": "Button Stand"
		"danger_field": "Danger Field"
		]

	sign_icon6name(choices) : "Icon 6 Type" =
		[
		"": "Empty"
		"cube_drop": "Cube Drop"
		"cube_button": "Cube Button"
		"cube_bonk": "Cube Bonk"
		"drink_water": "Drink Water"
		"goop": "Goop"
		"crushers": "Crushers"
		"laser_cube": "Laser Cube"
		"laser_power": "Laser Power"
		"turret": "Turret"
		"turret_burn": "Turret Burn"
		"portal_fling": "Portal Fling 1"
		"portal_fling_2": "Portal Fling 2"
		"plate_fling": "Plate Fling"
		"bridges": "Bridges"
		"bridge_block": "Bridge Block"
		"grinders": "Grinders"
		"tbeams": "Tractor Beam"
		"tbeam_polarity": "Tractor Beam Polarity"
		"paint_bounce": "Paint Bounce"
		"paint_speed": "Paint Speed"
		"handoff": "Coop Handoff"
		"button_stand": "Button Stand"
		"danger_field": "Danger Field"
		]

	sign_icon7name(choices) : "Icon 7 Type" =
		[
		"": "Empty"
		"cube_drop": "Cube Drop"
		"cube_button": "Cube Button"
		"cube_bonk": "Cube Bonk"
		"drink_water": "Drink Water"
		"goop": "Goop"
		"crushers": "Crushers"
		"laser_cube": "Laser Cube"
		"laser_power": "Laser Power"
		"turret": "Turret"
		"turret_burn": "Turret Burn"
		"portal_fling": "Portal Fling 1"
		"portal_fling_2": "Portal Fling 2"
		"plate_fling": "Plate Fling"
		"bridges": "Bridges"
		"bridge_block": "Bridge Block"
		"grinders": "Grinders"
		"tbeams": "Tractor Beam"
		"tbeam_polarity": "Tractor Beam Polarity"
		"paint_bounce": "Paint Bounce"
		"paint_speed": "Paint Speed"
		"handoff": "Coop Handoff"
		"button_stand": "Button Stand"
		"danger_field": "Danger Field"
		]

	sign_icon8name(choices) : "Icon 8 Type" =
		[
		"": "Empty"
		"cube_drop": "Cube Drop"
		"cube_button": "Cube Button"
		"cube_bonk": "Cube Bonk"
		"drink_water": "Drink Water"
		"goop": "Goop"
		"crushers": "Crushers"
		"laser_cube": "Laser Cube"
		"laser_power": "Laser Power"
		"turret": "Turret"
		"turret_burn": "Turret Burn"
		"portal_fling": "Portal Fling 1"
		"portal_fling_2": "Portal Fling 2"
		"plate_fling": "Plate Fling"
		"bridges": "Bridges"
		"bridge_block": "Bridge Block"
		"grinders": "Grinders"
		"tbeams": "Tractor Beam"
		"tbeam_polarity": "Tractor Beam Polarity"
		"paint_bounce": "Paint Bounce"
		"paint_speed": "Paint Speed"
		"handoff": "Coop Handoff"
		"button_stand": "Button Stand"
		"danger_field": "Danger Field"
		]

	sign_icon9name(choices) : "Icon 9 Type" =
		[
		"": "Empty"
		"cube_drop": "Cube Drop"
		"cube_button": "Cube Button"
		"cube_bonk": "Cube Bonk"
		"drink_water": "Drink Water"
		"goop": "Goop"
		"crushers": "Crushers"
		"laser_cube": "Laser Cube"
		"laser_power": "Laser Power"
		"turret": "Turret"
		"turret_burn": "Turret Burn"
		"portal_fling": "Portal Fling 1"
		"portal_fling_2": "Portal Fling 2"
		"plate_fling": "Plate Fling"
		"bridges": "Bridges"
		"bridge_block": "Bridge Block"
		"grinders": "Grinders"
		"tbeams": "Tractor Beam"
		"tbeam_polarity": "Tractor Beam Polarity"
		"paint_bounce": "Paint Bounce"
		"paint_speed": "Paint Speed"
		"handoff": "Coop Handoff"
		"button_stand": "Button Stand"
		"danger_field": "Danger Field"
		]


	// Inputs
	input TurnOn(string) : "Turns the sign on. You can optionally set the startup sequence as the parameter. (normal_flicker, dirty_flicker, broken_flicker)"
	input TurnOff(void) : "Turns the sign off."
	input SetCurrentLevel(integer) : "Sets the current level number."
	input SetTotalLevel(integer) : "Sets the total level number."
	input SetLevelName(string) : "Sets the name of the level to show."
	input SetDirt(integer) : "Sets the amount of dirt."
	input SetIconActive(integer) : "Turns the specified icon on"
	input SetIconInactive(integer) : "Turns the specified icon off"
	]

@PointClass base(BaseEntityPoint) 
	studioprop("models/editor/prop_indicator_panel.mdl")
= prop_tic_tac_toe_panel: "Unknown use, likely for some kind of ping detector."
	[

	// Outputs
	output OnPlayer1Pinged(void) : "Fired if pinged by Player 1."
	output OnPlayer2Pinged(void) : "Fired if pinged by Player 2."
	]

@PointClass base(BaseEntityPoint, ResponseContext, ToggleDraw) 
	studioprop("models/props_bts/rocket.mdl")
= rocket_turret_projectile: "The rocket the Rocket Sentry fires."
	[

	// Inputs
	input RemovePaint(void) : "Cleans the rocket?"

	// Outputs
	output OnIgnite(void) : "On fire?"
	output OnFizzled(void) : "The rocket has been fizzled."
	]

@PointClass base(BaseEntityPoint) 
	sphere(radius)
	iconsprite("editor/scripted_sentence.vmt")
= scripted_sentence: "Scripted Sentence"
	[
	spawnflags(flags)  =
		[
		1: "[1] Fire Once" : 1
		2: "[2] Followers Only" : 0
		4: "[4] Interrupt Speech" : 1
		8: "[8] Concurrent" : 0
		16: "[16] Speak to Activator" : 1
		]

	sentence(string) : "Sentence Name"
	entity(string) : "Speaker Type"
	delay(string) : "Additional Sentence Time" : 0
	radius(integer) : "Search Radius" : 512
	refire(string) : "Delay Before Refire" : 3
	listener(string) : "Listener Type"
	volume(string) : "Volume 0-10" : 10
	attenuation(choices) : "Sound Radius" : 0 =
		[
		0: "Small Radius"
		1: "Medium Radius"
		2: "Large  Radius"
		3: "Play Everywhere"
		]


	// Inputs
	input BeginSentence(void) : "Starts the scripted sentence."

	// Outputs
	output OnBeginSentence(void) : "Fires when the sentence begins"
	output OnEndSentence(void) : "Fires when the sentence ends"
	]

@PointClass base(BaseEntityPoint, SystemLevelChoice) 
	studio("models/editor/scriptedsequence.mdl")
	color(255 0 255)
	sphere(m_flRadius)
= scripted_sequence: "Grabs an NPC and makes them play a specified set of animations. The NPC can be told to move to the scripted sequence position or can be told to play the script wherever they currently are. Multiple scripted sequences of the same name will frame-synchronize in the action animation once all the actors have moved to position. This allows tight interaction between actors (one actor grabbing another, hitting them, etc.) The flow is as follows:\n\n1) Move to position using the specified movement animation. If 'Move to Position' is set to NONE, skip to step 2.\n2) If forced to wait for another actor to move to position, play the pre-action idle animation, otherwise skip to step 3. If there is no pre-action idle specified, ACT_IDLE is used.\n3) Fire the OnBeginSequence output.\n4) Play the action animation. If no action animation is specified, skip to step 5.\n" +
		"5) Play the post-action idle animation. If none is specified, skip to step 6. If the 'Loop in Post Idle' spawnflag is set, keep playing the post-action idle until the script is cancelled. If no post-action idle animation is specified, ACT_IDLE is used.\n6) Fire the OnEndSequence output.\n7) If a next script to play is specified, hand the NPC to the next script and repeat this process for that script.\n\nThe MoveToPosition input runs steps 1 and 2, then waits while playing the pre-action idle animation until the BeginSequence input is received.\n\nIf the sequence has motion extraction in it, set the 'Don't Teleport NPC On End' spawnflag."
	[
	m_iszentity(target_destination) : "Target NPC" : : "The name or class name (such as 'npc_zombie') of an NPC to use for this script."
	m_iszidle(string) : "Pre Action Idle Animation" : : "The name of the sequence (such as 'idle01') or activity (such as 'ACT_IDLE') to play before the action animation if the NPC must wait for the script to be triggered. Use 'Start on Spawn' flag or MoveToPosition input to play this idle animation."
	m_iszentry(string) : "Entry Animation" : : "The name of the sequence (such as 'reload02') or activity (such as 'ACT_RELOAD') to play when the sequence starts, before transitioning to play the main action sequence."
	m_iszplay(string) : "Action Animation" : : "The name of the main sequence (such as 'reload02') or activity (such as 'ACT_RELOAD') to play."
	m_iszpostidle(string) : "Post Action Idle Animation" : : "The name of the sequence (such as 'idle01') or activity (such as 'ACT_IDLE') to play after the action animation. If the ''Loop in Post Idle'' spawnflag is not ticked, this will act as an Exit Animation, similar to the Entry Animation."
	m_iszcustommove(string) : "Custom Move Animation" : : "Used in conjunction with the 'Custom movement' setting for the 'Move to Position' property, specifies the sequence (such as 'crouch_run01') or activity (such as 'ACT_RUN') to use while moving to the scripted position."
	m_bloopactionsequence(boolean) : "Loop Action Animation?" : 0 : "Loops the action animation until the sequence is cancelled or interrupted."
	m_bsynchpostidles(boolean) : "Synch Post Idles?" : 0
	m_flradius(integer) : "Search Radius (0=everywhere)" : 0 : "Radius to search within for an NPC to use. 0 searches everywhere."
	m_flrepeat(integer) : "Repeat Rate ms" : 0
	m_fmoveto(choices) : "Move to Position" : 1 =
		[
		0: "No"
		1: "Walk"
		2: "Run"
		3: "Custom movement"
		4: "Instantaneous"
		5: "No - Turn to Face"
		]

	onplayerdeath(choices) : "On player death" : 0 : "What should this entity do if the player dies" =
		[
		0: "Do Nothing"
		1: "Cancel Script and return to AI"
		]

	m_isznextscript(target_destination) : "Next Script" : : "The name of the script to run immediately after this script completes. The NPC will not return to AI between the two scripts."
	m_bignoregravity(boolean) : "Ignore Gravity on NPC during script" : 0 : "If this is set to 'Yes', the NPC will not be subject to gravity while playing this script."
	m_bdisablenpccollisions(boolean) : "Disable NPC collisions during script" : 0 : "Useful for when NPCs playing scripts must interpenetrate while riding on trains, elevators, etc. This only disables collisions between the NPCs in the script and must be enabled on BOTH scripted_sequences."
	spawnflags(flags)  =
		[
		4: "[4] Repeatable" : 0
		8: "[8] Leave Corpse" : 0
		16: "[16] Start on Spawn" : 0
		32: "[32] No Interruptions" : 0
		64: "[64] Override AI" : 0
		128: "[128] Don't Teleport NPC On End" : 0
		256: "[256] Loop in Post Idle" : 0
		512: "[512] Priority Script" : 0
		1024: "[1024] Search Cyclically" : 0
		2048: "[2048] Don't Complain" : 0
		4096: "[4096] Allow actor death without stopping scene" : 0
		]


	// Inputs
	input BeginSequence(void) : "Summons an NPC to act out the scripted sequence."
	input MoveToPosition(void) : "Summons an NPC to the script location. They will play their scripted idle (or ACT_IDLE if none is specified) until BeginSequence is triggered."
	input CancelSequence(void) : "Stops the scripted sequence. If fired after a sequence starts, this input will not take effect until the NPC finishes playing the scripted action animation."

	// Outputs
	output OnBeginSequence(void) : "Fires when the action animation begins playing."
	output OnEndSequence(void) : "Fires when the action animation completes."
	output OnCancelSequence(void) : "Fires when the sequence is cancelled."
	output OnCancelFailedSequence(void) : "Fires when the sequence is cancelled without ever playing (OnCancelSequence will also fire)."
	output OnScriptEvent01(void) : "Fires when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 1 } in the QC."
	output OnScriptEvent02(void) : "Fires when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 2 } in the QC."
	output OnScriptEvent03(void) : "Fires when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 3 } in the QC."
	output OnScriptEvent04(void) : "Fires when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 4 } in the QC."
	output OnScriptEvent05(void) : "Fires when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 5 } in the QC."
	output OnScriptEvent06(void) : "Fires when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 6 } in the QC."
	output OnScriptEvent07(void) : "Fires when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 7 } in the QC."
	output OnScriptEvent08(void) : "Fires when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 8 } in the QC."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/ficool2/scripted_target.vmt")
= scripted_target: "Scripted Target"
	[
	startdisabled(boolean) : "Start Disabled" : 1
	m_iszentity(npcclass) : "Target NPC"
	m_flradius(integer) : "Search Radius (0=everywhere)" : 0 : "Radius to search within for an NPC to use. 0 searches everywhere."
	movespeed(integer) : "Move Speed" : 5
	pauseduration(integer) : "Pause Duration" : 0
	effectduration(integer) : "Effect Duration" : 2
	target(target_destination) : "Next Target"

	// Inputs
	input Enable(void) : "Enable this entity"
	input Disable(void) : "Disable this entity"

	// Outputs
	output AtTarget(void) : "Fires when NPC reaches this target"
	output LeaveTarget(void) : "Fires when NPC leaves this target"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/shadow_control.vmt")
	color(200 0 0)
	sphere(distance)
= shadow_control: "An entity to control the shadows in the map."
	[
	angles(angle) : "Pitch Yaw Roll (Y Z X)" : "80 30 0" : "This is the shadow direction. Pitch is rotation around the Y axis, yaw is the rotation around the Z axis, and roll is the rotation around the X axis."
	color(color255) : "Shadow Color" : "128 128 128" : "This is the color of the shadows."
	distance(float) : "Maximum Distance" : 75 : "This is the maximum distance the shadow is allowed to cast, in Source units."
	disableallshadows(boolean) : "All Shadows Disabled" : 0
	enableshadowsfromlocallights(boolean) : "Enable Local Light Shadows" : 0 : "Enables RTT dynamic shadow angles, which cause shadows to face away from the nearest light source instead of always using this entity's direction. This is a new feature and the original Half-Life 2 had no dynamic shadow angles. Leave this off if they are not desired."

	// Inputs
	input color(color255) : "Set the shadow color."
	input direction(vector) : "Set the shadow direction."
	input SetDistance(float) : "Set the maximum shadow cast distance."
	input SetAngles(string) : "Set the shadow direction."
	input SetShadowsDisabled(integer) : "Set shadows disabled state."
	input SetShadowsFromLocalLightsEnabled(integer) : "Set local light shadows enabled state."
	]

@PointClass base(BaseEntityPoint) 
	color(173 223 245)
	studioprop("models/editor/sky_camera.mdl")
	sphere(fogstart)
	sphere(fogend)
= sky_camera: "An entity used to control the 3D Skybox. Its origin is used to determine the 3D Skybox's position relative to the map. Place this entity, in the 3D Skybox, at the point where the origin of the map should be."
	[
	parentname(target_destination) : "Parent" : : "The name of the entity to move with. NOTE: sky_camera's position is normally only updated on spawn. Fire the ForceUpdate or StartUpdating inputs to update the sky_camera's position! You might also want to enable Use Angles for Sky."
	spawnflags(flags)  =
		[
		1: "[1] Master (takes priority if multiple sky_cameras exist)" : 0
		2: "[2] Continuously update position (for moving sky_cameras)" : 0
		]

	skycolor(color255) : "Sky Color" : "255 255 255 0" : "Causes the skybox to use a solid color instead of the sky texture specified in worldspawn. Blended alpha is unfortunately not supported, but an alpha of '0' disables the effect and any alpha greater than that (e.g. 255) enables the effect."
	scale(integer) : "3D Skybox scale" : 16 : "Scale of the skybox."
	fogenable(boolean) : "Fog Enable" : 0
	fogblend(boolean) : "Fog Blend" : 0
	use_angles(boolean) : "Use Angles for Fog Dir" : 0
	use_angles_for_sky(boolean) : "Use Angles for Sky" : 0 : "Uses angles for actual skybox rotation, as if the world were tilted on this entity's axis."
	fogcolor(color255) : "Primary Fog Color" : "255 255 255"
	fogcolor2(color255) : "Secondary Fog Color" : "255 255 255"
	fogdir(string) : "Primary Fog Direction" : "1 0 0"
	fogstart(float) : "Fog Start" : 500 : "Distance at which the skybox fog should start."
	fogend(float) : "Fog End" : 2000 : "Distance at which the skybox fog should be fully opaque."
	fogmaxdensity(float) : "Fog Max Density [0..1]" : 1
	hdrcolorscale(float) : "HDR color scale." : 1 : "float value to multiply fog color by when running in HDR mode."

	// Inputs
	input ForceUpdate(void) : "Forces the 3D skybox to update with this sky_camera's position."
	input StartUpdating(void) : "Begins per-tick skybox updating, which is needed if you want this sky_camera to move."
	input StopUpdating(void) : "Ends per-tick skybox updating if it was enabled before."
	input ActivateSkybox(void) : "Make this skybox the active one."
	input DeactivateSkybox(void) : "Stops making this sky_camera the active skybox if it is currently the active skybox, which causes the sky to clear."
	input SetFogStartDist(float) : "Sets the fog start distance."
	input SetFogEndDist(float) : "Sets the fog end distance."
	input TurnOnFog(void) : "Turns the fog on."
	input TurnOffFog(void) : "Turns the fog off."
	input SetFogColor(color255) : "Sets the primary fog color."
	input SetFogColorSecondary(color255) : "Sets the secondary fog color."
	input SetFarZ(integer) : "Sets the far clip plane distance."
	input SetFogMaxDensity(float) : "0 to 1, set the fog's max density"
	input SetSkyColor(color255) : "Sets the sky color."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/skybox_swapper")
= skybox_swapper: "An entity that precaches skybox materials and swaps them on trigger."
	[
	skyboxname(string) : "Skybox Material Name" : "sky_dust"

	// Inputs
	input Trigger(void) : "Swap to this skybox."
	]

@PointClass base(BaseEntityPoint, Angles) 
	size(-2 -2 -2, 2 2 2)
	color(200 0 0)
= spark_shower: "Temporary spark shower effect created by env_explosions.When spawned, moves in the forward direction whilst producing sparks, until it fades out."
	[
	]

@PointClass base(BaseEntityPoint, EnableDisable) 
	iconsprite("editor/shadow_control.vmt")
	color(200 0 0)
	frustum(fov, nearz, distance, color, -1)
	sphere(distance)
	sphere(nearz)
= sunlight_shadow_control: "An entity to control the sunlight that casts shadows in the map."
	[
	angles(angle) : "Pitch Yaw Roll (Y Z X)" : "50 40 0" : "This is the light cast direction. Pitch is rotation around the Y axis, yaw is the rotation around the Z axis, and roll is the rotation around the X axis."
	color(color255) : "Light Color" : "255 255 255 1" : "This is the color of the sunlight."
	colortransitiontime(float) : "Color Transition Time" : "0.5" : "This is the number of seconds it takes to get from 0 to 255."
	distance(float) : "Distance" : 10000 : "This is the distance of the sun, greater distances produce more orthogonal shadows."
	fov(float) : "FOV" : 5 : "This is the field of view that the sunlight casts in. Use lower values for more distant sun and sharper shadows."
	nearz(float) : "NearZ Distance" : 512 : "This controls the near clipping plane's distance from the player."
	northoffset(float) : "North Offset" : 200 : "This offsets the from the player position where the sun is attached."
	texturename(material) : "Texture Name" : "effects/flashlight001"
	enableshadows(boolean) : "Enable Shadows" : 0 : "Enables/disables shadows from this projected texture."

	// Inputs
	input LightColor(color255) : "Set the light color."
	input SetAngles(string) : "Set the sun direction."
	input SetDistance(float) : "Set the distance of the sun."
	input SetFOV(float) : "Set the field of view the sun casts."
	input SetNearZDistance(float) : "Set the near z distance."
	input SetNorthOffset(float) : "Sets the north offset."
	input SetTexture(string) : "Set the texture cookie of the sunlight."
	input EnableShadows(bool) : "Set the if shadows are enabled"
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/tanktrain_ai.vmt")
	line(255 255 255, targetname, target)
= tanktrain_ai: "Tank movement AI. This takes control of a func_tracktrain, moving it to follow a target."
	[
	target(target_destination) : "Train Name" : : "The func_tracktrain to control."
	startsound(sound) : "Start Moving Sound" : "vehicles/diesel_start1.wav"
	enginesound(sound) : "Engine Loop Sound" : "vehicles/diesel_turbo_loop1.wav"
	movementsound(sound) : "Vehicle Movement Sound" : "vehicles/tank_treads_loop1.wav"

	// Inputs
	input TargetEntity(string) : "Change the tank to target the specified entity."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/tanktrain_aitarget.vmt")
	line(255 255 255, targetname, target)
	line(255 255 255, targetname, newtarget)
= tanktrain_aitarget: "An entity that changes the target of a func_tank or tanktrain_ai entity. This simply fires TargetEntity on the tank when this is USEd."
	[
	target(target_destination) : "Tank AI Entity" : : "The tanktrain_ai entity to change the target of."
	newtarget(target_destination) : "New Target Entity" : : "The entity to tell the tanktrain_ai to target."
	]

@PointClass base(BaseEntityPoint) = target_changegravity: "Changes the gravity of the player who activates this entity."
	[
	gravity(integer) : "Gravity" : 1 : "Gravity."

	// Inputs
	input ChangeGrav(void) : "Change the activator's gravity."
	input ResetGrav(void) : "Reset the activator's gravity."
	]

@PointClass base(BaseEntityPoint) = test_sidelist: "Test entity for Ken!"
	[
	sides(sidelist) : "Sides"
	]

@PointClass base(BaseEntityPoint) 
	color(255 255 255)
	iconsprite("editor/ficool2/test_traceline")
= test_traceline: "A debugging tool for testing tracelines. Pretty much useless for other people. This spins wildly, tracing lines to the closest brush."
	[
	]

@SolidClass base(BaseEntityBrush, EnableDisable) = trigger_brush: "A trigger volume that can be used, and can relay touches to its parent."
	[
	spawnflags(flags)  =
		[
		1: "[1] Ignore Players" : 1
		2: "[2] Ignore NPCs" : 1
		4: "[4] Ignore func_pushable" : 1
		8: "[8] Ignore touches" : 1
		16: "[16] Ignore +USE" : 1
		]

	inputfilter(integer) : "Input Flags" : 0 : "Filters what kind of entities can interact with this. Set this in spawnflags instead."
	dontmessageparent(choices) : "Proxy To Parent" : 0 : "Relay touching or USEing this entity to the parent entity. The input filters will still apply." =
		[
		1: "No"
		0: "Yes"
		]


	// Outputs
	output OnStartTouch(void) : "Fired when something touches us."
	output OnEndTouch(void) : "Fired when something stops touching us."
	output OnUse(void) : "Fired when the player (or I/O) USEs us."
	]

@PointClass base(BaseEntityPoint) 
	studioprop("models/editor/vgui_arrows.mdl")
= vgui_level_placard_display: "Pre-level display placard entity."
	[
	]

@PointClass base(BaseEntityPoint) 
	color(200 200 0)
	studioprop("models/editor/vgui_arrows.mdl")
	sphere(width)
	sphere(height)
= vgui_movie_display: "Movie Display"
	[
	startenabled(boolean) : "Start enabled" : 0 : "Whether or not the video should start enabled."
	startpaused(boolean) : "Start paused" : 0 : "Whether or not the video should start paused."
	displaytext(string) : "Display Text"
	moviefilename(choices) : "Movie to display" : "media/aperture_logo.webm" : "The movie to display. You can also type in the filename of a custom movie here." =
		[
		"media/coop_black_screen.webm": "Black Screen"
		"media/aperture_logo.webm": "Aperture Logo"
		"media/animalking.webm": "Animal King"
		"media/aperture_appear_horiz.webm": "Aperture Appear (Horizontal)"
		"media/aperture_appear_vert.webm": "Aperture Appear (Vertical)"
		"media/bluescreen.webm": "Blue Screen Of Death"
		"media/exercises_horiz.webm": "Evacuation Training (Horizontal)"
		"media/exercises_vert.webm": "Evacuation Training (Vertical)"
		"media/faithplate.webm": "Aerial Faith Plate"
		"media/fizzler.webm": "Emancipation Grid"
		"media/hard_light.webm": "Light Bridge"
		"media/laser_danger_horiz.webm": "Laser Danger (Horizontal)"
		"media/laser_danger_vert.webm": "Laser Danger (Vertical)"
		"media/laser_portal.webm": "Laser Through Portal"
		"media/plc_blue_horiz.webm": "Please Remain Calm (Horizontal)"
		"media/plc_blue_vert.webm": "Please Remain Calm (Vertical)"
		"media/turret_colours_type.webm": "Turret Case Options"
		"media/turret_dropin.webm": "Turret Drop In"
		"media/turret_exploded_grey.webm": "Exploded Turret"
		"media/menu_act01.webm": "Menu Background: Act 1"
		"media/menu_act02.webm": "Menu Background: Act 2"
		"media/menu_act03.webm": "Menu Background: Act 3"
		"media/menu_act04.webm": "Menu Background: Act 4"
		"media/menu_act05.webm": "Menu Background: Act 5"
		"media/sp_30_a4_finale5.webm": "SP Ending"
		"media/sp_credits_bg.webm": "Want You Gone Background"
		"media/sp_a5_credits.webm": "Space"
		"media/sp_ending_callback.webm": "Space Wheatley"
		"media/coop_bluebot_load.webm": "ATLAS Schematic"
		"media/coop_orangebot_load.webm": "P-Body Schematic"
		"media/coop_bots_load.webm": "Conveyor Bots"
		"media/coop_bots_load_wave.webm": "Waving Bots"
		"media/coop_intro.webm": "Coop Intro"
		"media/coop_outro.webm": "Coop Outro"
		"media/coop_bts_blueprints.webm": "Coop Disc: Blueprints"
		"media/coop_bts_powergrid_01.webm": "Coop Disc: Power Grid 1"
		"media/coop_bts_powergrid_02.webm": "Coop Disc: Power Grid 2"
		"media/coop_bts_radar_01.webm": "Coop Disc: Radar 1"
		"media/coop_bts_radar_02.webm": "Coop Disc: Radar 2"
		"media/coop_bts_security_01.webm": "Coop Disc: Security 1"
		"media/coop_bts_security_02.webm": "Coop Disc: Security 2"
		"media/coop_bts_radar.webm": "Coop Disc: Unused Radar"
		"media/coop_bts_security.webm": "Coop Disc: Unused Security"
		"media/insert_disc.webm": "Insert Disc"
		"media/dlc1_endmovie.webm": "Art Therapy Outro"
		"media/community_bg1.webm": "Community Maps Background"
		"media/intro_movie.webm": "Community Maps Intro"
		"media/attract01.webm": "Extras: Coop Trailer"
		"media/attract02.webm": "Extras: SP Trailer"
		"media/attrct_boots.webm": "Extras: Long Fall Boots"
		"media/attract_bot_trust.webm": "Extras: Bot Trust"
		"media/attract_panels.webm": "Extras: Panels"
		"media/attract_turrets.webm": "Extras: Turrets"
		]

	groupname(string) : "Group Name"
	looping(boolean) : "Loop Movie" : 0
	width(integer) : "Panel Width in World (Green)" : 256 : "Width of the panel in units."
	height(integer) : "Panel Height in World (Blue)" : 128 : "Height of the panel in units."
	stretch(boolean) : "Stretch to Fill" : 0
	forcedslave(boolean) : "Forced slave" : 0
	forceprecache(boolean) : "Force precache" : 0 : "Precache the movie referred to by Movie Filename on entity spawn."
	noscanline(boolean) : "Disable Scanline Overlay" : 0 : "Disables the default scanline overlay."
	custom_uv(boolean) : "Use Custom UVs" : 0 : "Enables custom uv coordinates to be used."
	u_min(float) : "U Min" : 0 : "U Min (Left) Coordinate (0-1). Needs Custom UVs to be enabled!"
	u_max(float) : "U Max" : 0 : "U Max (Right) Coordinate (0-1). Needs Custom UVs to be enabled!"
	v_min(float) : "V Min" : 1 : "V Min (Top) Coordinate (0-1). Needs Custom UVs to be enabled!"
	v_max(float) : "V Max" : 1 : "V Max (Bottom) Coordinate (0-1). Needs Custom UVs to be enabled!"
	volume(integer) : "Audio Volume" : 0 : "Audio volume to use for video playback. 0-10"

	// Inputs
	input Enable(void) : "Make movie visible."
	input Disable(void) : "Make movie invisible."
	input Pause(void) : "Pauses the video playback."
	input Resume(void) : "Resumes the video playback."
	input SetPaused(bool) : "Sets the playback state using the parameter."
	input SetDisplayText(string) : "Sets the display text."
	input SetMovie(string) : "Sets the movie to display."
	input SetUseCustomUVs(bool) : "Use custom UVs."
	input TakeOverAsMaster(void) : "Start using this video as the master of it's group."
	input SetUMin(float) : "Set the minimum U."
	input SetUMax(float) : "Set the maximum U."
	input SetVMin(float) : "Set the minimum V."
	input SetVMax(float) : "Set the maximum V."
	]

@PointClass base(BaseEntityPoint) 
	studioprop("models/editor/vgui_arrows.mdl")
= vgui_mp_lobby_display: "VGUI entity to display Coop levels in the Hub."
	[
	]

@PointClass base(BaseEntityPoint) 
	studioprop("models/editor/vgui_arrows.mdl")
= vgui_neurotoxin_countdown: "Neurotoxin Countdown display. AddOutput can be used to change/reset timer countdown."
	[
	width(integer) : "Panel width" : 256 : "Width of the screen in units."
	height(integer) : "Panel height" : 128 : "Height of the screen in units."
	countdown(integer) : "Countdown time" : 60 : "Countdown time in seconds."

	// Inputs
	input Enable(void) : "Start/Show countdown."
	input Disable(void) : "Hide coundown, will not reset."
	input SetTime(float) : "Set time of countdown"
	input Pause(void) : "Pauses the timer without hiding the panel."
	input Resume(void) : "Resumes the paused timer."
	]

@PointClass base(BaseEntityPoint) 
	color(200 200 0)
	studioprop("models/editor/vgui_arrows.mdl")
	sphere(width)
	sphere(height)
= vgui_screen: "A VGUI screen. Useful for in-world monitors."
	[
	panelname(string) : "Panel Name" : : "The type of display to show."
	overlaymaterial(material) : "Overlay Material" : : "Name of a material to overlay over the top of the VGUI screen. NOTE: This material must write Z for the VGUI screen to work."
	width(integer) : "Panel Width in World (Green)" : 256 : "Width of the panel in units."
	height(integer) : "Panel Height in World (Blue)" : 128 : "Height of the panel in units."
	istransparent(boolean) : "Is Transparent?" : 0 : "Set this to true if you would like your background to be invisible instead of a black fill."

	// Inputs
	input SetActive(void) : "Make the vgui screen visible."
	input SetInactive(void) : "Make the vgui screen invisible."
	]

@PointClass base(BaseEntityPoint) 
	color(200 200 0)
	studioprop("models/editor/vgui_arrows.mdl")
	sphere(width)
	sphere(height)
= vgui_slideshow_display: "Slideshow Display"
	[
	displaytext(string) : "Display Text"
	directory(string) : "Image Directory (materials/vgui/...)" : "slideshow"
	minslidetime(float) : "Min Slide Time" : "0.5" : "Minimum amount of random time that a slide is displayed."
	maxslidetime(float) : "Max Slide Time" : "0.5" : "Maximum amount of random time that a slide is displayed."
	cycletype(choices) : "Cycle Type" : 0 =
		[
		0: "Random"
		1: "Forward"
		2: "Backward"
		]

	nolistrepeat(choices) : "No List Repeat" : 0 =
		[
		0: "Allow List Repeats"
		1: "No List Repeats"
		]

	width(integer) : "Panel width" : 256 : "Width of the panel in units."
	height(integer) : "Panel height" : 128 : "Height of the panel in units."

	// Inputs
	input Enable(void) : "Make slideshow visible."
	input Disable(void) : "Make slideshow invisible."
	input SetDisplayText(string) : "Sets the display text."
	input RemoveAllSlides(void) : "Removes all slides from slideshow."
	input AddSlides(string) : "Adds slides by keyword."
	input SetMinSlideTime(float) : "Sets min random time between slides."
	input SetMaxSlideTime(float) : "Sets max random time between slides."
	input SetCycleType(integer) : "0 - random, 1 - forward, 2 - backward"
	input SetNoListRepeat(bool) : "Sets if lists can be randomly picked twice in a row."
	]

@PointClass base(BaseEntityPoint) 
	studioprop("models/editor/vgui_arrows.mdl")
	sphere(width)
	sphere(height)
= vgui_world_text_panel: "A VGUI world panel that can be placed and modified by entity logic and display localized text"
	[
	enabled(boolean) : "Enabled by default?" : 1
	displaytext(string) : "Display Text" : : "The default text to display"
	displaytextoption(string) : "Display Text Option" : : "Text that will be inserted in the place of a %s1 if you token has one - if you don't know what that is, don't use this"
	font(string) : "Font" : "DefaultLarge" : "The font that will be used (should match an entry in your Scheme.res file)"
	width(integer) : "Panel Width in World (Green)" : 256 : "Width of the panel in units."
	height(integer) : "Panel Height in World (Blue)" : 128 : "Height of the panel in units."
	textpanelwidth(integer) : "Text Panel Width" : 256 : "Sometimes the text panel needs to be smaller to force a wrap, but keep the same font size."
	textcolor(color255) : "Text Color (R G B)" : "255 255 255" : "The color of the text."

	// Inputs
	input Enable(void) : "Make text visible."
	input Disable(void) : "Make text invisible."
	input SetDisplayText(string) : "Sets the display text."
	input SetDisplayTextOption(string) : "Sets the display text option."
	]

@PointClass base(BaseEntityPoint) 
	iconsprite("editor/waterlodcontrol.vmt")
	sphere(cheapwaterstartdistance)
	sphere(cheapwaterenddistance)
	color(64 64 200)
= water_lod_control: "An entity used to control the LOD behavior of any water in the map. If your map has water, this entity is required."
	[
	cheapwaterstartdistance(float) : "Start Transition to Cheap Water" : 1000 : "This is the distance from the camera that water will start transitioning to cheap water, in unit."
	cheapwaterenddistance(float) : "End Transition to Cheap Water" : 2000 : "This is the distance from the camera that water will finish transitioning to cheap water, in unit."

	// Inputs
	input SetCheapWaterStartDistance(float) : "Set the distance that water starts transitioning to cheap water."
	input SetCheapWaterEndDistance(float) : "Set the distance that water finishes transitioning to cheap water."
	]

@SolidClass base(BaseEntity, ResponseContext) = worldspawn: "This is the world entity. Each map can only contain one, and it's automatically created for you."
	[
	message(string) : "Map Description / Title"
	skyname(string) : "SkyBox Texture Name" : : "Texture used for the 2D skybox."
	chaptertitle(string) : "Chapter Title" : : "Chapter Title that appears onscreen when this level starts."
	startdark(boolean) : "Level Fade In" : 0
	newunit(choices) : "New Level Unit" : 0 : "Used to clear out savegame data of previous levels to keep the savegame size as small as possible. Only set it to Yes if the player cannot return to any previous levels." =
		[
		0: "No, keep current"
		1: "Yes, clear previous levels"
		]

	timeofday(choices) : "Time of day" : 0 =
		[
		0: "Midnight"
		1: "Dawn"
		2: "Morning"
		3: "Afternoon"
		4: "Dusk"
		5: "Evening"
		]

	maxoccludeearea(float) : "Max occludee area" : 0 : "[Used on PC] Prevents occlusion testing for entities that take up more than X% of the screen."
	minoccluderarea(float) : "Min occluder area" : 0 : "[Used on PC] Prevents occluders from being used if they take up less than X% of the screen."
	maxpropscreenwidth(float) : "Start Fade Pixels" : -1 : "Number of pixels wide at which all props in the level start to fade (<0 = use fademaxdist). This number is ignored if the prop has a specific fade distance specified."
	minpropscreenwidth(float) : "End Fade Pixels" : 0 : "Minimum number of pixels wide at which the prop is visible (0 = don't fade out). This number is ignored if the prop has a specific fade distance specified."
	detailvbsp(string) : "Detail.vbsp file" : "detail.vbsp" : "Detail .vbsp file to use for emitting detail props (found in directory <root>/modname)"
	detailmaterial(material) : "Detail material file" : "detail/detailsprites" : "Material for detail sprites to use for drawing detail props"
	coldworld(boolean) : "World is cold" : 0 : "Emit steam from NPC's mouths and similar effects."
	paintinmap(boolean) : "Enable Paint" : 0 : "Enable code for spreading paint on surfaces, and bouncing physics objects around."
	maxblobcount(integer) : "Gel Blob Limit" : 250 : "Number of Gel blobs that can exist. Maximum is 250."
	]

@BaseClass base(BaseEntityAnimating, DamageFilter) = BaseLogicalNPC
	[
	health(integer) : "Health" : : "Overrides the NPC's default health. Cannot be higher than Max Health."
	max_health(integer) : "Max Health" : : "Overrides the NPC's max health. Health cannot exceed this amount."
	squadname(string) : "Squad Name" : : "NPCs that are in the same squad (i.e. have matching squad names) will share information about enemies, and will take turns attacking and covering each other."
	hintgroup(string) : "Hint Group" : : "Hint groups are used by NPCs to restrict their hint-node searching to a subset of the map's hint nodes. Only hint nodes with matching hint group names will be considered by this NPC."
	hintlimiting(boolean) : "Hint Limit Nav" : 0 : "Limits NPC to using specified hint group for navigation requests, but does not limit local navigation."
	additionalequipment(choices) : "Weapon Held" : 0 : "Gives the NPC a weapon. NPCs may attack oddly or not attack if they don't know how to use a particular weapon." =
		[
		0: "Nothing"
		]

	relationship(string) : "Relationship" : : "Changes whether this NPC likes or dislikes certain others. Format is: <string|targetname or classname> <string|disposition> <integer|rank>. Values for disposition are: D_HT (Hate), D_FR (Fear), D_LI (Like), D_NU, (Neutral)."
	spawnflags(flags)  =
		[
		1: "[1] Wait Till Seen" : 0
		2: "[2] Gag (No IDLE sounds until angry)" : 0
		4: "[4] Fall to ground (unchecked means *teleport* to ground)" : 1
		8: "[8] Drop Healthkit" : 0
		16: "[16] Efficient - Don't acquire enemies or avoid obstacles" : 0
		128: "[128] Wait For Script" : 0
		256: "[256] Long Visibility/Shoot" : 0
		512: "[512] Fade Corpse" : 1
		1024: "[1024] Think outside PVS" : 0
		2048: "[2048] Template NPC (used by npc_maker, will not spawn)" : 0
		4096: "[4096] Do Alternate collision/player avoidance for this NPC (largely obsolete, use Start/StopScripting)" : 0
		8192: "[8192] Don't drop weapons" : 0
		16384: "[16384] Ignore player push (dont give way to player)" : 0
		]

	sleepstate(choices) : "Sleep State" : 0 : "Holds the NPC in stasis until specified condition. See also 'Wake Radius' and 'Wake Squad'." =
		[
		0: "None"
		1: "Waiting for threat"
		2: "Waiting for PVS"
		3: "Waiting for input, ignore PVS"
		4: "Auto PVS"
		5: "Auto PVS after PVS"
		]

	wakeradius(float) : "Wake Radius" : 0 : "Auto-wake if player within this distance"
	wakesquad(boolean) : "Wake Squad" : 0 : "Wake all of the NPCs squadmates if the NPC is woken"
	enemyfilter(filterclass) : "Enemy Filter" : : "Filter by which to filter potential enemies"
	ignoreunseenenemies(boolean) : "Ignore unseen enemies" : 0 : "Prefer visible enemies, regardless of distance or relationship priority"
	physdamagescale(float) : "Physics Impact Damage Scale" : "1.0" : "Scales damage energy when this character is hit by a physics object. With a value of 0 the NPC will take no damage from physics."
	velocity(vector) : "Local Velocity" : : "Velocity generated by the entity, can cause strange behavior if changed with AddOutput."
	basevelocity(vector) : "Base Velocity" : : "Velocity to start with on spawn. Can be changed with AddOutput, where it will be immediately added."
	avelocity(vector) : "Angular Velocity" : : "Angular velocity to start with on spawn. Can be changed with AddOutput, where it will be immediately added."
	waterlevel(choices) : "Water Level" : 0 : "Current water level of the entity, can cause strange behavior if changed with AddOutput." =
		[
		0: "Not in Water"
		1: "Feet"
		2: "Waist"
		3: "Eyes"
		]


	// Inputs
	input SetRelationship(string) : "Changes this entity's relationship with another entity or class. Format: <entityname/classname> <D_HT/D_FR/D_LI/D_NU> <priority>"
	input SetEnemyFilter(target_destination) : "Changes this NPC's enemy filter to the named filter."
	input SetHealth(integer) : "Set this NPC's health."
	input PhysDamageScale(float) : "Sets the value that scales damage energy when this character is hit by a physics object. NOTE: 0 means this feature is disabled for backwards compatibility."
	input Break(void) : "Makes the NPC die and disappear."
	input StartScripting(void) : "Enter scripting state. In this state, NPCs ignore a variety of stimulus that would make them break out of their scripts: They ignore danger sounds, ignore +USE, don't idle speak or respond to other NPC's idle speech, and so on."
	input StopScripting(void) : "Exit scripting state."
	input SetSquad(string) : "Set the name of this NPC's squad. It will be removed from any existing squad automatically. Leaving the parameter blank will remove the NPC from any existing squad."
	input Wake(void) : "Wakes up the NPC if it is sleeping."
	input ForgetEntity(target_destination) : "Clears out the NPC's knowledge of a named entity."
	input GagEnable(void) : "Turn on the NPC Gag flag. NPC won't speak outside of choreographed scenes."
	input GagDisable(void) : "Turn off the NPC Gag flag."
	input IgnoreDangerSounds(float) : "Ignore danger sounds for the specified number of seconds."
	input HolsterWeapon(void) : "Force the NPC to holster their weapon. Ignored if the NPC is scripting, if the NPC's weapon is already holstered, or if the NPC doesn't use weapons."
	input HolsterAndDestroyWeapon(void) : "Identical to HolsterWeapon, except the weapon is destroyed once it has been holstered and concealed."
	input UnholsterWeapon(void) : "Force the NPC to draw their weapon. Ignored if the NPC is scripting, if the NPC's weapon is already drawn, or if the NPC doesn't use weapons."
	input ForceInteractionWithNPC(string) : "Force the NPC to use a dynamic interaction with another NPC. Parameter format: <target NPC name> <dynamic interaction name>"
	input UpdateEnemyMemory(string) : "Update (or Create) this NPC's memory of an enemy and its location"
	input BecomeRagdoll(void) : "This NPC will instantly become a ragdoll with ZERO force (just go limp). OnDeath, OnHalfHealth, etc. Outputs will **NOT** BE FIRED."

	// Outputs
	output OnDamaged(void) : "Fired when this NPC takes damage."
	output OnDeath(void) : "Fired when this NPC is killed."
	output OnHalfHealth(void) : "Fired when this NPC reaches half of its maximum health."
	output OnHearWorld(void) : "Fired when this NPC hears a sound (other than combat or the player)."
	output OnHearPlayer(void) : "Fired when this NPC hears the player."
	output OnHearCombat(void) : "Fired when this NPC hears combat sounds."
	output OnFoundEnemy(string) : "Fired when this NPC establishes line of sight to its enemy (outputs entity)."
	output OnLostEnemyLOS(void) : "Fired when this NPC loses line of sight to its enemy."
	output OnLostEnemy(void) : "Fired when this NPC loses its enemy. Usually due to the enemy being killed/removed, or because this NPC has selected a newer, more dangerous enemy."
	output OnFoundPlayer(string) : "Fired when this NPC establishes line of sight to its enemy, and that enemy is a player (outputs player entity)."
	output OnLostPlayerLOS(void) : "Fired when this NPC loses line of sight to its enemy, and that enemy is a player."
	output OnLostPlayer(void) : "Fired when this NPC loses its enemy, and that enemy was a player. Usually due to the enemy being killed/removed, or because this NPC has selected a newer, more dangerous enemy."
	output OnDamagedByPlayer(void) : "Fired when this NPC is hurt by a player."
	output OnDamagedByPlayerSquad(void) : "Fired when this NPC is hurt by a player OR by one of the player's squadmates."
	output OnDenyCommanderUse(void) : "Fired when this NPC has refused to join the player's squad."
	output OnSleep(void) : "Fired when this NPC enters a sleep state."
	output OnWake(void) : "Fired when this NPC comes out of a sleep state."
	output OnForcedInteractionStarted(void) : "Fired when the NPC starts a forced interaction."
	output OnForcedInteractionAborted(void) : "Fired when the NPC aborts a forced interaction for some reason (target NPC died, couldn't be pathed to, etc)"
	output OnForcedInteractionFinished(void) : "NPCs in actbusies can no longer perform dynamic interactions."
	]

@BaseClass base(BaseEntityAnimating, SRCIndicator) = BasePedButton: "The base for the prop_button/prop_under_button."
	[
	delay(float) : "Delay Before Reset" : 1 : "Amount of time, in seconds, after the button has been pressed before it returns to the starting position. Once it has returned, it can be used again."
	istimer(boolean) : "Play timer sound?" : 0 : "If set, this button will play timer sounds while button is depressed. This allows fast reset by default - use Prevent fast reset to stop this."
	preventfastreset(boolean) : "Prevent fast reset?" : 0 : "Buttons that are timer's allow you to reset early - use this to make the button stick for the entire duration."
	solid(boolean) : "Is Solid" : 1 : "Makes button able to be passed through."

	// Inputs
	input Press(void) : "Cause the button to be pressed."
	input Lock(void) : "Locks the button."
	input UnLock(void) : "UnLocks the button."
	input CancelPress(void) : "Causes the button to reset quietly and without firing OnButtonReset outputs."

	// Outputs
	output OnPressed(void) : "Called when the button has been pressed."
	output OnPressedBlue(void) : "Called in Coop when the button has been pressed by the Blue player."
	output OnPressedOrange(void) : "Called in Coop when the button has been pressed by the Orange player."
	output OnButtonReset(void) : "Called when the button has reset after being pressed."
	]

@BaseClass base(BaseEntityAnimating, SRCIndicator) = BasePortButton: "The base for the various floor buttons - weighted, cube, sphere and Antique weighted."
	[
	suppressanimsounds(boolean) : "Suppress Animation Sounds" : 0 : "Prevent the model from playing any sounds."
	solid(choices) : "Collisions" : 0 : "Determine if the button should be solid or not." =
		[
		0: "Solid"
		1: "Non-Solid"
		]


	// Inputs
	input PressIn(void) : "Activate the button as if it was pressed, sending it to the bottom position."
	input PressOut(void) : "Release the button, sending it to the top position."

	// Outputs
	output OnPressed(void) : "Called when the button has been pressed."
	output OnUnPressed(void) : "Called when the button has been released."
	]

@BaseClass base(BaseEntityAnimating) = BaseProjector: "The base for all the different projectors (wall & tractor beam)."
	[
	startenabled(boolean) : "Start Enabled" : 1 : "If the projector should start enabled."
	disablehelper(boolean) : "Disable Placement Helper" : 0 : "Disable the automatically created placement helper to prevent it from fighting with a custom one."

	// Inputs
	input Enable(void) : "Enables projection from this projector. This also updates the position of the bridge/funnel if the model was parented."
	input Disable(void) : "Disables projection from this projector."
	input SetParent(target_destination) : "Sets the parent for the projector. This will only move the model properly, retrigger the enable input to correct the bridge/funnel position."
	input SetParentAttachment(string) : "Change this entity to attach to a specific attachment point on its parent. Entities must be parented before being sent this input. The parameter passed in should be the name of the attachment."
	input SetParentAttachmentMaintainOffset(string) : "Change this entity to attach to a specific attachment point on it's parent. Entities must be parented before being sent this input. The parameter passed in should be the name of the attachment. The entity will maintain it's position relative to the parent at the time it is attached."
	input ClearParent(void) : "Removes this entity from the the movement hierarchy, leaving it free to move independently."
	]

@BaseClass base(BaseEntityPhysics, BreakableProp, SystemLevelChoice, BaseFadeProp) = BasePropPhysics: "For prop_physics-like entities."
	[
	spawnflags(flags)  =
		[
		1: "[1] Start Asleep" : 0
		2: "[2] Don't take physics damage" : 0
		4: "[4] Debris - Don't collide with the player or other debris" : 0
		8: "[8] Motion Disabled" : 0
		128: "[128] Not affected by rotor wash" : 0
		256: "[256] Generate output on +USE " : 1
		512: "[512] Prevent pickup" : 0
		1024: "[1024] Prevent motion enable on player bump" : 0
		4096: "[4096] Debris with trigger interaction" : 0
		16384: "[16384] Radius pickup (easier to pickup)" : 0
		2097152: "[2097152] No collisions" : 0
		]

	minhealthdmg(integer) : "Min Damage to Hurt" : 0 : "The prop will ignore any damage events if the damage is less than this amount."
	shadowcastdist(integer) : "Shadow Cast Distance" : 0 : "Use this to override how far this object casts shadows. 0 = default distance."
	physdamagescale(float) : "Physics Impact Damage Scale" : "0.1" : "Scales damage energy when this object is hit by a physics object. NOTE: 0 means this feature is disabled for backwards compatibility.\nSet to 1.0 for materials as strong as flesh, smaller numbers indicate stronger materials."
	damagetype(choices) : "Impact damage type" : 0 =
		[
		0: "Blunt"
		1: "Sharp"
		]

	nodamageforces(boolean) : "Damaging it Doesn't Push It" : 0 : "Used to determine whether or not damage should cause the brush to move."
	inertiascale(float) : "Scale Factor For Inertia" : "1.0" : "Scales the angular mass of an object. Used to hack angular damage and collision response."
	massscale(float) : "Mass Scale" : 0 : "A scale multiplier for the object's mass."
	overridescript(string) : "Override Parameters" : : "A list of physics key/value pairs that are usually in a physics prop .qc file. Format is 'key,value,key,value,etc'."
	damagetoenablemotion(integer) : "Health Level to Override Motion" : 0 : "If specified, this object will start motion disabled. Once its health has dropped below this specified amount, it will enable motion."
	forcetoenablemotion(float) : "Physics Impact Force to Override Motion" : 0 : "If specified, this object will start motion disabled. Any impact that imparts a force greater than this value on the physbox will enable motion."
	puntsound(sound) : "Sound to make when punted."

	// Inputs
	input Wake(void) : "Wake up this physics object, if it is sleeping."
	input Sleep(void) : "Put this physics object to sleep. It will wake if given the Wake input, or if force is applied to it. Note that physics objects go to sleep automatically after coming to rest for a while, so you don't really need to use this."
	input EnableMotion(void) : "Enable physics motion/collision response."
	input DisableMotion(void) : "Disable physics motion/collision response."
	input DisableFloating(void) : "Disable fluid/floating simulation to reduce cost."
	input SetBodyGroup(integer) : "Set this prop's body group (from 0 - n)."
	input physdamagescale(float) : "Set the Physics Impact Damage Scale for this character. NOTE: 0 means this feature is disabled for backwards compatibility."
	input EnableDamageForces(void) : "Damaging the entity applies physics forces to it."
	input DisableDamageForces(void) : "Damaging the entity does *not* apply physics forces to it."
	input EnablePuntSound(void) : "Allow this prop to play its own sound when punted."
	input DisablePuntSound(void) : "Prevent this prop from playing its own sound when punted."

	// Outputs
	output OnMotionEnabled(void) : "Fired when motion is enabled on this prop, either via 'Health Level to Override Motion' or from the EnableMotion input."
	output OnAwakened(void) : "Fired when this entity becomes awake (collision/force is applied to it while it's asleep)."
	output OnPhysGunPickup(void) : "Fired when the player picks up the prop with the physcannon or +USE."
	output OnPhysGunPunt(void) : "Fired when a player punts this object with the physgun."
	output OnPhysGunOnlyPickup(void) : "Fired when a player picks this object up WITH THE PHYSGUN. +USE pickups do not fire this output."
	output OnPhysGunDrop(void) : "Fired when the player drops the prop with the physcannon or USE."
	output OnPlayerUse(void) : "Fired when the player tries to +USE the prop. This output will fire only if the Generate output on +USE spawnflag is set."
	output OnPlayerPickup(void) : "Fired whenever the player picks up this prop (with the physcannon or with +USE)."
	output OnOutOfWorld(void) : "Fired whenever the prop is out of the allowed world bounds."
	]

@BaseClass base(BaseEntityVisBrush) = BaseTrain
	[
	spawnflags(flags)  =
		[
		1: "[1] No Pitch (X-rot)" : 0
		2: "[2] No User Control" : 0
		8: "[8] Passable" : 0
		16: "[16] Fixed Orientation" : 0
		128: "[128] Ridable Train (HL1 Train)" : 0
		256: "[256] Use max speed for pitch shifting move sound" : 0
		512: "[512] Is unblockable by player" : 0
		1024: "[1024] Allow Roll (Z-rot)" : 0
		]

	target(target_destination) : "Spawn path_track" : : "The name of the first path_track in the train's path. The train will spawn at this path_track. It will also turn to face direction indicated by the 'Orientation Type' setting."
	startspeed(integer) : "Max Speed (units / second)" : 100 : "The maximum speed that this train can move. Any speeds applied to this train, such as by path_tracks or SetSpeed inputs, will be clipped to this maximum value."
	speed(integer) : "Initial Speed (units / second)" : 0 : "The speed that the train will move at after it spawns, 0 = stopped."
	velocitytype(choices) : "Change Velocity" : 0 : "The method through which this train changes its velocity as it moves along the path." =
		[
		0: "Instantaneously"
		1: "Linear blend"
		2: "Ease in/ease out"
		]

	orientationtype(choices) : "Change Orientation" : 1 : "The method through which this train changes its orientation as it moves along the path." =
		[
		0: "Never (fixed orientation)"
		1: "Near path_tracks"
		2: "Linear blend"
		3: "Ease in/ease out"
		]

	wheels(integer) : "Distance Between the Wheels" : 50 : "Used for turning and stopping."
	height(integer) : "Height above track" : 4 : "The height above the track that this train moves."
	bank(string) : "Bank Angle on Turns" : 0
	dmg(integer) : "Damage on Crush" : 0 : "The amount of damage this train does to entities that block it."
	line_basetrain(string) readonly : "----------------------------------------------------------------------------------------------------------"
	movesound(sound) : "Move Sound" : : "A sound that is played (and looped) while the train is moving."
	movepingsound(sound) : "Move Ping Sound" : : "A sound that is played more frequently as the train speeds up."
	startsound(sound) : "Start Sound" : : "A sound played when the train starts moving."
	stopsound(sound) : "Stop Sound" : : "A sound played when the train stops moving."
	volume(integer) : "Volume (10 = loudest)" : 10
	movesoundminpitch(integer) : "Min pitch (1-255, > 100 = higher)" : 60 : "The sound pitch value that the train will approach as it comes to a stop."
	movesoundmaxpitch(integer) : "Max pitch (1-255, > 100 = higher)" : 200 : "The sound pitch value that the train will approach as it approaches its max speed  or 1000 units/second if the 'Use max speed for pitch shifting move sound' flag is not set."
	movesoundmintime(float) : "Min move sound interval" : 0 : "Minimum interval at which to play the move ping sound."
	movesoundmaxtime(float) : "Max move sound interval" : 0 : "Maximum interval at which to play the move ping sound."

	// Inputs
	input SetSpeed(float) : "Set the speed of the train, as a ratio of max speed [0, 1]"
	input SetSpeedDir(float) : "Set the speed of the train, as a ratio of max speed. Negative values reverse the direction [-1, 1]"
	input SetSpeedReal(float) : "Set the speed of the train. Must be a positive value from 0 to max speed."
	input Stop(void) : "Stop the train."
	input StartForward(void) : "Start the train moving forward."
	input StartBackward(void) : "Start the train moving backward."
	input Resume(void) : "Resume the train moving in the current direction after it was stopped via the 'Stop' or 'Toggle' input."
	input Reverse(void) : "Reverse the direction of the train."
	input Toggle(void) : "Toggle the train between start and stop."
	]

@BaseClass base(BaseEntityVisBrush, _Breakable, DamageFilter) = BreakableBrush
	[
	spawnflags(flags)  =
		[
		1: "[1] Only Break on Trigger" : 0
		2: "[2] Break on Touch" : 0
		4: "[4] Break on Pressure" : 0
		512: "[512] Break immediately on Physics" : 0
		1024: "[1024] Don't take physics damage" : 0
		2048: "[2048] Don't allow bullet penetration" : 0
		]

	propdata(choices) : "Prop Data" : 0 : "Set to the best approximation of the size and material of this entity's brushes. If set, it will override this entity's health and damage taken from various weapons. See the propdata.txt file in the scripts directory of your MOD to get a detailed list of what each entry specifies." =
		[
		0: "None"
		1: "Wooden.Tiny"
		2: "Wooden.Small"
		3: "Wooden.Medium"
		4: "Wooden.Large"
		5: "Wooden.Huge"
		6: "Metal.Small"
		7: "Metal.Medium"
		8: "Metal.Large"
		9: "Cardboard.Small"
		10: "Cardboard.Medium"
		11: "Cardboard.Large"
		12: "Stone.Small"
		13: "Stone.Medium"
		14: "Stone.Large"
		15: "Stone.Huge"
		16: "Glass.Small"
		17: "Plastic.Small"
		18: "Plastic.Medium"
		19: "Plastic.Large"
		20: "Pottery.Small"
		21: "Pottery.Medium"
		22: "Pottery.Large"
		23: "Pottery.Huge"
		24: "Glass.Window"
		]

	health(integer) : "Strength" : 1 : "Number of points of damage to take before breaking. 0 means don't break."
	material(choices) : "Material Type" : 0 : "Set to the material type of the brush. Used to decide what sounds to make when damaged, and what gibs to produce when broken." =
		[
		0: "Glass"
		1: "Wood"
		2: "Metal"
		3: "Flesh"
		4: "CinderBlock"
		5: "Ceiling Tile"
		6: "Computer"
		7: "Unbreakable Glass"
		8: "Rocks"
		9: "Metal Panel"
		10: "None"
		]

	explosion(choices) : "Gibs Direction" : 0 : "Used to decide which direction to throw gibs when broken." =
		[
		0: "Random"
		1: "Relative to Attack"
		2: "Use Precise Gib Dir"
		]

	gibdir(angle) : "Precise Gib Direction" : "0 0 0" : "Specifies the direction to throw gibs when this breakable breaks. Be sure to select Use Precise Gib Dir in the Gibs Direction field!"
	nodamageforces(boolean) : "Damaging it Doesn't Push It" : 0 : "Used to determine whether or not damage should cause the brush to move."
	spawnobject(choices) : "Spawn On Break" : 0 : "When broken, an entity of the selected type will be created." =
		[
		1: "item_battery"
		2: "item_healthkit"
		3: "item_ammo_pistol"
		4: "item_ammo_pistol_large"
		5: "item_ammo_smg1"
		6: "item_ammo_smg1_large"
		7: "item_ammo_ar2"
		8: "item_ammo_ar2_large"
		9: "item_box_buckshot"
		10: "item_flare_round"
		11: "item_box_flare_rounds"
		12: "item_ml_grenade"
		13: "item_smg1_grenade"
		14: "item_box_sniper_rounds"
		15: "unused1"
		16: "weapon_stunstick"
		17: "weapon_ar1"
		18: "weapon_ar2"
		19: "unused2"
		20: "weapon_ml"
		21: "weapon_smg1"
		22: "weapon_smg2"
		23: "weapon_slam"
		24: "weapon_shotgun"
		25: "weapon_molotov"
		26: "item_dynamic_resupply"
		]


	// Inputs
	input EnableDamageForces(void) : "Damaging the entity applies physics forces to it."
	input DisableDamageForces(void) : "Damaging the entity does *not* apply physics forces to it."
	]

@BaseClass base(BaseEntityVisBrush, MasterEnt) = Door
	[
	speed(float) : "Speed" : 100 : "The speed at which the door moves."
	noise1(sound) : "Start Sound" : : "Sound to play when the door starts moving."
	noise2(sound) : "Stop Sound" : : "Sound to play when the door stops moving."
	startclosesound(sound) : "Start Close Sound" : : "(Optional) Sound to play when the door starts closing. If not set, the Start Sound will be used instead."
	closesound(sound) : "Stop Close Sound" : : "(Optional) Sound to play when the door stops closing. If not set, the Stop Sound will be used instead."
	loopmovesound(boolean) : "Loop Moving Sound?" : 0 : "If set to true, the door's 'Start Sound' will be continually looped until the door finishes moving."
	wait(integer) : "Delay Before Reset (-1 stay)" : -1 : "Amount of time, in seconds, after the door has opened before it closes. Once it has closed, it can be used again. If the value is set to -1, the door never closes itself."
	lip(integer) : "Lip" : 0 : "The amount the door will keep overlapping with the original position. The distance moved = the size of the brush on the movement axis - lip. Negative values cause the door to move even further."
	dmg(integer) : "Blocking Damage" : 0 : "Amount of damage done to entities that block the movement of this door, per frame."
	chainstodoor(target_destination) : "Linked Door" : : "Passes the door's +use inputs and touch events onto a different door, so it also is activated."
	forceclosed(boolean) : "Force Closed" : 0 : "If set, this door will close no matter what. Useful for doors that have to close even if the player tries to block them with objects."
	ignoredebris(boolean) : "Ignore Debris" : 0 : "If set this will change the door's collision group to one that ignore collisions with debris objects (note that this is not compatible with the non-solid-to-player spawnflag)."
	solidbsp(choices) : "Solid Type" : 1 : "How to calculate collisions. BSP is more rudimentarty but allows more stable collision with players." =
		[
		0: "VPhysics"
		1: "BSP"
		]

	health(integer) : "Door Health" : : "The health of the door (allows someone to shoot it open). 0 means invincible."
	locked_sound(sound) : "Locked Sound" : : "Sound played when the player tries to use the door, and fails because it's locked."
	unlocked_sound(sound) : "Unlocked Sound" : : "Sound played when the door is unlocked."
	spawnpos(choices) : "Spawn Position" : 0 =
		[
		0: "Closed"
		1: "Open"
		]

	spawnflags(flags)  =
		[
		1: "[1] Starts Open - OBSOLETE, use 'Spawn Position' key instead" : 0
		4: "[4] Non-solid to Player" : 0
		8: "[8] Passable" : 0
		32: "[32] Toggle" : 0
		256: "[256] Use Opens" : 0
		512: "[512] NPCs Can't" : 0
		1024: "[1024] Touch Opens" : 1
		2048: "[2048] Starts locked" : 0
		4096: "[4096] Door Silent" : 0
		65536: "[65536] New +USE rules - Allow +USE only when when the door is closed/closing or is open/opening and can be manually closed" : 0
		]

	locked_sentence(choices) : "Locked Sentence" : 0 : "A sentence played when the player tries to use the door, and fails because it's locked." =
		[
		0: "None"
		1: "[EA] Gen. Access Granted"
		2: "[ED] Security Disengaged"
		3: "[EF] Blast Door"
		4: "[EFIRE] Fire Door"
		5: "[ECHEM] Chemical Door"
		6: "[ERAD] Radiation Door"
		7: "[ECON] gen. Containment"
		8: "[EH] Maintenance area"
		]

	unlocked_sentence(choices) : "Unlocked Sentence" : 0 : "A sentence played when the door is unlocked." =
		[
		0: "None"
		1: "[EA] Gen. Access Granted"
		2: "[ED] Security Disengaged"
		3: "[EF] Blast Door"
		4: "[EFIRE] Fire Door"
		5: "[ECHEM] Chemical Door"
		6: "[ERAD] Radiation Door"
		7: "[ECON] gen. Containment"
		8: "[EH] Maintenance area"
		]


	// Inputs
	input Open(void) : "Open the door, if it is not fully open."
	input Close(void) : "Close the door, if it is not fully closed."
	input Toggle(void) : "Toggle the door between open and closed."
	input Lock(void) : "Lock the door."
	input Unlock(void) : "Unlock the door."
	input SetSpeed(float) : "Set the door speed."
	input SetToggleState(bool) : "Force the door instantly to currently open or closed."

	// Outputs
	output OnClose(void) : "Fired when the door starts closing."
	output OnOpen(void) : "Fired when the door starts opening."
	output OnFullyOpen(void) : "Fired when the door reaches the fully open position. Reversed if 'Start Open' flag is set."
	output OnFullyClosed(void) : "Fired when the door reaches the fully closed position. Reversed if 'Start Open' flag is set."
	output OnBlockedClosing(void) : "Fired when the door is blocked while closing."
	output OnBlockedOpening(void) : "Fired when the door is blocked while opening."
	output OnUnblockedClosing(void) : "Fired when the door is unblocked while closing."
	output OnUnblockedOpening(void) : "Fired when the door is unblocked while opening."
	output OnLockedUse(void) : "Fired when the player uses the door, but it is locked."
	]

@BaseClass base(BaseEntityPhysics, EnableDisable, Toggle, FadeDistance) = Item
	[
	spawnflags(flags)  =
		[
		1: "[1] Start Constrained" : 0
		]


	// Outputs
	output OnPlayerTouch(void) : "Fires when the player touches this object."
	output OnCacheInteraction(void) : "This output fires when the player proves they have 'found' this item. Fires on: Player Touch (whether or not player actually acquires the item), Picked up by +USE, Picked up by Physcannon, Punted by Physcannon."
	]

@BaseClass base(TriggerOnce) = Trigger
	[
	spawnflags(flags)  =
		[
		1: "[1] Clients/Players" : 1
		2: "[2] NPCs" : 0
		4: "[4] func_pushable" : 0
		8: "[8] Physics Objects" : 0
		16: "[16] Only player ally NPCs" : 0
		64: "[64] Everything (not including physics debris)" : 0
		1024: "[1024] Physics debris" : 0
		4096: "[4096] Correctly account for object mass (trigger_push used to assume 100Kg) and multiple component physobjs (car, blob...)" : 1
		]


	// Inputs
	input EndTouch(void) : "Fires the OnEndTouch output. If called by an entity inside the trigger, the OnEndTouch will be fired for them as the activator. Note that this input is passed even if the player is being treated as 'not' touching the trigger while outside it."

	// Outputs
	output OnStartTouchAll(void) : "Fired when an entity starts touching this trigger, and no other entities are touching it. Only entities that passed this trigger's filters are considered."
	output OnEndTouch(void) : "Fired when an entity stops touching this trigger. Only entities that passed this trigger's filters will cause this output to fire."
	output OnEndTouchAll(void) : "Fires when an entity stops touching this trigger, and no other entities are touching it. Only entities that passed this trigger's filters are considered."
	]

@PointClass base(FollowGoal) 
	iconsprite("editor/ai_goal_follow.vmt")
= ai_goal_follow: "AI Goal Follow"
	[
	]

@PointClass base(FollowGoal) 
	iconsprite("editor/ficool2/ai_goal_injured_follow.vmt")
= ai_goal_injured_follow: "AI Goal Injured Follow"
	[
	]

@PointClass base(LeadGoalBase) 
	iconsprite("editor/ai_goal_lead.vmt")
= ai_goal_lead: "AI Goal Lead"
	[
	searchtype(choices) : "Search Type" : 0 : "How to search for the entities using the targetname." =
		[
		0: "Entity Name"
		1: "Classname"
		]

	]

@PointClass base(LeadGoalBase) 
	iconsprite("editor/ficool2/ai_goal_lead_weapon.vmt")
= ai_goal_lead_weapon: "AI Goal Lead (Weapon). A version of the ai_goal_lead entity that requires the player to have the specified weapon before the Actor(s) will lead the player to their target."
	[
	weaponname(choices) : "Weapon" : "weapon_bugbait" : "The weapon the player must have in order for the actor to begin leading. If the player takes more than 60 seconds, they'll be silently given a Bug Bait." =
		[
		"weapon_bugbait": "Bugbait"
		"weapon_smg1": "SMG1"
		"weapon_ar2": "AR2"
		]

	missingweaponconceptmodifier(string) : "Missing weapon concept modifier" : : "Appended to the keyvalues passed into the response rules when the 'TLK_LEAD_MISSINGWEAPON' concept is spoken."
	searchtype(choices) : "Search Type" : 0 : "How to search for the entities using the targetname." =
		[
		0: "Entity Name"
		1: "Classname"
		]

	]

@PointClass base(logic_relay) 
	iconsprite("editor/logic_relay.vmt")
	color(0 100 250)
	line(255 255 255, targetname, target)
= comp_numeric_transition: "When triggered, animates a keyvalue/input over time with various options."
	[
	target(target_destination) : "Entity to Control" : : "The entity which the outputs will be directed to."
	opt_name(string) : "Keyvalue/Input Name" : "SetSpeed" : "The name of the keyvalue or input to change.If the target is not an entity findable by the postcompiler, IO Type must be set."
	io_type(choices) : "I/O Type" : "auto" : "The method used to control an entity. If Input, use the input name provided.If KeyValue, use AddOutput to change the keyvalue.If Auto, examine the entity class that is being controlled to determine the appropriate mode." =
		[
		"auto": "Automatic"
		"io": "Input"
		"kv": "KeyValue (AddOutput)"
		]

	transform(choices) : "Value Type" : "speed" : "The behaviour of the input, used to control what actual values are sent. Regardless of this value, the other options are 'position'-type values!" =
		[
		"set": "Instantly Set"
		"moveto": "Move to value"
		"speed": "Adjust Speed"
		"light": "Light Pattern"
		]

	line_trans2(string) readonly : "-------------------------------------------"
	beat_interval(float) : "Beat Interval" : "0.1" : "Time between each output. Smaller values are more accurate, but increase the outputs generated."
	delay(float) : "Start Delay" : "0.0" : "Wait this amount of time after being triggered before animating."
	duration(float) : "Duration" : 5 : "Time the change will take."
	startval(float) : "Start Value" : 0 : "Starting value. If the Value Type is Light Pattern, these may be a-z letters."
	endval(float) : "Ending Value" : 100 : "Ending value. If the Value Type is Light Pattern, these may be a-z letters."
	line_trans3(string) readonly : "-------------------------------------------"
	easing_start(choices) : "Easing Start" : "linear" : "Controls how the animation begins." =
		[
		"linear": "None"
		"quad": "Quadratic (x�)"
		"cubic": "Cubic (x�)"
		"quartic": "Quartic (x^4)"
		"sine": "Sinusoidal"
		]

	easing_end(choices) : "Easing End" : "linear" : "Controls how the animation ends." =
		[
		"linear": "None"
		"quad": "Quadratic (x�)"
		"cubic": "Cubic (x�)"
		"quartic": "Quartic (x^4)"
		"sine": "Sinusoidal"
		]

	]

@PointClass base(logic_relay) 
	color(0 100 250)
	line(255 255 255, targetname, target)
	iconsprite("editor/comp_sequential_call")
= comp_sequential_call: "Finds a sequence of entities (by distance or numeric suffix), then fires inputs delayed in order. To use, define OnSeq outputs, firing inputs at '!seq'."
	[
	target(target_destination) : "Entities to Sequence" : : "The entities which will be ordered and inputs fired at. This should refer to multiple entities, probably with a *-wildcard."
	order_mode(choices) : "Ordering Mode" : "dist" : "Choose how entities are ordered. Numeric suffix finds numbers at the end of the entity name, and sorts by that order." =
		[
		"dist": "Distance to this"
		"dist_inv": "Inverted distance to this"
		"suffix": "Numeric Suffix, Ascending"
		"suffix_inv": "Numeric Suffix, Decending"
		]

	uniquify(boolean) : "Make Entities Unique?" : 0 : "Append a suffix to ensure all entities are unique. Should be enabled if not using a *-wildcard."
	time_mode(choices) : "Time Mode" : "total" : "How Time Value is interpreted. If this is set to Total Time and the ordering mode is Distance, delays are based on the distance. Otherwise, it will be equally spaced." =
		[
		"total": "Total Time"
		"interval": "Interval Between"
		]

	time_val(float) : "Time Value" : "5.0" : "Either the total time or the time between each entity."
	time_variance(float) : "Time Variance" : "0.0" : "After computing the delay, randomly add/subtract this much from the delay to add noise."

	// Outputs
	output OnSeqStart(void) : "Fired at the start of the sequence."
	output OnSeq(void) : "Fired once for each entity - use !seq to refer to the target."
	output OnSeqEnd(void) : "Fired once all delayed outputs are complete."
	]

@PointClass base(BaseEntityAnimating, SetModel, SetSkin) 
	sphere(fademindist)
	sphere(fademaxdist)
	studio()
= cycler: "An entity used to display a model for testing purposes. Shooting it with cycle through the model's animations."
	[
	spawnflags(flags)  =
		[
		1: "[1] Not Solid" : 0
		]

	sequence(integer) : "Sequence" : 0 : "Default animation sequence for the model to be playing after spawning."

	// Inputs
	input SetSequence(string) : "Sets the cycler's sequence."
	]

@PointClass base(BaseEntityAnimating) 
	sphere(fademindist)
	sphere(fademaxdist)
= ent_hover_turret_tether: "The ceiling tether for Hover Turrets. Generated automatically when the hover turret has an attachTarget set."
	[
	]

@PointClass base(BaseBeam) 
	line(255 255 255, targetname, LightningStart, targetname, LightningEnd)
	cylinder(255 255 255, targetname, LightningStart, Radius, targetname, LightningEnd, Radius)
	line(64 64 64, targetname, lightningStart)
	line(64 64 64, targetname, lightningEnd)
	line(10 10 10, targetname, filtername)
	iconsprite("editor/env_beam.vmt")
	sphere(radius)
	color(200 200 0)
= env_beam: "An entity that creates a visible beam between two points. The points can be attached to entities to make the beam move around."
	[
	radius(integer) : "Radius" : 16 : "If the 'Random Strike' spawnflag is set, this radius determines the area within which the endpoints will randomly strike."
	life(float) : "Life (seconds 0 = infinite)" : 0 : "Amount of time before the beam dies. Setting to zero will make the beam stay forever."
	boltwidth(float) : "Width of beam" : 2 : "Pixel width of the beam."
	striketime(float) : "Strike again time (secs)" : 1 : "Refire time between random strikes of the beam. Only used if the 'Random Strike' spawnflag is set."
	lightningstart(target_destination) : "Start Entity" : : "Entity that the beam starts at."
	lightningend(target_destination) : "Ending Entity" : : "Entity that the beam ends at. If not set, the Ending Location will be used instead."
	decalname(string) : "Decal Name" : "Bigshot" : "Decal to be applied at the end of the beam"
	spawnflags(flags)  =
		[
		1: "[1] Start On" : 0
		2: "[2] Toggle" : 0
		4: "[4] Random Strike" : 0
		8: "[8] Ring" : 0
		16: "[16] StartSparks" : 0
		32: "[32] EndSparks" : 0
		64: "[64] Decal End" : 0
		128: "[128] Shade Start" : 0
		256: "[256] Shade End" : 0
		512: "[512] Taper Out" : 0
		]

	touchtype(choices) : "Touch Type (tripwire)" : 0 : "If you want the beam to fire an output when touched by entities, choose the entity type here." =
		[
		0: "Not a tripwire"
		1: "Player Only"
		2: "NPC Only"
		3: "Player or NPC"
		4: "Player or NPC or Physprop"
		]

	filtername(filterclass) : "Filter Name" : : "Filter to use to determine what triggers the output."
	targetpoint(vecline) : "Ending Location" : "0 0 0" : "If an Ending Entity is not specified, use this point as the destination instead.It is relative to the beam origin."
	clipstyle(choices) : "Beam clipping" : 0 : "Select whether you want the beam to clip against geometry or characters, making it stop prematurely." =
		[
		0: "Do not clip (default)"
		1: "Clip to geometry"
		2: "Clip to everything solid"
		]


	// Inputs
	input StrikeOnce(void) : "Causes the beam to strike once. It will stay on for its set Life and then turn off (it will never turn off if Life is set to zero)."
	input Amplitude(float) : "Set the amplitude of beam noise (0 - 255)."

	// Outputs
	output OnTouchedByEntity(void) : "Fired when an entity touches the beam. Only fired if the entity passes the 'Touch Type' choice."
	]

@PointClass base(BaseEntityAnimating, Angles) 
	sphere(fademindist)
	sphere(fademaxdist)
	iconsprite("editor/ficool2/env_effectscript")
	studioprop()
= env_effectscript: "An entity that allows you to script special visual effects via a script file."
	[
	model(studio) : "Script Model" : : "Model to use for animation sequences."
	scriptfile(string) : "Script File" : "scripts/effects/testeffect.txt" : "Name of the script to use for this model."

	// Inputs
	input SetSequence(string) : "Sets the script model's sequence."
	]

@PointClass base(env_sprite) 
	studio("models/editor/axis_helper_white.mdl")
	sprite()
	color(20 140 20)
	sphere(GlowProxySize)
= env_glow: "Obsolete older name for env_sprite."
	[
	]

@PointClass base(BaseBeam) 
	iconsprite("editor/ficool2/env_laser.vmt")
	line(255 255 255, targetname, LaserTarget)
	color(200 200 0)
= env_laser: "An entity that creates a laser beam between itself and a given target."
	[
	lasertarget(target_destination) : "Target of Laser" : : "Name of entity, or entities, to strike at. The target is randomly chosen if there are multiple entities matching the given name."
	width(float) : "Width of Beam" : 2 : "The width of the laser beam, in pixels."
	endsprite(sprite) : "End Sprite" : : "If specified, this sprite will be drawn at the end of the laser beam."
	spawnflags(flags)  =
		[
		1: "[1] Start On" : 0
		16: "[16] StartSparks" : 0
		32: "[32] EndSparks" : 0
		64: "[64] Decal End" : 0
		]

	]

@PointClass base(BaseEntityAnimating) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= env_portal_laser: " A Thermal Discouragement Beam that will move through portals, redirect using Redirection Cubes and reflect off of Reflection Gel."
	[
	noplacementhelper(boolean) : "No placement helper" : 0 : "Don't automatically create a portal placement helper at the end of the laser."
	model(choices) : "Laser Position" : "models/props/laser_emitter_center.mdl" : "Is the laser offset? (You can also add a custom model here.)" =
		[
		"models/props/laser_emitter_center.mdl": "Centered"
		"models/props/laser_emitter.mdl": "Offset"
		]

	startstate(boolean) : "Start Disabled" : 0
	lethaldamage(choices) : "Lethal" : 0 : "Instant kill on contact. Buggy when redirected through cubes/portals." =
		[
		0: "Non-lethal"
		1: "Lethal"
		]

	autoaimenabled(boolean) : "Should auto aim" : 1 : "Allow the laser to bend to activate catchers or relays."
	skin(choices) : "Skin Type" : 0 =
		[
		0: "Clean"
		1: "Rusted"
		]

	beamcolor(choices) : "Laser Beam Color" : "255 0 0 255" : "The color of the laser. You can also specify a custom RGBA color here." =
		[
		"255 255 255 255": "White"
		"255 0 0 255": "Default Red"
		"100 255 100 255": "Lethal Green"
		"32 112 202 255": "Blue"
		"255 212 91 255": "Yellow"
		"212 60 146 255": "Pink"
		"65 97 0 255": "Dark Green"
		]

	disableplayercollision(choices) : "Player Collision" : "Default Behavior" : "Override to disable player collision for this laser. If set to 0 (default), sv_player_collide_with_laser will determine whether or not to collide. If 1, laser collision will be disabled." =
		[
		0: "Default Behavior"
		1: "Force Off"
		]


	// Inputs
	input Toggle(void) : "Toggle the laser on and off."
	input TurnOn(void) : "Turn the laser on."
	input TurnOff(void) : "Turn the laser off."
	input SetBeamColor(color255) : "Changes the laser colour."
	]

@PointClass base(path_track) 
	cylinder(255 255 255, targetname, target, radius, targetname, targetname, radius)
	color(255 192 0)
	studio("models/editor/angle_helper.mdl")
	sphere(radius)
	iconsprite("editor/ficool2/path_track")
= env_portal_path_track: "An unused variant of path_track, presumably intended for Unstationary Scaffolds. It produces a beam between each node, as well as (somewhat buggy) endpoint effects which are based on the entity's angles."
	[
	track_beam_scale(float) : "Scale Track FX" : 0 : "The amount to scale the track FX size. Appears non-functional."
	end_point_scale(float) : "Scale Endpoint FX" : 0 : "The amount to scale the endpoint FX size. Appears non-functional."
	end_point_fadeout(float) : "Fade Out Endpoint" : 0 : "Amount of time to fade out the endpoint FX. Appears non-functional."
	end_point_fadein(float) : "Fade In Endpoint" : 0 : "Amount of time to fade in the endpoint FX. Appears non-functional."

	// Inputs
	input ActivateTrackFX(void) : "Enable the track beam FX."
	input ActivateEndPointFX(void) : "Enable the endpoint FX. Appears non-functional."
	input DeactivateTrackFX(void) : "Disable the track beam FX."
	input DeactivateEndPointFX(void) : "Disable the endpoint FX. Appears non-functional."
	]

@PointClass base(gibshooterbase) 
	line(255 255 255, targetname, lightingorigin)
	iconsprite("editor/ficool2/env_rotorshooter.vmt")
	color(200 200 0)
= env_rotorshooter: "An entity that creates gibs when it's within the influence of a helicopter's rotor wash."
	[
	shootmodel(studio) : "Model" : : "Thing to shoot out.  Can be a .mdl or a .vmt."
	shootsounds(choices) : "Material Sound" : -1 =
		[
		-1: "None"
		0: "Glass"
		1: "Wood"
		2: "Metal"
		3: "Flesh"
		4: "Concrete"
		]

	simulation(choices) : "Simulation Type" : 0 =
		[
		0: "Point"
		1: "Physics"
		2: "Ragdoll"
		]

	skin(integer) : "Gib Skin" : 0 : "Some models have multiple versions of their textures, called skins. Set this to a number other than 0 to use that skin on all gibs produced by this shooter."
	spawnflags(flags)  =
		[
		2: "[2] On fire" : 0
		]

	rotortime(float) : "Time Under Rotor" : 1 : "The average time it has to be under the rotor before it shoots a gib."
	rotortimevariance(float) : "Time variance" : "0.3" : "The random amount to vary the time it has to be under the rotor before it shoots a gib."
	]

@PointClass base(gibshooterbase) 
	line(255 255 255, targetname, lightingorigin)
	iconsprite("editor/env_shooter.vmt")
	color(200 200 0)
= env_shooter: "An entity that shoots models, or sprites, out of its origin."
	[
	shootmodel(studio) : "Model" : : "Thing to shoot out. Can be a .mdl or a .vmt."
	shootsounds(choices) : "Material Sound" : -1 =
		[
		-1: "None"
		0: "Glass"
		1: "Wood"
		2: "Metal"
		3: "Flesh"
		4: "Concrete"
		]

	skin(integer) : "Gib Skin" : 0 : "Some models have multiple versions of their textures, called skins. Set this to a number other than 0 to use that skin on all gibs produced by this shooter."
	spawnflags(flags)  =
		[
		2: "[2] On fire" : 0
		4: "[4] Strict remove after lifetime" : 0
		]

	nogibshadows(boolean) : "Disable Shadows on Gibs" : 0
	gibgravityscale(float) : "Gib gravity scale" : 1 : "ONLY WORKS FOR POINT GIBS. This field allows you to scale gravity so that gibs fall faster, slower, or not at all."
	massoverride(float) : "Mass override" : 0 : "EPISODIC ONLY. Specify an arbitrary mass for the gibs emitted by me."
	]

@PointClass base(env_soundscape) 
	sphere(radius)
	line(255 255 255, targetname, position0)
	line(255 255 255, targetname, position1)
	line(255 255 255, targetname, position2)
	line(255 255 255, targetname, position3)
	line(255 255 255, targetname, position4)
	line(255 255 255, targetname, position5)
	line(255 255 255, targetname, position6)
	line(255 255 255, targetname, position7)
	iconsprite("editor/env_soundscape_triggerable.vmt")
= env_soundscape_triggerable: "An entity that works like env_soundscape except that it works in conjunction with trigger_soundscape to determine when a player hears it."
	[

	// Inputs
	input Play(void) : "Play the soundscape."
	]

@PointClass base(env_sprite) 
	studio("models/editor/axis_helper_white.mdl")
	sprite()
	color(20 140 20)
	sphere(GlowProxySize)
= env_sprite_clientside: "An entity that controls the drawing of a sprite in the world, created clientside so cannot be parented to moving things and will use up no network bandwidth or CPU."
	[
	]

@PointClass base(env_sprite) 
	studio("models/editor/axis_helper_white.mdl")
	sprite()
	color(20 140 20)
	sphere(GlowProxySize)
= env_sprite_oriented: "A env_sprite that allows orientation."
	[
	]

@FilterClass base(filter_base) 
	color(0 255 0)
	iconsprite("editor/filter_class.vmt")
= filter_activator_class: "A filter that filters by the class name of the activator."
	[
	filterclass(string) : "Filter Classname" : : "The class name to filter by. If the filter mode is Allow, only entities whose class name matches the given string will pass the filter. If the filter mode is Disallow, all entities EXCEPT those whose class name matches the given string will pass the filter."
	]

@FilterClass base(filter_base) 
	color(0 255 0)
	iconsprite("editor/filter_context.vmt")
= filter_activator_context: "A filter that filters by a context on the activator."
	[
	responsecontext(string) : "Filter Context" : : "The context(s) to filter by. Syntax is 'key:value,key:value'. Values in this field can use wilcards. For example, if this filter contains 'lastname:*', it will pass any entity with the context 'lastname', regardless of its value. Wildcards do not apply to context names and you cannot define the same context multiple times, but inputs like AddContext or RemoveContext can be used to add to the filter context."
	any(boolean) : "Pass if entity has any of these contexts" : 0 : "Should this filter only pass if the entity contains all of these contexts or can it pass if the entity has at least one of them?"

	// Inputs
	input AddContext(string) : "Adds a context to this fitler's list of response contexts. The format should be 'key:value'."
	input RemoveContext(string) : "Remove a context from this filter's list of response contexts. The name should match the 'key' of a previously added context."
	input ClearContext(void) : "Removes all contexts in this filter's list of response contexts."
	]

@FilterClass base(filter_base) 
	color(0 255 0)
	iconsprite("editor/filter_involume.vmt")
	line(255 255 255, targetname, target)
= filter_activator_involume: "A filter that tests whether the activator is within a volume."
	[
	target(target_destination) : "Volume" : : "The volume to be tested with. This filter passes if the activator is within this volume. Intended to be a brush entity. (e.g. a trigger)"
	tester(target_destination) : "Volume Tester" : "!activator" : "Who should be in the volume for the filter to pass?"
	]

@FilterClass base(filter_base) 
	color(0 255 0)
	iconsprite("editor/filter_keyfield.vmt")
= filter_activator_keyfield: "A filter that filters by the activator's keyfields."
	[
	keyname(string) : "Key" : : "The key name to filter by. Please note that certain keyvalues, particularly targetnames and base values related to clientside rendering (e.g. render mode), cannot be found by this filter."
	value(string) : "Value (Optional)" : : "The key value to filter by. If empty, the filter will pass if the entity just has the keyfield."
	]

@FilterClass base(filter_base) 
	color(0 255 0)
	iconsprite("editor/filter_mass.vmt")
= filter_activator_mass_greater: "A filter that filters by the mass of the activator."
	[
	filtermass(float) : "Filter Mass" : : "The mass to filter by. If the filter mode is Allow, only entities whose mass is greater than the give float will pass the filter. If the filter mode is Disallow, all entities EXCEPT those whose mass is greater than the given float will pass the filter."
	]

@FilterClass base(filter_base) 
	color(0 255 0)
	iconsprite("editor/filter_model.vmt")
= filter_activator_model: "A filter that filters by the model of the activator."
	[
	model(studio) : "Filter Model" : : "The model to filter by. If the filter mode is Allow, only entities whose model matches the given string will pass the filter. If the filter mode is Disallow, all entities EXCEPT those whose model matches the string will pass the filter."
	skin(string) : "Skin" : -1 : "Some models have multiple versions of their textures, called skins. Use this if you want to filter by skins as well. If you want any skin to be allowed, be sure to leave this at -1! It might automatically change when you choose a model."
	]

@FilterClass base(filter_base) 
	color(0 255 0)
	iconsprite("editor/filter_name.vmt")
	line(0 255 0, targetname, filtername)
= filter_activator_name: "A filter that filters by the name of the activator."
	[
	filtername(target_destination) : "Filter Name" : : "The name to filter by. If the filter mode is Allow, only entities whose name matches the given string will pass the filter. If the filter mode is Disallow, all entities EXCEPT those whose name matches the string will pass the filter."
	]

@FilterClass base(filter_base) 
	color(0 255 0)
	iconsprite("editor/filter_generic.vmt")
= filter_activator_surfacedata: "A filter that tests the activator's surface data."
	[
	filtersurfaceprop(choices) : "Surface" : : "The surface to test with." =
		[
		"metal": "Metal"
		"metalgrate": "Metal Grate"
		"metalvent": "Metal Vent"
		]

	surfacetype(choices) : "Type" : 1 : "What to actually filter by." =
		[
		0: "Surface Prop"
		1: "Game Material"
		]

	]

@FilterClass base(filter_base) 
	color(0 255 0)
	iconsprite("editor/filter_team.vmt")
= filter_activator_team: "A filter that filters by the team of the activator."
	[
	filterteam(integer) : "Filter Team Number" : 0 : "The team number to filter by. If the filter mode is Allow, only entities whose team number matches the given team will pass the filter. If the filter mode is Disallow, all entities EXCEPT those whose team number matches the given team will pass the filter."
	]

@FilterClass base(filter_base) 
	color(0 255 0)
	iconsprite("editor/filter_damage_type.vmt")
= filter_damage_type: "A damage filter that filters by the type of damage inflicted. This can only be used as a damage filter, not as an activator filter."
	[
	damagetype(choices) : "Damage Type" : 64 : "The damage type to filter by. If the filter mode is Allow, only damage types that match will pass the filter. If the filter mode is Disallow, all damage types EXCEPT those who match will pass the filter." =
		[
		0: "Generic"
		1: "Crush"
		2: "Bullet"
		4: "Slash"
		8: "Burn"
		32: "Fall"
		64: "Blast"
		128: "Club"
		256: "Shock"
		512: "Sonic"
		1024: "Energy Beam"
		16384: "Drown"
		32768: "Paralyse"
		65536: "Nerve Gas"
		131072: "Poison"
		262144: "Radiation"
		524288: "Drown Recover"
		1048576: "Acid"
		2097152: "Slow Burn"
		4194304: "Remove No Ragdoll"
		16777216: "Plasma"
		33554432: "Airboat (gun)"
		67108864: "Dissolve"
		134217728: "Blast Surface"
		268435456: "Direct"
		536870912: "Buckshot"
		]

	]

@FilterClass base(filter_base) 
	color(0 255 0)
	iconsprite("editor/ficool2/filter_enemy.vmt")
	sphere(filter_radius)
	sphere(filter_outer_radius)
	line(0 255 0, targetname, filtername)
= filter_enemy: "A filter that filters a potential enemy entity by a set of criteria."
	[
	filtername(string) : "Name/Classname" : : "The classname or entity name to filter by. If the filter mode is Allow, only entities whose class name matches the given string will pass the filter. If the filter mode is Disallow, all entities EXCEPT those whose class name matches the given string will pass the filter."
	filter_radius(float) : "Radius" : 0 : "Radius by which to test the proximity of the enemy.  If the filter mode is Allow, only entities whose distance is equal to or closer than the radius will pass the filter. If the filter mode is Disallow, all entities outside the radius will pass the filter."
	filter_outer_radius(float) : "Outer Radius" : 0 : "Enemies outside this radius are considered invalid if Allow is set and valid if Disallow is set."
	filter_max_per_enemy(integer) : "Max Squadmates Per Enemy" : 0 : "Maximum number of squadmates allowed to target any given entity."
	spawnflags(flags)  =
		[
		1: "[1] Do not lose target if already aquired but filter failed." : 0
		]

	]

@FilterClass base(filter_base) 
	color(0 255 0)
	iconsprite("editor/filter_multiple.vmt")
	line(0 255 0, targetname, filter01)
	line(0 255 0, targetname, filter02)
	line(0 255 0, targetname, filter03)
	line(0 255 0, targetname, filter04)
	line(0 255 0, targetname, filter05)
	line(0 255 0, targetname, filter06)
	line(0 255 0, targetname, filter07)
	line(0 255 0, targetname, filter08)
	line(0 255 0, targetname, filter09)
	line(0 255 0, targetname, filter10)
	line(0 255 0, targetname, filter11)
	line(0 255 0, targetname, filter12)
	line(0 255 0, targetname, filter13)
	line(0 255 0, targetname, filter14)
	line(0 255 0, targetname, filter15)
	line(0 255 0, targetname, filter16)
	line(0 255 0, targetname, filter17)
	line(0 255 0, targetname, filter18)
	line(0 255 0, targetname, filter19)
	line(0 255 0, targetname, filter20)
= filter_multi: "A filter that tests the activator against multiple filters. This allows you to build more complex filters, such as 'Allow anyone on Team 1 who is also class engineer', or 'Allow everyone except classes npc_zombie and npc_headcrab'."
	[
	filtertype(choices) : "Logic Type" : 0 =
		[
		0: "AND (all filters must pass)"
		1: "OR (any filter must pass)"
		]

	negated(boolean) : "Negate Outcome" : 0 : "Whether to negate the result of the subfilters, after combining them using the Logic Type chosen.\nNegating the outcome using the AND logic type means that any subfilter must fail for this filter to pass.\nNegating the outcome using the OR logic type means that all subfilters must fail for this filter to pass."
	filter01(filterclass) : "Filter 1" : : "Activator filter to test."
	filter02(filterclass) : "Filter 2" : : "Activator filter to test."
	filter03(filterclass) : "Filter 3" : : "Activator filter to test."
	filter04(filterclass) : "Filter 4" : : "Activator filter to test."
	filter05(filterclass) : "Filter 5" : : "Activator filter to test."
	filter06(filterclass) : "Filter 6" : : "Activator filter to test."
	filter07(filterclass) : "Filter 7" : : "Activator filter to test."
	filter08(filterclass) : "Filter 8" : : "Activator filter to test."
	filter09(filterclass) : "Filter 9" : : "Activator filter to test."
	filter10(filterclass) : "Filter 10" : : "Activator filter to test."
	]

@FilterClass base(filter_base) 
	color(0 255 0)
	iconsprite("editor/filter_paint_power.vmt")
= filter_paint_power: "A filter that filters based on the current paint power of the entity."
	[
	paint_type(choices) : "Paint Type" : 0 : "The type of Gel to filter by. Used only in Colour mode." =
		[
		0: "(1) Repulsion Gel"
		1: "(2) Reflection Gel"
		2: "(3) Propulsion Gel"
		3: "(4) Conversion Gel"
		4: "(5) Cleansing Gel"
		5: "(6) Adhesion Gel"
		]

	paint_mode(choices) : "Filter Mode" : 0 : "The filter mode to filter the painted power by." =
		[
		0: "Colour"
		1: "Paintable"
		2: "Unpaintable"
		]

	]

@FilterClass base(filter_base) 
	color(0 255 0)
	iconsprite("editor/filter_held.vmt")
= filter_player_held: "A filter that only accepts objects held by the player."
	[
	]

@FilterClass base(filter_base) 
	color(0 255 0)
	iconsprite("editor/ficool2/filter_base.vmt")
= filter_velocity: "Filter that checks the player's velocity"
	[
	mode(choices) : "Mode" : 0 : "Set which mode to use for velocity comparisons" =
		[
		0: "Total Velocity"
		1: "Per-axis"
		]

	above(choices) : "Above/Below" : 1 : "Sets whether to check if the player goes above or below the given velocity." =
		[
		0: "Below"
		1: "Above"
		]

	enablevertical(boolean) : "Enable Vertical" : 0 : "Check vertical velocity (total velocity mode only)"
	enablehorizontal(boolean) : "Enable Horizontal" : 0 : "Check horizontal velocity (total velocity mode only)"
	verticalvelocity(float) : "Vertical velocity" : 500 : "The amount of units per second for vertical (Z axis) speed."
	horizontalvelocity(float) : "Horizontal velocity" : 1000 : "The amount of units per second for horizontal (XY axis) speed."
	ignoresign(boolean) : "Use Absolute Value" : 0 : "Whether to check the absolute value of the velocity components (per-axis mode only)"
	velocityvector(vector) : "Per-axis Velocity" : "0 0 0" : "The velocity vector for per-axis mode"
	velocityaxes(vector) : "Per-axis Enable" : "0 0 0" : "Which axes to use when checking velocity, zero means the corresponding axis is ignored (per-axis mode only)"
	]

@SolidClass base(BaseEntityVisBrush, EnableDisable, Toggle) 
	sphere(fademindist)
	sphere(fademaxdist)
= func_brush: "An brush built entity with various features."
	[
	spawnflags(flags)  =
		[
		2: "[2] Ignore player +USE" : 1
		]

	solidity(choices) : "Solidity" : 0 : "How the solidity changes." =
		[
		0: "Toggle with Enable/Disable"
		1: "Never Solid"
		2: "Always Solid"
		]

	excludednpc(string) : "NPC class excluded from collisions" : : "If an NPC classname is specified here, NPCs of that type won't collide with these brushes. In Episodic, you may also specify an individual entity's name."
	invert_exclusion(boolean) : "Invert NPC class exclusion" : 0 : "If set, then the excluded NPC class will consider this brush solid, and all other NPC classes will consider it non-solid."
	solidbsp(choices) : "Solid Type" : 1 : "How to calculate collisions. BSP is more rudimentary but allows more stable collision with players." =
		[
		0: "VPhysics"
		1: "BSP"
		]


	// Inputs
	input SetExcluded(string) : "Change the NPC class excluded from collisions."
	input SetInvert(bool) : "Set the state of inversion for NPC class exclusion (0 or 1)."
	input Toggle(void) : "Toggle visibility/solidity of this brush."
	]

@SolidClass base(BaseEntityVisBrush, Button) 
	sphere(fademindist)
	sphere(fademaxdist)
= func_button: "A brush entity that's designed to be used for a player-useable button. When used by the player, it moves to a pressed position. Do not lock while pressed; it will not return when unlocked."
	[
	movedir(angle) : "Move Direction (Pitch Yaw Roll)" : "0 0 0" : "Specifies the direction of motion to move when the button is used."
	speed(float) : "Speed" : 5 : "The speed that the button moves, in units per second."
	health(integer) : "Health (Obsolete)" : 0 : "Legacy method of specifying whether or not the button can be shot to activate it. Use the 'Damage Activates' spawnflag instead."
	lip(float) : "Lip" : 0 : "The amount the button will keep overlapping with the original position. The distance moved = the size of the brush on the movement axis - lip."
	wait(float) : "Delay Before Reset (-1 stay)" : 3 : "Amount of time, in seconds, after the button has been pressed before it returns to the starting position. Once it has returned, it can be used again. If the value is set to -1, the button never returns."
	spawnflags(flags)  =
		[
		1: "[1] Don't move" : 0
		32: "[32] Toggle" : 0
		256: "[256] Touch Activates" : 0
		512: "[512] Damage Activates" : 0
		1024: "[1024] Use Activates" : 1
		2048: "[2048] Starts locked" : 0
		4096: "[4096] Sparks" : 0
		16384: "[16384] Non-solid" : 0
		]

	customsound(sound) : "Sound Name" : : "The .wav(!!) sound file to use. (Only used when old 'sounds' keyvalue isn't set)"
	min_use_angle(float) : "Use Look-At Limit" : "0.8" : "Limit the usable look-at-angle. -1 is looking directly away, 0 is looking perpendicular, 1 is looking directly at."
	]

@SolidClass base(BaseEntityVisBrush) 
	sphere(fademindist)
	sphere(fademaxdist)
= func_conveyor: "A brush entity that functions as a conveyor belt, with a moving surface. The surface material should have a ConveyorScroll Material Proxy, to synchronize the material movement and push effect."
	[
	movedir(angle) : "Move Direction (Pitch Yaw Roll)" : "0 0 0" : "The direction conveyor moves."
	spawnflags(flags)  =
		[
		1: "[1] No Push" : 0
		2: "[2] Not Solid" : 0
		]

	speed(float) : "Conveyor Speed" : 100

	// Inputs
	input ToggleDirection(void) : "Change direction of conveyor."
	input SetSpeed(float) : "Sets Conveyor Speed."
	]

@SolidClass base(BaseDustParticleSpawner) 
	sphere(distmax)
= func_dustcloud: "A brush entity that spawns a translucent dust cloud within its volume."
	[
	sizemin(string) : "Minimum Particle Size" : 100 : "This value determines the minimum size the particles can be."
	sizemax(string) : "Maximum Particle Size" : 200 : "This value determines the maximum size the particles can be."
	alpha(integer) : "Particle Translucency (0 - 255)" : 30 : "Translucency of the particles."
	]

@SolidClass base(BaseDustParticleSpawner) 
	sphere(distmax)
= func_dustmotes: "A brush entity that spawns sparkling dust motes within its volume."
	[
	sizemin(string) : "Minimum Particle Size" : 10 : "This value determines the minimum size the particles can be."
	sizemax(string) : "Maximum Particle Size" : 20 : "This value determines the maximum size the particles can be."
	alpha(integer) : "Particle Translucency (0 - 255)" : 255 : "Translucency of the particles."
	]

@SolidClass base(BaseEntityVisBrush) 
	sphere(fademindist)
	sphere(fademaxdist)
	line(255 255 0, targetname, target)
= func_guntarget: "This is a moving target that moves along a path of path_tracks. It can be shot and killed."
	[
	speed(integer) : "Speed (units per second)" : 100 : "The speed at which the target moves along its path."
	target(target_destination) : "Spawn Track" : : "The name of the first path_track entity in the path that this target should follow."
	health(integer) : "Damage to Take" : 0 : "The amount of damage taken before this target is killed."

	// Inputs
	input Start(void) : "Start the target moving."
	input Stop(void) : "Stop the target from moving."
	input Toggle(void) : "Toggle the target between moving and stopped."

	// Outputs
	output OnDeath(void) : "Fires when the target is killed."
	]

@SolidClass base(BaseEntityVisBrush) 
	sphere(fademindist)
	sphere(fademaxdist)
= func_illusionary: "A brush that is always non-solid. Legacy support, see func_brush. However, if func_brush's added features are not needed this can be used for small memory savings."
	[
	]

@SolidClass base(BaseEntityVisBrush) 
	sphere(fademindist)
	sphere(fademaxdist)
	sphere(DisappearDist)
	sphere(DisappearMinDist)
	sphere(DisappearMaxDist)
= func_lod: "Brush-built model that fades out over a specified distance. Useful for creating world detail that doesn't need to be drawn far away, for performance reasons."
	[
	solid(choices) : "Solid" : 0 : "Set whether or not these brushes should collide with other entities." =
		[
		0: "Solid"
		1: "Nonsolid"
		]

	disappearmindist(integer) : "Disappear Min Distance" : 2000 : "Distance at which these brushes should starting fade out."
	disappearmaxdist(integer) : "Disappear Max Distance" : 2200 : "Distance at which these brushes should be completely faded out."
	]

@SolidClass base(BaseEntityVisBrush, Angles) 
	sphere(fademindist)
	sphere(fademaxdist)
	sphere(movedistance)
= func_movelinear: "A brush entity that moves linearly along a given distance, in a given direction."
	[
	movedir(angle) : "Move Direction (Pitch Yaw Roll)" : "0 0 0" : "The direction the brushes will move, when told to open or passed a positive SetPosition value."
	spawnflags(flags)  =
		[
		8: "[8] Not Solid" : 0
		]

	startposition(float) : "Start Position" : 0 : "Position of brush when spawned, where 0 is the starting position and 1 is the opened position. Negatives will position it in the opposite direction."
	speed(float) : "Speed" : 100 : "The speed that the brush moves, in units per second."
	movedistance(float) : "Move Distance" : 100 : "The distance from the starting point that the brush should move."
	blockdamage(float) : "Block Damage" : 0 : "The amount of damage to do to any entity that blocks the brushes, per frame."
	startsound(sound) : "Start Sound" : : "Sound played when the brush starts moving."
	stopsound(sound) : "Stop Sound" : : "Sound played when the brush stops moving."
	solidbsp(choices) : "Solid Type" : 1 : "How to calculate collisions. BSP is more rudimentarty but allows more stable collision with players." =
		[
		0: "VPhysics"
		1: "BSP"
		]


	// Inputs
	input Open(void) : "Move the brush to the end position (starting position + (move direction * move distance))."
	input Close(void) : "Move the brush to the starting position."
	input SetPosition(string) : "Move the brush to a specific position, where 0 is the starting position and 1 is the opened position. Accepts any value, with negatives moving in the opposite direction."
	input SetSpeed(float) : "Set the speed and update immediately."

	// Outputs
	output OnFullyOpen(void) : "Fired when the brush reaches the end position (starting position + (move direction * move distance))."
	output OnFullyClosed(void) : "Fired when the brush reaches the starting position."
	]

@SolidClass base(BaseEntityVisBrush) 
	sphere(fademindist)
	sphere(fademaxdist)
= func_platrot: "A brush entity that moves vertically, and can rotate while doing so."
	[
	spawnflags(flags)  =
		[
		1: "[1] Toggle" : 1
		64: "[64] X Axis" : 0
		128: "[128] Y Axis" : 0
		]

	noise1(sound) : "Movement Sound" : : "The sound to play when the brush moves."
	noise2(sound) : "Stop Sound" : : "The sound to play when the brush stops moving."
	speed(integer) : "Speed of Rotation" : 50 : "Speed at which the brush rotates, in degrees per second."
	height(integer) : "Travel Altitude" : 0 : "The vertical distance from the starting position that this platform moves. If negative, the platform will lower."
	rotation(integer) : "Spin amount" : 0 : "The amount this platform should rotate as it moves, in degrees."

	// Inputs
	input Toggle(void) : "Toggles the platform's state."
	input GoUp(void) : "Tells the platform to go up."
	input GoDown(void) : "Tells the platform to go down."
	]

@SolidClass base(func_portal_detector) = func_portalled: "Fires outputs when the player teleports through a portal in its volume."
	[
	fireondeparture(boolean) : "Fire On Departure" : 1 : "Fire when the entity is entering this portal."
	fireonarrival(boolean) : "Fire On Arrival" : 1 : "Fire when the entity is exiting this portal."
	fireonplayer(boolean) readonly : "Player" : 1 : "Fire when a player has portalled. Entities don't get checked, so this is useless to change."

	// Outputs
	output OnEntityPrePortalled(void) : "Fires when the entity is about to portal."
	output OnEntityPostPortalled(void) : "Fires when the entity is done portalling."
	]

@SolidClass base(BaseEntityVisBrush, MasterEnt, Button) 
	sphere(fademindist)
	sphere(fademaxdist)
	line(255 255 255, targetname, master)
= func_rot_button: "A brush entity that's designed to be used for a rotating player-useable button. When used by the player, it rotates to a pressed position."
	[
	speed(integer) : "Speed" : 50 : "The speed that the button rotates, in degrees per second."
	health(integer) : "Health (Obsolete)" : 0 : "Legacy method of specifying whether or not the button can be shot to activate it. Use the 'Damage Activates' spawnflag instead."
	wait(integer) : "Delay Before Reset (-1 stay)" : 3 : "Amount of time, in seconds, after the button has been pressed before it returns to the starting position. Once it has returned, it can be used again. If the value is set to -1, the button never returns."
	distance(integer) : "Distance (deg)" : 90 : "The amount, in degrees, that the button should rotate when it's pressed."
	spawnflags(flags)  =
		[
		1: "[1] Not solid" : 0
		2: "[2] Reverse Direction (Clockwise)" : 0
		32: "[32] Toggle" : 0
		64: "[64] X Axis" : 0
		128: "[128] Y Axis" : 0
		256: "[256] Touch Activates" : 0
		512: "[512] Damage Activates" : 0
		1024: "[1024] Use Activates" : 0
		2048: "[2048] Starts locked" : 0
		4096: "[4096] Sparks" : 0
		]

	]

@SolidClass base(BaseEntityVisBrush, Origin, Angles) 
	sphere(fademindist)
	sphere(fademaxdist)
= func_rotating: "A rotating brush entity."
	[
	maxspeed(integer) : "Max Rotation Speed" : 100 : "The maximum rotation speed of the brushes, in degrees per second."
	fanfriction(integer) : "Friction (0 - 100%)" : 20 : "The amount of rotational friction. Value must be between 0 and 100 %. Lower values make the brush speed up and slow down faster."
	message(sound) : "Rotating sound WAV" : : "Sound to play while rotating."
	volume(integer) : "Volume (10 = loudest)" : 10 : "The volume of the rotation sound."
	spawnflags(flags)  =
		[
		1: "[1] Start ON" : 0
		2: "[2] Reverse Direction" : 0
		4: "[4] X Axis" : 0
		8: "[8] Y Axis" : 0
		16: "[16] Acc/Dcc" : 0
		32: "[32] Fan Pain" : 0
		64: "[64] Not Solid" : 0
		128: "[128] Small Sound Radius" : 0
		256: "[256] Medium Sound Radius" : 0
		512: "[512] Large Sound Radius" : 1
		1024: "[1024] Client-side Animation" : 0
		]

	dmg(integer) : "Blocking Damage" : 0 : "Damage done to any entity that blocks the rotation, per frame."
	solidbsp(choices) : "Solid Type" : 1 : "How to calculate collisions. BSP is more rudimentarty but allows more stable collision with players." =
		[
		0: "VPhysics"
		1: "BSP"
		]


	// Inputs
	input SetSpeed(float) : "Set the speed as a ratio of the specified Max Rotation Speed, where 0 is stopped and 1 is the Max Rotation Speed.."
	input Start(void) : "Start the rotator rotating."
	input Stop(void) : "Stop the rotator from rotating."
	input StopAtStartPos(void) : "Stop the rotator from rotating when it gets around to the start position again (on its rotation axis)."
	input StartForward(void) : "Start the rotator rotating forward at maximum speed."
	input StartBackward(void) : "Start the rotator rotating backward at maximum speed."
	input Toggle(void) : "Toggle the rotator between rotating and not rotating."
	input Reverse(void) : "Reverse the direction of rotation of the rotator, preserving the current speed."
	input GetSpeed(void) : "Causes the func_rotating to fire its OnGetSpeed output with its current speed."

	// Outputs
	output OnGetSpeed(integer) : "Fired when the GetSpeed input is called.  The current speed of the func_rotating is passed with this output."
	]

@SolidClass base(BaseTank) 
	line(255 255 255, targetname, control_volume)
	line(255 255 255, targetname, TraceFilter)
	sphere(PlayerBBoxDist)
	sphere(minrange)
	sphere(maxrange)
= func_tank: "Brush Gun Turret"
	[
	ammotype(choices) : "Ammo Type" =
		[
		"": "None"
		"Pistol": "Pistol"
		"SMG1": "SMG1"
		"AR2": "AR2"
		"CombineHeavyCannon": "Combine Heavy Cannon"
		"StriderMinigun": "Strider Minigun"
		]

	spawnflags(flags)  =
		[
		8192: "[8192] Ignore range when making viewcone checks" : 0
		256: "[256] Aiming Assistance (Player Only)" : 0
		]

	]

@SolidClass base(BaseTank) 
	line(255 255 255, targetname, control_volume)
	line(255 255 255, targetname, TraceFilter)
	sphere(PlayerBBoxDist)
	sphere(minrange)
	sphere(maxrange)
= func_tanklaser: "Brush Laser Turret"
	[
	laserentity(target_destination) : "env_laser Entity"
	]

@SolidClass base(BaseTank) 
	line(255 255 255, targetname, control_volume)
	line(255 255 255, targetname, TraceFilter)
	sphere(PlayerBBoxDist)
	sphere(minrange)
	sphere(maxrange)
= func_tankmortar: "Brush Mortar Turret"
	[
	imagnitude(integer) : "Explosion Magnitude" : 100
	firedelay(string) : "Shell travel time" : 2 : "How long after the turret fires before the shell impacts"
	firestartsound(sound) : "Firing start sound" : : "Sound of the mortar firing"
	fireendsound(sound) : "Firing end sound"
	incomingsound(sound) : "Incoming Shell Sound" : : "Sound of the shell falling on the target"
	warningtime(float) : "Incoming warning time" : 1 : "How long before the shell impacts to play the warning sound"
	firevariance(float) : "Fire time variance" : 0 : "How much variability to add to fire rate (time +-)"

	// Inputs
	input FireAtWill(void) : "Allow tank to fire next shot as soon as ready."
	]

@SolidClass base(BaseTank) 
	line(255 255 255, targetname, control_volume)
	line(255 255 255, targetname, TraceFilter)
	sphere(PlayerBBoxDist)
	sphere(minrange)
	sphere(maxrange)
= func_tankphyscannister: "PhysCannister Turret"
	[
	barrel_volume(target_destination) : "Barrel Volume" : : "Name of a trigger the specifies the volume in which cannisters must be placed."
	]

@SolidClass base(BaseTank) 
	line(255 255 255, targetname, control_volume)
	line(255 255 255, targetname, TraceFilter)
	sphere(PlayerBBoxDist)
	sphere(minrange)
	sphere(maxrange)
= func_tankpulselaser: "Brush Pulse Laser"
	[
	pulsespeed(float) : "Pulse Speed" : 1000 : "How fast does pulse travel"
	pulsecolor(color255) : "Pulse Color" : "255 0 0" : "Color of the pulse"
	pulsewidth(float) : "Pulse Width" : 20 : "Width of the pulse"
	pulselife(float) : "Pulse Life" : 2 : "(Seconds)  How long the pulse lasts"
	pulselag(float) : "Pulse Lag" : "0.05" : "(Seconds)  How far behind is pulse tail"
	pulsefiresound(sound) : "Pulse Fire Sound" : : "Sound played when pulse fires"
	]

@SolidClass base(BaseEntityVisBrush) 
	sphere(fademindist)
	sphere(fademaxdist)
	line(255 255 255, targetname, train)
	line(0 255 0, targetname, toptrack)
	line(0 0 255, targetname, bottomtrack)
= func_trackchange: "An entity that works as a rotating/moving platform that will carry a train to a new track. It must be larger in X-Y planar area than the train, since it must contain the train within these dimensions in order to operate when the train is near it. The track will rotate around its own origin. Similar variant to this entity is func_trackautochange, however you can't trigger func_trackautochange unless the path_track is a dead end. If Auto Activate Train flag is ticked, train isn't paused at the top/bottom of the path after func_trackchange has finished it's movement. Instead, it will continue moving forward and doesn't need to be reactivated by trigger. If selected, the platform only rotates in place of it's origin without travelling specified altitude. The top and the bottom path_tracks should have their origin positioned in the same coordinates."
	[
	height(integer) : "Travel Altitude" : 0 : "Travel distance, from top to bottom. If Start at Bottom flag is selected, the travel distance won't change from bottom to top, it will only make the platform start at bottom and awaits for func_tracktrain to arrive."
	rotation(integer) : "Spin amount" : 0 : "The amount this platform should rotate as it moves, in degrees."
	train(target_destination) : "Train to Switch" : : "Name of func_tracktrain this platform will transport to top/bottom track."
	toptrack(target_destination) : "Top Track" : : "Name of last path_track of the top path (if Start at Bottom flag is selected, this is the name of the first path_track at the top path)."
	bottomtrack(target_destination) : "Bottom Track" : : "Name of first path_track of the bottom track (if Start at Bottom flag is selected, this is the name of the last path_track at the bottom path)."
	speed(integer) : "Move/Rotate Speed" : 0 : "Speed in which func_trackchange travel the whole way up/down (units per seconds)."
	spawnflags(flags)  =
		[
		1: "[1] Auto Activate Train - see description" : 0
		2: "[2] Relink Track" : 0
		8: "[8] Start at Bottom - Platform starts at the bottom instead at the top path_track if this flag is ticked" : 0
		16: "[16] Rotate Only - see description" : 0
		64: "[64] X Axis - Train rotates around X axis instead of Z axis. Can be combined with Y Axis" : 0
		128: "[128] Y Axis - Train rotates around Y axis instead of Z axis. Can be combined with X Axis" : 0
		]


	// Inputs
	input Trigger(void) : "Trigger the track change."
	]

@SolidClass base(BaseEntityVisBrush) 
	sphere(fademindist)
	sphere(fademaxdist)
	line(255 255 0, targetname, target)
= func_train: "An old entity leftover from Quake. It follows a series of path_corner entities. While mostly made obsolete by func_tracktrain, this entity is not affected by the turning inaccuracy issues that that entity has, and may be more suitable for fast-moving objects."
	[
	spawnflags(flags)  =
		[
		8: "[8] Non-solid" : 0
		]

	target(target_destination) : "Spawn path_corner" : : "The name of the first path_corner in the train's path. The train will spawn at this path_corner."
	speed(float) : "Speed" : 50 : "Speed at which the train moves."
	noise1(sound) : "Movement Sound" : "Default.Null" : "The sound to play when the train moves. This must be specified, but can be set to 'Default.Null' to play no sound."
	noise2(sound) : "Stop Sound" : "Default.Null" : "The sound to play when the train stops moving. This must be specified, but can be set to 'Default.Null' to play no sound."
	volume(float) : "Sound volume (0-10)" : 10 : "Volume of the sounds emitted when moving and stopping."
	dmg(float) : "Crush Damage" : 0 : "Amount of damage to deal to entities blocking the train."

	// Inputs
	input Toggle(void) : "Toggle movement"
	input Start(void) : "Start movement"
	input Stop(void) : "Stop movement"
	]

@SolidClass base(BaseEntityVisBrush) 
	sphere(fademindist)
	sphere(fademaxdist)
	line(255 255 255, targetname, target)
= func_traincontrols: "When used by the player, this entity overrides the player's controls to let them drive a train."
	[
	target(target_destination) : "Train Name" : : "The target train to control when the player uses these controls."
	]

@SolidClass base(func_wall) = func_wall_toggle: "Legacy Support for Half-Life. Use func_brush instead. A general brush entity which can be toggled on/off When off, the brush will be non-solid and invisible. Does not cast lightmap shadows."
	[
	spawnflags(flags)  =
		[
		1: "[1] Starts Invisible" : 0
		]


	// Inputs
	input Toggle(void) : "Toggle the brush on/off. When off, the brush will be non-solid and invisible."
	]

@SolidClass base(BaseEntityVisBrush) 
	sphere(fademindist)
	sphere(fademaxdist)
= func_weight_button: "A button which activates after a specified amount of weight is applied."
	[
	weighttoactivate(float) : "Amount of weight required before this button activates, in KG."

	// Outputs
	output OnPressed(void) : "Fired when the button is touching enough weight."
	output OnReleased(void) : "Fired when the button was pressed, but weight was removed."
	]

@PointClass base(gibshooterbase) 
	line(255 255 255, targetname, lightingorigin)
	iconsprite("editor/gibshooter.vmt")
	color(200 200 0)
= gibshooter: "An entity that shoots out gibs. Style of body part depends on language type."
	[
	]

@PointClass base(prop_glass_futbol_socket) 
	studio("models/editor/axis_helper.mdl")
= hot_potato_catcher: "Catches 'hot potatos' and fires an output."
	[
	]

@PointClass base(prop_glass_futbol_socket) 
	studio("models/editor/axis_helper.mdl")
= hot_potato_socket: "Catches (bombs?) and fires an output."
	[
	]

@PointClass base(prop_glass_futbol_spawner) 
	studioprop("models/props/futbol_dispenser.mdl")
= hot_potato_spawner: "Catches 'hot potatos' and fires an output."
	[
	]

@PointClass base(BaseEntityPoint, HintNode) 
	studio("models/editor/node_hint.mdl")
	color(255 255 255)
	sphere(radius)
= info_hint: "A hint that is not used for navigation. They don't go into the nodegraph, nor do they fall to the ground. Use these to provide some spatial context for NPCs, such as 'look here if you can't find the player' or 'throw rocks at this spot'."
	[
	]

@PointClass base(BaseEntityAnimating) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop("models/effects/cappoint_hologram.mdl")
= item_nugget: "Aperture Incentivizing Nugget. Useless."
	[
	groupname(string) : "Group Name" : : "Giving nuggets a group name hints the game that they are intended to be a group"
	respawntime(float) : "Respawn Time" : 30 : "Number of seconds between when a nugget is collected and when it respawns"
	pointvalue(choices) : "Point Value" : 1 =
		[
		1: "1"
		5: "5"
		10: "10"
		25: "25"
		]

	]

@PointClass base(BaseEntityAnimating) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop("models/props/water_bottle/water_bottle.mdl")
= item_paint_power_pickup: "Paint Ammo"
	[
	painttype(choices) : "Paint Type" : 0 : "The paint power of the pickup." =
		[
		0: "Bounce"
		1: "Reflect"
		2: "Speed"
		3: "Portal"
		5: "Stick"
		]

	]

@MoveClass base(BaseEntityPoint, RopeKeyFrame) 
	studio("models/editor/axis_helper_thick.mdl")
	iconsprite("editor/keyframe_rope")
	animator()
	keyframe()
= keyframe_rope: "A node entity that marks a point in a rope. Traditionally, one move_rope is used to start the chain and then is followed by one or more keyframe_rope entities. However they are freely interchangeable."
	[
	]

@PointClass base(logic_measure_movement) 
	color(0 100 250)
	iconsprite("editor/logic_measure_movement.vmt")
	line(255 255 0, targetname, measureReference)
	line(255 0 255, targetname, measureTarget, targetname, measureReference)
	line(255 255 0, targetname, targetReference)
	line(255 0 255, targetname, target, targetname, TargetReference)
	sphere(TraceDistance)
	line(255 255 255, targetname, damagefilter)
= logic_measure_direction: "An entity that can measure the direction of an entity relative to another entity and apply that movement to a third entity."
	[
	measuretarget(target_destination) : "Entity to Measure" : : "Entity whose direction you want to measure."
	measurereference(target_destination) : "Measure Reference" : : "The direction of Entity to Measure will be measured from this entity."
	target(target_destination) : "Entity to Move" : : "This entity will be moved in the direction of the Entity to Measure."
	targetreference(target_destination) : "Movement Reference" : : "The Entity to Move will move relative to this entity."
	targetscale(float) : "Trace scale" : 1 : "A scale to *divide* the distance between the Entity to Measure and the trace's endpoint by before applying those movements to the Entity to Move. 1 = target entity moves to the end of the trace, 2 = target entity moves to the middle of the trace (half as far), and 0.5 = target entity moves twice as far as the trace."
	measuretype(choices) : "Measurement Type" : 0 : "How should the direction be measured?" =
		[
		0: "Angles"
		1: "Eye angles"
		2: "Attachment point angles"
		]

	tracedistance(float) : "Trace distance" : 8192 : "The maximum distance that the trace can go. 0 = no limit."
	mask(choices) : "Trace Mask" : 1174421507 : "How the measurement tracing should act in regards to what it should collide with." =
		[
		33570827: "MASK_SOLID (Anything solid)"
		33636363: "MASK_PLAYERSOLID (Anything solid + player clip)"
		33701899: "MASK_NPCSOLID (Anything solid + NPC clip)"
		16432: "MASK_WATER (Water volumes)"
		16513: "MASK_OPAQUE (Anything opaque, e.g. windows)"
		16449: "MASK_BLOCKLOS (Anything that blocks line of sight)"
		1174421507: "MASK_SHOT (Anything that would be hit by a bullet)"
		]

	collisiongroup(choices) : "Collision Group" : 0 : "The collision group the measurement tracing should use." =
		[
		0: "None"
		]

	damagefilter(filterclass) : "Trace Filter" : : "A filter to use for tracing."
	hitifpassed(choices) : "Trace Filter behavior" : 0 : "What the filter should actually be used for." =
		[
		0: "If pass, don't hit"
		1: "If pass, hit"
		]

	tracetargetreference(boolean) : "Additional trace from movement reference" : 0 : "Initiates another trace from the Movement Reference using the existing properties and adjusts the position to its end point. Only use this if the Movement Reference is different from the Measure Reference."

	// Inputs
	input SetMeasureTarget(target_destination) : "Set the Entity to Measure, whose movement should be measured."
	input SetMeasureReference(target_destination) : "Set the Measure Reference entity."
	input SetTarget(target_destination) : "Set the Entity to Move, which will be moved to mimic the measured entity."
	input SetTargetReference(target_destination) : "Set the Movement Reference entity."
	input SetTargetScale(float) : "Set the scale to divide the measured movements by."
	input SetMeasureType(integer) : "Sets the measurement type."
	input SetMeasureAttachment(string) : "Sets the measurement attachment."
	input Enable(void) : "Enable the logic_measure_direction."
	input Disable(void) : "Disable the logic_measure_direction."
	input SetTraceFilter(target_destination) : "Sets the entity to use as the trace filter. Pass in an empty string to clear the trace filter."
	]

@PointClass base(BaseEntityPoint, EnableDisable, math_counter) 
	color(0 100 250)
	iconsprite("editor/math_counter_advanced.vmt")
= math_counter_advanced: "A special version of math_counter with the ability to perform advanced calculations. Otherwise functions identically to math_counter."
	[
	preservevalue(boolean) : "Preserve Value?" : 0 : "If set to 'Yes', calculations will fire OutValue with the resulting value, but the actual value stored in this entity will stay the same, allowing future calculations to use a constant value. If you want to change the value, you must use SetValueNoFire to set the counter's value or the PreserveValue input to toggle this feature. This also disables min/max functionality."
	alwaysoutputasint(boolean) : "Always Output As Int" : 0 : "If set to 'Yes', the stored value (and OutValue) will always be rounded to an integer before firing."
	setlerppercent(float) : "Lerp Percent" : "0.5" : "The percentage used by the LerpTo input."

	// Inputs
	input PreserveValue(bool) : "Sets whether this counter's value should be preserved after calculations. 1 = Yes, 0 = No"
	input AlwaysOutputAsInt(bool) : "Sets whether this counter's value should always output as an integer. 1 = Yes, 0 = No"
	input SetValueToPi(void) : "Sets the counter's value to 3.14159265358979323846 and fires the OutValue output with it."
	input SquareRoot(void) : "Calculates the square root of the counter's current value. Fires the OutValue output with the result."
	input Power(integer) : "Raises the power of the counter's current value to this value. Fires the OutValue output with the result."
	input Round(integer) : "Rounds the counter's current value to the specified number place. For example, rounding 256 to 100 will round it to 300 and rounding 256 to 10 will round it to 260. Use 0 to round decimals to integers. Fires the OutValue output with the result."
	input Floor(integer) : "Floors, or rounds down, the counter's current value to the specified number place. Fires the OutValue output with the result."
	input Ceil(integer) : "Ceils, or rounds up, the counter's current value to the specified number place. Fires the OutValue output with the result."
	input Trunc(integer) : "Truncates, or rounds toward zero, the counter's current value to the specified number place. Fires the OutValue output with the result."
	input Sin(void) : "Applies sine to the counter's current value. Fires the OutValue output with the result."
	input Cos(void) : "Applies cosine to the counter's current value. Fires the OutValue output with the result."
	input Tan(void) : "Applies tangent to the counter's current value. Fires the OutValue output with the result."
	input RandomInt(string) : "Generates a random integer between the specified bounds. Format = 'lowerbound upperbound', like '22 65'. Fires the OutValue output with the result."
	input RandomFloat(string) : "Generates a random float between the specified bounds. Format = 'lowerbound upperbound', like '22.5 48.721'. Fires the OutValue output with the result."
	input LerpTo(float) : "Lerps this counter's value to the specified value based on the lerp percent."
	input SetLerpPercent(float) : "Sets the lerp percent."
	]

@SolidClass base(BaseEntityVisBrush, Angles, MasterEnt) 
	sphere(fademindist)
	sphere(fademaxdist)
	line(255 255 255, targetname, master)
= momentary_rot_button: "A brush entity that's designed to be used for rotating wheels, where the player can rotate them to arbitrary positions before stopping."
	[
	speed(float) : "Speed (deg/sec)" : 50 : "The amount, in degrees, that the wheel turns per second."
	sounds(choices) : "Sounds" : 0 : "Sound played when pressed. Choose from sounds in the Buttons.snd* category." =
		[
		0: "None (Silent)"
		1: "Buttons.snd1: Big zap & Warmup"
		2: "Buttons.snd2: Access Denied"
		3: "Buttons.snd3: Access Granted"
		4: "Buttons.snd4: Quick Combolock"
		5: "Buttons.snd5: Power Deadbolt 1"
		6: "Buttons.snd6: Power Deadbolt 2"
		7: "Buttons.snd7: Plunger"
		8: "Buttons.snd8: Small zap"
		9: "Buttons.snd9: Keycard Sound"
		10: "Buttons.snd10: Buzz"
		11: "Buttons.snd11: Buzz Off"
		12: "Buttons.snd12: Latch locked"
		13: "Buttons.snd13: Latch Unlocked"
		14: "Buttons.snd14: Lightswitch"
		15: "Buttons.snd15: Small bleek"
		16: "Buttons.snd16: Small deny"
		17: "Buttons.snd17: Small doop"
		18: "Buttons.snd18: Small tech deny"
		19: "Buttons.snd19: Click and combine screen fuzz"
		20: "Buttons.snd20: Roomy beep"
		21: "Buttons.snd21: Lever or Wheel: turn + move sqeek"
		22: "Buttons.snd22: Lever or Wheel: latch + release gas"
		23: "Buttons.snd23: Lever or Wheel: ratchet + sqeek"
		24: "Buttons.snd24: Lever or Wheel: large ratchet"
		25: "Buttons.snd25: Lever or Wheel: clanky + gas release"
		26: "Buttons.snd26: Lever or Wheel: latch + large metal thud"
		27: "Buttons.snd27: Lever or Wheel: smaller ratchet"
		28: "Buttons.snd28: Lever or Wheel: smaller lever move"
		31: "Buttons.snd31: Shock buzz"
		32: "Buttons.snd32: Clickbeep"
		33: "Buttons.snd33: Tech blip"
		34: "Buttons.snd34: Clickbeepbeep open"
		35: "Buttons.snd35: Small high blip"
		36: "Buttons.snd36: Small tech fuzz blip"
		37: "Buttons.snd37: Small click bleep (change to lightswitch)"
		40: "Buttons.snd40: Combine door lock - locked"
		41: "Buttons.snd41: Combine blip growl"
		42: "Buttons.snd42: Combine squick growl"
		43: "Buttons.snd43: Combine whine purr"
		44: "Buttons.snd44: Combine click talk"
		45: "Buttons.snd45: Combine click growl fizz"
		46: "Buttons.snd46: Combine click fizz (deny)"
		47: "Buttons.snd47: Combine click talker"
		]

	distance(float) : "Distance" : 90 : "The maximum amount, in degrees, that the wheel is allowed to rotate."
	returnspeed(float) : "Auto-return speed" : 0 : "If the 'Toggle' spawnflag is not set, the speed at which the wheel auto-returns when left alone, in degrees per second."
	spawnflags(flags)  =
		[
		1: "[1] Not Solid" : 1
		32: "[32] Toggle (Disable Auto Return)" : 1
		64: "[64] X Axis" : 0
		128: "[128] Y Axis" : 0
		1024: "[1024] Use Activates" : 1
		2048: "[2048] Starts locked" : 0
		8192: "[8192] Jiggle when used while locked" : 0
		]

	startposition(float) : "Start Position" : 0 : "Postion when spawned. The value is a range between 0.0 and 1.0, where 0 is the unrotated position and 1 is the rotated position + 'Distance'."
	startdirection(choices) : "Start Direction" : -1 : "Specify the direction the button will move when first used. Ignored if Start Position is 0 or 1." =
		[
		-1: "Forward"
		1: "Backward"
		]

	solidbsp(choices) : "Solid Type" : 1 : "How to calculate collisions. BSP is more rudimentarty but allows more stable collision with players." =
		[
		0: "VPhysics"
		1: "BSP"
		]


	// Inputs
	input Lock(void) : "Lock the button, preventing it from functioning."
	input Unlock(void) : "Unlock the button, allowing it to function."
	input SetPosition(string) : "Move to a position. The parameter must be a value between 0 and 1, where 0 is the unrotated position and 1 is the rotated position + 'Distance'."
	input SetPositionImmediately(string) : "Immediately teleport to a position. The parameter must be a value between 0 and 1, where 0 is the unrotated position and 1 is the rotated position + 'Distance'."
	input _DisableUpdateTarget(void) : "Prevent the Position output from firing. Used when lock jiggling is triggered."
	input _EnableUpdateTarget(void) : "Allow the Position output to fire again. Used when lock jiggling is triggered."

	// Outputs
	output Position(integer) : "Fired whenever the button moves. The output is the position of button from 0 to 1, where 0 is the unrotated position and 1 is the rotated position + 'Distance'."
	output OnPressed(integer) : "Fired when the button is first pressed."
	output OnUnpressed(integer) : "Fired when the button is first released from being pressed."
	output OnFullyClosed(void) : "Fired when the button has reached position 1, the rotated position + 'Distance'."
	output OnFullyOpen(void) : "Fired when the button has reached position 0, the unrotated starting position."
	output OnReachedPosition(void) : "Fired whenever the button reaches a goal position: i.e. when it becomes open, becomes closed, or reaches the point specified by a 'SetPosition' input."
	]

@MoveClass base(BaseEntityPoint, RopeKeyFrame) 
	studio("models/editor/axis_helper_thick.mdl")
	iconsprite("editor/move_rope")
	animator()
	keyframe()
= move_rope: "A node entity that marks a point in a rope. Traditionally, one move_rope is used to start the chain and then is followed by one or more keyframe_rope entities. However they are freely interchangeable."
	[
	]

@PointClass base(Angles, BaseNPCMaker) 
	iconsprite("editor/npc_maker.vmt")
	color(0 0 255)
= npc_maker: "NPC Maker"
	[
	spawnflags(flags)  =
		[
		16: "[16] Fade Corpse" : 0
		]

	npctype(npcclass) : "Class name of spawned NPC"
	npctargetname(string) : "Childrens' Name"
	npcsquadname(string) : "Childrens' Squad Name"
	npchintgroup(string) : "Childrens' Hint Group"
	additionalequipment(choices) : "Weapons" : 0 =
		[
		0: "Nothing"
		]

	]

@PointClass base(BaseNPCMaker) 
	color(0 0 255)
	iconsprite("editor/ficool2/npc_template_maker.vmt")
	line(255 255 0, targetname, templatename)
	sphere(radius)
	line(255 255 0, targetname, destinationgroup)
= npc_template_maker: "An entity that creates NPCs. The NPCs it creates are clones of a template NPC. NPCs are spawned around this maker's origin, or at specified destination points."
	[
	spawnflags(flags)  =
		[
		256: "[256] Always use radius spawn" : 0
		512: "[512] Don't preload template models" : 0
		]

	templatename(target_destination) : "Name of template NPC" : : "Template NPC that this maker should be creating clones of."
	radius(float) : "Radius" : 256 : "Radius around this maker within which NPCs are to be placed. Spawned NPCs will try and find empty space within this radius to spawn."
	destinationgroup(target_destination) : "Name of Destination Group" : : "If you'd like spawned NPCs to be created at an info_npc_spawn_destination entity, enter the name of that entity here. If you have more than one destination entity by that name, the Destination Criteria will be used to select one from the group."
	criterionvisibility(choices) : "Dest. Criterion: Visible to player?" : 2 : "Should the NPC try to spawn at a destination that the player can see? Only applicable if a Destination Group is being used." =
		[
		0: "Yes"
		1: "No"
		2: "Don't Care"
		]

	criteriondistance(choices) : "Dest. Criterion: Distance to player?" : 2 : "Should the NPC try to spawn nearest to or farthest from the player's current location? Only applicable if a Destination Group is being used." =
		[
		0: "Nearest"
		1: "Farthest"
		2: "Don't Care"
		]

	minspawndistance(integer) : "Minimum spawn distance from player" : 0 : "The spawn destination node distance to the player will have to be further or equal than this value."

	// Inputs
	input SpawnNPCInRadius(void) : "Spawn an NPC somewhere within the maker's radius."
	input SpawnNPCInLine(void) : "Spawn an NPC somewhere within a line behind the maker."
	input SpawnMultiple(integer) : "Spawn multiple NPCs (uses destination group, else radius)."
	input ChangeDestinationGroup(target_destination) : "Switch to a different set of Destination entities."
	input SetMinimumSpawnDistance(integer) : "Set the minimum spawn distance from player to destination node."
	]

@PointClass base(TwoObjectPhysics) 
	line(255 255 0, targetname, attach1)
	line(0 0 255, targetname, attach2)
	line(128 128 128, targetname, constraintsystem)
	sphere(teleportfollowdistance)
	iconsprite("editor/phys_ballsocket.vmt")
	line(255 255 255, targetname, attach1)
	line(255 255 255, targetname, attach2)
	line(128 128 128, targetname, attach1, targetname, attach2)
	color(128 128 128)
= phys_ballsocket: "A constraint that keeps the position of two objects fixed, relative to the constraint's origin. It does not affect rotation."
	[
	]

@PointClass base(TwoObjectPhysics) 
	line(255 255 0, targetname, attach1)
	line(0 0 255, targetname, attach2)
	line(128 128 128, targetname, constraintsystem)
	sphere(teleportfollowdistance)
	studio("models/editor/axis_helper.mdl")
	line(255 255 255, targetname, attach1)
	line(255 255 255, targetname, attach2)
	line(128 128 128, targetname, attach1, targetname, attach2)
	color(128 128 128)
= phys_constraint: "A constraint that keeps the relative position and orientation of two objects fixed."
	[
	]

@PointClass base(TwoObjectPhysics) 
	line(255 255 0, targetname, attach1)
	line(0 0 255, targetname, attach2)
	line(128 128 128, targetname, constraintsystem)
	sphere(teleportfollowdistance)
	line(128 128 128, targetname, attach1)
	line(128 128 128, targetname, attach2)
	line(128 128 128, targetname, attach1, targetname, attach2)
	color(128 128 128)
	iconsprite("editor/ficool2/phys_hinge")
= phys_hinge: "A physically simulated hinge. Use the helper to define the axis of rotation."
	[
	hingefriction(float) : "Friction" : 0 : "Resistance/friction in the hinge"
	hingeaxis(vecline) : "Hinge Axis"
	systemloadscale(float) : "Load Scale" : 1 : "Scale of the load connected to this hinge (1=just the objects directly connected)"
	minsoundthreshold(float) : "Minimum Sound Velocity" : 6 : "When travelling below this many units/sec, will not play any sound."
	maxsoundthreshold(float) : "Full Sound Velocity" : 80 : "When travelling at this speed or above, will play sound at full volume."
	slidesoundfwd(sound) : "Travel sound (forward)" : : "Play this sound when travelling forward on helper axis"
	slidesoundback(sound) : "Travel sound (backward)" : : "Play this sound when travelling backward on helper axis"
	reversalsoundthresholdsmall(float) : "Reversal sound threshold (small)" : 0 : "When accelerating by more than this many units/sec^2 opposite to direction of travel, play the small reversal sound."
	reversalsoundthresholdmedium(float) : "Reversal sound threshold (medium)" : 0 : "When accelerating by more than this many units/sec^2 opposite to direction of travel, play the medium reversal sound."
	reversalsoundthresholdlarge(float) : "Reversal sound threshold (large)" : 0 : "When accelerating by more than this many units/sec^2 opposite to direction of travel, play the large reversal sound."
	reversalsoundsmall(sound) : "Reversal sound (small)" : : "Play this sound when making a hard reverse over the small threshold but less than medium"
	reversalsoundmedium(sound) : "Reversal sound (medium)" : : "Play this sound when making a hard reverse over the medium threshold but less than large"
	reversalsoundlarge(sound) : "Reversal sound (large)" : : "Play this sound when making a hard reverse over the large threshold"

	// Inputs
	input SetAngularVelocity(float) : "Set angular velocity around the hinge (motor) in deg/sec"
	]

@PointClass base(TwoObjectPhysics) 
	line(255 255 0, targetname, attach1)
	line(0 0 255, targetname, attach2)
	line(128 128 128, targetname, constraintsystem)
	sphere(teleportfollowdistance)
	studio("models/editor/axis_helper.mdl")
	line(255 255 255, targetname, attach1)
	line(255 255 255, targetname, attach2)
	line(128 128 128, targetname, attach1, targetname, attach2)
	sphere(minlength)
	color(128 128 128)
= phys_lengthconstraint: "A constraint that preserves the distance between two entities. If the 'Keep Rigid' flag is set, think of it as a rod. If not, think off it as a virtual rope."
	[
	addlength(float) : "Additional Length" : 0 : "Add (or subtract) this amount to the rest length of the rope."
	minlength(float) : "Minimum Length" : 0 : "If the constraint is not rigid, this is the minimum length it can be."
	attachpoint(vecline) : "Attached object 2 point" : "The position the rope attaches to object 2"
	spawnflags(flags)  =
		[
		1: "[1] No Collision until break" : 1
		2: "[2] Keep Rigid" : 0
		]

	]

@PointClass base(BaseEntityAnimating, SetModel) 
	sphere(fademindist)
	sphere(fademaxdist)
	studio()
	color(128 128 128)
	iconsprite("editor/phys_magnet")
= phys_magnet: "An entity that acts like a magnet, attaching metallic physics objects to itself when they touch it."
	[
	spawnflags(flags)  =
		[
		1: "[1] Start Asleep" : 0
		2: "[2] Motion Disabled" : 0
		4: "[4] Suck On Touch" : 0
		8: "[8] Allow Attached Rotation" : 0
		16: "[16] Coast jeep pickup hack" : 0
		]

	forcelimit(float) : "Force Limit to Break (lbs)" : 0 : "The amount of force necessary to break a stuck object off the magnet. A way of calculating this is to set it to the mass of an object that would break this constraint if it were resting on the magnet."
	torquelimit(float) : "Torque Limit to Break (lbs * distance)" : 0 : "The amount of torque necessary to break a stuck object off the magnet. A way of calculating this is to multiply any reference mass by the resting distance (from the center of mass of the object) needed to break the constraint."
	massscale(float) : "Mass Scale" : 0 : "A scale multiplier for the object's mass."
	overridescript(string) : "Override parameters" : : "A list of physics key/value pairs that are usually in a physics prop .qc file. Format is 'key,value,key,value,etc'."
	maxobjects(integer) : "Maximum Attached Objects" : 0 : "The maximum number of physics objects that can be stuck to the magnet at once. 0 = no limit."

	// Inputs
	input TurnOn(void) : "Turn the magnet on."
	input TurnOff(void) : "The the magnet off. This will detach anything current stuck to the magnet."
	input Toggle(void) : "Toggle the magnet on or off."

	// Outputs
	output OnAttach(void) : "Fired when an entity is grabbed by the magnet."
	output OnDetach(void) : "Fired when an entity is released by the magnet."
	]

@PointClass base(TwoObjectPhysics) 
	line(255 255 0, targetname, attach1)
	line(0 0 255, targetname, attach2)
	line(128 128 128, targetname, constraintsystem)
	sphere(teleportfollowdistance)
	studio("models/editor/axis_helper.mdl")
	line(255 255 255, targetname, attach1)
	line(255 255 255, targetname, attach2)
	line(128 128 128, targetname, attach1, targetname, attach2)
	color(128 128 128)
= phys_pulleyconstraint: "A constraint that is essentially two length constraints and two points. Imagine it as a virtual rope connected to two objects, each suspended from a pulley above them. The constraint keeps the sum of the distances between the pulley points and their suspended objects constant."
	[
	addlength(float) : "Additional Length" : 0 : "Add (or subtract) this amount to the rest length of the pulley rope."
	gearratio(float) : "Pulley Gear Ratio" : 1 : "Add (or subtract) this amount to the rest length of the pulley rope."
	position2(vecline) : "Pulley Position 2" : : "The position of the pulley for Entity 2. The pulley for Entity 1 is the origin of this constraint entity. Entity 1 is always suspended from pulley point 1, and Entity 2 is always suspended from pulley point 2."
	spawnflags(flags)  =
		[
		1: "[1] No Collision until break" : 1
		2: "[2] Keep Rigid" : 0
		]

	]

@PointClass base(TwoObjectPhysics) 
	line(255 255 0, targetname, attach1)
	line(0 0 255, targetname, attach2)
	line(128 128 128, targetname, constraintsystem)
	sphere(teleportfollowdistance)
	studio("models/editor/axis_helper.mdl")
	line(255 255 255, targetname, attach1)
	line(255 255 255, targetname, attach2)
	line(128 128 128, targetname, attach1, targetname, attach2)
	color(128 128 128)
= phys_ragdollconstraint: "A constraint that fixes the position of two entities, relative to this constraint's origin. Also allows for limits on the rotation around each axis, in the space of this constraint."
	[
	spawnflags(flags)  =
		[
		1: "[1] No Collision until break" : 1
		2: "[2] Only limit rotation (free movement)" : 0
		]

	xmin(float) : "X axis min limit" : -90 : "-180 min and 180 max = no constraint on this axis."
	xmax(float) : "X axis max limit" : 90 : "-180 min and 180 max = no constraint on this axis."
	ymin(float) : "Y axis min limit" : 0 : "-180 min and 180 max = no constraint on this axis."
	ymax(float) : "Y axis max limit" : 0 : "-180 min and 180 max = no constraint on this axis."
	zmin(float) : "Z axis min limit" : 0 : "-180 min and 180 max = no constraint on this axis."
	zmax(float) : "Z axis max limit" : 0 : "-180 min and 180 max = no constraint on this axis."
	xfriction(float) : "X axis friction" : 0
	yfriction(float) : "Y axis friction" : 0
	zfriction(float) : "Z axis friction" : 0
	]

@PointClass base(TwoObjectPhysics) 
	line(255 255 0, targetname, attach1)
	line(0 0 255, targetname, attach2)
	line(128 128 128, targetname, constraintsystem)
	sphere(teleportfollowdistance)
	halfgridsnap
	studio("models/editor/axis_helper.mdl")
	line(255 255 255, targetname, attach1)
	line(255 255 255, targetname, attach2)
	line(128 128 128, targetname, attach1, targetname, attach2)
	color(128 128 128)
= phys_slideconstraint: "A constraint that constrains an entity along a line segment."
	[
	spawnflags(flags)  =
		[
		1: "[1] No Collision until break" : 1
		2: "[2] Limit Endpoints" : 0
		]

	slideaxis(vecline) : "Sliding Axis"
	slidefriction(float) : "Friction" : 0 : "Resistance/friction in the constraint"
	systemloadscale(float) : "Load Scale" : 1 : "Scale of the mass load connected to this constraint (1=just the objects directly connected)"
	minsoundthreshold(float) : "Minimum Sound Velocity" : 6 : "When travelling below this many units/sec, will not play any sound."
	maxsoundthreshold(float) : "Full Sound Velocity" : 80 : "When travelling at this speed or above, will play sound at full volume."
	slidesoundfwd(sound) : "Travel sound (forward)" : : "Play this sound when travelling forward on helper axis"
	slidesoundback(sound) : "Travel sound (backward)" : : "Play this sound when travelling backward on helper axis"
	reversalsoundthresholdsmall(float) : "Reversal sound threshold (small)" : 0 : "When accelerating by more than this many units/sec^2 opposite to direction of travel, play the small reversal sound."
	reversalsoundthresholdmedium(float) : "Reversal sound threshold (medium)" : 0 : "When accelerating by more than this many units/sec^2 opposite to direction of travel, play the medium reversal sound."
	reversalsoundthresholdlarge(float) : "Reversal sound threshold (large)" : 0 : "When accelerating by more than this many units/sec^2 opposite to direction of travel, play the large reversal sound."
	reversalsoundsmall(sound) : "Reversal sound (small)" : : "Play this sound when making a hard reverse over the small threshold but less than medium"
	reversalsoundmedium(sound) : "Reversal sound (medium)" : : "Play this sound when making a hard reverse over the medium threshold but less than large"
	reversalsoundlarge(sound) : "Reversal sound (large)" : : "Play this sound when making a hard reverse over the large threshold"

	// Inputs
	input SetVelocity(float) : "Set linear velocity along the constraint"
	]

@PointClass base(Angles, ForceController) 
	line(128 128 128, targetname, attach1)
	size(-8 -8 -8, 8 8 8)
	line(255 255 255, targetname, attach1)
	color(128 128 128)
= phys_thruster: "An entity used to apply constant acceleration to a physics object. The force and torque is calculated using the position and direction of the thruster as an impulse. So moving those off the object's center will cause torque as well. Torque can be removed by unchecking the 'apply torque' flag. The position of the thruster can be forced to be at the object's center by checking to 'ignore pos' flag."
	[
	spawnflags(flags)  =
		[
		32: "[32] Ignore Pos" : 0
		]

	force(string) : "Force" : 0 : "Force (will be integrated, units are force kg*in/s^2)"
	]

@PointClass base(ForceController) 
	line(128 128 128, targetname, attach1)
	size(-8 -8 -8, 8 8 8)
	halfgridsnap
	line(255 255 255, targetname, attach1)
	color(128 128 128)
= phys_torque: "An angular thruster. Use it to apply angular force to an entity."
	[
	force(string) : "Angular Acceleration" : 0
	axis(vecline) : "Rotation Axis"
	]

@PointClass base(BaseEntityPhysics) 
	sphere(fademindist)
	sphere(fademaxdist)
	sphere(expradius)
	studioprop()
= physics_cannister: "A physically simulated gas cannister that can have its cap shot off, at which point gas will start escaping and cause the cannister to fly around. If it takes enough damage, it will explode. The model should have a 'nozzle' attachment point, which is where gas will escape and thrust will be produced from."
	[
	model(studio) : "World model" : : "The model used for the cannister. The original model is fire_equipment/w_weldtank.mdl."
	spawnflags(flags)  =
		[
		1: "[1] Start Asleep" : 0
		2: "[2] Explodes" : 1
		]

	expdamage(float) : "Explosion Damage" : "200.0" : "The amount of damage done by the explosion created when the cannister blows up."
	expradius(float) : "Explosion Radius" : "250.0" : "The radius of the explosion to create when the cannister blows up."
	health(integer) : "Health" : 25 : "The amount of damage the cannister takes before exploding."
	thrust(float) : "Thrust" : "3000.0" : "When the cap has been blown off, and the escaping gas is thrusting the cannister about, this is the amount of thrust generated."
	fuel(float) : "Fuel Seconds" : "12.0" : "The amount of time that gas leaks from the cannister before being considered empty."
	rendercolor(color255) : "Smoke Color (R G B)" : "255 255 255"
	renderamt(integer) : "Smoke Alpha (0 - 255)" : 128
	gassound(sound) : "Thruster Sound" : "ambient/objects/cannister_loop.wav" : "The sound played when the gas is escaping from the cannister."

	// Inputs
	input Activate(string) : "Start gas escaping from the cannister."
	input Deactivate(string) : "Stop gas escaping from the cannister."
	input Explode(string) : "Force the cannister to explode."
	input Wake(void) : "Wakes up the cannister, if it is sleeping."

	// Outputs
	output OnActivate(void) : "Fired when gas starts to escape from the cannister."
	output OnAwakened(void) : "Fired when this entity becomes awake (collision/force is applied)."
	]

@PointClass base(BaseEntityAnimating, EnableDisable) 
	sphere(fademindist)
	sphere(fademaxdist)
	studio("models/extras/info_speech.mdl")
= point_commentary_node: "Commentary node for the developer commentary. Usually added after-the-fact by the commentary system, but can also be placed manually."
	[
	commentaryfile(sound) : "Commentary File" : : "The sound that will play when this is triggered."
	commentaryfile_nohdr(sound) : "Commentary File (no HDR)" : : "If HDR is off and this exists it will be played instead."
	speakers(string) : "Speaker(s)" : : "The characters/people who are saying the commentary."
	startdisabled(boolean) : "Start Disabled" : 0 : "Should it be disabled or not?"
	prevent_movement(boolean) : "Prevent Movement?" : 0 : "If enabled players won't be able to move while the commentary is playing."
	precommands(string) : "Pre-Command" : : "Command that will fire before the sound file is played. Use semicolons to delimit multiple commands."
	postcommands(string) : "Post-Command" : : "Command that will fire after the sound file is played. Also accepts semicolons."
	viewposition(target_destination) : "View Position" : : "Targetname of the entity the player's view will move to."
	viewtarget(target_destination) : "View Target" : : "Targetname of the entity the player's view will track. If set, the player cannot move their camera."

	// Inputs
	input StartCommentary(void) : "Start the commentary, just like if the player +USEd this."
	input StopCommentary(void) : "Force the commentary node to stop."
	input StartUnstoppableCommentary(void) : "Start the commentary but don't let the player cancel it."

	// Outputs
	output OnCommentaryStarted(void) : "Triggered when the commentary starts."
	output OnCommentaryStopped(void) : "Triggered when the commentary stops. If viewposition is set, this triggers after the player's returns to their regular view."
	]

@PointClass base(CombineBallSpawners) 
	iconsprite("editor/energy_ball.vmt")
	studio("models/editor/cone_helper.mdl")
= point_energy_ball_launcher: "Launches Aperture Science High Energy Pellets. "
	[
	spawnflags(flags)  =
		[
		1: "[1] Override ball material" : 0
		]

	ballcount(integer) : "Ball count" : 1 : "The number of Pellets that are alive at once."
	maxspeed(float) : "Max ball speed" : "150.0" : "The maximum starting speed."
	minspeed(float) : "Min ball speed" : "150.0" : "The minimum starting speed."
	balltype(choices) readonly : "Ball Type" : 0 : "Has no effect." =
		[
		0: "HEP"
		]

	maxballbounces(integer) : "Ball Bounces" : -1 : "Sets on which bounce the ball should explode. For example, if set to 4, the ball will explode on the 4th bounce."
	balllifetime(float) : "Ball Lifetime" : 12 : "The time in seconds the ball will live before self-destructing. A negative value will give infinite life, appearing green."
	balldamage(float) : "Ball Damage" : 1500 : "The amount of damage to deal to the player on contact"
	ballexplodeplayer(boolean) : "Ball explodes on player contact" : 1 : "Whether or not the ball should interact with the player."
	ballmaterial1(material) : "Ball body material override" : "effects/eball_infinite_life" : "Override the main ball material. Remember to enable the flag! Default material behavior is used if the flag is not set!!!"
	ballmaterial2(material) : "Ball flicker material override" : "effects/combinemuzzle1" : "Override the other ball material. Remember to enable the flag! Default material behavior is used if the flag is not set!!!"
	ballknockback(float) : "Ball knockback multiplier" : 0 : "The ball's velocity is multiplied by this value to determine how strongly to knockback hit objects. Use 1 for 1:1 speed = knockback radio."
	minlifeafterportal(float) : "Min life after portal transition" : 6 : "When energy balls created by this launcher pass through a portal their life is refreshed to be this number at minimum."

	// Inputs
	input LaunchBall(void) : "Launch a ball from the spawner."
	input BallCaught(void) : "Ball this launcher created was 'caught'."

	// Outputs
	output OnPostSpawnBall(void) : "Fired after the ball has spawned."
	output OnBallCaught(void) : "Fired when a ball this entity has launched has been 'caught'."
	]

@PointClass base(BaseEntityAnimating) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop("models/effects/cappoint_hologram.mdl")
= portal_race_checkpoint: "Checkpoint for race maps. When touched, lights up and ticks down like a pedestal button."
	[
	resettime(float) : "Reset Time" : "5.0" : "The time it takes for the checkpoint to reset after activation."

	// Inputs
	input Activate(void) : "Activates the checkpoint."
	input CancelActivate(void) : "Cancels the checkpoint's activated state."
	input Lock(void) : "Locks the checkpoint from being activated."
	input Unlock(void) : "The checkpoint can be activated."

	// Outputs
	output OnCheckpointActivated(void) : "Fired when the checkpoint is activated by the player."
	output OnCheckpointReset(void) : "Fired when the checkpoint is reset after being activated by the player."
	]

@PointClass base(BaseEntityAnimating, SetModel) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_door_rotating: "An entity used to place a door in the world."
	[
	slavename(target_destination) : "Slave Name" : : "The name of any doors that should be slaved to this door (i.e. should open when this one opens, and close when this one closes)."
	hardware(choices) : "Hardware Type" : 1 =
		[
		0: "<None>"
		1: "Lever"
		2: "Push bar"
		3: "Keypad"
		]

	ajarangles(angle) : "Ajar Angles (Pitch Yaw Roll)" : "0 0 0" : "If the door 'Spawn Position' is set to Ajar, these are the angles to spawn at, instead of being open or closed."
	spawnpos(choices) : "Spawn Position" : 0 =
		[
		0: "Closed"
		1: "Open clockwise"
		2: "Open counter-clockwise"
		3: "Ajar (use Ajar Angles)"
		]

	axis(axis) : "Hinge Axis"
	distance(float) : "Rotation Distance (deg)" : 90 : "The amount, in degrees, that the door should rotate when opened."
	speed(float) : "Speed" : 100 : "The speed at which the door moves."
	soundopenoverride(sound) : "Fully Open Sound" : : "Sound played when the door has finished opening."
	soundcloseoverride(sound) : "Fully Closed Sound" : : "Sound played when the door has finished closing."
	soundmoveoverride(sound) : "Moving Sound" : : "Sound played when the door starts to move."
	returndelay(integer) : "Delay Before close (-1 stay open)" : -1 : "Amount of time, in seconds, after the door has opened before it closes. If the value is set to -1, the door never closes itself."
	dmg(integer) : "Damage Inflicted When Blocked" : 0 : "Amount of damage done to entities that block the movement of this door, per frame."
	health(integer) : "Health (0 = Unbreakable)" : 0
	soundlockedoverride(sound) : "Locked Sound" : : "Sound played when the player tries to open the door, and fails because it's locked."
	soundunlockedoverride(sound) : "Unlocked Sound" : : "Sound played when the door is unlocked."
	forceclosed(boolean) : "Force Closed" : 0 : "If set, this door will close no matter what. Useful for doors that have to close even if the player tries to block them with objects."
	spawnflags(flags)  =
		[
		2048: "[2048] Starts locked" : 0
		4096: "[4096] Door silent (No sound, and does not alert NPCs)" : 0
		8192: "[8192] Use closes" : 1
		16384: "[16384] Door silent to NPCS (Does not alert NPCs)" : 0
		32768: "[32768] Ignore player +USE" : 0
		524288: "[524288] Start Breakable" : 0
		]

	opendir(choices) : "Open Direction" : 0 : "Force the door to open only forwards or only backwards. Both directions is the standard door behavior." =
		[
		0: "Open Both Directions"
		1: "Open Clockwise Only"
		2: "Open Counter-Clockwise Only"
		]

	glowdist(integer) : "Glow Distance" : 1024
	glowenabled(boolean) : "Does the prop glow by default?" : 0
	glowcolor(color255) : "Glow Color (R G B)" : "255 255 255" : "The color of the glow (if enabled)."

	// Inputs
	input Open(void) : "Open the door, if it is not fully open."
	input OpenAwayFrom(string) : "Open the door away from the specified entity."
	input Close(void) : "Close the door, if it is not fully closed."
	input Toggle(void) : "Toggle the door between open and closed."
	input Lock(void) : "Lock the door."
	input Unlock(void) : "Unlock the door."
	input SetRotationDistance(float) : "Set the distance (in degrees) between Open and Closed."
	input SetSpeed(float) : "Set the speed at which the door rotates. 100 is default."
	input MoveToRotationDistance(float) : "Sets the open distance (in degrees) and moves there."
	input SetGlowEnabled(void) : "Starts the glow."
	input SetGlowDisabled(void) : "Stops the glow."
	input SetUnbreakable(void) : "The door can't be broken."
	input SetBreakable(void) : "The door can be broken."

	// Outputs
	output OnClose(void) : "Fired when the door is told to close."
	output OnOpen(void) : "Fired when the door is told to open."
	output OnFullyOpen(void) : "Fired when the door reaches the fully open position."
	output OnFullyClosed(void) : "Fired when the door reaches the fully closed position."
	output OnBlockedClosing(void) : "Fired when the door is blocked while closing."
	output OnBlockedOpening(void) : "Fired when the door is blocked while opening."
	output OnUnblockedClosing(void) : "Fired when the door is unblocked while closing."
	output OnUnblockedOpening(void) : "Fired when the door is unblocked while opening."
	output OnLockedUse(void) : "Fired when the player uses the door, but it is locked."
	output OnRotationDone(void) : "Fired when the door arrives at it's goal angle."
	]

@BaseClass base(BaseEntityAnimating, SetModel, BreakableProp) = prop_dynamic_base
	[
	spawnflags(flags)  =
		[
		64: "[64] Use Hitboxes for Renderbox" : 0
		256: "[256] Start with collision disabled" : 0
		]

	linedivider_prop(string) readonly : "----------------------------------------------------------------------------------------------------------" : : "Prop"
	defaultanim(string) : "Default Animation" : : "The name of the idle animation that this prop will revert to whenever it finishes a random or forced animation."
	randomanimation(boolean) : "Randomly Animate" : 0 : "If set, this prop will randomly choose and play animations, based upon the times specified in 'Min/Max Random Anim Time'. Inbetween the random animations, it will revert to playing the 'Default Animation'."
	minanimtime(float) : "Min Random Anim Time" : 5 : "Minimum time between random animations."
	maxanimtime(float) : "Max Random Anim Time" : 10 : "Maximum time between random animations."
	disablebonefollowers(boolean) : "Disable Bone Followers" : 0 : "If set, the prop will not use bone followers, even if it has them defined."
	holdanimation(boolean) : "Hold Animation" : 0 : "If set, the prop will not loop its animation, but hold the last frame."
	suppressanimsounds(boolean) : "Suppress Anim Sounds" : 0 : "If set, the prop will not play any sounds that are embedded in animations it plays."
	animateeveryframe(boolean) : "Animate Every Frame" : 1 : "Force this prop to animate every frame. This ensures it immediately transitions to the next animation, but means it's contantly checking this."

	// Inputs
	input SetAnimation(string) : "Force the prop to play an animation. The parameter should be the name of the animation."
	input SetDefaultAnimation(string) : "Set the Default Animation to the one specified in the parameter."
	input SetPlaybackRate(float) : "Set the playback rate for the animation."
	input SetBodyGroup(integer) : "Set the visible bodygroup, by index."
	input TurnOn(void) : "Make the prop visible."
	input TurnOff(void) : "Make the prop invisible."
	input EnableCollision(void) : "Enable collision on the prop."
	input DisableCollision(void) : "Disable collision on the prop."
	input SetAnimationNoReset(string) : "Force the prop to play an animation unless the prop is already playing the animation. The parameter should be the name of the animation."
	input BecomeRagdoll(void) : "Change into a ragdoll immediately."
	input FadeAndKill(void) : "Fade out then remove this prop."

	// Outputs
	output OnAnimationBegun(void) : "Fired whenever a new animation has begun playing."
	output OnAnimationDone(void) : "Fired whenever an animation is complete."
	]

@PointClass base(BaseEntityPhysics) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop("models/npcs/personality_sphere_angry.mdl")
= prop_exploding_futbol: "The bombs used by Wheatley."
	[
	explodeontouch(boolean) : "Explode on touch" : 1 : "If the bomb should explode when it touches something."

	// Inputs
	input Explode(void) : "Explodes the bomb."

	// Outputs
	output OnExplode(void) : "Called when the bomb explodes."
	]

@PointClass base(BaseEntityAnimating, SetModel) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_hallucination: "A prop that players can't get a good look at, hopefully making them unsure if it's there at all"
	[
	enabledchance(float) : "Enabled Chance" : "100.0" : "Percentage chance the hallucination starts enabled. 0 is always off, 100 is always on"
	visibletime(float) : "Visible Time" : "0.215" : "Number of seconds the hallucination stays visible from the first frame it can be seen"
	rechargetime(float) : "Recharge Time" : "0.0" : "Number of seconds the hallucination stays invisible before it can be seen again. 0 to disable recharging"

	// Inputs
	input Enable(void) : "Enable the hallucination algorithm"
	input Disable(void) : "Disable the hallucination algorithm"
	input SetVisibleTime(float) : "Set Visible Time"
	input SetRechargeTime(float) : "Set Recharge Time"
	]

@PointClass base(BaseEntityAnimating, SRCIndicator) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_laser_catcher: "Discouragement Beam Catcher that detects a laser, absorbing the beam. The entity will fire outputs when struck and unstruck."
	[
	skintype(choices) : "Skin Type" : 0 : "Set the type of catcher to use." =
		[
		0: "Clean"
		1: "Rusted"
		]

	skin(choices) : "[H] Skin Type" : 0 : "The skin to show in Hammer." =
		[
		0: "Clean  - Off"
		1: "Clean  - On"
		2: "Rusted - Off"
		3: "Rusted - On"
		]

	model(choices) : "Laser Catcher Model" : "models/props/laser_catcher_center.mdl" : "Is the catcher offset? (You can also add a custom model here.)" =
		[
		"models/props/laser_catcher_center.mdl": "Centered"
		"models/props/laser_catcher.mdl": "Offset"
		]

	src_fix_skins(boolean) : "Fix Skins Logic" : 1 : "If set, add extra outputs to fix the bug with skins not changing after a reload from save."
	uselaserfilter(boolean) : "Use Laser Filter" : 0 : "If enabled, this catcher can only be activated by the specified laser color."
	filtercolor(choices) : "Laser Filter Color" : "255 255 255 255" : "Filter lasers by this color. You can also specify a custom RGBA color here." =
		[
		"255 255 255 255": "White"
		"255 0 0 255": "Default Red"
		"100 255 100 255": "Lethal Green"
		"32 112 202 255": "Blue"
		"255 212 91 255": "Yellow"
		"212 60 146 255": "Pink"
		"65 97 0 255": "Dark Green"
		]


	// Inputs
	input Skin(integer) : "Set the skin of the catcher manually."
	input SetFilterColor(color255) : "Changes the laser filter colour."

	// Outputs
	output OnPowered(void) : "Fired when a laser hits the target."
	output OnUnpowered(void) : "Fired when a laser has stopped hitting the target."
	]

@PointClass base(BaseEntityAnimating, SRCIndicator) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_laser_relay: "Discouragement Beam Relay that detects lasers, whilst allowing it to pass through and hit other Relays. The entity will fire outputs when struck and unstruck."
	[
	skintype(choices) : "Skin Type" : 0 : "Set the type of catcher to use." =
		[
		0: "Clean"
		1: "Rusted"
		]

	model(studio) : "Laser Relay Model" : "models/props/laser_receptacle.mdl" : "Choose a custom model for the relay."
	skin(choices) : "[H] Skin Type" : 0 : "The skin to show in Hammer." =
		[
		0: "Clean  - Off"
		1: "Rusted  - On"
		]

	uselaserfilter(boolean) : "Use Laser Filter" : 0 : "If enabled, this relay can only be activated by the specified laser color."
	filtercolor(choices) : "Laser Filter Color" : "255 255 255 255" : "Filter lasers by this color. You can also specify a custom RGBA color here." =
		[
		"255 255 255 255": "White"
		"255 0 0 255": "Default Red"
		"100 255 100 255": "Lethal Green"
		"32 112 202 255": "Blue"
		"255 212 91 255": "Yellow"
		"212 60 146 255": "Pink"
		"65 97 0 255": "Dark Green"
		]


	// Inputs
	input SetFilterColor(color255) : "Changes the laser filter colour."

	// Outputs
	output OnPowered(void) : "Fired when a laser hits the target."
	output OnUnpowered(void) : "Fired when a laser has stopped hitting the target."
	]

@PointClass base(BaseEntityAnimating, SetModel) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_mirror: "A basic mirror model"
	[
	width(float) : "Width" : "64.0" : "The width of the mirror when there's no model"
	height(float) : "Height" : "108.0" : "The height of the mirror when there's no model"
	physicsenabled(boolean) : "Physics" : 0 : "Move physically"
	]

@PointClass base(BaseEntityPhysics) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_monster_box: "FrankenCubes, they walk about when oriented correctly but otherwise behave like normal Storage Cubes."
	[
	startasbox(boolean) : "Start As Box" : 0 : "Start the FrankenTurret in cube form."
	boxswitchspeed(float) : "Box Switch Speed" : 400 : "Speed to force switch to a box."
	allowsilentdissolve(boolean) : "Allow SilentDissolve input" : 1 : "Allow the SilentDissolve input to dissolve this FrankenCube."
	model(choices) : "[H] Pose" : "models/npcs/monsters/monster_a.mdl" : "What pose to show in Hammer." =
		[
		"models/npcs/monsters/monster_a.mdl": "Extended"
		"models/npcs/monsters/monster_a_box.mdl": "Cube"
		]


	// Inputs
	input BecomeBox(string) : "Force the FrankenTurret to switch to cube form."
	input BecomeMonster(void) : "Return the FrankenCube to extended form."
	input BecomeShortcircuit(void) : "Short circuit this FrankenCube and permanently switch to cube form. Creates arc particles randomly across the cube, and the turret's eyes flicker randomly."
	input Dissolve(void) : "Fizzles the FrankenCube."
	input SilentDissolve(void) : "Kills the FrankenCube and fires its OnFizzled output, if the relevant setting is on."

	// Outputs
	output OnFizzled(void) : "Fired when a cube is fizzled."
	output OnPlayerUse(void) : "Any player +USEd the cube."
	output OnPlayerPickup(void) : "Any player picked up the cube."
	output OnPhysGunDrop(void) : "Any player dropped the cube."
	]

@PointClass base(BaseEntityPhysics, BasePaintType) 
	sphere(fademindist)
	sphere(fademaxdist)
	studio("models/editor/prop_paint_bomb.mdl")
= prop_paint_bomb: "Large blob of gel which explodes on impact. Respawn with a point_template."
	[
	bombtype(choices) : "Bomb Type" : 0 : "The type of explosion." =
		[
		0: "Dry Bomb"
		1: "Wet Bomb"
		]

	allowfunnel(boolean) : "Allow Portal Funneling" : 1 : "Whether or not this object should auto-funnel into a portal."
	allowsilentdissolve(boolean) : "Allow SilentDissolve input" : 0 : "Allow the SilentDissolve input to dissolve this bomb."
	playspawnsound(boolean) : "Play Spawn Sound" : 1 : "Whether or not this bomb should play a sound on spawn (PaintBlob.Inception)."
	model(studio) readonly : "Model" : "models/error.mdl" : "Paint bombs need a model set to suppress a warning message. This model would be loaded already."

	// Inputs
	input Dissolve(void) : "Dissolves the paint bomb."
	input SilentDissolve(void) : "Kills the paint bomb and fires its OnFizzled output."
	input EnablePortalFunnel(void) : "Enable portal funneling behavior."
	input DisablePortalFunnel(void) : "Disable portal funneling behavior."

	// Outputs
	output OnFizzled(void) : "Fired when a paint bomb is fizzled (by trigger_paint_cleanser?)."
	output OnExploded(void) : "Fired when a paint bomb explodes."
	]

@PointClass base(BaseEntityAnimating) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop("models/props/Round_elevator_body.mdl")
= prop_portal_stats_display: "Portal Stats Display, for P1's challenge mode."
	[

	// Inputs
	input Enable(void) : "Turn on and display the current stats"
	input Disable(void) : "Turn off stats display"
	input UpdateStats(void) : "Updates the stats to the player's current level stats"
	input ResetPlayerStats(void) : "Resets the curret level stats of the player"

	// Outputs
	output OnMetPortalObjective(void) : "Fired when enabled and player met the number of portal placements."
	output OnMetStepsObjective(void) : "Fired when enabled and player met the number of foot steps."
	output OnMetSecondsObjective(void) : "Fired when enabled and player met the number of seconds."
	output OnFailedAllObjectives(void) : "Fired when enabled and player met no objectives."
	]

@PointClass base(BaseEntityPhysics, EnableDisable, SystemLevelChoice, SetModel) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_ragdoll: "A prop that physically simulates and can be articulated with internal joints. The joint constraints are part of the physics model."
	[
	spawnflags(flags)  =
		[
		4: "[4] Debris - Don't collide with the player or other debris" : 1
		4096: "[4096] Use LRU Retirement" : 0
		8192: "[8192] Allow Dissolve" : 0
		16384: "[16384] Motion Disabled" : 0
		32768: "[32768] Allow stretch" : 0
		65536: "[65536] Start asleep" : 0
		]

	angleoverride(string) : "Override Animation" : : "Filled in by the engine via hammer_update_entity, do not edit by hand except to clear."

	// Inputs
	input StartRagdollBoogie(float) : "Begins ragdoll boogie effect. Parameter override = number of seconds to boogie."
	input EnableMotion(void) : "Enable physics motion/collision response."
	input DisableMotion(void) : "Disable physics motion/collision response."
	input FadeAndRemove(float) : "Fade out then remove (kill) self. Parameter override = duration of fade"
	]

@PointClass base(BaseEntityAnimating) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop("models/props/tripwire_turret.mdl")
= prop_rocket_tripwire: "A stationary rocket turret that fires a rocket when players walk in front of it."
	[
	rocketspeed(float) : "Rocket Speed" : 450 : "Speed the rocket will travel at."
	rocketlifetime(float) : "Rocket Lifetime" : 20 : "The rocket will automatically detonate after this number of seconds."
	startdisabled(choices) : "Initial State" : 0 =
		[
		0: "Enabled"
		1: "Disabled"
		]


	// Inputs
	input ForceFire(void) : "Forces the rocket turret to fire."
	input EnableTripwire(void) : "Enables the rocket turret."
	input DisableTripwire(void) : "Disables the rocket turret."

	// Outputs
	output OnTripped(void) : "Fires when the laser has been tripped"
	output OnRocketExplode(void) : "Fires when the rocket explodes."
	]

@PointClass base(BaseEntityAnimating) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop("models/props/telescopic_arm.mdl")
= prop_telescopic_arm: "Telescopic Arm. Useless."
	[

	// Inputs
	input Enable(void) : "Enable Thumper"
	input Disable(void) : "Disable Thumper"
	input SetTarget(target_destination) : "Set the entity to target."
	input TargetPlayer(void) : "Set the player as the entity to target."

	// Outputs
	output OnFoundTarget(void) : "Arm has direct LOS to target entity."
	output OnLostTarget(void) : "Arm has lost direct LOS to target entity."
	]

@PointClass base(BaseEntityAnimating) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
	line(255 255 0, targetname, areaPortalWindow)
	line(255 255 0, targetname, lightingorigin)
	sphere(AreaPortalFadeStart)
	sphere(AreaPortalFadeEnd)
= prop_testchamber_door: "Portal Door."
	[
	lightingorigin(target_destination) : "Lighting Origin" : : "Select an info_lighting to specify a location to sample lighting from for this door, instead of the origins."
	areaportalwindow(target_destination) : "Area Portal Window Name" : : "The name of an area portal window that is controlled by the door. When closed, the window will be forced shut"
	useareaportalfade(boolean) : "Fade Area Portal?" : 0 : "If the area portal should use the specified fade distances to fade out. Otherwise, it will be set to a distance of 10000 (effectively infinite)."
	areaportalfadestart(float) : "Fade Start Distance" : 0 : "The distance at which the area portal starts fading out."
	areaportalfadeend(float) : "Fade End Distance" : 0 : "The distance at which the area portal turns completely opaque."
	open(boolean) : "Start Open" : 0 : "If set, the door starts in the open state."
	locked(boolean) : "Start Locked" : 0 : "If set, the door starts locked and can no longer change open or closed state."
	isnewmodel(boolean) : "Use New Model" : 1 : "Use the new model for Portal: Revolution"
	isdirty(boolean) : "Dirty" : 0 : "Whether this is a dirty door. Requires new model!!"
	separator50(string) readonly : "======== Old ========" : : "=================="
	skin(integer) : "Skin" : 0 : "Skin to use in game."
	model(studio) : "Model" : "models/props/portal_door_combined_new.mdl" : "Model to use in-game"

	// Inputs
	input Open(void) : "Open the door and cause the areaportal to return to fading."
	input Close(void) : "Close the door and cause the areaportal to close."
	input LockOpen(void) : "Open the door and lock it in that state, so it will ignore further inputs."
	input Lock(void) : "Locking a door will prevent the Open or Close inputs from doing anything."
	input Unlock(void) : "If locked, unlocking a door will allow the Open or Close inputs to function."

	// Outputs
	output OnOpen(void) : "Called when the door has started its open animation."
	output OnClose(void) : "Called when the door has started its close animation."
	output OnFullyOpen(void) : "Called when the door has finished its open animation."
	output OnFullyClosed(void) : "Called when the door has finished its close animation."
	]

@PointClass base(logic_choreographed_scene) 
	iconsprite("editor/choreo_scene.vmt")
	color(240 180 250)
	line(240 180 250, targetname, target1)
	line(240 180 250, targetname, target2)
	line(240 180 250, targetname, target3)
	line(240 180 250, targetname, target4)
	line(240 180 250, targetname, target5)
	line(240 180 250, targetname, target6)
	line(240 180 250, targetname, target7)
	line(240 180 250, targetname, target8)
= scripted_scene: "Alternate name for logic_choreographed_scene."
	[
	]

@SolidClass base(BaseEntityVisBrush) 
	sphere(fademindist)
	sphere(fademaxdist)
= simple_physics_brush: "A simple physics brush with no unique properties. Brush-based entities converted by phys_convert are turned into this entity. Use func_physbox instead for more options."
	[
	]

@SolidClass base(TriggerOnce) 
	line(255 255 255, targetname, filtername)
= trigger_autosave: "A trigger volume that autosaves when the player touches it."
	[
	newlevelunit(boolean) : "Force New Level Unit" : 0 : "If set, the save will discard any savedata from previous levels, for the purpose of keeping savegame filesizes down. Can only be safely used if there is no way for the player to return to previous levels."
	dangeroustimer(float) : "Dangerous Timer" : 0 : "The number of seconds the player must survive before this autosave takes effect."
	minimumhitpoints(integer) : "Minumum Hit Points" : 0 : "Don't save dangerous when player has less than this many hitpoints."
	]

@SolidClass base(TriggerOnce) 
	line(255 255 255, targetname, filtername)
= trigger_once: "A trigger volume that removes itself after it is triggered once."
	[
	]

@PointClass base(Weapon) 
	sphere(fademindist)
	sphere(fademaxdist)
	color(0 0 200)
	studioprop("models/shadertest/envballs.mdl")
= weapon_cubemap: "Debugging weapon used to show cubemaps in a region."
	[
	]

@PointClass base(Weapon) 
	sphere(fademindist)
	sphere(fademaxdist)
	color(0 0 200)
	studioprop("models/weapons/w_portalgun.mdl")
= weapon_paintgun: "Aperture Science Handheld Gel Accelerator"
	[
	]

@PointClass base(Weapon) 
	sphere(fademindist)
	sphere(fademaxdist)
	color(0 0 200)
	studioprop()
= weapon_portalgun: "Aperture Science Handheld Portal Device"
	[
	spawnflags(flags)  =
		[
		8: "[8] Disable pickup sounds" : 0
		]

	canfireportal1(boolean) : "Can Fire Blue Portals" : 1 : "Can this portalgun create blue portals?"
	canfireportal2(boolean) : "Can Fire Orange Portals" : 1 : "Can this portalgun create orange portals?"
	showingpotatos(boolean) : "Show PoTaToS" : 0 : "Show PoTaToS on the portal gun."
	startingteamnum(choices) : "Player" : 0 : "Which player this gun belongs to.  Will decide which portals it fires before being picked up, as well as the skin." =
		[
		0: "Chell/Bendy"
		2: "P-Body"
		3: "ATLAS"
		]

	skin(choices) : "[H] Stripes" : 0 : "Which stripes to show in Hammer." =
		[
		0: "None"
		1: "Blue"
		2: "Orange"
		]

	model(studio) : "World Model" : "models/weapons/w_portalgun.mdl" : "The model shown for the portalgun entity and in the player's hand in third-person view."
	viewmodel(studio) : "View Model" : "models/weapons/v_portalgun.mdl" : "The model shown in the player's first-person view."
	customportalcolors(boolean) : "Custom Portal Colors" : 0 : "Use custom portal colors."
	portal1color(color255) : "Primary Portal Color" : "64 160 255" : "Color to use for the primary (Left/Blue) portal."
	portal2color(color255) : "Secondary Portal Color" : "255 160 32" : "Color to use for the primary (Right/Orange) portal."

	// Inputs
	input ChargePortal1(void) : "Does charge up effect for mounted portalgun. Missing particles and sounds."
	input ChargePortal2(void) : "Does charge up effect for mounted portalgun. Missing particles and sounds."
	input FirePortal1(void) : "Projects the\t'blue' portal onto a wall in the facing direction of the gun."
	input FirePortal2(void) : "Projects the 'orange' portal onto a wall in the facing direction of the gun."
	input FirePortalDirection1(vector) : "Fires the 'blue' portal in the specified direction."
	input FirePortalDirection2(vector) : "Fires the 'orange' portal in the specified direction."

	// Outputs
	output OnFiredPortal1(void) : "Fires when the 'blue' portal is fired."
	output OnFiredPortal2(void) : "Fires when the 'orange' portal is fired."
	]

@BaseClass base(BaseLogicalNPC, ToggleDraw) = BaseNPC: "Behaviour only applicable to visible NPCs."
	[
	target(target_destination) : "Target Path Corner" : : "If set, the name of a path corner entity that this NPC will walk to, after spawning."
	expressionoverride(sound) : "Expression Override" : : "Enter a VCD file to override facial expressions on this NPC."
	dontusespeechsemaphore(choices) : "Don't Use Speech Semaphore?" : 0 : "Friendly NPCs are not allowed to speak if another friendly NPC is speaking. In some cases we don't want speaking NPCs to prevent other NPCs from speaking (for instance, if there is a friendly NPC speaking for a long time on a monitor). To make this NPC not prevent other NPCs from talking, make it not grab the semaphore when it speaks." =
		[
		0: "No (Use speech semaphore)"
		1: "Yes (Don't use speech semaphore)"
		]

	linedivider_npc(string) readonly : "----------------------------------------------------------------------------------------------------------"

	// Inputs
	input SetBodyGroup(integer) : "HACK: Sets this NPC's body group (from 0 - n). You'd better know what you are doing!"
	input SetExpressionOverride(string) : "Set a VCD file to override facial expressions on this NPC."
	]

@BaseClass base(Trigger) = TeleTrigger
	[
	spawnflags(flags)  =
		[
		32: "[32] Preserve angles even when a local landmark is not specified" : 0
		8388608: "[8388608] Teleport the player on leaving the trigger instead of entering it" : 0
		1: "[1] Clients/Players" : 1
		2: "[2] NPCs" : 0
		4: "[4] func_pushable" : 0
		8: "[8] Physics Objects" : 0
		16: "[16] Only player ally NPCs" : 0
		64: "[64] Everything (not including physics debris)" : 0
		1024: "[1024] Physics debris" : 0
		4096: "[4096] Correctly account for object mass (trigger_push used to assume 100Kg) and multiple component physobjs (car, blob...)" : 1
		]

	target(target_destination) : "Remote Destination" : : "The entity specifying the point to which the player should be teleported."
	landmark(target_destination) : "Local Destination Landmark" : : "In landmark mode, teleported entities are offset from the target by their initial offset from the landmark. Angles and velocity are also reoriented to the destination if enabled."
	velocityscale(vector) : "Velocity Scale Factor (X Y Z)" : "1 1 1" : "Scale the player's velocity per-axis"
	mode(choices) : "Teleport mode" : 1 =
		[
		0: "Default (do nothing)"
		1: "Reset velocity"
		2: "Keep negative Z (downwards) velocity only"
		3: "Redirect velocity to destination angles"
		4: "Landmark teleport"
		5: "Set speed"
		]

	reorient_landmark(boolean) : "Reorient Landmark" : 0 : "(Landmark mode only) Reorient origin, angles and velocity from the landmark'slocal space to the destination's. This means the destination room does not have to face the same way."
	resetang(boolean) : "Reset the player angles on teleport" : 1
	uselandmarkangles(boolean) : "Use Landmark Angles" : 0 : "(Landmark mode only) Forces the teleported object to snap to the angles of the destination landmark."
	setspeed(float) : "Set Custom Speed" : 400 : "(Set speed mode only) Forces the player to this speed on teleport."
	checkdestifclearforplayer(boolean) : "Only Spawn-Valid Destinations" : 0 : "Only teleport if there is a clear teleport destination."

	// Inputs
	input SetRemoteDestination(string) : "Set a new remote teleport destination."
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= comp_trigger_p2_goo: "Implements Toxic Goo and Bottomless Pits.\nThis expands into a trigger_hurt and trigger_multiple with appropriate settings."
	[
	enablefade(boolean) : "Enable Fade" : 0 : "Use a player_loadsaved to fade out the view as the player falls/drowns.Otherwise, just kill the player with a trigger_hurt."
	fadepreset(choices) : "Fade Color - Preset" : "0 0 0" : "Use a preset color for the fade." =
		[
		"-1 -1 -1": "Custom"
		"58 35 20": "Goo"
		"0 0 0": "Black"
		"56 95 141": "BTS Fog"
		"37 35 33": "Old Aperture"
		"50 70 80": "Wheatley / Destroyed"
		"70 85 100": "Bottomless Pit"
		"40 45 50": "Pit Falling Fog"
		"16 19 22": "Fan Fog"
		"14 20 22": "Darkness Fog"
		"40 53 64": "Testchamber Fog"
		"218 76	26": "P1 Orange"
		]

	fadecolor(color255) : "Fade Color - Custom" : "0 0 0" : "Specify your own fade color instead."
	fadetime(float) : "Fade Time" : "0.5" : "The number of seconds the fade takes to fully occur."
	damagetype(choices) : "Damage Type" : 1327104 : "The type of damage to do to the player." =
		[
		32: "Bottomless Pit (FALL)"
		16384: "Water (DROWN)"
		1048576: "Toxic Goo (ACID)"
		]

	phys_offset(float) : "Physics Offset" : "64.0" : "The distance below the hurt trigger to place the dissolving trigger. This ensures objects are hidden by the goo / fog before being destroyed."
	failsafe_delay(float) : "Failsafe delay" : "1.0" : "Delay after which non-cube entities will be killed."
	dissolve_filter(filterclass) : "Physics Filter" : : "Set to a filter entity to prevent certain entities from dissolving."

	// Outputs
	output OnKillPlayer(void) : "Fired when players touch the trigger."
	output OnDissolvePhysics(void) : "Fired when physics objects touch the trigger (and will be dissolved/killed soon)."
	]

@SolidClass base(BreakableBrush) 
	sphere(fademindist)
	sphere(fademaxdist)
	sphere(exploderadius)
= func_breakable: "A brush entity that can be broken from damage, or an input."
	[
	minhealthdmg(integer) : "Min Damage to Hurt" : 0 : "The prop will ignore any damage events if the damage is less than this amount."
	physdamagescale(float) : "Physics Impact Damage Scale" : "1.0" : "Scales damage energy when this object is hit by a physics object. NOTE: 0 means this feature is disabled for backwards compatibility.\nSet to 1.0 for materials as strong as flesh, smaller numbers indicate stronger materials."
	]

@SolidClass base(BreakableBrush) 
	sphere(fademindist)
	sphere(fademaxdist)
	sphere(exploderadius)
	quadbounds()
= func_breakable_surf: "A breakable surface, for partially breakable glass / tile / etc. All faces but the desired visible one must be marked as NODRAW and that face must be 4 sided. The material applied to the visible face must be set up to be breakable."
	[
	spawnflags(flags)  =
		[
		1: "[1] Physics damage decals" : 0
		2: "[2] Take damage from held objects" : 0
		4: "[4] Play break sound" : 0
		]

	health(integer) : "Health" : 5 : "The amount of damage the surface takes before breaking."
	fragility(integer) : "Fragility" : 100 : "If the 'Surface Type' is set to Glass, this value sets how fragile the glass pieces are after the surface has been broken. Lower values make glass pieces tend to stay more."
	surfacetype(choices) : "Surface Type" : 0 : "Sets the behaviour of the brush. Glass shatters in multiple sizes, and easily breaks. Tile only breaks along edges, and is still strong after being shattered." =
		[
		0: "Glass"
		1: "Tile"
		]

	lowerleft(vecline) readonly : "Lower Left Corner (readonly)" : : "This is set automatically by Hammer when saving."
	lowerright(vecline) readonly : "Lower Right Corner (readonly)" : : "This is set automatically by Hammer when saving."
	upperleft(vecline) readonly : "Upper Left Corner (readonly)" : : "This is set automatically by Hammer when saving."
	upperright(vecline) readonly : "Upper Right Corner (readonly)" : : "This is set automatically by Hammer when saving."
	error(choices) readonly : "Face Error" : 0 : "Set by Hammer to indicate an invalid glass/tile surface." =
		[
		0: "No Error"
		1: "Multiple Textured Faces"
		2: "Non-Square Face"
		]


	// Inputs
	input Shatter(vector) : "Shatter the window. Input a vector. First two coordinates are the X,Y center of the shattering (as values from from 0-1). The third coordinate is the radius of the shatter, in units."
	]

@SolidClass base(Door, Angles, Origin) 
	sphere(fademindist)
	sphere(fademaxdist)
	line(255 255 255, targetname, master)
	line(255 255 255, targetname, chainstodoor)
= func_door: "A brush entity for use as a player-useable door that linearly moves."
	[
	movedir(angle) : "Move Direction (Pitch Yaw Roll)" : "0 0 0" : "The direction the door will move, when it opens."
	]

@SolidClass base(Door, Angles, Origin) 
	sphere(fademindist)
	sphere(fademaxdist)
	line(255 255 255, targetname, master)
	line(255 255 255, targetname, chainstodoor)
= func_door_rotating: "A brush entity for use as a rotating player-useable door."
	[
	spawnflags(flags)  =
		[
		2: "[2] Reverse Dir" : 0
		16: "[16] One-way" : 0
		64: "[64] X Axis" : 0
		128: "[128] Y Axis" : 0
		65536: "[65536] New func_door +USE rules (NOT for prop_doors!!)" : 0
		]

	distance(float) : "Distance" : 90 : "The amount, in degrees, that the door should rotate when opened."
	]

@SolidClass base(func_movelinear) 
	sphere(movedistance)
= func_lookdoor: "A door that moves either when looked by a targeted object or when a target object comes near the door.  Behavior can be either based on viewing direction or proximity alone, or on a combination of both.  If inverted the doors behavior will be the opposite."
	[
	spawnflags(flags)  =
		[
		8192: "[8192] LookDoor Threshold" : 0
		16384: "[16384] LookDoor Invert" : 0
		32768: "[32768] LookDoor From Open" : 0
		]

	proximitydistance(string) : "Proximity Distance" : "0.0" : "If non-zero, proximity range over which door will move"
	proximityoffset(string) : "Proximity Offset" : "0.0" : "Offset from the target object"
	fieldofview(string) : "FieldOfView" : "0.0" : "If non-zero, field of view over which door will move. The target must then be a NPC/player!"

	// Inputs
	input InvertOn(void) : "InvertOn - when set behavior of door is inverted."
	input InvertOff(void) : "InvertOff - when set behavior of door is normal."
	]

@SolidClass base(func_brush) 
	sphere(fademindist)
	sphere(fademaxdist)
	line(255 255 0, targetname, target)
= func_monitor: "A monitor that renders the view from a given point_camera entity."
	[
	target(target_destination) : "Camera name"

	// Inputs
	input Toggle(void) : "Toggle - If on, turn off, if off, turn on."
	input Enable(void) : "Enable."
	input Disable(void) : "Disable."
	input SetCamera(target_destination) : "Sets the camera to use for this monitor. Takes the name of a point_camera entity in the map."
	]

@SolidClass base(BreakableBrush) 
	sphere(fademindist)
	sphere(fademaxdist)
	sphere(exploderadius)
= func_physbox: "A brush entity that's physically simulated."
	[
	spawnflags(flags)  =
		[
		4096: "[4096] Start Asleep" : 0
		8192: "[8192] Ignore +USE for Pickup" : 0
		16384: "[16384] Debris - Don't collide with the player or other debris" : 0
		32768: "[32768] Motion Disabled" : 0
		65536: "[65536] Use Preferred Carry Angles" : 0
		131072: "[131072] Enable motion on Physcannon grab" : 0
		262144: "[262144] Not affected by rotor wash" : 0
		524288: "[524288] Generate output on +USE " : 1
		1048576: "[1048576] Physgun can ALWAYS pick up. No matter what." : 0
		2097152: "[2097152] Physgun is NOT allowed to pick this up." : 0
		4194304: "[4194304] Physgun is NOT allowed to punt this object." : 0
		8388608: "[8388608] Prevent motion enable on player bump" : 0
		]

	damagetype(choices) : "Impact Damage Type" : 0 =
		[
		0: "Blunt"
		1: "Sharp"
		]

	massscale(float) : "Mass Scale" : 0 : "A scale multiplier for the object's mass."
	overridescript(string) : "Override Parameters" : : "A list of physics key/value pairs that are usually in a physics prop .qc file. Format is 'key,value,key,value,etc'."
	damagetoenablemotion(integer) : "Health Level to Override Motion" : 0 : "If specified, this object will start motion disabled. Once its health has dropped below this specified amount, it will enable motion."
	forcetoenablemotion(float) : "Physics Impact Force to Override Motion" : 0 : "If specified, this object will start motion disabled. Any impact that imparts a force greater than this value on the physbox will enable motion."
	health(integer) : "Strength" : 0 : "Number of points of damage to take before breaking.  0 means don't break."
	preferredcarryangles(vector) : "Preferred Player-carry Angles" : "0 0 0" : "If the 'Use Preferred Carry Angles' spawnflag is set, this angle is the angle which the object should orient to when the player picks it up, with the physgun or +USE."
	notsolid(choices) : "Not solid to world" : 0 =
		[
		0: "Solid to World"
		1: "Passes through World"
		]

	exploitablebyplayer(choices) : "Exploitable by Player" : 0 =
		[
		0: "Default"
		1: "Explosive"
		]


	// Inputs
	input Wake(void) : "Wake up this physics object, if it is sleeping."
	input Sleep(void) : "Put this physics object to sleep. It will wake if given the Wake input, or if force is applied to it. Note that physics objects go to sleep automatically after coming to rest for a while, so you don't really need to use this."
	input EnableMotion(void) : "Enable physics motion/collision response."
	input DisableMotion(void) : "Disable physics motion/collision response."
	input ForceDrop(void) : "If this object is being carried by a player, with the physgun or +USE, force it to be dropped."
	input Enable(void) : "Show this object and allow it to collide, doesn't override notsolid."
	input Disable(void) : "Hide this object and stop collisions."
	input BecomeDebris(void) : "Change the collision to act like debris"

	// Outputs
	output OnDamaged(void) : "Fired when this entity is damaged."
	output OnAwakened(void) : "Fired when this entity becomes awake (collision/force is applied)."
	output OnMotionEnabled(void) : "Fired when motion is enabled due to damage/physcannon/force."
	output OnPhysGunPickup(void) : "Fired when a player picks this object up, either with the physgun or +USE."
	output OnPhysGunPunt(void) : "Fired when a player punts this object with the physgun."
	output OnPhysGunOnlyPickup(void) : "Fired when a player picks this object up WITH THE PHYSGUN. +USE pickups do not fire this output."
	output OnPhysGunDrop(void) : "Fired when a player drops this object."
	output OnPlayerUse(void) : "Fired when the player tries to +USE the physbox. This output will fire only if the Generate output on +USE spawnflag is set."
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= func_placement_clip: "Specifies a region where things cannot be built."
	[
	]

@SolidClass base(func_brush) 
	sphere(fademindist)
	sphere(fademaxdist)
= func_reflective_glass: "Used to produce perfectly reflective glass that renders world + entities. Typically, you want your glass brush to have nodraw on all non-reflective surfaces and you want to use a shader like lightmappedreflective in your material applied to the non-nodraw surfaces. See hl2/materials/glass/reflectiveglass001.vmt for an example. NOTE: currently, you cannot use reflective glass in scenes with water, and you can only have 1 reflective glass in your view frustum ( + pvs ) at a time. Players will not see their own reflection unless they are in thirdperson mode."
	[
	]

@SolidClass base(BaseTrain) 
	sphere(fademindist)
	sphere(fademaxdist)
	line(255 255 0, targetname, target)
= func_tanktrain: "A moving train that follows a path of path_track entities, shoots at the player, and can be killed.\nNOTE: Build your train so that the front of the train is facing down the X axis. When it spawns it will automatically rotate to face the next path_track on the path."
	[
	health(integer) : "Health" : 100

	// Outputs
	output OnDeath(void) : "Fired when the tank is killed."
	]

@SolidClass base(func_trackchange) 
	line(255 255 255, targetname, train)
	line(0 255 0, targetname, toptrack)
	line(0 0 255, targetname, bottomtrack)
= func_trackautochange: "An entity that works as a rotating/moving platform that will carry a train to a new track. It must be larger in X-Y planar area than the train, since it must contain the train within these dimensions in order to operate when the train is near it. The track will rotate around its own origin. This entity will only allowed to be triggered if the train is on a path_track which is a dead end. If Auto Activate Train flag is ticked, train isn't paused at the top/bottom of the path after func_trackautochange has finished it's movement. Instead, it will continue moving forward and doesn't need to be reactivated by trigger. If selected, the platform only rotates in place of it's origin without travelling specified altitude. The top and the bottom path_tracks should have their origin positioned in the same coordinates."
	[
	]

@SolidClass base(BaseTrain) 
	sphere(fademindist)
	sphere(fademaxdist)
	line(255 255 0, targetname, target)
= func_tracktrain: "A moving platform that the player can ride. It follows a path of path_track entities.\nNOTE: Build your train so that the front of the train is facing down the X axis. When it spawns it will automatically rotate to face the next path_track on the path."
	[
	manualspeedchanges(boolean) : "Manual Train Speed" : 0 : "Train Speed is controlled through IO, handles accel, decel times."
	manualaccelspeed(float) : "Manual Accel Speed" : 0 : "Units per second to accelerate to target speed."
	manualdecelspeed(float) : "Manual Decel Speed" : 0 : "Units per second to decelerate to target speed."

	// Inputs
	input SetSpeedDirAccel(float) : "Accel/Decel to the specified speed, as a ratio of max speed. Negative values reverse the direction [-1, 1]"
	input TeleportToPathNode(target_destination) : "Teleport to a destination and stop there. This can be in a new path."
	input MoveToPathNode(target_destination) : "Start moving to a destination and stop when you get there. This must be in the same path."
	input LockOrientation(void) : "Lock the current orientation of the train."
	input UnlockOrientation(void) : "Unlock the current orientation of the train."
	input SetMaxSpeed(float) : "Set a new max speed for the train."

	// Outputs
	output OnStart(void) : "Fired when the train starts moving in either direction."
	output OnNextPoint(string) : "Fires continuously every frame when the train is moving to its next destination."
	output OnArrivedAtNode(void) : "Fired when this train arrives at a node on its path."
	output OnArrivedAtDestinationNode(void) : "Fired when this train arrives at a destination that was specified by the MoveToPathNode Input."
	]

@SolidClass base(func_movelinear) 
	sphere(fademindist)
	sphere(fademaxdist)
	sphere(movedistance)
= func_water_analog: "A water brush entity that moves linearly along a given distance, in a given direction. This is identical to func_movelinear."
	[
	movedir(angle) : "Move Direction (Pitch Yaw Roll)" : "0 0 0" : "The direction the water will move, when told to 'Open'."
	startposition(float) : "Start Position" : 0 : "Position of the water brush when spawned.The range is a value between 0.0 and 1.0, where 0 is the starting position and 1 is the starting position + (move direction * move distance)."
	speed(float) : "Speed" : 100 : "The speed that the water brush moves, in units per second."
	movedistance(float) : "Move Distance" : 100 : "The distance from the starting point that the water brush should move, in units."
	startsound(sound) : "Sound played when the water brush starts moving."
	stopsound(sound) : "Sound played when the water brush stops moving."
	waveheight(string) : "Wave Height" : "3.0"

	// Inputs
	input Open(void) : "Move the water brush to the end position (starting position + (move direction * move distance))."
	input Close(void) : "Move the water brush to the starting position."
	input SetPosition(string) : "Move the water brush to a specific position between 0.0 and 1.0, where 0 is the starting position and 1 is the starting position + (move direction * move distance)."

	// Outputs
	output OnFullyOpen(void) : "Fired when the water brush reaches the end position (starting position + (move direction * move distance))."
	output OnFullyClosed(void) : "Fired when the water brush reaches the starting position."
	]

@PointClass base(Item) 
	sphere(fademindist)
	sphere(fademaxdist)
	color(0 0 200)
	studio("models/items/item_boots.mdl")
= item_boots: "Long Fall Boots"
	[
	]

@NpcClass base(BaseLogicalNPC) 
	sphere(fademindist)
	sphere(fademaxdist)
	line(255 0 0, targetname, enemyfilter)
	iconsprite("editor/bullseye.vmt")
	color(255 0 0)
= npc_bullseye: "Dummy NPC for targeting or other behavior."
	[
	linedivider_npc(string) readonly : "----------------------------------------------------------------------------------------------------------"
	rendermode(choices) readonly : "Render Mode" : 1 : "This must be set to Color for Hammer to render the sprite correctly. It is not used in the engine." =
		[
		1: "Color"
		]

	health(integer) : "Health" : 35 : "Unlike other NPCs level designers are allowed to set the health on bullseyes."
	minangle(float) : "Minimum Angle" : 360 : "Angle from the bullseye required for bullseye to be a valid enemy."
	mindist(float) : "Minimum Distance" : 0 : "Distance from the bullseye required for bullseye to be a valid enemy."
	autoaimradius(float) : "Autoaim Radius" : 0 : "Radius of autoaim influence. Use ent_autoaim <picker> to visualize."
	spawnflags(flags)  =
		[
		65536: "[65536] Not Solid" : 0
		131072: "[131072] Take No Damage" : 0
		262144: "[262144] Enemy Damage Only" : 0
		524288: "[524288] Bleed" : 0
		1048576: "[1048576] Perfect Accuracy" : 0
		2097152: "[2097152] Collide against physics objects (Creates VPhysics Shadow)" : 0
		]

	alwaystransmit(boolean) : "Always Transmit To Client" : 0 : "Always transmit this entity to the client."

	// Outputs
	output InputTargeted(void) : "Fires the OnTargeted output."
	output InputReleased(void) : "Fires the OnReleased output."
	output OnTargeted(void) : "Fires when targeted."
	output OnReleased(void) : "Fires when no longer targeted."
	]

@NpcClass base(BaseLogicalNPC) 
	sphere(fademindist)
	sphere(fademaxdist)
	line(255 0 0, targetname, enemyfilter)
	color(255 150 0)
	iconsprite("editor/npc_enemyfinder.vmt")
	sphere(MinSearchDist)
	sphere(MaxSearchDist)
= npc_enemyfinder: "EnemyFinder"
	[
	spawnflags(flags)  =
		[
		65536: "[65536] Check Visibility" : 1
		131072: "[131072] APC Visibility checks" : 0
		262144: "[262144] Short memory" : 0
		524288: "[524288] Can be an enemy" : 0
		]

	rendermode(choices) readonly : "Render Mode" : 1 : "This must be set to Color for Hammer to render the sprite correctly. It is not used in the engine." =
		[
		1: "Color"
		]

	fieldofview(string) : "FieldOfView" : "0.2" : "How far to look (1.0 = straight ahead, 0.0 = +/- 90 degrees, -1.0 = all directions)"
	minsearchdist(integer) : "Min Search Dist" : 0
	maxsearchdist(integer) : "Max Search Dist" : 2048
	freepass_timetotrigger(float) : "Player pass issue time" : 0 : "Amount of time an enemy is hidden after which a 'free pass' on reaquire is granted"
	freepass_duration(float) : "Player pass duration" : 0 : "After granted 'free pass', the amount of time a target is allowed before reaquire"
	freepass_movetolerance(float) : "Player pass move tolerance" : 120 : "After granted 'free pass', the distance the target is allowed to move before reaquire"
	freepass_refillrate(float) : "Player pass refill rate" : "0.5" : "After free pass begins expiring, how much the time the target gets back for every second they hide again"
	freepass_peektime(float) : "Player pass peek time" : 0 : "How long targets in cover are allowed to peek without penalty"
	starton(boolean) : "Start On" : 1

	// Inputs
	input TurnOn(void) : "Turn on: Look for enemies"
	input TurnOff(void) : "Turn off: Stop looking for enemies"

	// Outputs
	output OnLostEnemies(void) : "Fires when the enemy finder has no enemies."
	output OnAcquireEnemies(void) : "Fires when the enemy finder acquires enemies."
	]

@PointClass base(BasePedButton) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_button: "A button which is activated by player use or by game inputs. While pressed it can play a tick-tock sound to indicate limited time."
	[
	skin(choices) : "Skin" : 0 : "Should it appear dirty or clean?" =
		[
		0: "Clean"
		1: "Dirty"
		]

	model(studio) : "Model" : "models/props/switch001.mdl" : "Model to use in game."
	]

@PointClass base(prop_dynamic_base, EnableDisable) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
	sphere(exploderadius)
= prop_dynamic: "A prop that can be placed in hierarchy and can play animations. It can also be configured to break when it takes enough damage. Note that the health of the object will be overridden by the health inside the model, to ensure consistent health game-wide. If the model used by the prop is configured to be used as a prop_physics (i.e. it should be physically simulated) then it cannot normally  be used as a prop_dynamic. Upon level load it will display a warning in the console and remove itself. Use a prop_dynamic_override instead."
	[
	]

@PointClass base(prop_dynamic_base) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
	sphere(exploderadius)
= prop_dynamic_ornament: "A way to attach one studio model to another as an ornament. It will render in the way that player/NPC weapons render."
	[
	solid(choices) : "Collisions" : 0 =
		[
		0: "Not Solid"
		]

	initialowner(target_destination) : "Target Entity" : : "Name of the entity that this ornament should attach to, at startup."

	// Inputs
	input SetAttached(target_destination) : "Attach the ornament to a different entity. Parameter should be the name of entity to attach to."
	input Detach(string) : "Detach from the Target Entity and become invisible. The ornament can be re-attached with the SetAttached input."
	]

@PointClass base(prop_dynamic_base, EnableDisable) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
	sphere(exploderadius)
= prop_dynamic_override: "A variant of prop_dynamic that permits the use of any model, including those designed to be used as prop_physics/prop_static."
	[
	health(integer) : "Health" : 0 : "Number of points of damage to take before breaking.  0 means don't break."
	]

@PointClass base(BasePropPhysics) 
	sphere(fademindist)
	sphere(fademaxdist)
	studio("models/effects/combineball.mdl")
= prop_energy_ball: "Aperture Science High Energy Pellet. Bounces off surfaces, travels through portals and kills players on contact. After a time period it will explode and be respawned."
	[

	// Inputs
	input Explode(void) : "Explode the pellet, creating a shockwave and shaking the camera."
	input BallCaught(void) : "Trigger the OnBallCaught output for the point_energy_ball_launcher that created this ball, kill the pellet and disable the launcher."
	input SetTime(float) : "Sets the remaining lifetime of the ball."
	]

@PointClass base(BasePortButton) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_floor_ball_button: "A floor button which is only activated by a Sphere-type prop_weighted_cube."
	[
	model(studio) : "Model" : "models/props/ball_button.mdl" : "Model to be used in game"
	]

@PointClass base(BasePortButton) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_floor_button: "A 1500 MegaWatt Aperture Science Super-Colliding Super Button, which is pressed by a player or objects."
	[
	model(choices) : "Button model" : "models/props/portal_button.mdl" : "Choose the amount of damage for the button, or type in a custom model." =
		[
		"models/props/portal_button.mdl": "Clean"
		"models/props/portal_button_damaged02.mdl": "Dirty Slightly Damaged"
		"models/props/portal_button_damaged01.mdl": "Dirty Very Damaged"
		"models/props/floor_button/portal_button_bts02.mdl": "BTS Slightly Damaged 1"
		"models/props/floor_button/portal_button_bts02a.mdl": "BTS Slightly Damaged 2"
		"models/props/floor_button/portal_button_bts01.mdl": "BTS Very Damaged"
		]


	// Outputs
	output OnPressedBlue(void) : "Called in Coop when the button has been pressed by ATLAS."
	output OnPressedOrange(void) : "Called in Coop when the button has been pressed by P-Body."
	]

@PointClass base(BasePortButton) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_floor_cube_button: "A floor button which is activated by a prop_weighted_cube."
	[
	model(studio) : "Button model" : "models/props/box_socket.mdl" : "Model to be used in game"
	acceptsball(boolean) : "Accepts Balls" : 0 : "Do Edgeless Safety Cubes activate this? Should almost always be No unless no balls are in the map."
	]

@PointClass base(BasePropPhysics) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_glados_core: "The P1 personality cores for GlaDOS. Resemble little eyeballs with handles. These play lines and look around when near the player. "
	[
	coretype(choices) : "Core Personality" : 1 : "Which personality VO set the core is set to." =
		[
		0: "Curious"
		1: "Aggressive"
		2: "Crazy"
		3: "None"
		]

	delaybetweenlines(float) : "Pause (in secs) between VO Lines." : "0.4" : "When the core is talking, this is the number of seconds delay between it's spoken lines."
	model(studio) : "Model" : "models/props_bts/glados_ball_reference.mdl" : "Model to use in game."

	// Inputs
	input Panic(void) : "Core is near death, panic."
	input StartTalking(void) : "Start playing lines, play looking animations."

	// Outputs
	output OnPlayerPickup(void) : "Player picked up core."
	]

@PointClass base(BasePropPhysics) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop("models/props/futbol.mdl")
	line(255 255 0, targetname, spawnername)
= prop_glass_futbol: "A fragile glass ball that the player can pick up and toss. On contact with surfaces it will shatter, and it can be put into holders to power them. It is affected by gel, but the shattering means this has little effect."
	[
	spawnername(target_destination) : "Spawner Name" : : "Name of prop_glass_futbol_spawner for this futbol to respawn in once broken."

	// Inputs
	input Dissolve(void) : "Dissolve"
	input RemovePaint(void) : "Remove Paint"

	// Outputs
	output OnFizzled(void) : "Fired when the futbol is fizzled."
	output OnIgnite(void) : "Fired when sphere burns."
	]

@PointClass base(BasePropPhysics, SetModel) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_physics: "A prop that physically simulates as a single rigid body. It can be constrained to other physics objects using hinges or other constraints. It can also be configured to break when it takes enough damage. Note that the health of the object will be overridden by the health inside the model, to ensure consistent health game-wide. If the model used by the prop is configured to be used as a prop_dynamic (i.e. it should not be physically simulated) then it cannot normally be used as a prop_physics. Upon level load it will display a warning in the console and remove itself. Use a prop_physics_override instead."
	[
	exploitablebyplayer(choices) : "Exploitable by Player" : 0 =
		[
		0: "Default"
		1: "Explosive"
		]


	// Inputs
	input Ignite(void) : "Ignite, burst into flames."
	input IgniteLifetime(float) : "Ignite, with a parameter lifetime."
	input IgniteNumHitboxFires(integer) : "Ignite, with a parameternumber of hitbox fires."
	input IgniteHitboxFireScale(float) : "Ignite, with a parameter hitbox fire scale."
	]

@PointClass base(prop_ragdoll) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_physics_ragdoll: "Alternate classname for prop_ragdoll"
	[
	]

@PointClass base(BasePropPhysics, SetModel) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
	sphere(radius)
= prop_sphere: "A variant of prop_physics which has a perfect sphere shape. It is normally restricted to a radius of 12 units."
	[
	radius(float) : "Radius" : 12 : "The size of the sphere collision."
	]

@PointClass base(BaseProjector) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_tractor_beam: "Emitter for an Excursion Funnel."
	[
	linearforce(choices) : "Funnel Direction" : 250 : "Speed of the Funnel, positive is forward." =
		[
		250: "[+250] Forward / Blue"
		-250: "[-250] Reversed / Orange"
		]

	noemitterparticles(boolean) : "Disable Emitter Particles" : 0 : "Disable the whirly particles on the emitter."
	use128model(choices) : "Model" : 0 : "Which model should this use?" =
		[
		0: "192 Model"
		1: "128 Model (PeTI)"
		]

	model(choices) : "[H] Model" : "models/props/tractor_beam_emitter.mdl" : "Sets the model to appear as in Hammer." =
		[
		"models/props/tractor_beam_emitter.mdl": "192 Model"
		"models/props_ingame/tractor_beam_128.mdl": "128 Model (PeTI)"
		]

	primarycolor(color255) : "Primary Color (R G B A)" : "10 160 255 255" : "Colour of the funnel when it is moving forwards."
	secondarycolor(color255) : "Secondary Color (R G B A)" : "255 160 32 255" : "Colour of the funnel when it is moving backwards."

	// Inputs
	input SetLinearForce(float) : "Set the speed of the Funnel, and therefore the direction."
	input SetPrimaryColor(color255) : "Changes the primary colour of the funnel."
	input SetSecondaryColor(color255) : "Changes the secondary colour of the funnel."
	]

@PointClass base(BasePedButton) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_under_button: "A button which is activated by player use or by game inputs, for use in underground test chambers. Uses different press/release sounds compared to the modern one. The same tick-tock noise is used to indicate limited time."
	[
	model(studio) : "Model" : "models/props_underground/underground_testchamber_button.mdl" : "Model to use in game."
	]

@PointClass base(BasePortButton) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_under_floor_button: "A floor button which is activated by a player or objects, for use in the underground test chambers. It plays different sounds, and has a larger trigger area."
	[
	model(studio) : "Button model" : "models/props_underground/underground_floor_button.mdl" : "The model to be used in game"

	// Outputs
	output OnPressedBlue(void) : "Called in Coop when the button has been pressed by ATLAS."
	output OnPressedOrange(void) : "Called in Coop when the button has been pressed by P-Body."
	]

@PointClass base(BaseProjector) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop("models/props/wall_emitter.mdl")
= prop_wall_projector: "Aperture Science Hard Light Bridge Projector. Note: To avoid lag when it first turns on, place an info_particle_system to precache 'projected_wall_impact'."
	[
	skin(choices) : "Skin" : 0 : "Which skin to use." =
		[
		0: "Clean"
		1: "Rusted"
		]

	]

@PointClass base(BasePropPhysics) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_weighted_cube: "Aperture Science Weighted Cube. Presses floor buttons, and can be moved around."
	[
	line_cube(string) readonly : "----------------------------------------------------------------------------------------------------------"
	cubetype(choices) : "Cube Type" : 0 : "What cube type is this? Use a prop_monster_box for FrankenTurrets. If set to Custom, use AddOutput to change it back OnMapSpawn so gel skins behave correctly." =
		[
		0: "[0] Weighted Storage Cube"
		1: "[1] Weighted Companion Cube"
		2: "[2] Discouragement Redirection Cube"
		3: "[3] Edgeless Safety Cube"
		4: "[4] Antique Storage Cube"
		5: "[5] Schoedinger's Cube"
		6: "[6] Custom model"
		]

	skintype(choices) : "Skin Type" : 0 : "Is the cube clean or rusty? Storage and Reflection cubes are the only types with a rusty version." =
		[
		0: "Clean"
		1: "Rusted"
		]

	model(choices) : "Model" : "models/props/metal_box.mdl" : "The model to show in Hammer, or a custom model for cube type 6." =
		[
		"models/props/metal_box.mdl": "Weighted Storage/Companion Cube"
		"models/props/reflection_cube.mdl": "Discouragement Redirection"
		"models/props_gameplay/mp_ball.mdl": "Edgeless Safety"
		"models/props_underground/underground_weighted_cube.mdl": "Antique"
		"models/props/schrodinger_cube.mdl": "Schroedinger"
		]

	skin(integer) : "Skin" : 0 : "The old skin property, mainly to show in Hammer. "
	paintpower(choices) : "Starting paint" : 4 : "The cube starts painted with the set gel." =
		[
		0: "Repulsion Gel"
		1: "Adhesion Gel"
		2: "Propulsion Gel"
		3: "Conversion Gel"
		4: "None"
		]

	allowfunnel(boolean) : "Allow Portal Funneling" : 1 : "Whether or not this object should auto-funnel into a floor portal."
	newskins(integer) readonly : "Use new skins" : 1 : "Use the values in the Cube Type and Skin Type fields instead of the Skin(OLD) field. You shouldn't need to touch this."
	uselasermodifier(boolean) : "Use Laser Modifier" : 0 : "If enabled, this cube will recolor incoming lasers to the modifier color."
	reflectmodifycolor(choices) : "Laser Modifier Color" : "255 0 0 255" : "Set reflected lasers to this color. Only applicable to reflection and Schrodinger cubes. You can also specify a custom RGBA color here." =
		[
		"255 255 255 255": "White"
		"255 0 0 255": "Default Red"
		"100 255 100 255": "Lethal Green"
		"32 112 202 255": "Blue"
		"255 212 91 255": "Yellow"
		"212 60 146 255": "Pink"
		"65 97 0 255": "Dark Green"
		]

	uselaserfilter(boolean) : "Use Laser Filter" : 0 : "If enabled, this cube can only redirect lasers that match the filter color. If disabled, any laser color can be redirected."
	reflectfiltercolor(choices) : "Laser Filter Color" : "255 0 0 255" : "Filter reflected lasers by this color. Only applicable to reflection and Schrodinger cubes. You can also specify a custom RGBA color here." =
		[
		"255 255 255 255": "White"
		"255 0 0 255": "Default Red"
		"100 255 100 255": "Lethal Green"
		"32 112 202 255": "Blue"
		"255 212 91 255": "Yellow"
		"212 60 146 255": "Pink"
		"65 97 0 255": "Dark Green"
		]

	schrodingersound(sound) : "Schrodinger Sound" : : "The sound (or music) to play when the Schrodinger cube is powered. Only applicable to Schrodinger cubes."

	// Inputs
	input EnablePortalFunnel(void) : "Enable portal funneling behavior."
	input DisablePortalFunnel(void) : "Disable portal funneling behavior."
	input EnableMotion(void) : "Allow physics simulation."
	input DisableMotion(void) : "Prevent Physics simulation, freezing the cube in place."
	input SetPaint(integer) : "Force the cube to be painted with 0 (Repulsion), 2 (Propulsion), or 4 (No) gel."
	input Dissolve(void) : "Fizzles the cube, firing the OnFizzled output."
	input SilentDissolve(void) : "Kills the cube immediately and fires its OnFizzled output."
	input ExitDisabledState(void) : "Exits the disabled state of a reflective cube."
	input SetReflectModifyColor(color255) : "Changes the laser modifier colour of the cube."
	input SetReflectFilterColor(color255) : "Changes the laser filter colour of the cube."
	input EmitLaser(bool) : "Makes this cube emit or stop emitting its own laser."

	// Outputs
	output OnFizzled(void) : "Fired when a cube is fizzled."
	output OnOrangePickUp(void) : "P-Body picked up the cube."
	output OnBluePickUp(void) : "ATLAS picked up the cube."
	output OnPlayerPickup(void) : "Any player picked up the cube."
	output OnPhysGunDrop(void) : "Any player dropped the cube."
	output OnPainted(integer) : "Cube got painted, only if the state changed. Has the paint type as parameter."
	output OnPowered(void) : "Cube got powered by a laser."
	output OnUnpowered(void) : "Cube is no longer powered by a laser."
	]

@PointClass base(BasePropPhysics) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= simple_physics_prop: "A simple physics prop with no unique properties. Model-based entities converted by phys_convert are turned into this entity, as well as dissolving objects.See prop_physics for more options."
	[
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
	catapult()
= trigger_catapult: "Catapult the player in a given direction at a given velocity."
	[
	playerspeed(float) : "Player Speed" : 450 : "Speed at which to launch the players (u/sec)"
	physicsspeed(float) : "Physics Object Speed" : 450 : "Speed at which to launch physics objects (u/sec)"
	launchdirection(angle) : "Launch direction" : "0 0 0" : "Direction to launch the player in."
	launchtarget(target_destination) : "Launch target" : : "Entity to try to 'hit' when we're launched."
	useexactvelocity(boolean) : "Use Exact Velocity" : 0 : "Try to fling exactly at the speed specified - this prevents the added upward velocity from a launch target."
	exactvelocitychoicetype(choices) : "Exact Solution Method" : 0 : "Using exact velocity generates two correct solutions. Use this to force which one you choose." =
		[
		0: "Best"
		1: "Solution One"
		2: "Solution Two"
		]

	applyangularimpulse(boolean) : "Apply angular impulse" : 1 : "Physics objects that are catapulted will get random rotational force."
	airctrlsupressiontime(float) : "Air control supression time" : "-1.0" : "[Launch by target only!] If greater than zero, suppress player aircontrol for this number (in seconds). If less than zero use the default (quarter second)."
	directionsuppressaircontrol(boolean) : "Supress directional air control" : 0 : "Whether to supress air control for directional catapults."
	usethresholdcheck(boolean) : "Use Threshold Check" : 0 : "Use the Lower and Upper Threshold to only trigger when the object is moving at a certain speed already."
	onlyvelocitycheck(boolean) : "Only check velocity" : 0 : "Only check velocity of the touching object - don't actually catapult it. Use in conjunction with OnCatapulted to create velocity checking triggers.  Only works when Use Threshold Check is enabled."
	absolutevelocitycheck(boolean) : "Absolute Velocity Check" : 0 : "If enabled, the values in Lower Threshold and Upper Threshold represent real velocity values instead of percentages."
	lowerthreshold(float) : "Lower Threshold" : "0.15" : "Flung object must be within this percentage value in order to activate fling. Specify a value between [0...1] (default is .15). This is only used if Use Threshold Check is set to yes."
	upperthreshold(float) : "Upper Threshold" : "0.30" : "Flung object must be within this percentage value in order to activate fling. Specify a value between [0...1] (default is .30). This is only used if Use Threshold Check is set to yes."
	entryangletolerance(float) : "Entry Angle Tolerance" : "0.0" : "Flung object's velocity must be pointing this much at the target. Specify a value between [-1...1] 1 means exactly, 0 means within 180 degrees -1 means any angle is accepted. This is only used if Use Threshold Check is set to yes."
	launchsound(sound) : "Launch Sound" : : "Sound played when an entity is launched."

	// Inputs
	input SetPlayerSpeed(float) : "Set the speed to launch the player at."
	input SetPhysicsSpeed(float) : "Set the speed to launch the physics objects at."
	input SetLaunchTarget(string) : "Set the entity to try hit when launched."
	input SetExactVelocityChoiceType(integer) : "Set the Exact Solution Method."

	// Outputs
	output OnCatapulted(void) : "The object has been launched, or passes the Threshold Check and Entry Angle Tolerance."
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
	line(255 255 255, targetname, landmark)
	color(200 0 0)
= trigger_changelevel: "An entity that triggers a level change.\nPlace an info_landmark in both maps that marks the 'same' location in each map.\nTIPS & TRICKS: To fire events in the next level, use the OnLevelChange output to turn on an env_global in the current level.  Create a logic_auto in the next level that checks for the state set by the env_global.\n\nTo control which entities go through the level transition, create one or more trigger_transitions and give them the same name as the landmark. Any entities within the trigger_transition(s) will go to the next map."
	[
	map(string) : "New Map Name"
	landmark(target_destination) : "Landmark Name"
	spawnflags(flags)  =
		[
		2: "[2] Disable Touch" : 0
		4: "[4] To Previous Chapter" : 0
		]


	// Inputs
	input ChangeLevel(void) : "Cause the level change. Use this when triggering the level change with a button, etc."

	// Outputs
	output OnChangeLevel(void) : "Fired when the level changes."
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= trigger_gravity: "A trigger volume that changes the gravity on any entity that touches it."
	[
	gravity(float) : "Gravity (0-1)" : 1
	persist(boolean) : "Persist" : 0 : "Whether the gravity change persists. A setting of 0 will reset gravity to default on exiting. 1 will persist and thus act like how it did in older games like TF2."
	]

@SolidClass base(Trigger, MasterEnt, DamageType) 
	line(255 255 255, targetname, filtername)
	line(255 255 255, targetname, master)
= trigger_hurt: "A trigger volume that damages entities that touch it."
	[
	damage(integer) : "Damage" : 20 : "The amount of damage done to entities that touch this trigger. The damage is done every half-second. See also 'Damage Model' for extra details on how damage can be dealt."
	damagecap(integer) : "Damage Cap" : 20 : "The maximum amount of damage that can be dealt when using the Doubling w/Forgiveness damage model."
	damagemodel(choices) : "Damage Model" : 0 : "How damage is dealt. Normal always does the specified amount of damage each half second. Doubling w/Forgiveness starts with the specified amount and doubles it each time it hurts the toucher, resetting when they leave the trigger. Good for making triggers that are deadly over time, without having to cause massive damage on each touch." =
		[
		0: "Normal"
		1: "Doubling w/forgiveness"
		]

	nodmgforce(boolean) : "Zero Damage Force" : 0 : "Should the damaged entity receive no physics force from this trigger."

	// Inputs
	input SetDamage(float) : "Set a new amount of damage for this trigger."

	// Outputs
	output OnHurt(void) : "Fired whenever this trigger hurts something other than a player."
	output OnHurtPlayer(void) : "Fired whenever this trigger hurts a player."
	]

@SolidClass base(Trigger, Origin, Angles) 
	line(255 255 255, targetname, filtername)
= trigger_impact: "A trigger volume that can be told to push all physics objects that are inside of it in the direction specified by this trigger's angles.\nAlso outputs the force at the time of impact for anyone else that wants to use it."
	[
	magnitude(float) : "Magnitude" : 200 : "The strength of the impact. Negative values reverse the direction."
	noise(float) : "Noise" : "0.1" : "The amount of directional noise (0-1). 0 = no noise, 1 = random direction."
	viewkick(float) : "Viewkick" : "0.05" : "The amount to kick player's view if the player is in the trigger.  Proportional to magnitude (0-1)."

	// Inputs
	input Impact(float) : "Fire the impact, pushing all entities within the volume."
	input SetMagnitude(float) : "Set the magnitude of the impact."

	// Outputs
	output ImpactForce(string) : "Fired after an impact. The parameter passed along is the force of the impact that was generated."
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
	line(255 255 0, targetname, target)
= trigger_look: "An entity used to trigger something when the player looks at something. It fires 'OnTrigger' when the player looks at a target entity for the given amount of time, while within the trigger volume. If the player leaves the trigger or looks away from the target entity the clock resets. If the 'Use Velocity instead of facing' spawnflag is checked, the trigger uses the player's velocity instead of the player's view, so it determines whenever the player is moving toward the target entity. Useful for triggering when players are driving a vehicle at something. NOTE: Only designed for single-player game. "
	[
	spawnflags(flags)  =
		[
		128: "[128] Fire Once" : 1
		256: "[256] Use Velocity instead of facing" : 0
		]

	target(target_destination) : "Look Target" : : "The name of the entity to be looked at."
	looktime(string) : "LookTime" : "0.5" : "The time, in seconds, that the player must look at the target before firing the output. Resets if player leaves trigger, or looks outside the Field of View threshold."
	fieldofview(string) : "FieldOfView" : "0.9" : "How close the player has to be looking at the target. 1.0 = straight ahead\n 0.0 = +/- 90 degrees\n -1.0 = all directions)."
	timeout(float) : "Timeout" : 0 : "The time, in seconds, to wait after player enters the trigger before firing the OnTimeout output, 0 = never."

	// Inputs
	input LookTime(float) : "Set the time, in seconds, that the player has to look at the target before firing."
	input FieldOfView(float) : "Set how close the player has to be looking at the target."

	// Outputs
	output OnTimeout(void) : "Fired after the timeout interval expires if the player never looked at the target."
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= trigger_multiple: "A trigger volume that can be triggered multiple times."
	[
	wait(integer) : "Delay Before Reset" : 1 : "Amount of time, in seconds, after the trigger_multiple has triggered before it can be triggered again. If set to -1, it will never trigger again (in which case you should just use a trigger_once)."
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= trigger_paint_cleanser: "A trigger volume that erases any gel within it. Will destroy prop_paint_bombs and info_paint_sprayer gel, but will not stop gel from streaking under it. It will also clean physics objects like cubes or turrets that touch it. Likely intended to be used with paint_cleanser particle effect (like P1 fizzlers, but red)."
	[
	spawnflags(flags)  =
		[
		]

	filtername(filterclass) readonly : "Filter Name" : : "Filters don't work on trigger_paint_cleanser!"
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= trigger_ping_detector: "Detects whether a player has pinged in its region."
	[

	// Outputs
	output OnOrangePlayerPinged(void) : "Fired when P-Body has pinged inside the trigger."
	output OnBluePlayerPinged(void) : "Fired when ATLAS has pinged inside the trigger."
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= trigger_playermovement: "An entity that can be used to disable player's automatic ducking/unducking when jumping."
	[
	spawnflags(flags)  =
		[
		1: "[1] Clients/Players" : 1
		128: "[128] Disable auto player movement" : 1
		2048: "[2048] Auto-duck while in trigger" : 0
		4096: "[4096] Auto-walk while in trigger" : 0
		]

	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= trigger_playerteam: "Allows distinguishing which player touched the trigger. Use with a logic_coop_manager to detect when both players are inside."
	[
	target_team(choices) : "Target Player" : 0 : "Which player (or both) to allow to touch this trigger." =
		[
		0: "Both"
		3: "ATLAS"
		2: "P-Body"
		]

	trigger_once(boolean) : "Trigger Once" : 0 : "Only trigger once, then remove the trigger."

	// Outputs
	output OnStartTouchBluePlayer(void) : "ATLAS has started touching the trigger."
	output OnEndTouchBluePlayer(void) : "ATLAS has stopped touching the trigger."
	output OnStartTouchOrangePlayer(void) : "P-Body has started touching the trigger."
	output OnEndTouchOrangePlayer(void) : "P-Body has stopped touching the trigger."
	]

@SolidClass base(Trigger, RenderFields, Reflection) 
	line(255 255 255, targetname, filtername)
= trigger_portal_cleanser: "A trigger volume that disolves any entities that touch it and fizzles active portals when the player touches it.|||An Aperture Science Material Emancipation Grid."
	[
	spawnflags(flags)  =
		[
		1: "[1] Clients/Players" : 1
		2: "[2] NPCs" : 0
		8: "[8] Physics Objects" : 1
		16: "[16] Only player ally NPCs" : 0
		64: "[64] Everything (not including physics debris)" : 0
		1024: "[1024] Physics debris" : 0
		]

	visible(boolean) : "Visible" : 1 : "If the fizzler is visible. This controls whether sounds will play."
	usescanline(boolean) : "Use Scanline" : 1 : "If the field uses a scanline particle effect."

	// Inputs
	input FizzleTouchingPortals(void) : "Cause any portals in our volume to immediately fizzle."

	// Outputs
	output OnDissolve(void) : "Fired whenever an entity is dissolved."
	output OnFizzle(void) : "Fired whenever an portals are fizzled."
	output OnDissolveBox(void) : "This cleanser dissolved an entity with a targetname of 'Box.'"
	output OnPrimaryHit(void) : "Fired whenever the primary portal hits the cleanser."
	output OnSecondaryHit(void) : "Fired whenever the secondary portal hits the cleanser."
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
	line(255 255 255, targetname, measuretarget)
	sphere(radius)
= trigger_proximity: "Measures the distance of the player within the trigger volume from a given point (and within a given radius). The NearestPlayerDistance output will be 0 when the player is at the center point, and 1 when the player is at the radius."
	[
	measuretarget(target_destination) : "Point to Measure From" : : "The name of a target entity who's origin is the point to measure the player's distance from."
	radius(float) : "Radius to measure within" : 256 : "The radius to which the distance should be mapped. If the player is outside the radius they will be ignored."

	// Outputs
	output NearestEntityDistance(float) : "Fired continuously when entities are touching the trigger volume. The output parameter is the distance from the Point to Measure From to the nearest entity that passed the trigger filters. The distance is mapped to the radius distance, so it will be 0 when the entity is on the point, and 1 when the entity is at the edge of the radius.!activator is the closest entity."
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= trigger_push: "A trigger volume that pushes entities that touch it."
	[
	pushdir(angle) : "Push Direction (Pitch Yaw Roll)" : "0 0 0" : "Angles indicating the direction to push touched entities."
	spawnflags(flags)  =
		[
		128: "[128] Once Only" : 0
		256: "[256] Affects Ladders (Half-Life 2)" : 0
		]

	speed(integer) : "Speed of Push" : 40 : "The speed at which to push entities away, in units / second."
	alternateticksfix(float) : "Scale force for alternate ticks" : 0 : "If nonzero, scale the force by this amount when running with alternate ticks. This fixes problems with an overly large force due to the longer frametime on when running with sv_alternateticks 1."

	// Inputs
	input SetPushDirection(vector) : "Sets the angles indicating the direction to push touched entities."
	input SetPushSpeed(integer) : "Set the push speed in units / second."
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= trigger_remove: "A trigger volume that removes any entities that touch it. Be careful, removing some entities can cause instability. This is not the same as killing entities. i.e. NPCs removed in this manner will not fire their OnKilled outputs."
	[

	// Outputs
	output OnRemove(void) : "Fired whenever an entity is removed."
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= trigger_reversespeed: "Trigger for reversing the speed of the player."
	[
	reversehorizontal(integer) : "Reverse horizontal speed" : 1 : "Reverse accordingly the velocity based on x/y axis."
	reversevertical(integer) : "Reverse vertical speed" : 1 : "Reverse the z velocity."
	onthink(integer) : "Update every intervals" : 0 : "If you want to make the trigger updating for each defined interval, set it to 1."
	interval(float) : "Interval" : "1.0" : "Set here in seconds how many time the trigger should update."
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= trigger_serverragdoll: "A volume that forces any NPC inside it to create a server side ragdoll instead of a client one."
	[
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= trigger_setspeed: "Trigger for setting speed of the player."
	[
	keephorizontalspeed(integer) : "Keep horizontal speed" : 0 : "If you want to keep the horizontal (x/y axis velocity based) speed, set it to 1."
	keepverticalspeed(integer) : "Keep vertical speed" : 0 : "If you want to keep the vertical (z axis velocity based) speed, set it to 1."
	horizontalspeedamount(float) : "Horizontal speed amount" : 500 : "Set here the speed length based on x/y axis for the velocity direction."
	verticalspeedamount(float) : "Vertical speed amount" : 100 : "Set here the speed based on z axis for the velocity direction."
	direction(angle) : "Direction (Pitch Yaw Roll)" : "0 0 0" : "Direction of the speed applied. Keep in mind that only Y angle is taken into account because vertical speed can be set already."
	onthink(integer) : "Update every intervals" : 0 : "If you want to make the trigger updating for each defined interval, set it to 1."
	interval(float) : "Interval" : "1.0" : "Set here in seconds how many time the trigger should update."
	everytick(integer) : "Every tick" : 0 : "If you want the trigger to update and fire every tick, set this to 1."
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= trigger_softbarrier: "A trigger volume that softly slows player velocity in a given direction."
	[
	pushdir(angle) : "Push Direction (Pitch Yaw Roll)" : "0 0 0" : "Angles indicating the direction to slow player velocity."

	// Inputs
	input SetPushDirection(vector) : "Sets the angles indicating the direction to slow player velocity."
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= trigger_soundoperator: "An entity that can control sound operator parameters."
	[
	sosvar(choices) : "Sound Operator" : 0 =
		[
		0: "Custom Sound Volume 1"
		1: "Custom Sound Volume 2"
		]

	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
	line(255 255 255, targetname, soundscape)
= trigger_soundscape: "Soundscape trigger. It is not necessary to create outputs for this trigger. It automatically will trigger the soundscape referred to by its 'Soundscape' property."
	[
	soundscape(target_source) : "Soundscape"
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= trigger_teleport_relative: "A trigger volume that teleports entities that touch it. Entities are teleported by Offset from their current position. Useful to get objects out of situations where levels or entities suddenly appear intersecting with them."
	[
	teleportoffset(vector) : "Offset (X Y Z)" : "0 0 0" : "The offset (in World-Space Coordinates X Y Z) to teleport the entity when the trigger is touched."
	]

@SolidClass base(Trigger, EnableDisable) 
	line(255 255 255, targetname, filtername)
= trigger_togglesave: "A trigger volume that autosaves each time the player touches it. After it is triggered, it must be Enabled before it will activate again."
	[
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= trigger_tonemap: "Changes tonemap controllers for players touching the trigger."
	[
	tonemapname(target_destination) : "Tonemap Name" : : "The name of the tonemap controller entity associated with this trigger."
	]

@SolidClass base(Trigger, Origin) 
	line(255 255 255, targetname, filtername)
= trigger_transition: "A volume that's used to control which entities go through the level transition. Create one or more trigger_transitions and give them the same name as the changelevel landmark. Any entities within the trigger_transition(s) will go to the next map. See trigger_changelevel for more info."
	[
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= trigger_userinput: "Trigger that fires on user KeyPress if inside trigger."
	[
	lookedkey(choices) : "Key that fires" : 0 =
		[
		0: "Forward"
		1: "Back"
		2: "Move Left"
		3: "Move Right"
		4: "Jump"
		5: "Duck"
		6: "Attack"
		7: "Attack 2"
		8: "Reload"
		9: "Speed"
		10: "Walk"
		]

	lookedkey2(choices) : "Second key to use that fires, if held down at same time as other keys" : -1 =
		[
		-1: "None"
		0: "Forward"
		1: "Back"
		2: "Move Left"
		3: "Move Right"
		4: "Jump"
		5: "Duck"
		6: "Attack"
		7: "Attack 2"
		8: "Reload"
		9: "Speed"
		10: "Walk"
		]

	lookedkey3(choices) : "Third key to use that fires, if held down at same time as other keys" : -1 =
		[
		-1: "None"
		0: "Forward"
		1: "Back"
		2: "Move Left"
		3: "Move Right"
		4: "Jump"
		5: "Duck"
		6: "Attack"
		7: "Attack 2"
		8: "Reload"
		9: "Speed"
		10: "Walk"
		]


	// Outputs
	output OnKeyPressed(void) : "Fires when the desired key is pressed"
	output OnKeyHeld(void) : "Fires every tick while the desired key is held"
	output OnKeyReleased(void) : "Fires when the desired key is released"
	]

@SolidClass base(Trigger) 
	line(255 255 255, targetname, filtername)
= trigger_vphysics_motion: "A volumetric trigger that affects the motion of vphysics objects that touch it."
	[
	spawnflags(flags)  =
		[
		4096: "[4096] Can move (through hierarchical attachment)" : 0
		]

	setgravityscale(float) : "Gravity Scale" : "1.0" : "Scale gravity of objects in the field by this amount."
	setadditionalairdensity(float) : "Additional air density for drag" : 0
	setvelocitylimit(float) : "Velocity Limit" : "0.0" : "Max velocity in field (0 disables)"
	setvelocitylimitdelta(float) : "Velocity Limit Force" : "0.0" : "Max amount to reduce velocity per second when it exceeds the velocity limit (0 disables)"
	setvelocityscale(float) : "Velocity scale/drag" : "1.0"
	setangvelocitylimit(float) : "Angular Velocity Limit" : "0.0" : "Max angular velocity in field (degrees/s, 0 disables)"
	setangvelocityscale(float) : "Angular Velocity scale/drag" : "1.0"
	setlinearforce(float) : "Linear force" : "0.0" : "Amount of force to apply while in the trigger (0 disables)"
	setlinearforceangles(angle) : "Force Direction" : "0 0 0" : "Direction of linear force (Pitch Yaw Roll or Y Z X)"
	particletrailmaterial(material) : "Particle Trail Material" : : "Name of a material to use for the particle trail, no name means no particle trail"
	particletraillifetime(float) : "Particle Trail Lifetime" : 4 : "Lifetime of the particles to emit"
	particletrailstartsize(float) : "Particle Trail Starting Sprite Size" : 2 : "Starting size of the sprite to emit"
	particletrailendsize(float) : "Particle Trail Ending Sprite Size" : 3 : "Ending size of the sprite to emit"

	// Inputs
	input SetGravityScale(float) : "Scale gravity of objects in the field."
	input SetAdditionalAirDensity(float) : "Additional air density for drag"
	input SetVelocityLimit(float) : "Max velocity in field."
	input SetVelocityLimitDelta(float) : "Max amount to reduce velocity per second"
	input SetVelocityLimitTime(string) : "Accepts two arguments: the first is the new velocity limit, the second is the time it takes to ramp to that value"
	input SetVelocityScale(float) : "Velocity scale/drag"
	input SetAngVelocityLimit(float) : "Max angular velocity in field."
	input SetAngVelocityScale(float) : "Angular Velocity scale/drag"
	input SetLinearForce(float) : "Linear force (0 disables)"
	]

@SolidClass base(Trigger, Angles) 
	line(255 255 255, targetname, filtername)
= trigger_wind: "A trigger volume that pushes physics objects that touch it."
	[
	speed(integer) : "Speed" : 200 : "The baseline for how hard the wind blows."
	speednoise(integer) : "Speed Noise" : 0 : "Noise added to wind speed +/-"
	directionnoise(integer) : "Direction Noise" : 10 : "Noise added to wind direction."
	holdtime(integer) : "Hold Time" : 0 : "Baseline for how long to wait before changing wind."
	holdnoise(integer) : "Hold Noise" : 0 : "Noise added to how long to wait before changing wind."

	// Inputs
	input SetSpeed(integer) : "Set the baseline for how hard the wind blows."
	]

@BaseClass base(BaseNPC) = TalkNPC
	[
	usesentence(string) : "Use Sentence"
	unusesentence(string) : "Un-Use Sentence"
	dontusespeechsemaphore(choices) : "Don't Use Speech Semaphore" : 0 : "Friendly NPCs are not allowed to speak if another friendly NPC is speaking. In some cases we don't want speaking NPCs to prevent other NPCs from speaking (for instance, if there is a friendly NPC speaking for a long time on a monitor). To make this NPC not prevent other NPCs from talking, make it not grab the semaphore when it speaks." =
		[
		0: "No (Use speech semaphore)"
		1: "Yes (Don't use speech semaphore)"
		]


	// Inputs
	input SpeakResponseConcept(string) : "Speak the specified response concept."
	]

@SolidClass base(trigger_playerteam) = comp_trigger_coop: "Only activates once both Coop players have reached the trigger."
	[

	// Outputs
	output OnStartTouchBoth(void) : "Both players have entered the trigger."
	output OnEndTouchBoth(void) : "One player left the trigger."
	]

@PointClass base(BaseNPC, SetModel) 
	sphere(fademindist)
	sphere(fademaxdist)
	color(0 200 200)
	studio()
= cycler_actor: "Actor Cycler"
	[
	sentence(string) : "Sentence Group"
	]

@SolidClass base(func_physbox) 
	sphere(fademindist)
	sphere(fademaxdist)
	sphere(exploderadius)
= func_physbox_multiplayer: "This class is the same as func_physbox, except the runtime collisions use a more bouncy method that avoids the prediction errors normal physics objects get."
	[
	]

@SolidClass base(func_breakable) 
	sphere(fademindist)
	sphere(fademaxdist)
	sphere(exploderadius)
= func_pushable: "A brush with primitive physics that can be pushed around."
	[
	size(choices) : "Hull Size" : 0 =
		[
		0: "Point size"
		1: "Player size"
		2: "Big Size"
		3: "Player duck"
		]

	spawnflags(flags)  =
		[
		1: "[1] Only Break on Trigger" : 0
		2: "[2] Break on Touch" : 0
		4: "[4] Break on Pressure" : 0
		512: "[512] Break immediately on Physics" : 0
		1024: "[1024] Don't take physics damage" : 0
		2048: "[2048] Don't allow bullet penetration" : 0
		128: "[128] Breakable" : 0
		]

	friction(float) : "Friction" : 50 : "This determines the amount of resistance the brush will give when the player pushes it. Range is 0 to 400, where 400 is the most resistance."
	]

@SolidClass base(func_door) 
	sphere(fademindist)
	sphere(fademaxdist)
	line(255 255 255, targetname, master)
	line(255 255 255, targetname, chainstodoor)
= func_water: "Legacy Goldsrc support. Non-moving water should be worldspawn, and moving water should be func_water_analog. This brush is a special variant of func_door with water collision physics."
	[
	]

@PointClass base(BaseNPC, SetModel) 
	sphere(fademindist)
	sphere(fademaxdist)
	color(0 200 200)
	studioprop()
= generic_actor: "Generic Actor NPC"
	[
	hull_name(choices) : "Hull type" : "HUMAN_HULL" =
		[
		"HUMAN_HULL": "Human"
		"WIDE_HUMAN_HULL": "Wide"
		"TINY_HULL": "Tiny"
		"MEDIUM_HULL": "Medium"
		"LARGE_HULL": "Large"
		]

	defaultanim(string) : "Default Animation" : : "The name of the idle animation that this prop will revert to whenever it finishes a random or forced animation."
	randomanimation(boolean) : "Randomly Animate" : 0 : "If set, this prop will randomly choose and play animations, based upon the times specified in Min/Max Random Anim Time. Inbetween the random animations, it will revert to playing the 'Default Animation'."
	]

@PointClass base(prop_glass_futbol, prop_exploding_futbol) 
	line(255 255 0, targetname, spawnername)
	studioprop("models/props/futbol.mdl")
= hot_potato: "This uses the futbol model. It can be carried around, but on impact it explodes, similar to prop_exploding_futbols."
	[
	]

@PointClass base(BaseNPC) 
	sphere(fademindist)
	sphere(fademaxdist)
	color(0 200 200)
	studio()
	bbox(-4 -4 -4, 4 4 4)
= monster_generic: "Generic Script NPC"
	[
	spawnflags(flags)  =
		[
		65536: "[65536] Not solid" : 0
		]

	model(studio) : "Model"
	body(integer) : "Body" : 0
	]

@PointClass base(BaseNPC, SetModel) 
	sphere(fademindist)
	sphere(fademaxdist)
	color(0 200 200)
	studio()
= npc_furniture: "An entity used for non-NPCs that need to synchronise their animation with an NPC in a scripted_sequence. Usually a piece of furniture or door that an NPC needs to manipulate within a scripted_sequence."
	[

	// Inputs
	input DisablePlayerCollision(void) : "Disable collisions against the player."
	input EnablePlayerCollision(void) : "Enable collisions against the player."
	]

@PointClass base(BaseNPC, SetModel) 
	sphere(fademindist)
	sphere(fademaxdist)
	color(0 200 200)
	studio()
= npc_heardanger: "A Generic NPC entity that hears and reports 'danger' and is not preserved on round restart. Danger sounds consist of gunshots, player sounds, bullet impacts, nearby vehicles and andything else that gives off a danger sound."
	[

	// Outputs
	output OnHearWorld(void) : "Fired when this NPC hears a sound (other than combat or the player)."
	output OnHearPlayer(void) : "Fired when this NPC hears the player."
	output OnHearCombat(void) : "Fired when this NPC hears combat sounds."
	]

@PointClass base(BaseNPC) 
	sphere(fademindist)
	sphere(fademaxdist)
	color(0 200 200)
	line(255 0 0, targetname, enemyfilter)
	line(255 255 255, targetname, target)
	studioprop("models/npcs/hover_turret.mdl")
	line(255 255 255, targetname, attachtarget)
	frustum(_frustum_fov, _frustum_near, _frustum_far, _frustum_color, -1)
= npc_hover_turret: "The cut Hover Turret, which hangs from the ceiling and fires a laser at the player. Missing its model by default, and somewhat buggy."
	[
	canpushplayer(boolean) : "Laser Pushes Player" : 0 : "Should the hover turret's laser deal knockback? Usually only works while the player is in the air."
	sentryrotatespeed(float) : "Idle Rotation Speed" : 10 : "While idle, the hover turret will rotate at this speed."
	attachtarget(target_destination) : "Tether Attach Target" : : "An entity (usually info_target) which the hover turret should hang from."
	_frustum_far(integer) readonly : "<Maximum Range>" : 2048 : "How far the turret will be able to see targets. Always 2048, but this keyvalue is needed to display the preview."
	_frustum_color(string) readonly : "<Frustum Color>" : "0 255 255" : "Ignore, needed to color the range preview."
	]

@PointClass base(BaseNPC) 
	sphere(fademindist)
	sphere(fademaxdist)
	color(0 200 200)
	studioprop()
	frustum(_frustum_fov, _frustum_near, TurretRange, _frustum_color, -1)
= npc_portal_turret_floor: "Aperture Science Sentry Turret."
	[
	damageforce(boolean) : "Damage Pushes Player" : 0 : "Being hit by this turret will push the player back."
	spawnflags(flags)  =
		[
		32: "[32] Start Active" : 0
		64: "[64] Start Inactive" : 0
		128: "[128] Fast Retire" : 0
		256: "[256] Out of Ammo" : 0
		]

	modelindex(choices) : "Model" : 0 : "Which model the turret uses. The skeleton turret is still functional." =
		[
		0: "Normal"
		1: "Custom Model"
		2: "Box"
		3: "Backwards"
		4: "Skeleton"
		]

	skinnumber(choices) : "Skin" : 0 : "Set the skin used for the turret. Only useful on normal (for a destroyed variant) or custom turrets." =
		[
		0: "Normal"
		1: "Destroyed"
		]

	gagged(boolean) : "Gag Turret" : 0 : "Turret will not speak any lines."
	usedasactor(boolean) : "Used As Actor" : 0 : "Turret will not run the standard floor turret code so it can be used as an actor."
	pickupenabled(boolean) : "Turret Pickup Allowed" : 1 : "Disables pickup by player."
	disablemotion(boolean) : "Disable Motion" : 0 : "Set for turrets that can't move in the world."
	allowshootthroughportals(boolean) : "Allow Shooting Through Portals" : 0 : "Turrets will not try to shoot through portals unless this is set."
	turretrange(float) : "Maximum Range" : 1024 : "How far the turret will be able to see targets."
	loadalternativemodels(boolean) : "Load Defective Models" : 0 : "Should this turret precache the defective models? Needed for late switching."
	usesuperdamagescale(boolean) : "Use Super Damage" : 0 : "Setting this to true will scale the turret's damage by a very large amount."
	collisiontype(choices) : "Collision Type" : 0 : "Allow collision with the player to be turned off for very special cases." =
		[
		0: "Normal"
		1: "Debris"
		]

	model(choices) : "Custom Model" : "models/npcs/turret/turret.mdl" : "The model to show as in Hammer, or a custom model to use." =
		[
		"models/npcs/turret/turret.mdl": "Normal"
		"models/npcs/turret/turret_boxed.mdl": "Box"
		"models/npcs/turret/turret_backwards.mdl": "Backwards"
		"models/npcs/turret/turret_skeleton.mdl": "Skeleton"
		]

	skin(integer) : "[H] Skin" : 0 : "The skin to show, mainly for the normal model."
	_frustum_color(string) readonly : "<Frustum Color>" : "255 0 0" : "Ignore, needed to color the range preview."

	// Inputs
	input FireBullet(string) : "Causes the turret to instantly fire at the specified entity."
	input Toggle(void) : "Toggle enabled state."
	input Enable(void) : "Enable the turret."
	input Disable(void) : "Disable the turret."
	input DepleteAmmo(void) : "Depletes all the ammo from a turret, causing it to dry-fire."
	input RestoreAmmo(void) : "Restores ammo to a turret, allowing it to fire live rounds again."
	input EnableGagging(void) : "Prevents the turret from speaking any lines."
	input DisableGagging(void) : "Allows the turret to speak again."
	input EnablePickup(void) : "Enables player pickup of the turret."
	input DisablePickup(void) : "Disables player pickup of the turret."
	input SelfDestruct(void) : "Causes the turret to play lines, ignite and then explode."
	input SelfDestructImmediately(void) : "Cause the turret to explode immediately."
	input SetAsBouncePainted(void) : "Force this turret to be painted with bounce paint."
	input EnableMotion(void) : "Enable physics motion."
	input DisableMotion(void) : "Disable physics motion."
	input SetModel(integer) : "Change the model, where the parameter is an integer from 0-4. Requires the Load Defective Models keyvalue to be true!"

	// Outputs
	output OnDeploy(void) : "Turret has seen the player and is deploying its arms."
	output OnRetire(void) : "Turret has lost sight of the player and is returning to sleep mode."
	output OnTipped(void) : "Turret has been tipped over and 'died'."
	output OnExplode(void) : "Turret has exploded."
	output OnPhysGunPickup(void) : "Turret was picked up by player."
	output OnPhysGunDrop(void) : "Turret was dropped by player."
	output OnPainted(void) : "Fires when the turret is first painted or if repainted by a different color."
	]

@PointClass base(BaseNPC, ResponseContext) 
	sphere(fademindist)
	sphere(fademaxdist)
	color(0 200 200)
	studioprop()
	line(0 0 255, targetname, TripwireAimTarget)
	sphere(_sphere_radius)
= npc_rocket_turret: "Portal 1 rocket sentry, aims a rocket at a target. In Portal 2, the rocket spawns with a speed of 0 and sometimes gets stuck inside the model, so this will need to be worked around."
	[
	spawnflags(flags)  =
		[
		1: "[1] Start Retracted" : 0
		]

	rocketspeed(float) : "Rocket Speed" : 450 : "Speed the rocket will travel at."
	rocketlifetime(float) : "Rocket Lifetime" : 20 : "The rocket will automatically detonate after this number of seconds."
	tripwiremode(boolean) : "Tripwire Mode" : 0 : "Makes the turret aim in a specific direction instead of following the target. When the beam is crossed, a rocket instantly fires."
	tripwireaimtarget(target_destination) : "Tripwire Aim Target" : : "In tripwire mode, the entity to aim at."
	model(studio) : "Model" : "models/props_bts/rocket_sentry.mdl" : "Model to use in-game"
	_sphere_radius(integer) readonly : "<Maximum Range>" : 8192 : "How far the turret will be able to see targets. Always 8192, but this keyvalue is needed to display the preview."

	// Inputs
	input Toggle(void) : "Toggles between activated and deactivated states."
	input Enable(void) : "Activate Rocket Turret, and allow it to begin scanning."
	input Disable(void) : "Deactivate and retract the Rocket Turret."
	input SetTarget(target_destination) : "Sets the target for this turret to attack."
	input Destroy(void) : "Sets this turret to it's destroyed state."
	input ForceFire(void) : "Makes the turret immediately fire a rocket where it is pointing."

	// Outputs
	output OnFoundTarget(void) : "Fired when the rocket turret finds an unobstructed target."
	output OnLostTarget(void) : "Fired when turret's target is blocked."
	output OnDeath(void) : "Fired after this turret finishes it's destroy think and begins it's death think."
	]

@PointClass base(BaseNPC, SetSkin) 
	sphere(fademindist)
	sphere(fademaxdist)
	color(0 200 200)
	studioprop()
= npc_security_camera: "Aperture Science Security Camera. Follows either the player or their pings (Portal 2). When a portal is opened behind it it will fall off the wall. If gestured to in Coop the player's camera will switch to looking out of the camera lens, with a viewfinder effect."
	[
	spawnflags(flags)  =
		[
		32: "[32] Start Active" : 1
		]

	lookatplayerpings(choices) : "Target" : 0 : "Target to follow: the player, or their pings (co-op mode only)" =
		[
		0: "Players"
		1: "Pings"
		]

	teamtolookat(choices) : "Ping Type To Follow" : 1 : "Which player's pings to look at." =
		[
		1: "Both"
		2: "P-Body"
		3: "ATLAS"
		]

	teamplayertolookat(choices) : "Player To Follow" : 0 : "Which player the camera should follow." =
		[
		0: "Both"
		2: "P-Body"
		3: "ATLAS"
		]

	model(studio) : "Camera Model" : "models/props/security_camera.mdl" : "Model to be used in game"

	// Inputs
	input Enable(void) : "Start following players."
	input Disable(void) : "Stop following players, freezing in place."
	input Toggle(void) : "Toggle following players."
	input Ragdoll(void) : "Knock the camera off the wall."
	input LookAtBlue(void) : "Make the camera only follow ATLAS."
	input LookAtOrange(void) : "Make the camera only follow P-Body."
	input LookAllTeams(void) : "Make the camera follow all players."

	// Outputs
	output OnDeploy(void) : "Camera is becoming active and dangerous."
	output OnRetire(void) : "Camera is becoming inactive and harmless."
	output OnTaunted(void) : "A player STARTED taunting the camera."
	output OnTauntedBlue(void) : "ATLAS STARTED taunting the camera."
	output OnTauntedOrange(void) : "P-Body STARTED taunting the camera."
	output OnTauntedFinished(void) : "A player FINISHED taunting the camera."
	output OnTauntedBlueFinished(void) : "ATLAS FINISHED taunting the camera."
	output OnTauntedOrangeFinished(void) : "P-Body FINISHED taunting the camera."
	]

@PointClass base(BaseNPC, SetSkin) 
	sphere(fademindist)
	sphere(fademaxdist)
	color(0 200 200)
	studioprop()
= npc_wheatley_boss: "Wheatley NPC stub"
	[
	model(studio) : "Model" : "models/npcs/glados/glados_wheatley_boss.mdl"
	]

@PointClass base(prop_dynamic) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
	sphere(exploderadius)
= prop_dynamic_glow: "A prop that can be placed in hierarchy and can play animations. It can also be configured to break when it takes enough damage.\nWorks exactly like a prop_dynamic, but it can optionally have a custom glow around it."
	[
	glowdist(integer) : "Glow Distance" : 1024
	glowenabled(boolean) : "Does the prop glow by default?" : 1
	glowcolor(color255) : "Glow Color (R G B)" : "255 255 255" : "The color of the glow (if enabled)."
	glowstyle(choices) : "Glow Style" : 0 : "What style of glow should be used." =
		[
		0: "Default (through walls)"
		1: "Shimmer (doesn't glow through walls)"
		2: "Outline (doesn't glow through walls)"
		3: "Outline Pulse (doesn't glow through walls)"
		]


	// Inputs
	input SetGlowEnabled(void) : "Starts the glow."
	input SetGlowDisabled(void) : "Stops the glow."
	input SetGlowColor(color255) : "Change the glow's color. Format: <Red 0-255> <Green 0-255> <Blue 0-255>"
	input GlowColorRedValue(float) : "Sets the glow red color channel's value (0 - 255)."
	input GlowColorGreenValue(float) : "Sets the glow green color channel's value (0 - 255)."
	input GlowColorBlueValue(float) : "Sets the glow blue color channel's value (0 - 255)."
	]

@PointClass base(prop_physics) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_physics_multiplayer: "This class is the same as prop_physics, except the runtime collisions use a more bouncy method that avoids the prediction errors normal physics objects get."
	[
	physicsmode(choices) : "Physics Mode" : 0 =
		[
		0: "Auto Detect"
		1: "Solid, Server-side"
		2: "Non-Solid, Server-side"
		3: "Non-Solid, Client-side"
		]

	]

@PointClass base(prop_physics) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_physics_override: "A variant of prop_physics which will permit using models that do not have physics data compiled into them, like static or dynamic models. Health and physics data can be overridden on this version, to substitute for the missing info."
	[
	health(integer) : "Health" : 0 : "Number of points of damage to take before breaking.  0 means don't break."
	]

@PointClass base(prop_physics) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_physics_paintable: "A version of prop_physics that can be painted by Gel. Does not appear to show up on the model."
	[
	paintpower(choices) : "Paint Power" : 4 : "The starting gel type for the prop." =
		[
		0: "Repulsion Gel"
		1: "Adhesion Gel"
		2: "Propulsion Gel"
		3: "Conversion Gel"
		4: "None"
		]

	]

@PointClass base(prop_physics) 
	sphere(fademindist)
	sphere(fademaxdist)
	studioprop()
= prop_physics_respawnable: "This class is the same as prop_physics, except it respawns after it breaks"
	[
	respawntime(float) : "Respawn Time" : 60 : "Ammount in seconds this prop will respawn after it breaks."
	]

@SolidClass base(trigger_multiple) 
	line(255 255 255, targetname, childfiltername)
= trigger_hierarchy: "A trigger volume that can will check if any of trigger's children pass a secondary filter."
	[
	childfiltername(filterclass) : "Child Filter Name" : : "Filter to use to see if activator's children trigger me. See filter_activator_name for more explanation."
	]

@SolidClass base(trigger_userinput) 
	line(255 255 255, targetname, filtername)
= trigger_momentum_promptinput: "Trigger that prompts the player to press a button if inside trigger. Has support for up to 3 keys."
	[
	negate(boolean) : "Negate" : 0 : "If true, prompts will fire when keys are held rather than when they aren't."
	message(string) : "Prompt Message" : : "Message to display to the player for prompts."
	playerspeed(float) : "Player Speed" : "0.1" : "On prompting, the player's speed will be changed by this factor (use <1 for slowdowns, >1 for speedups)."
	zoomrate(float) : "Player Zoom Rate" : "0.2" : "Amount of time (in seconds) to move between current FOV and zoomfov."
	zoomfov(integer) : "Player Zoom FOV" : 0 : "FOV to zoom to on prompting. Use 0 for no zoom."
	]

@SolidClass base(TeleTrigger) 
	line(255 255 255, targetname, filtername)
	line(255 255 0, targetname, target)
	line(0 255 0, target, landmark)
= trigger_teleport: "A trigger volume that teleports entities that touch it. Entities are teleported to the Remote Destination, and have their angles set to that of the Remote Destination's. If a Local Destination Landmark is specified, teleported entities are offset from the target by their initial offset from the landmark, and their angles are left alone."
	[
	]

@PointClass base(TalkNPC) 
	sphere(fademindist)
	sphere(fademaxdist)
	color(0 200 200)
	studioprop()
= npc_personality_core: "Aperture Science Personality Construct. Animated balls with handles."
	[
	modelskin(choices) : "Model Skin" : 0 : "If using the 'alt' skin, this sets the eye color -- If not using the alt skin, (0 = broken) (1=normal)" =
		[
		0: "Skin 0"
		1: "Skin 1"
		2: "Skin 2"
		3: "Skin 3"
		]

	altmodel(choices) : "Model Variant" : 0 : "Model variant to use" =
		[
		0: "Proto"
		1: "Normal"
		]

	model(choices) : "[H] Model" : "models/npcs/personality_sphere/personality_sphere.mdl" : "Choose the model to show in hammer. Set to the same as Use Alternate Skins." =
		[
		"models/npcs/personality_sphere/personality_sphere.mdl": "Proto"
		"models/npcs/personality_sphere/personality_sphere_skins.mdl": "Normal"
		]

	skin(choices) : "[H] Skin" : 0 : "If using the 'alt' skin, this sets the eye color (in hammer) -- If not using the alt skin, (0 = broken) (1=normal)" =
		[
		0: "Skin 0"
		1: "Skin 1"
		2: "Skin 2"
		3: "Skin 3"
		]

	flashlightcolor(choices) : "Flashlight Color" : "255 255 255 500" : "Color of the flashlight" =
		[
		"255 255 255 500": "White"
		"240 150 150 500": "Red"
		"150 150 220 500": "Blue"
		]

	flashlightfov(float) : "Flashlight FOV" : 90 : "Field of view of the flashlight"
	flashlightfarz(float) : "Flashlight FarZ" : 750 : "FarZ (Distance) of the flashlight"
	flashlightbrightness(float) : "Flashlight Brightness" : 1 : "Brightness of the flashlight"

	// Inputs
	input EnableMotion(void) : "Enable physics motion/collision response."
	input DisableMotion(void) : "Disable physics motion/collision response."
	input EnableFlashlight(void) : "Enable the eye flashlight."
	input DisableFlashlight(void) : "Disable the eye flashlight."
	input ForcePickup(void) : "Force the player to pickup the sphere immediately."
	input EnablePickup(void) : "Allow player pickup."
	input DisablePickup(void) : "Disable player pickup."
	input PlayAttach(void) : "Play the attachment animation, used for syncing with the socket's animation."
	input PlayDetach(void) : "Play the detachment animation, used for syncing with the socket's animation."
	input PlayLock(void) : "Play the locking animation, used for syncing with the socket's animation."
	input SetIdleSequence(string) : "Set a sequence to use as an idle sequence."
	input ClearIdleSequence(void) : "Return to the default idle animation."
	input Explode(void) : "Explode the sphere, triggering an explosion effect and some gibs."
	input SetFlashlightFOV(float) : "Changes the field of view of the flashlight."
	input SetFlashlightBrightness(float) : "Changes the brightness of the flashlight."

	// Outputs
	output OnPlayerPickup(void) : "Fired whenever the player picks up the core."
	output OnPlayerDrop(void) : "Fired whenever the player drops the core."
	]