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


@BaseClass = Propper
[ 
	my_model(target_destination) : "Model to apply to" : "" : "Pick a propper_model entity for this property to apply to."
]
@PointClass base(Targetname, Origin, Angles, Propper) studio("models/editor/axis_helper.mdl") = propper_attachment : "An attachment is an arbitrary point you can define in a model. They have several uses."
[]

@SolidClass base(Propper, Origin) = propper_lod : "A low-res version of the model to show at long distance."
[
	weldvertices(float) : "Welding threshold" : ".01" : "Vertices will be snapped together if within this tolerance. Larger numbers will merge vertices together, and may be useful for optimizing your model."
	distance(integer) : "LOD switch distance" : 0 : "The distance for the LOD to appear. This is actually a combination of how far the player is from the model and their screen resolution (100*units/pixel). Bigger numbers are farther away." 
]
@PointClass base(Propper) iconsprite("editor/logic_case.vmt") = propper_bodygroup : "Bodygroups allow you to swap between parts of a mesh. For example, you could have a door with several different knobs and allow the mapper to pick one."
[
	groupname(string) : "Bodygroup name" : "" : "A name for the bodygroup. This is required."
	body01(target_destination) : "Body Part 01" : "" : "Pick a brush entity (such as func_brush)to be the body group"
	body02(target_destination) : "Body Part 02" : "" : "Pick a brush entity (such as func_brush)to be the body group"
	body03(target_destination) : "Body Part 03" : "" : "Pick a brush entity (such as func_brush)to be the body group"
	body04(target_destination) : "Body Part 04" : "" : "Pick a brush entity (such as func_brush)to be the body group"
	body05(target_destination) : "Body Part 05" : "" : "Pick a brush entity (such as func_brush)to be the body group"
	body06(target_destination) : "Body Part 06" : "" : "Pick a brush entity (such as func_brush)to be the body group"
	body07(target_destination) : "Body Part 07" : "" : "Pick a brush entity (such as func_brush)to be the body group"
	body08(target_destination) : "Body Part 08" : "" : "Pick a brush entity (such as func_brush)to be the body group"
	body09(target_destination) : "Body Part 09" : "" : "Pick a brush entity (such as func_brush)to be the body group"
	body10(target_destination) : "Body Part 10" : "" : "Pick a brush entity (such as func_brush)to be the body group"
	body11(target_destination) : "Body Part 11" : "" : "Pick a brush entity (such as func_brush)to be the body group"
	body12(target_destination) : "Body Part 12" : "" : "Pick a brush entity (such as func_brush)to be the body group"
	body13(target_destination) : "Body Part 13" : "" : "Pick a brush entity (such as func_brush)to be the body group"
	body14(target_destination) : "Body Part 14" : "" : "Pick a brush entity (such as func_brush)to be the body group"
	body15(target_destination) : "Body Part 15" : "" : "Pick a brush entity (such as func_brush)to be the body group"
	body16(target_destination) : "Body Part 16" : "" : "Pick a brush entity (such as func_brush)to be the body group"
]
@PointClass base(Angles, Propper) iconsprite("editor/env_physexplosion.vmt") = 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(Propper)  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. Use a propper_attachment for this."
]
@PointClass base(Propper) iconsprite("editor/multi_manager.vmt") = propper_cables : "Attach a visual cable to the selected prop. Does not work on static props."
[
	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(Propper) iconsprite("editor/gibshooter.vmt") 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(Propper) iconsprite("editor/color_correction.vmt") = 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."
[
	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."
]
@SolidClass base(Targetname, Origin) = propper_model : "This will create a model when Propper is run."
[
	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"
	]
	physmodel(target_destination) : "Physics mesh" : "" : "Pick any brush entity (including this one) to represent the physical shape of the model. Leave this field blank for a non-solid model. If you leave this blank while making a physics prop, Propper will automatically use this entity for collisions."
	mass(float) : "Mass" : "0.0" : "Weight of the prop in kg. Enter zero or lower to automatically calculate mass."
	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"
	]
	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) : "Auto-Center" : "0" : "The model's origin point defines how it is lit and is how the prop is positioned in a map. Auto-center moves the model's origin to 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 : "No"
		1 : "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(Origin, Propper) iconsprite("editor/phys_ballsocket.vmt") = propper_physics : "Propper configuration for physics props. Using this entity will make your prop suitable for use as 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."
	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."
]