// Purpose: Easy entity definitions for Propper. v0.32
// See http://developer.valvesoftware.com/wiki/Propper
@include "base.fgd"

@PointClass base(Targetname, Origin, Angles) studio("models/editor/axis_helper.mdl") = propper_attachment : "An attachment is an arbitrary point you can define in a model. They have several uses."
[]

@PointClass base(Targetname, Angles) = propper_physgun_interactions : "Defines non-standard interactions with the Gravity Gun. Used for physics props only."
[
	preferred_carryangles(choices) : "Use angles when carrying" : "0" : "The player will always carry the prop at this entity's angles if possible" =
	[
		0 : "No"
		1 : "Yes"
	]
	stick(choices) : "Stick to walls" : "0" : "" =
	[
		0 : "No"
		1 : "Yes"
	]
	bloodsplat(choices) : "Create blood splatter" : "0" : "" =
	[
		0 : "No"
		1 : "Yes"
	]
	break(choices) : "Always break when launched" : "0" : "" =
	[
		0 : "No"
		1 : "Yes"
	]
	paintsplat(choices) : "Create paint splatter" : "0" : "" =
	[
		0 : "No"
		1 : "Yes"
	]
	impale(choices) : "Impale enemies" : "0" : "" =
	[
		0 : "No"
		1 : "Yes"
	]
	onlaunch(choices) : "Spin on launch?" : "default" : "" =
	[
		"default" : "Random (default behavior)"
		"spin_none" : "no spin"
		"spin_zaxis" : "Spin on z-axis (horizontal)"
	]
	explode_fire(choices) : "Ignite nearby enemies" : "0" : "When this breaks, NPCs such as combine soldiers and zombies will light on fire." =
	[
		0 : "No"
		1 : "Yes"
	]
]
@PointClass base(Targetname)  studio("models/editor/cone_helper.mdl") = propper_particles : "Attach a particle emitter to this prop. This is for 2007 or 2009 engines only. Does not work with prop_static."
[
	name(string) : "Particle system" : "" : "The name of a particle system. NOT the name of a .pcf file!"
	attachment_type(choices) : "Attachment Type" : "follow_origin" : "'Spawn at' choices will start the particle system at the prop's position, but if the prop moves, the particle emitter stays in place. Good for short-term effects like explosions" =
	[
		"start_at_origin" : "Spawn at prop origin"
		"start_at_attachment" : "Spawn at prop attachment"
		"follow_origin" : "Follow prop's origin"
		"follow_attachment" : "Follow prop at attachment"
	]
	attachment_point(string) : "Attachment point" : "" : "The attachment point at which the particle system should spawn, if applicable. Use a propper_attachment for this."
]
@PointClass base(Targetname) = propper_cables : "Attach a visual cable to this prop. Does not work with prop_static."
[
	StartAttachment(string) : "Cable Start Point" : "" : "The name of a propper_attachment"
	EndAttachment(string) : "Cable End Point" : "" : "The name of a propper_attachment"
	Width(float) : "Width" : 3 : "The width of the cable in units "
	Material(material) : "Cable material" : "" : "The VMT (material) to use. Cable materials are located in 'materials/cables'."
	NumSegments(integer) : "Cable segments" : 4 : "The number of segments in the cable. More segments make the cable more 'smooth'. Should be increased if the cable bends a lot."
	Length(integer) : "Cable Length" : 4 : "The length of cable between the two attachment points. If the length is shorter than the distance between the two points then the cable will remain permanently straight.  Note:	Finding the optimal length between two points can be a frustrating task. Cables can go from super tight to extremely slack within a difference of just 10 units."
]
@PointClass base(Targetname) studioprop() sphere(fademindist) sphere(fademaxdist) = propper_gibs : "When a prop breaks, You can cause one or more custom-made broken pieces to spawn in its place."
[
	model(studio) : "Gib model" : ""
	ragdoll(choices) : "Model Type" : "model" : "If the chosen gib model supports ragdoll physics, Use this setting to enable it." =
	[
		"model" : "Physics"
		"ragdoll" : "Ragdoll"
	]
	debris(choices) : "debris" : "1" : "Debris won't collide with the player or other dynamic objects. Use if the gib is small" =
	[
		0 : "No"
		1 : "Yes"
	]
	burst(integer) : "Burst Strength" : 0 : "The gib will receive a force out from the center of the prop if this is set."
	fadetime(integer) : "Fade away time" : 0 : "The gib will begin to disappear after this many seconds."
	fademindist(integer) : "Min Fade Distance (units)" : 0 : "Gib will begin to disappear at this distance from the player"
	fademaxdist(integer) : "Max Fade Distance (units)" : 0 : "Gib will not render at this distance from the player"
]
@PointClass base(Targetname) size(-16 -16 -16, 16 16 16) color(0 0 255) = propper_skins : "Propper can create alternate skins by replacing a texture that is on your prop. If you have multiple textures on your model that you want to change, you can use this entity more than once."
[
	//Model(target_destination) : "Prop to be Skinned" : "" : "Point me to a func_propper entity in the map."
	mat0(material) : "Material to replace" : "" : "Pick a texture that's present in the original model. This will be skin 0."
	mat1(material) : "Skin 1" : "" : "This texture will replace the original when you pick skin 1."
	mat2(material) : "Skin 2" : "" : "This texture will replace the original when you pick skin 2."
	mat3(material) : "Skin 3" : "" : "This texture will replace the original when you pick skin 3."
	mat4(material) : "Skin 4" : "" : "This texture will replace the original when you pick skin 4."
	mat5(material) : "Skin 5" : "" : "This texture will replace the original when you pick skin 5."
	mat6(material) : "Skin 6" : "" : "This texture will replace the original when you pick skin 6."
	mat7(material) : "Skin 7" : "" : "This texture will replace the original when you pick skin 7."
	mat8(material) : "Skin 8" : "" : "This texture will replace the original when you pick skin 8."
	mat9(material) : "Skin 9" : "" : "This texture will replace the original when you pick skin 9."
	mat10(material) : "Skin 10" : "" : "This texture will replace the original when you pick skin 10."
	mat11(material) : "Skin 11" : "" : "This texture will replace the original when you pick skin 11."
	mat12(material) : "Skin 12" : "" : "This texture will replace the original when you pick skin 12."
	mat13(material) : "Skin 13" : "" : "This texture will replace the original when you pick skin 13."
	mat14(material) : "Skin 14" : "" : "This texture will replace the original when you pick skin 14."
]
@PointClass base(Targetname, Origin) size(-16 -16 -16, 16 16 16) color(255 150 0) = info_prop_options : "Propper Configuration. This entity is only around for legacy support. You should use propper_options instead."
[
	modelname(string) : "Model Name" : "props/generated_prop"  : "The directory and name of the finished model. Relative to <yourmod>/models"
	materialpath(string) : "Material path" : "models/props/generated_prop" : "Where the model's textures will be. Relative to <yourmod>/materials."
	scale(float) : "Scale" : "1.0" : "Scale the model up or down by this factor."
	surfaceprop(choices) : "Surface property" : "no_decal" : "The physical properties of the model--affects impact sounds and weight for physics props." =
	[
		"no_decal" : "no_decal" 
		"boulder" : "boulder"
		"brick" : "brick" 
		"concrete" : "concrete" 
		"concrete_block" : "concrete_block"
		"gravel" : "gravel" 
		"rock" : "rock" 
		"metal" : "metal" 
		"solidmetal" : "solidmetal"
		"metalgrate" : "metalgrate"
		"metalvent" : "metalvent"
		"wood" : "wood" 
		"dirt" : "dirt" 
		"grass" : "grass"
		"gravel" : "gravel" 
		"mud" : "mud" 
		"sand" : "sand"
		"slipperyslime" : "slipperyslime" 
		"ice" : "ice" 
		"snow" : "snow"
		"alienflesh" : "alienflesh" 
		"bloodyflesh" : "bloodyflesh"
		"flesh" : "flesh"
		"foliage" : "foliage" 
		"asphalt" : "asphalt"
		"glass" : "glass"
		"tile" : "tile" 
		"paper" : "paper" 
		"cardboard" : "cardboard" 
		"plaster" : "plaster"
		"plastic" : "plastic" 
		"rubber" : "rubber" 
		"carpet" : "carpet"
		"ceiling_tile" : "ceiling_tile"
		"computer" : "computer"
		"pottery" : "pottery"
	]
	concave(choices) : "Concave collisions" : "1" : "Used to make a concave collision model. If you choose no, the model will be 'shrink-wrapped'." =
	[
		0 : "No"
		1 : "Yes"
	]
	collisions(choices) : "Produce collisions?" : "1" : "Picking Yes allows the prop to be solid." =
	[
		0 : "No"
		1 : "Yes"
	]
	smoothing(choices) : "Smoothing mode" : "1" : "Determines how vertex normals are computed for lighting" =
	[
		0 : "completely faceted"
		1 : "auto-smooth"
		2 : "Use Hammer's smoothing groups only"
	]
	sourcefolder(string) : "Source folder" : "c:/propsource" : "Where you want to keep your .qc and .smd files. The final directory will be <sourcefolder>/<modelname>."
	smoothangle(integer) : "Smoothing threshold" : 45 : "If auto-smooth is enabled, Edges flatter than this angle will appear smooth. Pick from 0 to 180."
	snaptogrid(choices) : "Snap to Hammer grid" : "0" : "Causes every vertex to be snapped to the nearest grid point." =
	[
		0 : "No"
		1 : "Yes"
	]
	weldvertices(float) : "Welding threshold" : ".01" : "Vertices will be snapped together if within this tolerance. A value of 0 is not recommended because there may be visible gaps in the mesh. Larger numbers will merge vertices together, and may be useful for optimizing your model."
	autocenter(choices) : "Model Origin" : "0" : "The model's origin point defines how it is lit and is how the prop is positioned in a map. Auto-center puts the model's origin at the center of its bounding box and is recommended for physics props. For static props, put the origin somewhere that lets you align the prop easily." =
	[
		0 : "Use Map center"
		1 : "Auto-center"
		2 : "Use this entity's origin"
	]
	dontcompile(choices) : "Automatically compile" : "0" : "By default, propper will run studiomdl to compile the prop. You can disable this." =
	[
		1 : "No"
		0 : "Yes"
	]
	dontfixmaterials(choices) : "Fix up materials" : "0" : "By default, propper will make a copy of any material used in the prop and make it valid for use on a model. You can disable this." =
	[
		1 : "No"
		0 : "Yes"
	]
	mat_nonormal(choices) : "Disable normal mapping" : "0" : "This option removes all bump map info from the converted materials. This is useful if you wish to use -StaticPropLighting to light your props" =
	[
		0 : "No"
		1 : "Yes"
	]
	disp_nowarp(choices) : "Don't warp displacement textures" : "0" : "In Hammer, when you move a displacement point, the texture moves with it. If you pick yes, the texture will not move." =
	[
		0 : "No"
		1 : "Yes"
	]
]
@PointClass base(Targetname, Origin) size(-16 -16 -16, 16 16 16) color(255 150 0) = propper_options : "Propper Configuration. You must have one of these in your map in order to make a model!"
[
	modelname(string) : "Model Name" : "props/generated_prop"  : "The directory and name of the finished model. Relative to <yourmod>/models"
	materialpath(string) : "Material path" : "models/props/generated_prop" : "Where the model's textures will be. Relative to <yourmod>/materials."
	scale(float) : "Scale" : "1.0" : "Scale the model up or down by this factor."
	surfaceprop(choices) : "Surface property" : "no_decal" : "The physical properties of the model--affects impact sounds and weight for physics props." =
	[
		"no_decal" : "no_decal" 
		"boulder" : "boulder"
		"brick" : "brick" 
		"concrete" : "concrete" 
		"concrete_block" : "concrete_block"
		"gravel" : "gravel" 
		"rock" : "rock" 
		"metal" : "metal" 
		"solidmetal" : "solidmetal"
		"metalgrate" : "metalgrate"
		"metalvent" : "metalvent"
		"wood" : "wood" 
		"dirt" : "dirt" 
		"grass" : "grass"
		"gravel" : "gravel" 
		"mud" : "mud" 
		"sand" : "sand"
		"slipperyslime" : "slipperyslime" 
		"ice" : "ice" 
		"snow" : "snow"
		"alienflesh" : "alienflesh" 
		"bloodyflesh" : "bloodyflesh"
		"flesh" : "flesh"
		"foliage" : "foliage" 
		"asphalt" : "asphalt"
		"glass" : "glass"
		"tile" : "tile" 
		"paper" : "paper" 
		"cardboard" : "cardboard" 
		"plaster" : "plaster"
		"plastic" : "plastic" 
		"rubber" : "rubber" 
		"carpet" : "carpet"
		"ceiling_tile" : "ceiling_tile"
		"computer" : "computer"
		"pottery" : "pottery"
	]
	concave(choices) : "Concave collisions" : "1" : "Used to make a concave collision model. If you choose no, the model will be 'shrink-wrapped'." =
	[
		0 : "No"
		1 : "Yes"
	]
	collisions(choices) : "Produce collisions?" : "1" : "Picking Yes allows the prop to be solid." =
	[
		0 : "No"
		1 : "Yes"
	]
	smoothing(choices) : "Smoothing mode" : "1" : "Determines how vertex normals are computed for lighting" =
	[
		0 : "completely faceted"
		1 : "auto-smooth"
		2 : "Use Hammer's smoothing groups only"
	]
	sourcefolder(string) : "Source folder" : "c:/propsource" : "Where you want to keep your .qc and .smd files. The final directory will be <sourcefolder>/<modelname>."
	smoothangle(integer) : "Smoothing threshold" : 45 : "If auto-smooth is enabled, Edges flatter than this angle will appear smooth. Pick from 0 to 180."
	snaptogrid(choices) : "Snap to Hammer grid" : "0" : "Causes every vertex to be snapped to the nearest grid point." =
	[
		0 : "No"
		1 : "Yes"
	]
	weldvertices(float) : "Welding threshold" : ".01" : "Vertices will be snapped together if within this tolerance. A value of 0 is not recommended because there may be visible gaps in the mesh. Larger numbers will merge vertices together, and may be useful for optimizing your model."
	autocenter(choices) : "Model Origin" : "0" : "The model's origin point defines how it is lit and is how the prop is positioned in a map. Auto-center puts the model's origin at the center of its bounding box and is recommended for physics props. For static props, put the origin somewhere that lets you align the prop easily." =
	[
		0 : "Use Map center"
		1 : "Auto-center"
		2 : "Use this entity's origin"
	]
	dontcompile(choices) : "Automatically compile" : "0" : "By default, propper will run studiomdl to compile the prop. You can disable this." =
	[
		1 : "No"
		0 : "Yes"
	]
	dontfixmaterials(choices) : "Fix up materials" : "0" : "By default, propper will make a copy of any material used in the prop and make it valid for use on a model. You can disable this." =
	[
		1 : "No"
		0 : "Yes"
	]
	mat_nonormal(choices) : "Disable normal mapping" : "0" : "This option removes all bump map info from the converted materials. This is useful if you wish to use -StaticPropLighting to light your props" =
	[
		0 : "No"
		1 : "Yes"
	]
	disp_nowarp(choices) : "Don't warp displacement textures" : "0" : "In Hammer, when you move a displacement point, the texture moves with it. If you pick yes, the texture will not move." =
	[
		0 : "No"
		1 : "Yes"
	]
]
@PointClass base(Targetname, Origin) iconsprite("editor/env_physexplosion.vmt") = info_prop_physics : "Propper configuration for physics props. This entity is only around for legacy support. You should use propper_physics instead."
[
	base(choices) : "Health preset" : "Stone.Medium" : "Dictates how strong the prop is vs. different weapons." =
	[
		"Cardboard.Small" : "Cardboard.Small"
		"Cardboard.Medium" : "Cardboard.Medium" 
		"Cardboard.Large" : "Cardboard.Large" 
		"Cloth.Small" : "Cloth.Small" 
		"Cloth.Medium" : "Cloth.Medium" 
		"Cloth.Large" : "Cloth.Large" 
		"Wooden.Tiny" : "Wooden.Tiny" 
		"Wooden.Small" : "Wooden.Small" 
		"Wooden.Medium" : "Wooden.Medium" 
		"Wooden.Large" : "Wooden.Large" 
		"Wooden.ExtraLarge" : "Wooden.ExtraLarge" 
		"Wooden.Huge" : "Wooden.Huge" 
		"Stone.Small" : "Stone.Small" 
		"Stone.Medium" : "Stone.Medium" 
		"Stone.Large" : "Stone.Large" 
		"Stone.Huge" : "Stone.Huge" 
		"Glass.Small" : "Glass.Small" 
		"Glass.Window" : "Glass.Window" 
		"Metal.Small" : "Metal.Small" 
		"Metal.Medium" : "Metal.Medium" 
		"Plastic.Small" : "Plastic.Small" 
		"Item.Small" : "Item.Small" 
		"Plastic.Medium" : "Plastic.Medium" 
		"Item.Medium" : "Item.Medium" 
		"Plastic.Large" : "Plastic.Large" 
		"Item.Large" : "Item.Large" 
		"Pottery.Small" : "Pottery.Small" 
		"Pottery.Medium" : "Pottery.Medium" 
		"Pottery.Large" : "Pottery.Large" 
		"Pottery.Huge" : "Pottery.Huge" 
		"Flesh.Tiny" : "Flesh.Tiny" 
		"Flesh.Small" : "Flesh.Small" 
	]
	health(integer) : "Health" : -1 : "Overrides the prop's health. Set this to zero to give infinite health."
	mass(float) : "Mass" : "0.0" : "Weight of the prop in kg. Enter zero or lower to automatically calculate mass."
	flammable(choices) : "Flammable" : "0" : "Will it burn? Picking this enables the 'ignite' options." =
	[
		0 : "No"
		1 : "Yes"
	]
	ignite_at_half_health(choices) : "Ignite at half-health" : "0" : "Just like those barrels in HL2." =
	[
		0 : "No"
		1 : "Yes"
	]
	explosive_resist(choices) : "Ignite from explosions" : "0" : "Won't break right away if something explodes near it, but will ignite."=
	[
		0 : "No"
		1 : "Yes"
	]
	explosive_damage(float) : "Explode damage" : "0.0" : "Damage to do when breaking"
	explosive_radius(float) : "Explode radius" : "0.0" : "Radius of explosion"
	breakable_model(choices) : "Gibs" : "ConcreteChunks" : "Generic shards to spawn when the prop breaks" =
	[
		"WoodChunks" : "Wood" 
		"GlassChunks" : "Glass"
		"ConcreteChunks" : "Concrete"
		"MetalChunks" : "Metal"
	]
	breakable_count(integer) : "Gib count" : 5 : "How many gibs?"
	breakable_skin(integer) : "Gib skin" : 0 : "Which skin to use on the gib models, if applicable."
]
@PointClass base(Targetname, Origin) iconsprite("editor/env_physexplosion.vmt") = propper_physics : "Propper configuration for physics props. Using this entity will make your prop suitable for use with prop_physics."
[
	base(choices) : "Health preset" : "Stone.Medium" : "Dictates how strong the prop is vs. different weapons." =
	[
		"Cardboard.Small" : "Cardboard.Small"
		"Cardboard.Medium" : "Cardboard.Medium" 
		"Cardboard.Large" : "Cardboard.Large" 
		"Cloth.Small" : "Cloth.Small" 
		"Cloth.Medium" : "Cloth.Medium" 
		"Cloth.Large" : "Cloth.Large" 
		"Wooden.Tiny" : "Wooden.Tiny" 
		"Wooden.Small" : "Wooden.Small" 
		"Wooden.Medium" : "Wooden.Medium" 
		"Wooden.Large" : "Wooden.Large" 
		"Wooden.ExtraLarge" : "Wooden.ExtraLarge" 
		"Wooden.Huge" : "Wooden.Huge" 
		"Stone.Small" : "Stone.Small" 
		"Stone.Medium" : "Stone.Medium" 
		"Stone.Large" : "Stone.Large" 
		"Stone.Huge" : "Stone.Huge" 
		"Glass.Small" : "Glass.Small" 
		"Glass.Window" : "Glass.Window" 
		"Metal.Small" : "Metal.Small" 
		"Metal.Medium" : "Metal.Medium" 
		"Plastic.Small" : "Plastic.Small" 
		"Item.Small" : "Item.Small" 
		"Plastic.Medium" : "Plastic.Medium" 
		"Item.Medium" : "Item.Medium" 
		"Plastic.Large" : "Plastic.Large" 
		"Item.Large" : "Item.Large" 
		"Pottery.Small" : "Pottery.Small" 
		"Pottery.Medium" : "Pottery.Medium" 
		"Pottery.Large" : "Pottery.Large" 
		"Pottery.Huge" : "Pottery.Huge" 
		"Flesh.Tiny" : "Flesh.Tiny" 
		"Flesh.Small" : "Flesh.Small" 
	]
	health(integer) : "Health" : -1 : "Overrides the prop's health. Set this to zero to give infinite health."
	mass(float) : "Mass" : "0.0" : "Weight of the prop in kg. Enter zero or lower to automatically calculate mass."
	flammable(choices) : "Flammable" : "0" : "Will it burn? Picking this enables the 'ignite' options." =
	[
		0 : "No"
		1 : "Yes"
	]
	ignite_at_half_health(choices) : "Ignite at half-health" : "0" : "Just like those barrels in HL2." =
	[
		0 : "No"
		1 : "Yes"
	]
	explosive_resist(choices) : "Ignite from explosions" : "0" : "Won't break right away if something explodes near it, but will ignite."=
	[
		0 : "No"
		1 : "Yes"
	]
	explosive_damage(float) : "Explode damage" : "0.0" : "Damage to do when breaking"
	explosive_radius(float) : "Explode radius" : "0.0" : "Radius of explosion"
	breakable_model(choices) : "Gibs" : "ConcreteChunks" : "Generic shards to spawn when the prop breaks" =
	[
		"WoodChunks" : "Wood" 
		"GlassChunks" : "Glass"
		"ConcreteChunks" : "Concrete"
		"MetalChunks" : "Metal"
	]
	breakable_count(integer) : "Gib count" : 5 : "How many gibs?"
	breakable_skin(integer) : "Gib skin" : 0 : "Which skin to use on the gib models, if applicable."
]