/***********************************************************************

 func

***********************************************************************/

entityDef func_group {
	"editor_color"			"0 0 0"
	"editor_mins"			"?"
	"editor_maxs"			"?"

	"editor_usage"			"Used to group brushes together just for editor convenience.  They are turned into normal brushes by the utilities."
}

entityDef func_mover {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"?"
	"editor_maxs"			"?"

	"editor_usage"			"Movers are objects meant to be controlled through scripts.\n" \
							"\n" \
							"'accelsound'	sound to play when acceleration starts\n" \
							"'movesound'	sound to play when movement starts\n" \
							"'decelsound'	sound to play when deceleration starts"

	"spawnclass"			"idMover"
}

entityDef func_camera_anim {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"-16 -16 0"
	"editor_maxs"			"16 16 32"

	"editor_usage"			"Camera controlled by animation.\n" \
							"\n" \
							"'joint'	joint to attach camera\n" \
							"'model'	model to use"

	"spawnclass"			"idCameraAnim"

	"fov"					"90"
}

entityDef func_camera_spline {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"-16 -16 -16"
	"editor_maxs"			"16 16 16"

	"editor_usage"			"Camera controlled by spline.\n" \
							"\n" \
							"'pathfile'		file to load spline path from"

	"spawnclass"			"idCameraView"
}

entityDef func_mover_amodel {
	"editor_color"			"0 0 0"
	"editor_mins"			"?"
	"editor_maxs"			"?"

	"editor_usage"			"Movers are objects meant to be controlled through scripts.\n" \
							"\n" \
							"'accelsound'	sound to play when acceleration starts\n" \
							"'movesound'	sound to play when movement starts\n" \
							"'decelsound'	sound to play when deceleration starts"

	"spawnclass"			"idMover"
}

entityDef func_rotating {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"?"
	"editor_maxs"			"?"

	"editor_usage"			"Generic rotating entity.  It will rotate around the Z axis by default.  Targeting entity will cause it to start or stop rotating."

	"editor_var start_on"	"set to 1 to rotate when spawned."
	"editor_var x_axis"		"set to 1 to rotate around x-axis."
	"editor_var y_axis"		"set to 1 to rotate around y-axis."
	"editor_var speed"		"determines how fast it moves."
	"editor_var dmg"		"damage to inflict when blocked."

	"spawnclass"			"idRotater"
	"x_axis"				"0"
	"y_axis"				"0"
	"speed"					"100"
	"dmg"					"2"
	"start_on"				"1"
}

entityDef func_bobbing {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"?"
	"editor_maxs"			"?"

	"editor_usage"			"Generic bobbing entity.  It will bob on the Z axis by default.\n" \
							"\n" \
							"'x_axis'		set to 1 to rotate around x-axis\n" \
							"'y_axis'		set to 1 to rotate around y-axis\n" \
							"'height'		amplitude of bob (default 32)\n" \
							"'speed'		seconds to complete a bob cycle (default 4)\n" \
							"'phase'		the 0.0 to 1.0 offset in the cycle to start at (default 0)\n" \
							"'dmg'			damage to inflict when blocked (default 2)\n" \
							"'accelsound'	sound to play when acceleration starts\n" \
							"'movesound'	sound to play when movement starts\n" \
							"'decelsound'	sound to play when deceleration starts"

	"spawnclass"			"idBobber"

	"x_axis"				"0"
	"y_axis"				"0"
	"height"				"32"
	"speed"					"4"
	"phase"					"0"
	"dmg"					"2"
}

entityDef func_pendulum {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"?"
	"editor_maxs"			"?"

	"editor_usage"			"Pendulums always swing north / south on unrotated models.  Add an angles field to the model to allow rotation in other directions.  " \
							"Pendulum frequency is a physical constant based on the length of the beam and gravity.\n" \
							"\n" \
							"'speed'		the number of degrees each way the pendulum swings (default 30)\n" \
							"'phase'		the 0.0 to 1.0 offset in the cycle to start at (default 0)\n" \
							"'dmg'			damage to inflict when blocked\n" \
							"'accelsound'	sound to play when acceleration starts\n" \
							"'movesound'	sound to play when movement starts\n" \
							"'decelsound'	sound to play when deceleration starts"

	"spawnclass"			"idPendulum"

	"speed"					"30"
	"phase"					"0"
	"dmg"					"2"
}

entityDef func_plat {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"?"
	"editor_maxs"			"?"

	"editor_usage"			"'no_touch'	the plat should not be triggered by the player touching it, only by another trigger.  (default 0)\n" \
							"'lip'			protrusion above rest position (default 8)\n" \
							"'height'		total height of movement, defaults to model height\n" \
							"'speed'		speed to move up and down at (default 200)\n" \
							"'dmg'			damage to inflict when blocked (default 2)\n" \
							"'accelsound'	sound to play when acceleration starts\n" \
							"'movesound'	sound to play when movement starts\n" \
							"'decelsound'	sound to play when deceleration starts"

	"spawnclass"			"idPlat"

	"no_touch"				"0"
	"lip"					"8"
	"speed"					"200"
	"dmg"					"2"
}

entityDef func_activator {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"-8 -8 -8"
	"editor_maxs"			"8 8 8"

	"editor_usage"			"Non-displayed entity used to activate triggers when it touches them.  Bind to a mover to " \
							"have the mover activate a triggers as it moves.  When target by triggers, activating the " \
							"trigger will toggle the activator on and off.  Activator will disable itself when it activates a trigger.\n" \
							"\n" \
							"'start_off'	set to 1 to have it spawn disabled.  Activator will disable itself when it activates a trigger. (default 0)\n" \
							"'stay_on'		to prevent activator from disabling itself. (default 0)"

	"spawnclass"			"idActivator"

	"start_off"				"0"
	"stay_on"				"0"
}

entityDef func_door {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"?"
	"editor_maxs"			"?"

	"editor_usage"			"'start_open'	the door moves to its destination when spawned, and operate in\n" \
							"				reverse.  It is used to temporarily or permanently close off an\n" \
							"				area when triggered (not useful for touch or takedamage doors).\n" \
							"'no_touch'		the door should not be triggered by the player touching it, only by another trigger\n" \
							"'locked'		used in conjunction with no_touch,the door must be triggered by a trigger, after which it works normally\n" \
							"				if locked = 1 then the door opens when unlocked, if locked = 2 then the door just becomes unlocked\n" \
							"'buddy'		will toggle shaderparm 7 of the entity given as a buddy, this allows shaders to be remapped for lock status etc.\n" \
							"'crusher'		the door does not reverse when blocked\n" \
							"'angle'		determines the opening direction (default 0)\n" \
							"'movedir'		determines the opening direction.  if set, 'angle' determines orientation.\n" \
							"'speed'		movement speed (default 100)\n" \
							"'time'			movement time in seconds.  overrides speed.  used for doors that move different distances, but still need to be synced.  (default 1)\n" \
							"'wait'			wait before returning (-1 = never return) (default 3)\n" \
							"'lip'			lip remaining at end of move (default 8)\n" \
							"'dmg'			damage to inflict when blocked (default 2)\n" \
							"'health'		if set, the door must be shot open (default 0)\n" \
							"'triggersize'	sets the amount the trigger extends from the door (default 60)\n" \
							"'accelsound'	sound to play when acceleration starts\n" \
							"'movesound'	sound to play when movement starts\n" \
							"'decelsound'	sound to play when deceleration starts"

	"spawnclass"			"idDoor"

	"start_open"			"0"
	"no_touch"				"0"
	"crusher"				"0"
	"angle"					"0"
	"speed"					"100"
	"wait"					"3"
	"lip"					"8"
	"dmg"					"2"
	"health"				"0"
	"triggersize"			"60"
	"snd_open"				"sound/nin/LEVELS/E3_2/F_door1/F_door1_in_02.wav"
	"snd_close"				"sound/nin/LEVELS/E3_2/F_door1/F_door1_out_02.wav"
	"snd_opened"			""						// Looping sound for it's opened state
}

entityDef func_button {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"?"
	"editor_maxs"			"?"

	"editor_usage"			"When a button is touched, it moves some distance in the direction of it's angle, " \
							"triggers all of it's targets, waits some time, then returns to it's original position " \
							"where it can be triggered again.\n" \
							"\n" \
							"'angle'		determines the opening direction (default 0)\n" \
							"'target'		all entities with a matching name will be used\n" \
							"'speed'		move speed (default 40)\n" \
							"'wait'			how many seconds to wait (-1 = never return) (default 1)\n" \
							"'lip'			lip remaining at end of move (default 4)\n" \
							"'health'		if set, the button must be killed instead of touched (default 0)\n" \
							"'accelsound'	sound to play when acceleration starts\n" \
							"'movesound'	sound to play when movement starts\n" \
							"'decelsound'	sound to play when deceleration starts"

	"spawnclass"			"idDoor"

	"angle"					"0"
	"speed"					"40"
	"wait"					"1"
	"lip"					"4"
	"health"				"0"
}

entityDef func_static {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"?"
	"editor_maxs"			"?"

	"editor_usage"			"A brush model that just sits there, doing nothing.  Can be used for conditional walls and models.  " \
							"When triggered, toggles between visible and hidden.  Entity is non-solid when hidden."

	"editor_var solid"		"whether the object should be solid or not."
	"editor_var hide"		"whether the object should be visible when spawned."

	"spawnclass"			"idStaticEntity"

	"solid"					"1"
	"hide"					"0"
}

entityDef func_damagable {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"?"
	"editor_maxs"			"?"

	"editor_usage"			"Breakable object.  Fires targets and changes shader parms and model when damaged.  " \
							"When damaged, shader parm 3 is set to the current time, and shader parm 7 is set " \
							"to either a random number from 1 to 'numstates', or to the value in 'forcestate' if " \
							"it is non-zero.\n" \
							"\n" \
							"'broken'		if set, switch to this model when the entity is broken\n" \
							"'health'		amount of damage to recieve before becoming damaged (default 5)\n" \
							"'target'		targets to trigger when damaged\n" \
							"'count'		number of times to allow to be triggered, (-1 means infinite) (default 1)\n" \
							"'cycle'		if set to 1, entity will cycle through each shader state when damaged, reseting to 0 when it exceeds numstates (default 0)\n" \
							"'numstates'	the number of different shader states.  Shader parm 7 will be set to a value between 1 and this value (default 1)\n" \
							"'forcestate'	if non-zero, the state to force the shader into when damaged (default 0)\n" \
							"'wait'			Seconds between triggerings (default 0.1)\n"

	"spawnclass"			"idDamagable"

	"health"				"5"
	"count"					"1"
	"cycle"					"0"
	"numstates"				"1"
	"forcestate"			"0"
	"wait"					"0.1"
}

entityDef func_moveable {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"?"
	"editor_maxs"			"?"

	"editor_usage"			"Moveable object. Will drop to the floor and rest untill activated.\n" \
							"The visual model set with the 'model' key can also be used for\n" \
							"collision detection. However the model may not be too complex.\n" \
							"max vertices = 32\n" \
							"max edges = 32\n" \
							"max polygons = 16\n" \
							"max edges per polygon = 16\n" \
							"The collision model must be an enclosed hull. Dangling polygons or\n" \
							"edges are not allowed. If the visual model is too complex or does\n" \
							"not meet these requirements it can be contained in a less complex\n" \
							"model for collision detection. Such a collision model is specified with the\n" \
							"'clipmodel' key.\n" \
							"\n" \
							"'density'			Volume of the object times the density is the mass. (default 0.2)\n" \
							"'friction'			Friction with contacting surfaces in the range [0-1] where 0 is no friction. (default 0.2)\n" \
							"'bouncyness'		How much the object bounces in the range [0-1] where 0 is no bounce. (default 0.6)\n" \
							"'clipmodel'		Model to be used for collision detection.\n" \
							"'clipshrink'		Shrink the visual model with an epsilon and use it as a clip model.\n" \
							"'nodrop'			Do not drop to the floor.\n" \
							"'noimpact'			Do not activate by the impact of other objects.\n" \
							"'unbindondeath'	Unbind entity when health drops down to or below zero.\n" \
							"'health'			If set the visual model changes to 'broken' when the health drops down to or below zero.\n" \
							"'broken'			Visual model to be used when the health drops down to or below zero.\n" \
							"'explode'			If set to 1 the moveable explodes and is removed when the health drops down to or below zero.\n" \
							"'init_velocity'	Initial linear velocity set when activated.\n" \
							"'init_avelocity'	Initial angular velocity set when activated.\n"

	"spawnclass"			"idMoveable"

	"snd_bounce"			"moveable_brick_bounce"
}

entityDef func_barrel {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"?"
	"editor_maxs"			"?"

	"editor_usage"			"Moveable barrel. Works just like a func_moveable. However the barrel\n" \
							"has special handling to make it appear more round.\n"

	"spawnclass"			"idBarrel"

	"density"				"0.02"
	"friction"				"0.2"
	"bouncyness"			"0.4"
}

entityDef func_cartonbox {
	"inherit"				"func_moveable"
	"density"				"0.02"
	"friction"				"0.2"
	"bouncyness"			"0.2"
}

entityDef func_smallmetalbox {
	"inherit"				"func_moveable"
	"density"				"0.1"
	"friction"				"0.2"
	"bouncyness"			"0.2"
}

entityDef func_cokecan {
	"inherit"				"func_moveable"
	"density"				"0.5"
	"friction"				"0.1"
	"bouncyness"			"0.4"
}

entityDef func_chair {
	"inherit"				"func_moveable"
	"density"				"0.005"
	"friction"				"0.1"
	"bouncyness"			"0.4"
}

entityDef func_table {
	"inherit"				"func_moveable"
	"density"				"0.005"
	"friction"				"0.1"
	"bouncyness"			"0.4"
}

entityDef func_brick {
	"inherit"				"func_moveable"
	"density"				"0.05"
	"friction"				"0.2"
	"bouncyness"			"0"
}

entityDef func_domino {
	"inherit"				"func_moveable"
	"density"				"0.005"
	"friction"				"0.6"
	"bouncyness"			"0.2"
}

entityDef func_clipmodel {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"?"
	"editor_maxs"			"?"

	"editor_usage"			"Holder for a clip model which can be used by another entity.\n"
}

entityDef func_spring {
	"editor_color"			"1 .5 .3"
	"editor_mins"			"?"
	"editor_maxs"			"?"

	"editor_usage"			"Spring connecting two entities.\n"
	
	"spawnclass"			"idSpring"
}

entityDef func_forcefield {
	"editor_color"			"1 .5 .3"
	"editor_mins"			"?"
	"editor_maxs"			"?"

	"editor_usage"			"Force field.\n" \
							"\n" \
							"'uniform'		3D force vector. If set the force field is uniform.\n" \
							"'explosion'	Magnitude of explosion force. If set the field exerts a repelling force from the entity origin.\n" \
							"'implosion'	Magnitude of implosion force. If set the field exerts a force that gravitates to the entity origin.\n" \
							"'randomTorque'	Amount of random torque added to objects inside or touching the force field.\n" \
							"'start_on'		By default the force field is off until activated. If 'start_on' is set to '1' the force field starts on.\n" \
							"'wait'			If unequal zero the force field automatically switches back to the previous state (on/off) after 'wait' seconds.\n"

	"spawnclass"			"idForceField"
}

entityDef func_explosion {
	"editor_color"			"0 .5 .3"
	"editor_mins"			"-16 -16 -16"
	"editor_maxs"			"16 16 16"

	"editor_usage"			"Explosion\n" \
							"\n" \
							"'damage [50]' 	amount of damage to cause\n"\ 
							"'radius [64]' 	radius to inflict damage\n"\
							"'debris [1]' 	if you want debris\n" \
							"'fxSound' 		set to sound if you want noise\n" 

	"spawnclass"			"idExplodable"

}

entityDef func_spawner {
	"editor_color"			".2 .5 .3"
	"editor_mins"			"-16 -16 -16"
	"editor_maxs"			"16 16 16"

	"editor_usage"			"Spawns enties to location and angle\n" \
							"\n" \
							"'angle'  direction to face\n"\ 
							"'itemClass'  class of item to spawn\n"\ 
							"'activate' will activate (aggro) the item if set to 1\n"\ 
							"'spawn_' key vals starting with spawn_ will be passed on sans 'spawn_'\n"\ 
							"'fxSound' 		set to sound if you want noise\n" \
							"Set 'fxLight' to 1 if you want a light\n"\
							"  fxShader = light shader\n"\
							"  fxTime [0.5] = light life time in seconds\n"\
							"  fxRadius [64] = light radius in game units\n"\
							"Set 'fxModel (not implemented)' model name if you want a model effect to spawn in\n"\
							"  fxModelTime [0.5] = model life time in seconds\n"

	"spawnclass"			"idSpawnableEntity"

}

entityDef func_teleporter {
	"editor_color"			"1 .5 .3"
	"editor_mins"			"-16 -16 -16"
	"editor_maxs"			"16 16 16"

	"editor_usage"			"Teleports player or enties to location and angle\n" \
							"\n" \
							"'angle'  amount of damage to cause\n"\ 
							"'fxSound' 		set to sound if you want noise\n" \
							"Set 'fxLight' to 1 if you want a light\n"\
							"  fxShader = light shader\n"\
							"  fxTime [0.5] = light life time in seconds\n"\
							"  fxRadius [64] = light radius in game units\n"\
							"Set 'fxModel (not implemented)' model name if you want a model effect to spawn in\n"\
							"  fxModelTime [0.5] = model life time in seconds\n"

	"spawnclass"			"idTeleporter"

}


entityDef func_securitycamera {
	"editor_color"			"1 .5 .3"
	"editor_mins"			"-4 -4 -4"
	"editor_maxs"			"4 4 4"
	"editor_rotatable"		"1"

	"editor_usage"			"Security camera\n\n" \
							"Orient the camera pointing at the start location\n"\
							"then it will sweep from that + sweepAngle and back\n\n"\
							"'sweepAngle' [90] the amount of sweep\n"\
							"'health' [100] health for camera\n"\
							"'fx_destroy' fx to run when camera is destroyed.\n"\
							"'fx_damage' fx to run when camera is damaged.\n"\
							"'scanFov' [90] fov of view\n"\
							"'scanDist' [200] how far the camera can see\n"\
							"'flipAxis'	set to 1 to flip the model axis of the cam\n"\
							"'modelAxis' 0, 1 or 2 based on which axis the source model was built on\n"\
							"'sightTime' [5] The time in seconds it takes to notice the player\n"\
							"'sightResume' [1.5] The time it will resume scanning after seeing the player but has not activated\n"\
							"'sweepSpeed' [5] Speed of sweep\n"\
							"'sweepWait' [0.5] Delay at edge of sweep before reversing direction\n"\
							"'wait' [20] Time it will hold after an alert status before resuming\n"\
							"Uses the following sound shaders\n"\
							"security_camera_moving - movement\n"\
							"security_camera_end - cam stops at edge of movement\n"\
							"security_camera_sight - sights player\n"\
							"security_camera_activate - goes into alert mode\n\n"\
							"See duffy/examples/securitycam.map for an example\n"

	"spawnclass"			"idSecurityCamera"

}

entityDef func_cameraview {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"-8 -8 -8"
	"editor_maxs"			"8 8 8"
	"editor_rotatable"		"1"
	"editor_showangle"		"1"

	"editor_usage"			"Simple Camera view, apply a rotation matrix or angle.\n"

	"spawnclass"			"idCameraView"
}

entityDef func_animate {
	"editor_color"			"1 .5 .3"
	"editor_mins"			"-16 -16 0"
	"editor_maxs"			"16 16 32"

	"editor_usage"			"Object that changes animation when triggered."

	"editor_var anim"		"anim to play when triggered."
	"editor_var pose"		"anim to use to pose model when first spawned.  pose_frame sets the frame.  Model does not animate until triggered."
	"editor_var pose_frame"	"which frame to use when spawning with a static pose."
	"editor_var start_anim"	"anim to play when first spawned.  anim will loop until triggered."
	"editor_var blend_in"	"how long to transition from the start_anim to the triggered anim."
	"editor_var wait"		"how long to wait before auto activating.  -1 means only activate when triggered."
	"editor_var cycle"		"how many times to play the animation after being triggered (use -1 for infinite)."
	"editor_var remove"		"set to 1 to remove object when animation finishes."
	"editor_var target"		"all entities with a matching name will be used after anim plays."
	"editor_var hide"		"if 1, object remains hidden until triggered.  doesn't work when 'start_anim' is set."
	"editor_var sound_bone"	"Bone to play sounds from."

	"spawnclass"			"idAnimatedEntity"
	"blend_in"				"0"
	"cycle"					"1"
	"wait"					"-1"
	"pose_frame"			"1"
	"sound_bone"			"origin"
}

entityDef func_iktail {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"-8 -8 -8"
	"editor_maxs"			"8 8 8"

	"spawnclass"			"idIKTail"
	"model"					"ase/f_barrello.ase"
}

entityDef func_remove {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"-8 -8 -8"
	"editor_maxs"			"8 8 8"

	"editor_usage"			"Removes targeted entities from the game when triggered."

	"spawnclass"			"idTarget_Remove"
}

entityDef func_damage {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"-8 -8 -8"
	"editor_maxs"			"8 8 8"

	"editor_usage"			"Damages targeted entities when triggered.\n" \
							"'damage'  damage def to be used."

	"spawnclass"			"idTarget_Damage"
}

entityDef func_waitforbutton {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"-8 -8 -8"
	"editor_maxs"			"8 8 8"

	"editor_usage"			"When activated, waits for the player to press the fire button and then activates its targets.  Targeting entity toggles it on and off."

	"spawnclass"			"idTarget_WaitForButton"
}

entityDef func_fx {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"-8 -8 -8"
	"editor_maxs"			"8 8 8"

	"editor_usage"			"Spawns a special effect when triggered."
	"editor_var fx"			"the .fx file to spawn when triggered"

	"spawnclass"			"idEntityFx"
}

entityDef func_itemremove {
	"editor_color"			"0 .5 .8"
	"editor_mins"			"-4 -4 -4"
	"editor_maxs"			"4 4 4"

	"editor_usage"			"Removes an item from the players inventory"
	"editor_var item"		"name of the inventory item to remove.. i.e. objective, or key_red"

	"spawnclass"			"idItemRemover"
}	