//====== Copyright © 2004-2011, Troika Games, Inc. All rights reserved. =======
//
// Purpose: Vampire Bloodlines game definition file (.fgd) 
// Version: 0.92 beta
// Edition: Original VtMB [Base]
// Written: Psycho-A
//
//=============================================================================

// if you wanna test something...
//@include "base.fgd"


//====================================================================================================================
// Generic World Parameters
//====================================================================================================================

@mapsize(-16384, 16384)




//*******************************************************************************************************************
//*******************************************************************************************************************
//
// Main Classes
//
//*******************************************************************************************************************
//*******************************************************************************************************************


//====================================================================================================================
// CLASS: Angles [common]
//====================================================================================================================
// not changed.

@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."
]


//====================================================================================================================
// CLASS: Origin [common]
//====================================================================================================================
// not changed.

@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."
]


//====================================================================================================================
// CLASS: Targetname [common]
//====================================================================================================================
// VTMB-adaptation:
//  added: base(Angles)
//  added: Asw support
//  added: StartHidden
//  added: new io's

@BaseClass base(Angles) = Targetname 
[ 
	targetname(target_source) : "Name" : : "The name that other entities refer to this entity by."

	// 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. Format: <output name> <targetname>:<inputname>:<parameter>:<delay>:<max times to fire (-1 == infinite)>. 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."

	// 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."

// vtmb's ---------
	StartHidden(choices) : "Start Hidden" : 0 : "[VTMB] Don't spawn the entity while the script comand didn't sent." = 
	[ 
		0 : "No"
		1 : "Yes"
	]
	
	// inputs
	input Use(void) : "[VTMB] Use this entity (not tested yet)."
	input Alpha(integer) : "[VTMB] Set the entity's alpha (0 - 255)."
	input Color(color255) : "[VTMB] Set the entity's color (R G B)."
	input ScriptHide(void) : "[VTMB] Hide entity by specific python script."
	input ScriptUnhide(void) : "[VTMB] Spawn entity by specific python script if it was hided."
	input SetSoundOverrideEnt(string) : "[VTMB Untested connection]"
	input SetFakeSilence(void) : "[VTMB: untested connection]"
	
	// outputs
	output OnUseBegin(void) : "[VTMB] Determines what to do when using the entity began."
	output OnUseEnd(void) : "[VTMB] Determines what to do when using the entity over."
]


//====================================================================================================================
// CLASS: Parentname [common]
//====================================================================================================================
// not changed.

@BaseClass = Parentname
[ 
	parentname(target_destination) : "Parent" : : "The name of this entity's parent in the movement hierarchy. Entities with parents move with their parent."

	// Inputs
	input SetParent(string) : "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."
]


//====================================================================================================================
// CLASS: Global [common]
//====================================================================================================================
// not changed.

@BaseClass = Global 
[ 
	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."
]









//====================================================================================================================
// CLASS: WorldBase [common]
//====================================================================================================================
// VTMB-adaptation:
//  removed: coldworld
//  removed: x360 entries
//  removed: chaptertitle (unused)
//  removed: gametitle (unused)
//  removed: minoccludeearea,maxoccludeearea (new)
//  removed: maxpropscreenwidth,maxpropscreenwidth (new)
//  replaced: skyname "santamonica"
//  added: commentary (for developers and decompilers)
//  added: levelscript,sounds
//  added: fogenable (env_fog_controller base)
//  added: fogstart (env_fog_controller base)
//  added: fogend (env_fog_controller base)
//  added: fogblend (env_fog_controller base)
//  added: fogcolor (env_fog_controller base)
//  added: fogcolor2 (env_fog_controller base)
//  added: fogdir (env_fog_controller base)
//  added: wetness_fadein,wetness_fadeout,wetness_fadetarget
//  added: copwaitarea,safearea,nosferatu_tolerrant,nofrenzyarea

@BaseClass = worldbase
[
	message(string) : "Map Description / Title"
	skyname(string) : "SkyBox Texture Name" : "santamonica"
	startdark(choices) : "Level Fade In" : 0 =
	[	
		0 : "No"
		1 : "Yes"
	]
	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"
	]
	detailvbsp(string) : "Detail.vbsp file" : "detail.vbsp" : "Detail.vbsp file to use for emitting detail props (found in directory <root>/modname)"
	detailmaterial(string) : "Detail material file" : "detail/detailsprites" : "Material for detail sprites to use for drawing detail props"

// vtmb ----
	levelscript(choices) : "Python Level Script" : "santamonica" : "[VTMB] This is a Python Script that controls level functionality.\nThe name is relative to 'python/' directory of game." = 
	[
		"bradbury" : "bradbury"
		"cemetery" : "cemetery"
		"chinatown" : "chinatown"
		"crackhouse" : "crackhouse"
		"demo" : "demo"
		"downtown" : "downtown"
		"fusyndicate" : "fusyndicate"
		"gallery" : "gallery"
		"giovanni" : "giovanni"
		"griffith" : "griffith"
		"hollywood" : "hollywood"
		"leopold" : "leopold"
		"malkavian" : "malkavian"
		"museum" : "museum"
		"santamonica" : "santamonica"
		"temple" : "temple"
		"theatre" : "theatre"
		"tutorial" : "tutorial"
		"ventrue" : "ventrue"
		"warehouse" : "warehouse"
		"warrens" : "warrens"
	]
	safearea(choices) : "Area Type" : 1 : "[VTMB] Selects safety type for map area." = 
	[
		0 : "Combat"
		1 : "Masquerade"
		2 : "Elysium"
	]
	copwaitarea(choices) : "Cops Waiting Area" : 1 : "[VTMB] Use this map as a place where player can wait the cop's escape." = 
	[
		0 : "No"
		1 : "Yes"
	]
	nosferatu_tolerrant(choices) : "Nosferatu are Tolerant" : 1 : "[VTMB] Nosferatu doesn't need to hide (to attempt the Masqerade voilation) in this area." = 
	[
		0 : "No"
		1 : "Yes"
	]
	nofrenzyarea(choices) : "No-Frenzy Area" : 1 : "[VTMB] Frenzy not allowed in this area." = 
	[
		0 : "No"
		1 : "Yes"
	]

 // gone from env_fog_controller
	fogenable(choices) : "Fog Enable" : 0 : "[VTMB] Enable fog effect on this map" =
	[
		0 : "No"
		1 : "Yes"
	]
	fogblend(choices) : "Fog Blend" : 0 : "[VTMB] Blend fog between the two defined colors." =
	[
		0 : "No"
		1 : "Yes"
	]
	fogcolor(color255) : "Primary Fog Color" : "255 255 255" : "[VTMB] Primary (main) fog color."
	fogcolor2(color255) : "Secondary Fog Color" : "255 255 255" : "[VTMB] Secondary fog color that fog transitions into."
	fogstart(string) : "Fog Start" : "500.0" : "[VTMB] Fog start distance (from player)."
	fogend(string) : "Fog End" : "2000.0" : "[VTMB] Fog end distance."
	fogdir(string) : "Primary Fog Direction" : "1 0 0" : "[VTMB] Primary fog direction."
 // ----
	
	wetness_fadein(float) : "Wetness Fade In" : "5.0" : "[VTMB] Controls wetness fadein effect on the map. Not tested yet..."
	wetness_fadeout(float) : "Wetness Fade Out" : "10.0" : "[VTMB] Controls wetness fadeout effect on the map. Not tested yet..."
	wetness_fadetarget(float) : "Wetness Fade Target" : "0.0" : "[VTMB] Controls wetness target on the map. Not tested yet..."

	MaxRange(integer) : "Max Range [-?]" : 4096 : "[VTMB] Unknown yet..."
	sounds(integer) : "CD track to play (unused)" : 1 : "[VTMB] Legacy support."
	comment(string) : "Dev's Commentary"
]


//====================================================================================================================
// CLASS: ResponseContext [common]
//====================================================================================================================
// not changed.

@BaseClass = ResponseContext
[
	// 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."

	// Pre-defined contexts at server startup time (set by mapper)
	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."
]


//====================================================================================================================
// worldspawn [common]
//====================================================================================================================
// not changed.
// inserted to use modified classes.

@SolidClass base(Targetname,worldbase,ResponseContext) = worldspawn : 
	"This is the world entity. Each map can only contain one, and it's automatically created for you."
[
]




//====================================================================================================================
// CLASS: EnableDisable [common]
//====================================================================================================================
// not changed.

@BaseClass = EnableDisable
[
	StartDisabled(choices) : "Start Disabled" : 0 =
	[
		0 : "No"
		1 : "Yes"
	]

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



//====================================================================================================================
// CLASS: VSkinTransition [VTMB-specific]
//====================================================================================================================

@BaseClass = VSkinTransition
[
	disableshadows(choices) : "Disable Shadows" : 0 : "Used to disable dynamic shadows on this entity." =
	[
		0 : "No"
		1 : "Yes"
	]
	input skin(integer) : "Changes the model skin to the specified number."
	input SetBodyGroup(integer) : "Set the visible bodygroup, by index."
	input SetSkinFadeTime(float) : "Sets fade time between skin transitions."
	input FadeToSkin(integer) : "Fades to specified skin (define number)."
	input SpawnTempParticle(string) : "Spawns temporary particle (define particle script)."
]



//====================================================================================================================
// CLASS: VMovingConnects [VTMB-specific]
//====================================================================================================================

@BaseClass = VMovingConnects
[
	input MoveToDest(void) : "[VTMB: untested connection]"
	input MoveToHome(void) : "[VTMB: untested connection]"
	input RotateToDest(void) : "[VTMB: untested connection]"
	input RotateToHome(void) : "[VTMB: untested connection]"
	output OnLinearMoveDone(void) : "[VTMB: untested connection]"
	output OnAngularMoveDone(void) : "[VTMB: untested connection]"
]



//====================================================================================================================
// CLASS: Studiomodel [common]
//====================================================================================================================
// VTMB-adaptation:
//  added: base(VSkinTransition,VMovingConnects)
//  moved: disableshadows (VSkinTransition)
//  removed: some io's (new)

@BaseClass base(VSkinTransition,VMovingConnects) = Studiomodel
[
	model(studio) : "World Model"
	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."

	// Inputs
	input skin(integer) : "Changes the model skin to the specified number."

// vtmb ----
	crossfade_skin_time(float) : "Crossfade Skin Time" : "2.0" : "The time that needed for crossfade transition between model's skins."
	demo_sequence(choices) : "Demo Animation" : "None" : "Default animation sequence for the model to be playing after spawning." = 
	[
		"None" : "None"
		"idle" : "Idle"
	]
	npc_transparent(choices) : "NPC Transparent" : 1 : "[VTMB] Ignores NPC's collisions [not tested]." = 
	[
		0 : "No"
		1 : "Yes"
	]
]



//====================================================================================================================
// CLASS: Shadow [common]
//====================================================================================================================
// not changed.

@BaseClass = Shadow
[
	disableshadows(choices) : "Disable shadows" : 0 =
	[
		0 : "No"
		1 : "Yes"
	]

	input DisableShadow(void) : "Turn shadow off."
	input EnableShadow(void) : "Turn shadow on."
]




//====================================================================================================================
// CLASS: RenderFxChoices [common]
//====================================================================================================================
// not changed.

@BaseClass = RenderFxChoices
[
	renderfx(choices) :"Render FX" : 0 =
	[
		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: "Distort"
		16: "Hologram (Distort + fade)"
		23: "Cull By Distance (TEST)"
		24: "Spotlight FX"
		26: "Fade Near"
	]
]



//====================================================================================================================
// CLASS: RenderFields [common]
//====================================================================================================================
// VTMB-adaptation:
//  added: disableshadows (legacy)

@BaseClass base(RenderFxChoices) = RenderFields 
[
	rendermode(choices) : "Render Mode" : 0 : "Used to set a non-standard rendering mode on this entity. See also 'FX Amount' and 'FX Color'." =
	[
		0: "Normal"
		1: "Color"
		2: "Texture"
		3: "Glow"
		4: "Solid"
		5: "Additive"
		7: "Additive Fractional Frame"
		9: "World Space Glow"
		10: "Dont Render"
	]
	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."

	disableshadows(choices) : "Disable Shadows" : 0 =
	[
		0 : "No"
		1 : "Yes"
	]
	disablereceiveshadows(choices) : "Disable Receiving Shadows" : 0 =
	[
		0 : "No"
		1 : "Yes"
	]

	input Alpha(integer) : "Set the sprite's alpha (0 - 255)."
	input Color(color255) : "Set the sprite's color (R G B)."
]



//===================================================================================================================
// CLASS: DamageFilter [common]
//===================================================================================================================
// not changed.

@BaseClass = DamageFilter
[ 
	damagefilter(target_destination) : "Damage Filter" : "" : "Name of the filter entity that controls which entities can damage us."
	input SetDamageFilter(string) : "Sets the entity to use as damage filter. Pass in an empty string to clear the damage filter."
]




//===================================================================================================================
// CLASS: VBreakingConnects [common]
//===================================================================================================================

@BaseClass = VBreakingConnects
[
	// 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."

	// outputs
	output OnBreak(void) : "Fired when this breakable breaks."
	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]."
]


//===================================================================================================================
// CLASS: Breakable [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Shadow (included)
//  removed: physcannon io's (new)
//  moved: some io's to VBreakingConnects
//  removed: DamageFilter (analogue exist)
//  removed: PerformanceMode (new)
//  removed: io's (SetMass,OnTakeDamage - new)

@BaseClass base(Targetname,VBreakingConnects) = Breakable
[
	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'."
]




//===================================================================================================================
// CLASS: KeyFrame [common]
//===================================================================================================================
// not changed.

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


//===================================================================================================================
// CLASS: Mover [common]
//===================================================================================================================
// not changed.

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



//===================================================================================================================
// CLASS: Inputfilter [common]
//===================================================================================================================
// not changed.

@BaseClass = Inputfilter
[
	InputFilter(choices) : "Input Filter" : 0 : "Used to specify which inputs this entity will accept." =
	[
		0 : "Allow all inputs"
		8 : "Ignore Touch/Untouch"
		16 : "Ignore Use"
		32 : "Ignore All"
	]
]


































//*******************************************************************************************************************
//*******************************************************************************************************************
//
// ITEMS
//
//*******************************************************************************************************************
//*******************************************************************************************************************


//====================================================================================================================
// CLASS: Item [common]
//====================================================================================================================
// VTMB-adaptation:
//  added: new io's
//  removed: Angles (included)
//  removed: fade* params (unused)
//  removed: OnCacheInteraction

@BaseClass color(0 0 200) base(Targetname,Shadow) = Item
[
	output OnPlayerTouch(void) : "Fires when the player touches this object"

	spawnflags(Flags) =
	[
		1 : "Start Constrained" : 0
	]
	
// vtmb ----
	output OnPlayerPickup(void) : "Fired whenever the player picks up this item (with +USE)."
]








//====================================================================================================================
// CLASSes: IconSets [VTMB-specific]
//====================================================================================================================

@BaseClass = VUseIcons
[
	use_icon(choices) : "Use Icon" : 0 : "An icon that indicates when player can be able to use this entity and it is openable." = 
	[
		0: "None"
		0: " "
		0: " -- door icons --"
		10: "Door (Openable)"
		58: "Door (Player wanted)"
		59: "Door (Transition)"
		60: "Hatch (Transition)"
		0: " "
		0: " -- buttons, switches --"
		12: "Switch (wall)"
		64: "Switch (power)"
		31: "Elevator button: Up"
		32: "Elevator button: Down"
		21: "Elevator button: 1"
		22: "Elevator button: 2"
		23: "Elevator button: 3"
		24: "Elevator button: 4"
		25: "Elevator button: 5"
		26: "Elevator button: 6"
		27: "Elevator button: 7"
		28: "Elevator button: B"
		29: "Elevator button: G"
		49: "Elevator button: PH"
		30: "Elevator button: Locked"
		0: " "
		0: " -- locks, keys --"
		3:  "Default lock"
		4:  "Key"
		5:  "Access card"
		53: "Electronic lock"
		54: "Electronic lock (deny)"
		0: " "
		0: " -- sign icons --"
		18: "Note"
		40: "Clipboard"
		41: "Printed Papers"
		36: "Book"
		50: "Bus stop Map"
		51: "Sewer Transition map"
		57: "Sewer Lines map"
		46: "Giovanni book"
		0: " "
		0: " -- usable icons --"
		2:  "Computer"
		6:  "Lootable crate"
		7:  "TV monitor"
		43: "Phonograph"
		48: "Web camera"
		38: "Reel recorder"
		42: "Projector light"
		34: "Valve wheel"
		61: "Pedestal"
		35: "Stove"
		37: "Sconce"
		16: "Tubes"
		0: " "
		0: " -- talking icons --"
		15: "Talk NPC (Male)"
		14: "Talk NPC (Female)"
		8:  "Phone"
		47: "Payphone"
		0: " "
		0: " -- place icons --"
		17: "Use Bomb"
		55: "Breakable"
		62: "Dance (Male)"
		63: "Dance (Female)"
		0: " "
		0: " -- other icons --"
		9:  "Physic Hand"
		19: "Stealth succeed"
		20: "Stealth chance"
		33: "Sword"
		45: "Slaughter"
		52: "Skull"
		73: "Pushable prop"
		66: "Malk Chaos"
		67: "Malk Key"
		68: "Malk Mind"
		69: "Malk Order"
		70: "Malk Sight"
		71: "Malk Time"
		72: "Malk Mind"
		0: " "
		0: " -- unused icons --"
		1:  "Carry body (unused)"
		13: "Switch 1 (13)"
		39: "Key (39)"
		44: "Phonograph (44)"
		56: "Bus stop Map (56)"
		11: "Empty (11)"
		65: "Empty (65)"
	]
]

@BaseClass = VLockedIcons
[
	locked_icon(choices) : "Locked Icon" : 3 : "An icon that indicates when player trying to unlock this entity but it is locked." = 
	[
		0: "None"
		0: " "
		0: " -- door icons --"
		10: "Door (Openable)"
		58: "Door (Player wanted)"
		59: "Door (Transition)"
		60: "Hatch (Transition)"
		0: " "
		0: " -- buttons, switches --"
		12: "Switch (wall)"
		64: "Switch (power)"
		31: "Elevator button: Up"
		32: "Elevator button: Down"
		21: "Elevator button: 1"
		22: "Elevator button: 2"
		23: "Elevator button: 3"
		24: "Elevator button: 4"
		25: "Elevator button: 5"
		26: "Elevator button: 6"
		27: "Elevator button: 7"
		28: "Elevator button: B"
		29: "Elevator button: G"
		49: "Elevator button: PH"
		30: "Elevator button: Locked"
		0: " "
		0: " -- locks, keys --"
		3:  "Default lock"
		4:  "Key"
		5:  "Access card"
		53: "Electronic lock"
		54: "Electronic lock (deny)"
		0: " "
		0: " -- sign icons --"
		18: "Note"
		40: "Clipboard"
		41: "Printed Papers"
		36: "Book"
		50: "Bus stop Map"
		51: "Sewer Transition map"
		57: "Sewer Lines map"
		46: "Giovanni book"
		0: " "
		0: " -- usable icons --"
		2:  "Computer"
		6:  "Lootable crate"
		7:  "TV monitor"
		43: "Phonograph"
		48: "Web camera"
		38: "Reel recorder"
		42: "Projector light"
		34: "Valve wheel"
		61: "Pedestal"
		35: "Stove"
		37: "Sconce"
		16: "Tubes"
		0: " "
		0: " -- talking icons --"
		15: "Talk NPC (Male)"
		14: "Talk NPC (Female)"
		8:  "Phone"
		47: "Payphone"
		0: " "
		0: " -- place icons --"
		17: "Use Bomb"
		55: "Breakable"
		62: "Dance (Male)"
		63: "Dance (Female)"
		0: " "
		0: " -- other icons --"
		9:  "Physic Hand"
		19: "Stealth succeed"
		20: "Stealth chance"
		33: "Sword"
		45: "Slaughter"
		52: "Skull"
		73: "Pushable prop"
		66: "Malk Chaos"
		67: "Malk Key"
		68: "Malk Mind"
		69: "Malk Order"
		70: "Malk Sight"
		71: "Malk Time"
		72: "Malk Mind"
		0: " "
		0: " -- unused icons --"
		1:  "Carry body (unused)"
		13: "Switch 1 (13)"
		39: "Key (39)"
		44: "Phonograph (44)"
		56: "Bus stop Map (56)"
		11: "Empty (11)"
		65: "Empty (65)"
	]
]








































//*******************************************************************************************************************
//*******************************************************************************************************************
//
// SOUND
//
//*******************************************************************************************************************
//*******************************************************************************************************************


//===================================================================================================================
// ambient_generic [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: fadeinsecs,fadeoutsecs
//  added: fadein,fadeout (legacy)
//  added: flag_force_looping
//  added: flag_no_sfx
//  added: flag_no_voice_duck
//  added: flag_skip_collide
//  added: sound_event
//  added: sound_event_level
//  added: sound_event_owner

@PointClass base(Targetname) iconsprite("editor/ambient_generic.vmt") sphere() = ambient_generic : 
	"Universal ambient sound. Use it to play and control a single sound."
[
	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."
	preset(choices) :"Dynamic Presets" : 0 =						// NEEDHELP
	[
		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"
	]
	volstart(integer) : "Start Volume" : 0							// NEEDHELP
	
	pitch(integer) : "Pitch" : 100 : "Sound pitch, expressed as a range from 1 to 255, where 100 is the sound's default pitch."
	pitchstart(integer) : "Start Pitch" : 100						// NEEDHELP
	spinup(integer) : "Spin up time (0-100)" : 0					// NEEDHELP
	spindown(integer) : "Spin down time (0-100)" : 0				// NEEDHELP
	lfotype(integer) : "LFO type (0-3)" : 0 : "0) off 1) sqr 2) tri 3) rnd"		// NEEDHELP
	lforate(integer) : "LFO rate (0-1000)" : 0						// NEEDHELP
	lfomodpitch(integer) : "LFO mod pitch (0-100)" : 0				// NEEDHELP
	lfomodvol(integer) : "LFO mod vol (0-100)" : 0					// NEEDHELP
	cspinup(integer) : "Incremental Spinup Count" : 0				// NEEDHELP
	radius(string) : "Max Audible Distance" : "1250" : "Maximum distance at which this sound is audible."

	spawnflags(flags) =
	[
		1: "Play everywhere" : 0
		16:"Start Silent": 1
		32:"Is NOT Looped": 1
	]
	SourceEntityName(target_destination) : "SourceEntityName" : : "If an entity is specified, sound will come from this named entity instead of the location of ambient_generic."

	// 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."
	input StopSound(void) : "Stops the sound if it is playing."
	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."

// vtmb ----
	fadein(integer) : "Fade in time (0-100)" : 0 : "[VTMB] Fade-in time when sound starts playing."
	fadeout(integer) : "Fade out time (0-100)" : 0 : "[VTMB] Fade-out time when sound stops playing."
	sound_event(choices) : "Sound Event Type" : 0 : "[VTMB] Unknown yet..." = 
	[ 
		0 : "0"
		1 : "1"
		2 : "2"
		3 : "3"
		4 : "4"
	]
	sound_event_level(choices) : "Sound Event Level" : 2 : "[VTMB] Unknown yet..." =
	[ 
		0 : "0"
		1 : "1"
		2 : "2"
		3 : "3"
		4 : "4"
	]
	sound_event_owner(target_destination) : "Sound Enevt Owner" : : "[VTMB] Unknown yet..."
	flag_force_looping(choices) : "Flag: Force Loop" : 0 : "[VTMB] Enables looping even if wave has not looping cue-points." = 
	[ 
		0 : "False"
		1 : "True"
	]
	flag_no_sfx(choices) : "Flag: No SFX" : 0 : "[VTMB] Defines, can sound accept sound effects or not (not tested)." = 
	[ 
		0 : "False"
		1 : "True"
	]
	flag_no_voice_duck(choices) : "Flag: No Voice Duck" : 0 : "[VTMB] Enables or disables voice duck option on this sound." = 
	[ 
		0 : "False"
		1 : "True"
	]
	flag_skip_collide(choices) : "Flag: Skip Collision" : 0 : "[VTMB] Ignore collisions on sourfaces (not tested)." = 
	[ 
		0 : "False"
		1 : "True"
	]
]








































//*******************************************************************************************************************
//*******************************************************************************************************************
// 
// BUTTONS
// 
//*******************************************************************************************************************
//*******************************************************************************************************************


//====================================================================================================================
// CLASS: Button [common]
//====================================================================================================================
// VTMB-adaptation:
//  added: base(Targetname)
//  added: base(Parentname)
//  added: base(Shadow)
//  added: base(VMovingConnects)
//  added: speed (from common ents)
//  added: health (from common ents)
//  added: sounds (from common ents)
//  added: wait (from common ents)
//  fixed: sounds (description)

@BaseClass base(Targetname,Parentname,Origin,Shadow,VMovingConnects) = Button
[
	// 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."

// added from hl2's button ents	
	speed(integer) : "Speed" : 5 : "The speed that the button moves, in inches 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."
	sounds(choices) : "Sounds" : 0 : "[Legacy] Type of sound (defined in source code) played when button pressed. Not used in VTMB game, but supported. It's better to use ambient_generic connection instead." = 
	[
		0: "None (Silent)"
		1: "<Unused>"	// chioces removed (vtmb)
	]
	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."
]





//====================================================================================================================
// CLASS: VButton [VTMB-specific]
//====================================================================================================================
// VTMB-adaptation
//  base: hl2-button ents
//  removed: choices for sounds
//  added: use_icon (VUseIcons)
//  added: locked_icon (VLockedIcons)
//  added: soundgroup
//  fixed: *locked_sound (descriptions)

@BaseClass base(Button,VUseIcons,VLockedIcons) = VButton
[
	lip(integer) : "Lip" : 0 : "The amount, in inches, of the button to leave sticking out of the wall it recedes into when pressed. Negative values make the button recede even further into the wall."
	spawnflags(flags) =
	[
		1: "Don't move" : 0
		32: "Toggle" : 0
		256: "Touch Activates": 0
		512: "Damage Activates": 0
		1024: "Use Activates" : 1
		2048: "Starts locked" : 0
		4096: "Sparks" : 0
	]
	locked_sound(choices) : "Locked Sound" : 0 : "[Legacy] Type of sound (defined in source code) played when the player tries to use the button, and fails because it's locked. In VTMB, it's better to use ambient generic connection instead." =
	[
		0 : "None"
		1 : "<Unused>"
	]
	unlocked_sound(choices) : "Unlocked Sound" : 0 : "[Legacy] Type of sound (defined in source code) played when the button is unlocked. In VTMB, it's better to use ambient generic connection instead." =
	[
		0 : "None"
		1 : "<Unused>"
	]
	
// vtmb ----
	soundgroup(choices) : "Sound Group" : "Wall Light Switch" : "[VTMB] The group of sounds relative to 'sound/usable/switches/<groupname>/*.wav' that specifies 'on/off' sounds." = 
	[
		"elevator_button" : "Elevator Button"
		"large_metal_lever" : "Large Metal Lever"
		"manhole_cover" : "Manhole Cover"
		"medium_metal_switch" : "Medium Metal Switch"
		"small_metal_switch" : "Small Metal Switch"
		"wall_light_switch" : "Wall Light Switch"
		"radio" : "Radio"
		"tv" : "TV"
	]
]




//===================================================================================================================
// func_button [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: master (obsolete)
//  removed: locked_sentence, unlocked_sentence
//  removed: base(DamageFilter)
//  removed: base(Angles) (included)
//  moved: speed (to main class)
//  moved: health (to main class)
//  moved: sounds (to main class)
//  moved: wait (to main class)
//  moved: lip (to VButton class)
//  moved: locked_sound (to VButton class)
//  moved: unlocked_sound (to VButton class)
//  added: use_filter_name

@SolidClass base(VButton,RenderFields) = 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."
[
	movedir(angle) : "Move Direction (Y Z X)" : "0 0 0" : "Specifies the direction of motion to move when the button is used."
	_minlight(string) : "Minimum Light Level" : : "The minimum level of ambient light that hits this brush."
	
// vtmb ----
	use_filter_name(target_destination) : "Usage Filter [-?]" : : "[VTMB] Link to 'filter_activator_*' entity that defines usage filtering (not tested)."
]
































//*******************************************************************************************************************
//*******************************************************************************************************************
// 
// Doors
// 
//*******************************************************************************************************************
//*******************************************************************************************************************


//====================================================================================================================
// CLASS: Door [common]
//====================================================================================================================
// VTMB-adaptation:
//  moved: Shadow (RenderFields)
//  removed: master (obsolete)
//  removed: noise1,noise2
//  removed: startclosesound,closesound
//  removed: locked_sound,unlocked_sound
//  removed: loopmovesound
//  removed: forceclosed,ignoredebris,message (unsupported)

@BaseClass base(Targetname,Parentname,Global,Origin,RenderFields) = Door
[
	speed(integer) : "Speed" : 100 : "The speed at which the door moves."
	wait(integer) : "Delay Before Reset (-1 stay)" : 8 : "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, in inches, of the button to leave sticking out of the wall it recedes into when pressed. Negative values make the button recede even further into the wall."
	dmg(integer) : "Blocking Damage" : 0 : "Amount of damage done to entities that block the movement of this door, per frame."
	health(integer) : "Health (shoot open)" : 0		// NEEDHELP: Looks like this was removed

	spawnflags(flags) =
	[
		1 : "Starts Open - OBSOLETE, use 'Spawn Position' key instead" : 0
		4 : "Non-solid to Player" : 0
		8: "Passable" : 0
	    32: "Toggle" : 0
		256:"Use Opens" : 0
		512: "NPCs Can't" : 0
		1024: "Touch Opens" : 1
		2048: "Starts locked" : 0
		4096:	"Door Silent" : 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: "Gen. Access Denied"
		2: "Security Lockout"
		3: "Blast Door"
		4: "Fire Door"
		5: "Chemical Door"
		6: "Radiation Door"
		7: "Gen. Containment"
		8: "Maintenance Door"
		9: "Broken Shut Door"
	]
	unlocked_sentence(choices) : "Unlocked Sentence" : 0 : "A sentence played when the door is unlocked." = 
	[
		0: "None"
		1: "Gen. Access Granted"
		2: "Security Disengaged"
		3: "Blast Door"
		4: "Fire Door"
		5: "Chemical Door"
		6: "Radiation Door"
		7: "Gen. Containment"
		8: "Maintenance area"
	]	
	_minlight(string) : "Minimum Light Level" : : "The minimum level of ambient light that hits this brush."

	// 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."
	
	// 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."
]



//====================================================================================================================
// CLASS: VDoor [VTMB-specific]
//====================================================================================================================

@BaseClass base(Door,VUseIcons,VLockedIcons,VMovingConnects) = VDoor
[
	soundgroup(choices) : "Sound Group" : "Standard Door" : "[VTMB] The group of sounds relative to 'sound/usable/openable/<groupname>/*.wav' that specifies 'open/close/swing/locked' sounds." = 
	[
		"car_trunk" : "Car Trunk"
		"chainlink_gate" : "Chainlink Gate"
		"light_iron_gate" : "Light Iron Gate"
		"heavy_iron_gate" : "Heavy Iron Gate"
		"jewelry_box" : "Jewelry Box"
		"manhole_cover" : "Manhole Cover"
		"metal_chest" : "Metal Chest"
		"metal_file_cabinet" : "Metal File Cabinet"
		"metal_hatch" : "Metal Hatch"
		"metal_heavy_powered" : "Metal Heavy-Powered"
		"old_wood_window" : "Old Wood Window"
		"push_arm_door" : "Push Arm Door"
		"sliding_glass_door" : "Sliding Glass Door"
		"sliding_glass_window" : "Sliding Glass Window"
		"sliding_plywood" : "Sliding Plywood"
		"squeaky_metal door" : "Squeaky Metal Door"
		"squeaky_wood door" : "Squeaky Wood Door"
		"standard_door" : "Standard Door"
		"stone_door" : "Stone Door"
		"wood_cabnet" : "Wood Cabnet"
		"wood_drawer" : "Wood Drawer"
		"wooden_chest" : "Wooden Chest"
	]
	noopenwanted(choices) : "Block if Player Wanted" : 0 : "[VTMB] When player is wanted by cops, this door cannot be open." = 
	[
		0 : "No"
		1 : "Yes"
	]
	linked_door(target_destination): "Linked Door" : : "[VTMB] Door that inherits properties of this entity and works simultaneously."
	delay(integer) : "Delay [-?]" : 0 : "[VTMB] Unknown yet..."
]





//===================================================================================================================
// func_door [common]
//===================================================================================================================
// VTMB-adaptation:
//  moved: base(VDoor)
//  removed: movedir
//  removed: filtername (unused)
//  added: use_override

@SolidClass base(VDoor) = func_door : 
	"A brush entity for use as a player-useable door."
[
	movedir(angle) : "[HL2] Move Direction (Y Z X)" : "0 0 0" : "[HL2-only] The direction the door will move, when it opens."

// vtmb ----
	use_override(target_destination) : "Use Override Entity [-?]" : : "[VTMB] Unknown yet..."
]





//===================================================================================================================
// func_door_rotating [common]
//===================================================================================================================
// VTMB-adaptation:
//  moved: base(VDoor)
//  removed: solidbsp (unused)
//  added: climbable

@SolidClass base(VDoor) = func_door_rotating : 
	"A brush entity for use as a rotating player-useable door." 
[
	spawnflags(flags) =
	[
		2 : "Reverse Dir" : 0
		16: "One-way" : 0
		64: "X Axis" : 0
		128: "Y Axis" : 0
		65536: "New func_door +USE rules (NOT for prop_doors!!)" : 0
	]
	distance(integer) : "Distance" : 90 : "The amount, in degrees, that the button should rotate when it's pressed."

	// vtmb
	climbable(choices) : "Climbable" : 0 : "[VTMB] Determines, can player climb to this door, or not." =
	[
		0 : "No"
		1 : "Yes"
	]
]








































//*******************************************************************************************************************
//*******************************************************************************************************************
//
// AI Spcript Entities
//
//*******************************************************************************************************************
//*******************************************************************************************************************


//====================================================================================================================
// CLASS: BaseScripted [common, HL2-based]
//====================================================================================================================
// VTMB-adaptaion:
//  removed: m_bLoopActionSequence (new)
//  removed: m_bSynchPostIdles (new)
//  removed: m_bIgnoreGravity (new)
//  removed: m_bDisableNPCCollisions (new)
//  removed: OnCancelSequence (new)
//  removed: OnCancelFailedSequence (new)

@BaseClass base(Targetname,Parentname) color(255 0 255) sphere(m_flRadius) = BaseScripted
[
	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."
	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_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"
	]
	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."

	// 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 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."
]







//====================================================================================================================
// CLASS: VAiScripted [BaseScripted-based]
//====================================================================================================================

@BaseClass base(Targetname,VMovingConnects) color(255 0 255) sphere(m_flRadius) = VAiScripted
[
	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_iszPlay(string) : "Action Animation" : "" : "The name of the main sequence (such as 'reload02') or activity (such as 'ACT_RELOAD') to play."
	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"
	]
	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."

	// 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."

	// vtmb
	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 HumanityAdd(void) : "[VTMB] Add humanity point to player."
	input Bloodloss(void) : "[VTMB] Take blood point [-?]."
	input Bloodgain(void) : "[VTMB] Gain blood level [-?]."
	input ClearActiveDisciplines(void) : "[VTMB] Clears currently launched disciplines."
	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 Inventory_Remove(void) : "[VTMB: untested connection]"
	input MoneyAdd(void) : "[VTMB] Add amount of money."
	input MoneyRemove(void) : "[VTMB] Remove amount of money."
	input BarterBegin(void) : "[VTMB] Begin barter process..."
	input BarterEnd(void) : "[VTMB] End barter process..."
	input BloodHeal(void) : "[VTMB] Player will be healing by blood."
	input FrenzyCheck(void) : "[VTMB: untested connection]"
	input FrenzyTrigger(void) : "[VTMB: untested connection]"
	input HungerCheck(void) : "[VTMB: untested connection]"
	input FrenzyUpdate(void) : "[VTMB: untested connection]"
	input PlayFloat(void) : "[VTMB: untested connection]"
	input WillTalk(void) : "[VTMB] Make NPC talk [-?]"
	input ChangeMasqueradeLevel(void) : "[VTMB] Change player's Masquerade level."
	input FadeHeadAsCameraTarget(void) : "[VTMB: untested connection]"
	input FadeBodyAsCameraTarget(void) : "[VTMB: untested connection]"
	input SetHeadAsCameraTarget(void) : "[VTMB: untested connection]"
	input SetBodyAsCameraTarget(void) : "[VTMB: untested connection]"
	input LookAtEntityEye(void) : "[VTMB: untested connection]"
	input LookAtEntityCenter(void) : "[VTMB: untested connection]"
	input LookAtEntityOrigin(void) : "[VTMB: untested connection]"
	input LookAtEntityDefault(void) : "[VTMB: untested connection]"
	
	// Outputs
	output OnBeginSequence(void) : "Fired when the action animation begins playing."
	output OnEndSequence(void) : "Fired when the action animation completes."
	output OnScriptEvent01(void) : "Fired when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 1 } in the QC."
	output OnScriptEvent02(void) : "Fired when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 2 } in the QC."
	output OnScriptEvent03(void) : "Fired when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 3 } in the QC."
	output OnScriptEvent04(void) : "Fired when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 4 } in the QC."
	output OnScriptEvent05(void) : "Fired when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 5 } in the QC."
	output OnScriptEvent06(void) : "Fired when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 6 } in the QC."
	output OnScriptEvent07(void) : "Fired when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 7 } in the QC."
	output OnScriptEvent08(void) : "Fired when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 8 } in the QC."

	// vtmb
	output OnDamaged(void) : "Fired when this NPC is damaged."
	output OnDeath(void) : "Fired when this NPC is killed." 
	output OnHalfHealth(void) : "Fired when this NPC reaches half of its maximum health."
	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 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 OnGrappleBegin(void) : "[VTMB] Fired when grapple begins [-?]."
	output OnGrappleEnd(void) : "[VTMB] Fired when grapple ends [-?]."
	output OnFedUponBegin(void) : "[VTMB: untested connection]"
	output OnFedUponEnd(void) : "[VTMB: untested connection]"
	output OnSellWeapon(void) : "[VTMB] Fired when weapon sold."
	output OnBarterClose(void) : "[VTMB] Fired when barter process end."
]






//====================================================================================================================
// aiscripted_schedule [common]
//====================================================================================================================
// VTMB adaptation:
//  removed: graball (unused)
//  removed: interruptability (unused)
//  moved to base(VAiScripted)

@PointClass base(VAiScripted) sphere(m_flRadius) color(255 0 255) iconsprite("editor/aiscripted_schedule") = 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" 
[
	spawnflags(Flags) = 
	[
		4 : "Repeatable" : 1
		1024 : "Search Cyclically" : 0
		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"
	]
	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."
]





//===================================================================================================================
// ai_script_conditions [common]
//===================================================================================================================
// VTMB-adaptation:
//  disabled: PlayerActorFOVTrueCone (not tested)
//  disabled: PlayerActorLOS (not tested)
//  disabled: PlayerTargetFOVTrueCone (not tested)
//  disabled: PlayerTargetLOS (not tested)
//  disabled: PlayerBlockingActor (not tested)
//  disabled: ActorInPVS (not tested)
//  removed: ActorInVehicle (unused)
//  removed: PlayerInVehicle (unused)

@PointClass base(Targetname) = ai_script_conditions : "AI Script Conditions"
[
	Actor(target_destination) : "Actor" : : "NPC Target"
	StartDisabled(choices) : "Start Disabled" : 1 =
	[
		0 : "No"
		1 : "Yes"
	]
	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) : "Play 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"
//	]

	spawnflags(Flags) = 
	[
		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."
]







//===================================================================================================================
// scripted_sequence [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Angles (included)
//  removed: DXLevelChoice (unused)
//  added: radius

@PointClass base(BaseScripted) studio("models/editor/scriptedsequence.mdl") 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\n"+
	"1) Move to position using the specified movement animation. If 'Move to Position' is set to NONE, skip to step 2.\n"+
	"2) 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.\n"+
	"3) Fire the OnBeginSequence output.\n"+
	"4) 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.\n"+
	"6) Fire the OnEndSequence output.\n"+
	"7) If a next script to play is specified, hand the NPC to the next script and repeat this process for that script.\n\n"+
	"The MoveToPosition input runs steps 1 and 2, then waits while playing the pre-action idle animation until the BeginSequence input is received.\n\n"+
	"If the sequence has motion extraction in it, set the 'Don't Teleport NPC On End' spawnflag."
[
	spawnflags(Flags) = 
	[
		4 : "Repeatable" : 0
		8 : "Leave Corpse" : 0
		16 : "Start on Spawn" : 0
		32: "No Interruptions" : 0
		64: "Override AI" : 0
		128: "Don't Teleport NPC On End" : 0
		256: "Loop in Post Idle" : 0
		512: "Priority Script" : 0
		4096: "Allow actor death" : 0
	]
	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"
	]
	
// vtmb ----
	radius(integer) : "Sequence Radius [-?]" : 0 : "[VTMB] Untested yet..."
]







































//*******************************************************************************************************************
//*******************************************************************************************************************
//
// CAMERA Entities
//
//*******************************************************************************************************************
//*******************************************************************************************************************


//===================================================================================================================
// sky_camera [common]
//===================================================================================================================
// not changed.

@PointClass base(Angles) size(-16 -16 -16, 16 16 16) color(0 0 255) = 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."
[
	scale(integer) : "3D Skybox scale" : 16 : "Scale of the skybox."
	fogenable(choices) : "Fog Enable" : 0 =
	[
		0 : "No"
		1 : "Yes"
	]
	fogblend(choices) : "Fog Blend" : 0 =
	[
		0 : "No"
		1 : "Yes"
	]
	use_angles(choices) : "Use Angles for Fog Dir" : 0 =
	[
		0 : "No"
		1 : "Yes"
	]
	fogcolor(color255) : "Primary Fog Color" : "255 255 255"
	fogcolor2(color255) : "Secondary Fog Color" : "255 255 255"
	fogdir(string) : "Primary Fog Dir" : "1 0 0"
	fogstart(string) : "Fog Start" : "500.0" : "Distance at which the skybox fog should start."
	fogend(string) : "Fog End" : "2000.0" : "Distance at which the skybox fog should be fully opaque."
]




























	
	
	
	








//*******************************************************************************************************************
//*******************************************************************************************************************
// 
// PARTICLE Effects
// 
//*******************************************************************************************************************
//*******************************************************************************************************************


//===================================================================================================================
// CLASS: BModelParticleSpawner [common]
//===================================================================================================================
// not changed.

@BaseClass = BModelParticleSpawner
[ 
	StartDisabled(choices) : "Start Disabled" : 0 =
	[
		0 : "No"
		1 : "Yes"
	]

	Color(color255) : "Particle Color (R G B)" : "255 255 255"
	SpawnRate(integer) : "Particle Per Second" : 40 : "Number of particles to spawn, per second."
	SpeedMax(string) : "Maximum Particle Speed" : 13 : "Maximum speed that the particles can move after spawning."
	LifetimeMin(string) : "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(string) : "Maximum Particle Lifetime" : 5 : "Maximum number of seconds until each particle dies. Particles live for a random duration between 'Minimum Particle Lifetime' and this."
	DistMax(integer) : "Maximum Visible Distance" : 1024 : "Maximum distance at which particles are visible. They fade to translucent at this distance."

	Frozen(choices) : "Frozen" : 0 : "When set, this entity spawns the number of particles in SpawnRate immediately, and then goes inactive." =
	[
		0 : "No"
		1 : "Yes"
	]

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




//===================================================================================================================
// env_physexplosion [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: inner_radius (new)
//  removed: OnPushedPlayer (new)

@PointClass base(Targetname,Parentname) sphere() sphere(inner_radius) iconsprite("editor/env_physexplosion.vmt") = 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" : "500" : "Amount of physics force applied by the explosion."
	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 : "No Damage - Only Force" : 1
		2 : "Push players" : 0
		4 : "Push radially - not as a sphere" : 0
		8 : "Test LOS before pushing" : 0
		16 : "Disorient player if pushed" : 0
	]

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








































//*******************************************************************************************************************
//*******************************************************************************************************************
// 
// ENVIRONMENTAL Effects
// 
//*******************************************************************************************************************
//*******************************************************************************************************************


//===================================================================================================================
// CLASS: gibshooterbase [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: gibanglevelocity (new)
//  removed: lightingorigin (new)

@BaseClass base(Targetname,Parentname) = 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(string) : "Delay between shots" : "0" : "Delay (in seconds) between shooting each gib. If 0, all gibs shoot at once."
	gibangles(string) : "Gib Angles (Pitch Yaw Roll)" : "0 0 0" : "The orientation of the spawned gibs."
	m_flVelocity(integer) : "Gib Velocity" : 200 : "Speed of the fired gibs"
	m_flVariance(string) : "Course Variance" : "0.15" : "How much variance in the direction gibs are fired."
	m_flGibLife(string) : "Gib Life" : "4" : "Time in seconds for gibs to live +/- 5%"

	spawnflags(Flags) = 
	[
		1 : "Repeatable"  : 0
	]

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




//===================================================================================================================
// env_beam [common]
//===================================================================================================================
// VTMB-adaptation:
//  changed: texture("materials/sprites/beama.vmt")
//  removed: Color*Value connections (new)
//  removed: filtername (new)
//  removed: HDRColorScale (new)
//  removed: decalname (new)
//  mark as unsupported: TouchType
//  mark as unsupported: some io's

@PointClass base(Targetname,Parentname,RenderFxChoices) size(-4 -4 -4, 4 4 4) line(255 255 255, targetname, LightningStart, targetname, LightningEnd) = 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."
[
	renderamt(integer) : "Brightness (1 - 255)" : 100
	rendercolor(color255) : "Beam Color (R G B)" : "255 255 255"
	Radius(integer) : "Radius" : 256 : "If the 'Random Strike' spawnflag is set, this radius determines the area within which the endpoints will randomly strike."
	life(string) : "Life (seconds 0 = infinite)" : "1" : "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."
	NoiseAmplitude(float) : "Amount of noise (0-255)" : 0 : "The amount of noise in the beam. 0 is a perfectly straight beam."
	texture(material) : "Sprite Name" : "materials/sprites/beama.vmt" : "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."
	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."
	StrikeTime(string) : "Strike again time (secs)" : "1" : "Refire time between random strikes of the beam. Only used if the 'Random Strike' spawnflag is set."
	damage(string) : "Damage / second" : "0" : "How much damage this beam does per second to things it hits when it is continually on, or instantaneously if it strikes. For continuous damage, the value should be greater than 10 or it may not work."
	LightningStart(target_destination) : "Start Entity" : "" : "Entity that the beam starts at."
	LightningEnd(target_destination) : "Ending Entity" : "" : "Entity that the beam ends at."
	spawnflags(flags) = 
	[
		1 : "Start On" : 0
		2 : "Toggle" : 0
		4 : "Random Strike" : 0
		8 : "Ring" : 0
		16: "StartSparks" : 0
		32: "EndSparks" : 0
		64: "Decal End" : 0
		128: "Shade Start" : 0
		256: "Shade End" : 0
		512: "Taper Out" : 0
	]
	
	// 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 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 ScrollSpeed(float) : "Set the scroll speed in units per second (0 - 100)."
	input Width(float) : "Set the width of the beam, in pixels."

// vtmb ----
	impact_particle(choices) : "Impact Particle" : "particles/Sparks_Warrens_Computers_emitter.txt" : "Particle spawned at impact [unknown yet]." =
	[
		"particles/Sparks_Warrens_Computers_emitter.txt" : "particles/Sparks_Warrens_Computers_emitter.txt"
	]
	faces_player(integer) : "Faces Player [-?]" : 1 : "[VTMB] Unknown yet..."

	// inputs
	input Noise(float) : "Set amount of noise [-?]. Not tested."
	
// not supported by original VTMB game.
	TouchType(choices) : "Touch Type (tripwire)" : 0 : "[probably unsupportd, need test] 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"
	]

	input Alpha(integer) : "[probably unsupportd, need test] Sets the beam's alpha (0 - 255)."
	input Color(color255) : "[probably unsupportd, need test] Sets the beam's render color (R G B)."
	input Amplitude(float) : "[probably unsupportd, need test] Set the amplitude of beam noise (0 - 255)."

	output OnTouchedByEntity(void) : "[probably unsupportd, need test] Fired when an entity touches the beam. Only fired if the entity passes the 'Touch Type' choice."
]





//===================================================================================================================
// env_cubemap [common]
//===================================================================================================================
// not changed.

@PointClass color(0 0 255) sidelist(sides) iconsprite("editor/env_cubemap.vmt") = 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."
]




//===================================================================================================================
// env_fade [common]
//===================================================================================================================
// not changed.
// inserted to use modified classes.

@PointClass base(Targetname,Origin) iconsprite("editor/env_fade") = env_fade : 
	"An entity that controls screen fades."
[
	spawnflags(flags) =
	[
		1: "Fade From" : 0
		2: "Modulate" : 0
		8: "Stay Out" : 0
	]
	duration(string) : "Duration (seconds)" : "2" : "The time that it will take to fade the screen in or out."
	holdtime(string) : "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"
	
	// Inputs
	input Fade(void) : "Start the screen fade."

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






//===================================================================================================================
// env_physimpact [common]
//===================================================================================================================
// VTMB-adaptation:
//  fixed: angles(angle)
//  added: target_position

@PointClass base(Targetname,Parentname) line(255 255 255, targetname, directionentityname) iconsprite("editor/env_physexplosion.vmt") = 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: "No fall-off" : 0
		2: "Infinite Length" : 0
		4: "Ignore Mass" : 0
		8: "Ignore Surface Normal When Applying Force" : 1
	]

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

// vtmb ---
	target_position(origin) : "Target Position (X Y Z)" : "0 0 0" : "[VTMB] Unknown yet..."
]






//===================================================================================================================
// env_shake [common]
//===================================================================================================================
// not changed.
// inserted to use modified classes.

@PointClass base(Targetname,Parentname) sphere() iconsprite("editor/env_shake.vmt") = env_shake : 
	"An entity to control screen shake on players." 
[
	spawnflags(flags) =
	[
		1: "GlobalShake" : 0
		//2: "Disrupt player control" : 0 // doesn't work
		4: "In Air" : 0		// shakes objects even if they are not onground
		8: "Physics" : 0	// shakes physically as well as the camera
		16: "Ropes" : 0		// shakes ropes too.
		32: "DON'T shake view (for shaking ropes or physics only)" : 0
		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."
]






//===================================================================================================================
// env_shooter [common]
//===================================================================================================================
// VTMB-adaptation:
//  replaced: shootmodel("models/gibs/metalgibs.mdl")
//  removed: gibgravityscale (new)
//  removed: massoverride (new)

@PointClass base(gibshooterbase,RenderFields) iconsprite("editor/env_shooter.vmt") = env_shooter : 
	"An entity that shoots models, or sprites, out of its origin."
[
	shootmodel(studio) : "Model" : "models/gibs/metalgibs.mdl" : "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) :"Simulate" : 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 : "On fire" : 0
		4 : "strict remove after lifetime" : 0
	]
	nogibshadows(choices) :"Disable Shadows on Gibs" : 0 =
	[
		0: "No"
		1: "Yes"
	]
]






//===================================================================================================================
// env_spark [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Angles (included)
//  added: new io's

@PointClass base(Targetname,Parentname) iconsprite("editor/env_spark.vmt") = 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: "Start ON" : 0
		128: "Glow" : 0
		256: "Silent" : 0
		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."
	
// vtmb ----
	output OnSpark(void) : "Fired when the spark effect started."
]






//===================================================================================================================
// env_sprite [common]
//===================================================================================================================
// VTMB-adaptation:
//  added: spawnflag (4)
//  removed: DXLevelChoice (unused)
//  removed: GlowProxySize (new)
//  removed: HDRColorScale (new)
//  removed: Color*Value (new)
//  added: new io's

@PointClass base(Targetname,Parentname,RenderFields) size(-2 -2 -2, 2 2 2) sprite() color(20 140 20) = env_sprite : 
	"An entity that controls the drawing of a sprite in the world." 
[
	framerate(string) : "Framerate" : "10.0" : "Rate at which the sprite should animate, if at all."
	model(material) : "Sprite Name" : "sprites/glowa.vmt" : "Material of the sprite to be drawn.\n\nYou can also use models."
	scale(string) : "Scale" : "1.0" : "Scale multiplier of the sprite."
	spawnflags(flags) =
	[
		1: "Start on" : 0
		2: "Play Once" : 0
		4: "(unknown vtmb's)" : 0
	]

	// Inputs
	input Alpha(integer) : "Sets the sprite's alpha (0 - 255)."
	input Color(color255) : "Sets the sprite's color (R G B)."
	input HideSprite(void) : "Hide the sprite. Won't be drawn until the 'ShowSprite' input is received."
	input SetScale(float) : "Set the sprite's scale (0 - 8.0)."
	input ShowSprite(void) : "Show the sprite."
	input ToggleSprite(void) : "Toggle the sprite between hidden and shown."
	
// vtmb inputs
	input TurnOn(void) : "Set state of sprite to ON."
	input TurnOff(void) : "Set state of sprite to OFF."
	input Toggle(void) : "Toggle the sprite between hidden and shown."
]





//===================================================================================================================
// env_steam [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Angles (included)
//  removed: rollspeed (new)

@PointClass base(Targetname,Parentname) studioprop("models/editor/spot_cone.mdl") color(255 255 255) = env_steam : 
	"An entity used to create a jet of steam."
[
	spawnflags(flags) =
	[
		1 : "Emissive" : 0
	]

	InitialState(choices) : "Initial State" : 0 = 
	[
		0 : "Off"
		1 : "On"
	]

	//Type of particle to spew out
	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)" : "255 255 255"
	JetLength(integer) : "Length of steam jet" : 80 : "The length of the jet determines the lifetime of each particle."
	renderamt(integer) : "Translucency" : 255
	
	// 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."
]












	
	
	
	
	
	
	
	
	
	
	
	
	
	














//*******************************************************************************************************************
//*******************************************************************************************************************
// 
// FILTERS
// 
//*******************************************************************************************************************
//*******************************************************************************************************************


//===================================================================================================================
// CLASS: BaseFilter [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Negated
//  added: reverse_outcome ('negated' analogue)

@BaseClass base(Targetname) = BaseFilter
[
	// Inputs
	input TestActivator(void) : "Test the activator against the filter and fires OnPass or OnFail output."

	// 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."

// vtmb ----
	reverse_outcome(choices) : "Reverse Outcome [-?]" : 1 : "[VTMB] Whether to reverse the result of the subfilters, after combining them using the Logic Type chosen [not tested].\n"+
		"Reversing the outcome using the AND logic type means that any subfilter must fail for this filter to pass.\n"+
		"Reversing the outcome using the OR logic type means that all subfilters must fail for this filter to pass." =
	[
		0 : "No"
		1 : "Yes"
	]
]




//===================================================================================================================
// filter_activator_class [common]
//===================================================================================================================
// VTMB-adaptation:
//  changed: filterclass value

@FilterClass base(BaseFilter) iconsprite("editor/filter_class.vmt") = filter_activator_class :
	"A filter that filters by the class name of the activator."
[
	filterclass(string) : "Filter Classname" : "player" : "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."
]



//===================================================================================================================
// filter_activator_name [common]
//===================================================================================================================
// VTMB-adaptation:
//  added: spawnflags(1)

@FilterClass base(BaseFilter) iconsprite("editor/filter_name.vmt") = 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."

	spawnflags(flags) =
	[
		1 : "1 (unknown vtmb's)" : 0
	]
]



//===================================================================================================================
// filter_multi [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Negated (new)

@FilterClass base(BaseFilter) iconsprite("editor/filter_multiple.vmt") = 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)"
	]
	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."
]








































//*******************************************************************************************************************
//*******************************************************************************************************************
// 
// FUNCTION Entities
// 
//*******************************************************************************************************************
//*******************************************************************************************************************


//===================================================================================================================
// func_areaportal [common]
//===================================================================================================================
// VTMB-adaptation:
//  added: new io's

@SolidClass base(Targetname) 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 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."

// vtmb ----
	FadeStartDist(integer) : "Fade Start Distance [-?]" : 128 : "[VTMB] Unknown yet..."
	FadeDist(integer) : "Fade End Distance [-?]" : 512 : "[VTMB] Unknown yet..."
	TranslucencyLimit(float) : "Translucency Limit [-?]" : "0.0" : "[VTMB] Unknown yet..."

	input TurnOn(void) : "Set state of portal to ON."
	input TurnOff(void) : "Set state of portal to OFF."
]




//===================================================================================================================
// func_areaportalwindow [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: PortalVersion (new)
//  removed: Inputs (new)

@SolidClass base(Targetname) color(0 128 255) = 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 'target' brush model should enclose the func_areaportal window so no parts of it are culled by the window. If you use the optional foreground brush model, then it should enclose the 'target' brush model."
[
	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."
	TranslucencyLimit(string) : "Translucency limit"  : "0.2" : "This value limits the translucency of the bmodel and prevents it from becoming invisible when the viewer is right on top of it."
	BackgroundBModel(string) : "Foreground bmodel"   : "" : "(Optional) brush model that is drawn after the fading brush model. This model should have alpha in its textures so you can see through it."
]






//===================================================================================================================
// func_brush [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Shadow (included)
//  removed: excludednpc (new)
//  removed: invert_exclusion (new)
//  removed: solidbsp (new)
//  removed: vrad_brush_cast_shadows (new)
//  removed: spawnflags (new)
//  removed: inputs (new)
//  added: new io's

@SolidClass base(Targetname,Parentname,Global,Origin,EnableDisable,RenderFields,Inputfilter) = func_brush : 
	"An brush built entity with various features."+
	"[VTMB] Adds additional properties to object that it would not normally have.\nFor example, makes something climable, or useable or solid that is not normaly so (e.g. making a cat statue usable)."
[
	Solidity(choices) : "Solidity" : 0 : "Used to control the solidity/collision of these brushes." =
	[
		0 : "Toggle"
		1 : "Never Solid"
		2 : "Always Solid"
	]
	_minlight(string) : "Minimum Light Level" : : "The minimum level of ambient light that hits this brush."

// vtmb ----
	climbable(choices) : "Climbable Brush" : 0 : "[VTMB] Determines, can player climb to this brush, or not." =
	[
		0 : "No"
		1 : "Yes"
	]
	input Toggle(void) : "[VTMB] Toggle this brush state between enabled and disabled."
]







//===================================================================================================================
// func_detail [common]
//===================================================================================================================
// not changed.

@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."
[
]






//===================================================================================================================
// func_dustmotes [common]
//===================================================================================================================
// VTMB-adaptation:
//  added: SpriteName

@SolidClass base(Targetname,BModelParticleSpawner) = func_dustmotes : 
	"A brush entity that spawns sparkling dust motes within its volume."
[
	SizeMin(string) : "Minimum Particle Size" : 10
	SizeMax(string) : "Maximum Particle Size" : 20
	Alpha(integer) : "Alpha" : 255

// vtmb ----
	SpriteName(sprite) : "Sprite Name" : "materials/particle/sparkles.vmt" : "[VTMB] Material of the sprite to be drawn."
]







//===================================================================================================================
// func_illusionary [common]
//===================================================================================================================
// not changed.
// inserted to use modified classes.

@SolidClass base(Targetname,Parentname,Origin,RenderFields) = func_illusionary : 
	"Fake Wall/Light.\n\nLegacy support." 
[
	_minlight(string) : "Minimum Light Level" : : "The minimum level of ambient light that hits this brush."
]







//===================================================================================================================
// func_lod [common]
//===================================================================================================================
// not changed.
// inserted to use modified classes.

@SolidClass base(Targetname) sphere(DisappearDist) = 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."
[
	DisappearDist(integer)    : "Disappear Distance" : 2000 : "Distance at which these brushes should fade out."
	Solid(choices) : "Solid" : 0 : "Set whether or not these brushes should collide with other entities." =
	[
		0: "Solid"
		1: "Nonsolid"
	]
]









//===================================================================================================================
// func_monitor [common, HL2-based]
//===================================================================================================================
// VTMB-adaptation:
//  added: desc.note
//  added: view_entity
//  added: spawnflags

@SolidClass base(func_brush) = func_monitor :
	"A monitor that renders the view from a given point_camera entity.\n"+
	"[VTMB] This plugin connects a monitor prop to a camera and enables turning it on or off."

[
	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(string) : "Sets the camera to use for this monitor. Takes the name of a point_camera entity in the map."

// vtmb ----
	view_entity(target_destination) : "View Entity" : : "[VTMB] Related entity to view [not tested]."
	spawnflags(flags) =
	[
		1: "1 (unknown yet)" : 0
	]
]








//===================================================================================================================
// func_movelinear [common]
//===================================================================================================================
// VTMB-adaptation:
//  added: base(VMovingConnects)
//  removed: outputs (new)
//  added: new spawnflags
//  added: loopsound
//  added: new io's

@SolidClass base(Targetname,Parentname,Origin,RenderFields,VMovingConnects) = func_movelinear :
	"A brush entity that moves linearly along a given distance, in a given direction."
[
	movedir(angle) : "Move Direction (Y Z X)" : "0 0 0" : "The direction the brushes will move, when told to."
	spawnflags(flags) =
	[
		0 : "Initial State" : 0
		8 : "Not Solid" : 0
		32 : "Flag 32 (unknown yet)" : 0
		256 : "Flag 256 (unknown yet)" : 0
	]

	startposition(float) : "Start Position" : 0 : "Position of 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(integer) : "Speed" : 100 : "The speed that the brush moves, in inches per second."
	movedistance(float) : "Move Distance" : 100 : "The distance from the starting point that the brush should move, in inches."
	blockdamage(float) : "Block Damage" : 0 : "The amount of damage to do to any entity that blocks the brushes, per frame."
	startsound(sound) : "Start Sound" : "Area/Special/Observatory/Observation_Doors_Start_1.wav" : "Sound played when the brush starts moving."
	stopsound(sound) : "Stop Sound" : "Area/Special/Observatory/Observation_Doors_Stop_1.wav" : "Sound played when the brush stops moving."
	
	// 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 between 0.0 and 1.0, where 0 is the starting position and 1 is the starting position + (move direction * move distance)."
	input SetSpeed(float) : "Set the speed and update immediately."

// vtmb ----
	loopsound(sound) : "Movement Sound" : "Area/Special/Observatory/Observation_Doors_Loop_1.wav" : "[VTMB] Sound played when the brush moves."

	// inputs
	input StartMoving(void) : "[VTMB] Start brush moving."
	input StopMoving(void) : "[VTMB] Stop brush moving."
	input ToggleMovement(void) : "[VTMB] Toggle movement between start and stop."
	input SetSpeed(float) : "[VTMB] Set brush moving speed."

	// outputs
	output Position(integer)   : "[VTMB] Fired whenever the brush moves. The output is the position of brush from 0 to 1..."
	output OnStop(void) : "[VTMB] Fired when brush stopped its moving."
	output OnReachStart(void) : "[VTMB] Fired when brush reaches start movement point."
	output OnReachEnd(void) : "[VTMB] Fired when brush reaches end movement point."
	output OnMoveTowardsStart(void) : "[VTMB] Fired when move toward starts [untested]."
	output OnMoveTowardsEnd(void) : "[VTMB] Fired when move toward ends [untested]."
]









//===================================================================================================================
// func_rotating [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Angles,Shadow (included)
//  mark as unsupported: message
//  removed: solidbsp (new)

@SolidClass base(Targetname,Parentname,Origin,RenderFields) = 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 %."
	volume(integer) : "Volume (10 = loudest)" : 10 : "The volume of the rotation sound."
	spawnflags(flags) =
	[
		1 : "Start ON"  : 0
		2 : "Reverse Direction" : 0
		4 : "X Axis"  : 0
		8 : "Y Axis"  : 0
		16: "Acc/Dcc" : 0
		32: "Fan Pain" : 0
		64: "Not Solid" : 0
		128: "Small Sound Radius" : 0
		256: "Medium Sound Radius" : 0
		512: "Large Sound Radius" : 1
	]
	dmg(integer) : "Blocking Damage" : 0 : "Damage done to any entity that blocks the rotation, per frame."
	_minlight(string) : "Minimum Light Level" : : "The minimum level of ambient light that hits this brush."

	// Inputs
	input SetSpeed(integer) : "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."
	input StartBackward(void) : "Start the rotator rotating backward."
	input Toggle(void) : "Toggle the rotator between rotating and not rotating."
	input Reverse(void) : "Reverse the direction of rotation of the rotator."

// vtmb ----
	sounds(choices) : "Sounds" : 0 : "[VTMB] Sounds to play when rotating..." = 
	[
		0: "None (Silent)"
		21: "lever or wheel: turn + move sqeek"
		22: "lever or wheel: latch + release gas"
		23: "lever or wheel: ratchet + sqeek"
		24: "lever or wheel: large ratchet"
		25: "lever or wheel: clanky + gas release"
		26: "lever or wheel: latch + large metal thud"
		27: "lever or wheel: smaller ratchet"
		28: "lever or wheel: smaller lever move"
	]
	
// probably unsupported (vtmb)
	message(sound) : "[HL2] Rotating sound WAV" : : "[Probably not supported by original vtmb game. Use 'sounds' instead -?] Sound to play while rotating."
]








































//*******************************************************************************************************************
//*******************************************************************************************************************
// 
// INTERFACE
// 
//*******************************************************************************************************************
//*******************************************************************************************************************


//===================================================================================================================
// game_text [common]
//===================================================================================================================
// VTMB-adaptation:
//  fixed: description
//  fixed: y position
//  removed: master (unused)
//  added: new io's

@PointClass base(Targetname) iconsprite("editor/game_text.vmt") = game_text : 
	"An entity that displays text on screen." 
[
	spawnflags(flags) =
	[
		1: "All Players" : 0
	]

	message(string) : "Message Text" : "" : "Message to display onscreen.\n\nYou can also define variables from localized 'scripts/*.txt' files (e.g. #MyMessage)."
	x(string) : "X (0 - 1.0 = left to right) (-1 centers)" : "-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(string) : "Y (0 - 1.0 = top to bottom) (-1 centers)" : "0.8" : "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) : "Color1" : "100 100 100"
	color2(color255) : "Color2" : "240 110 0"
	fadein(string) : "Fade in Time (or character scan time)" : "1.5" : "The time it should take for the text to fully fade in."
	fadeout(string) : "Fade Out Time" : "0.5" : "The time it should take for the text to fade out, after the hold time has expired."
	holdtime(string) : "Hold Time" : "1.2" : "The time the text should stay onscreen, after fading in, before it begins to fade out."
	fxtime(string) : "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 four 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." =
	[
		1 : "Channel 1"
		2 : "Channel 2"
		3 : "Channel 3" 
		4 : "Channel 4"
	]

	// Inputs
	input Display(void) : "Display the message text."
	
// vtmb-inputs
	input DisplayWindow(void) : "Displays enveloping message window."
	input CloseWindow(void) : "Closes enveloping message window."
]




//===================================================================================================================
// game_ui [common]
//===================================================================================================================
// VTMB-adaptation:
//  added: description note
//  removed: Unpressed* outputs (new)

@PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = game_ui : 
	"An entity used to override player input when the player is looking at it.\n\n"+
	"[VTMB] NOTE: Does not appear to work."
[
	spawnflags(flags) =
	[
		32 : "Freeze Player" : 1
		64 : "Hide Weapon" : 1
		128 : "+Use Deactivates" : 1
		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 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."
]









































//*******************************************************************************************************************
//*******************************************************************************************************************
// 
// Hints & Nodes
// 
//*******************************************************************************************************************
//*******************************************************************************************************************


//===================================================================================================================
// CLASS: Node [common]
//===================================================================================================================
// not changed.

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


//===================================================================================================================
// CLASS: HintNode [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: usunes hinntype's values
//  removed: hintactivity,nodeFOV (new)
//  removed: TargetNode,IgnoreFacing (new)
//  removed: MinimumState,MaximumState (new)
//  removed: spawnflags (new)

@BaseClass base(Node) = HintNode 
[
	hinttype(choices) : "Hint" : 0 = 
	[
		  0 : "None"

		  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: "Crouch Cover Medium"
		101: "Crouch Cover Low"
	]

	// Does not inherit from EnableDisable, as node itself will
	// use that.  This is enabling/disabling of the hint only
	StartHintDisabled(choices) : "Start Hint Disabled" : 0 =
	[
		0 : "No"
		1 : "Yes"
	]
	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."

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





//===================================================================================================================
// info_hint [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Angles (included)

@PointClass base(Targetname,HintNode) studio("models/editor/node_hint.mdl") color(255 255 255) = 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'."
[
]



//===================================================================================================================
// info_node [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: spawnflags (new)

@PointClass base(Targetname,Node) studio("models/editor/ground_node.mdl") color(232 219 8) = info_node :
	"A navigation node for ground moving NPCs. Navigation nodes are baked into the nodegraph so that NPCs can move " +
	"to them. Ground nodes fall to the ground when they spawn."
[
]




//===================================================================================================================
// info_node_climb [common]
//===================================================================================================================
// VTMB-adaptation
//  removed: Angles (included)
//  added: hinttype

@PointClass base(Targetname,HintNode) studio("models/editor/climb_node.mdl") color(153 215 103) = info_node_climb : 
	"A climb-node for AI navigation. Only usable by NPCs that can climb."
[
	hinttype(choices) : "Hint" : 10000 = [ 10000 : "Untested VTMB's (10000)" ]	
]




//===================================================================================================================
// info_node_link [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: linktype (new)
//  removed: InvertAllow (new)
//  removed: spawnflags (new)

@PointClass base(Targetname) color(220 180 0) size(-8 -8 -8, 8 8 8) line(255 255 255, nodeid, StartNode, nodeid, EndNode) = info_node_link :
	"A dynamic connection between two navigation nodes. You specify the node IDs of the start and end nodes, and then you can use entity I/O " +
	"to turn on and off the connection. This could be used to create or destroy a connection in the nodegraph because of some event in your map " +
	"(a bridge being created/destroyed, etc)."
[
    StartNode(integer) : "Start node ID" : : "The node ID of one end of the node connection."
    EndNode(integer) : "End node ID" : : "The node ID of one end of the node connection."
	initialstate(choices) : "Initial State" : 1 =
	[
		0 : "Off"
		1 : "On"
	]
	AllowUse(string) : "Allow Pass When Off" : : "Entity or class to allow passage even when node is off"

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










































//*******************************************************************************************************************
//*******************************************************************************************************************
// 
// INFO Entities
// 
//*******************************************************************************************************************
//*******************************************************************************************************************


//===================================================================================================================
// info_landmark [common]
//===================================================================================================================
// VTMB-adaptation:
//  added: base(Parentname)
//  added: spawnflags
//  added: new io's

@PointClass base(Targetname,Parentname) iconsprite("editor/info_landmark") = 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."
[
// vtmb ----
	spawnflags(flags) =
	[
		1 : "1 (unknown yet)" : 0
		2 : "2 (unknown yet)" : 0
	]
	
	// outputs
	output OnSpawnNoCopCars(void) : "Fired when no cop cars spawns."
	output OnSpawnOneCopCar(void) : "Wired when one cop car spawns."
	output OnSpawnTwoCopCars(void) : "Wired when two cop cars spawns."
	output OnDelaySpawnOneCopCar(void) : "Wired when spawning one cop car delays [-?]."
	output OnDelaySpawnTwoCopCars(void) : "Wired when spawning two cop cars delays [-?]."
	output OnCopsInPursuit(void) : "Fired when cops are in pursuit state."
	output OnHeightenedAlert(void) : "Fired when player have heightened alert level."
	output OnEnterMapHere(void) : "Wired when player enters map in this place."
]




//===================================================================================================================
// info_player_start [common]
//===================================================================================================================
// VTMB-adaptation:
//  added: new io's

@BaseClass color(0 255 0) = PlayerClass []
@PointClass base(PlayerClass,Angles) studio("models/editor/playerstart.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: "Master (Has priority if multiple info_player_starts exist)" : 0
	]
	
	// outputs (-- how can this use it?)
	output OnSpawnNoCopCars(void) : "Fired when no cop cars spawns."
	output OnSpawnOneCopCar(void) : "Wired when one cop car spawns."
	output OnSpawnTwoCopCars(void) : "Wired when two cop cars spawns."
	output OnDelaySpawnOneCopCar(void) : "Wired when spawning one cop car delays [-?]."
	output OnDelaySpawnTwoCopCars(void) : "Wired when spawning two cop cars delays [-?]."
	output OnCopsInPursuit(void) : "Fired when cops are in pursuit state."
	output OnHeightenedAlert(void) : "Fired when player have heightened alert level."
	output OnEnterMapHere(void) : "Wired when player enters map in this place."
]




//===================================================================================================================
// info_target [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Angles (included)
//  removed: spawnflags (new)

@PointClass base(Targetname,Parentname) iconsprite("editor/info_target.vmt") = 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)"
[
]




//===================================================================================================================
// info_lighting [common]
//===================================================================================================================
// not changed.
// inserted to use modified classes.

@PointClass base(Targetname) iconsprite("editor/info_lighting.vmt")  = 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)."
[
]





//===================================================================================================================
// info_teleport_destination [common]
//===================================================================================================================
// VTMB-adaptation:
//  added: desc.note

@PointClass base(Targetname,Parentname,PlayerClass) 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.\n\n"+
	"[VTMB] NOTE: Despite its name, teleportation doesn't require a special node. Any named Entity will do. This class is mostly used to clarify the nodes purpose to an observant reader."
[
]




//===================================================================================================================
// point_teleport [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Angles (duplicated)
//  added: output (OnEnterMapHere)
//  fixed: display icon

@PointClass base(Targetname) iconsprite("editor/info_target.vmt") = 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" : "!player" : "Name of the entity that will be teleported."
	spawnflags(flags) =
	[
		1 : "Teleport Home" : 0
		2 : "Into Duck (episodic)" : 0
	]

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

	// outputs (vtmb)
	output OnEnterMapHere(void) : "Fired when player enters map in place of this entity [-?]."
]




//===================================================================================================================
// infodecal [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed LowPriority (new)

@PointClass base(Targetname) decal() studio("models/editor/axis_helper_thick.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(decal) : "Decal Texture"

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








































//*******************************************************************************************************************
//*******************************************************************************************************************
// 
// LIGHTS
// 
//*******************************************************************************************************************
//*******************************************************************************************************************


//===================================================================================================================
// CLASS: Light [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: _lightHDR,_lightscaleHDR (new)
//  removed: _fifty_percent_distance,_zero_percent_distance (new)
//  removed: _hardfalloff (new)

@BaseClass color(180 10 180) = Light
[
	_light(color255) : "Brightness" : "255 255 255 200"
	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."
	_constant_attn(string)	: "Constant" : "0"
	_linear_attn(string)	: "Linear" : "0"
	_quadratic_attn(string)	: "Quadratic" : "1"

	// 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."
]




//===================================================================================================================
// light [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: spheres (new)
//  added: fade_time

@PointClass base(Targetname,Light) light() iconsprite("editor/light.vmt") = light :
	"An invisible omnidirectional lightsource."
[
	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."
	spawnflags(Flags) = [ 1 : "Initially dark" : 0 ]
	_distance(integer) : "Maximum Distance" : 0 : "This is the distance that light is allowed to cast, in inches."

// vtmb ----
	fade_time(float) : "Fade Time" : "0.05" : "[VTMB] The time during which the light disappears..."
	_inner_cone(integer) : "[Extra] Inner (bright) angle" : 30 : "[VTMB] Extended light properties..."
	_cone(integer) : "[Extra] Outer (fading) angle" : 45 : "[VTMB] Extended light properties..."
	_exponent(integer) : "[Extra] Focus" : 1 : "[VTMB] Extended light properties..."
	pitch(integer) : "[Extra] Pitch" : -90 : "[VTMB] Extended light properties..."
	brightness(integer) : "[Extra] Light brightness" : 0 : "[VTMB] Extended light properties..."
	distance(float) : "[Extra] Maximum distance" : 120 : "[VTMB] Extended light properties. This is the distance that light is allowed to cast, in inches."
	spotlight_radius(float) : "[Extra] Spotlight end radius" : 80 : "[VTMB] Extended light properties. This is the radius of the light, in inches, at the object that it is hitting."
]




//===================================================================================================================
// light_spot [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Angles (included)
//  removed: spheres (new)
//  added: fade_time

@PointClass base(Targetname,Light) lightprop("models/editor/spot.mdl") lightcone() = 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
	_distance(integer) : "Maximum distance" : 0 : "This is the distance that light is allowed to cast, in inches."
	pitch(integer) : "Pitch" : -90
	spawnflags(Flags) = [ 1 : "Initially dark" : 0 ]

// vtmb ----
	fade_time(float) : "Fade Time" : "0.05" : "[VTMB] The time during which the light disappears..."
]




//===================================================================================================================
// light_dynamic [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Angles (included)

@PointClass base(Targetname,Parentname) iconsprite("editor/light.vmt") sphere(distance) lightcone() size(-4 -4 -4, 4 4 4) = 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 inches."
	spotlight_radius(float) : "Spotlight end radius" : 80 : "This is the radius of the light, in inches, 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 : "Do not light world" : 0 
		2 : "Do not light models" : 0
		4 : "Add Displacement Alpha" : 0
		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."
]




//===================================================================================================================
// light_environment [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: _lightHDR,_lightscaleHDR (new)
//  removed: _ambientHDR,_AmbientScaleHDR (new)
//  removed: SunSpreadAngle (new)
//  fixed: pitch (duplicated)

@PointClass base(Angles) iconsprite("editor/light_env.vmt") = light_environment : 
	"Sets the color and angle of the light from the sun and sky."
[
	_light(color255) : "Brightness" : "255 255 255 200"
	_ambient(color255) : "Ambient" : "255 255 255 20"
	pitch(integer) : "Pitch" : 0 : "The downward pitch of the light from the sun. 0 is horizontal, -90 is straight down."
]








































//*******************************************************************************************************************
//*******************************************************************************************************************
// 
// LOGICAL Entities
// 
//*******************************************************************************************************************
//*******************************************************************************************************************


//===================================================================================================================
// logic_auto [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: globalstate (unused)
//  removed: OnBackgroundMap (new)
//  removed: OnMultiNewMap,OnMultiNewRound (new)
//  marked as unsupported: Outputs
//  added: targetname
//  added: StartHidden
//  added: spawnflags(2)

@PointClass iconsprite("editor/logic_auto.vmt") = 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 : "Remove on fire" : 1
		2 : "(unknown vtmb's)" : 0
	]

// vtmb ----
	targetname(target_source) : "Name" : : "The name that other entities refer to this entity by."
	StartHidden(choices) : "Start Hidden" : 0 : "[VTMB] Don't spawn the entity while the script comand didn't sent." = 
	[ 
		0 : "No"
		1 : "Yes"
	]
	output OnMapLoad(void) : "Fired when the map is loaded for any reason."

// unsupported by vtmb
	output OnMapSpawn(void) : "[HL2-only] Fired when the map is loaded for any reason. In VTMB game use 'OnMapLoad' instead."
	output OnNewGame(void) : "[HL2-only] Fired when the map is loaded to start a new game."
	output OnLoadGame(void) : "[HL2-only] Fired when the map is loaded from a saved game."
	output OnMapTransition(void) : "[HL2-only] Fired when the map is loaded due to a level transition."
]



//===================================================================================================================
// logic_case [common]
//===================================================================================================================

@PointClass base(Targetname) iconsprite("editor/logic_case.vmt") = 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\n" +
	"For 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\n" +
	"This 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."
[
	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"

	// Inputs
	input InValue(string) : "Input value to compare to the case values"
	input PickRandom(void) : "Fires a random OnCase output with at least one connection"
	
	// Outputs
	output OnCase01(void) : "Fires when the input value equals the Case01 value"
	output OnCase02(void) : "Fires when the input value equals the Case02 value"
	output OnCase03(void) : "Fires when the input value equals the Case03 value"
	output OnCase04(void) : "Fires when the input value equals the Case04 value"
	output OnCase05(void) : "Fires when the input value equals the Case05 value"
	output OnCase06(void) : "Fires when the input value equals the Case06 value"
	output OnCase07(void) : "Fires when the input value equals the Case07 value"
	output OnCase08(void) : "Fires when the input value equals the Case08 value"
	output OnCase09(void) : "Fires when the input value equals the Case09 value"
	output OnCase10(void) : "Fires when the input value equals the Case10 value"
	output OnCase11(void) : "Fires when the input value equals the Case11 value"
	output OnCase12(void) : "Fires when the input value equals the Case12 value"
	output OnCase13(void) : "Fires when the input value equals the Case13 value"
	output OnCase14(void) : "Fires when the input value equals the Case14 value"
	output OnCase15(void) : "Fires when the input value equals the Case15 value"
	output OnCase16(void) : "Fires when the input value equals the Case16 value"
	output OnDefault(void) : "Fires when the input value does not equal any of the Case values"
]



//===================================================================================================================
// logic_choreographed_scene [common, HL2-based]
//===================================================================================================================
// VTMB-adaptation:
//  added: vtmb-notes
//  removed: target > 4 (new)
//  removed: OnTrigger > 4 (new)
//  removed: busyactor,onplayerdeath (new)
//  removed: some inputs (new)
//  added: BaseAnim,MaleAnim,FemaleAnim
//  added: override_speech_target
//  added: position_start,position_end
//  added: force_lod,force_lod_2
//  added: hide_ents,full_sound

@PointClass color(0 0 255) base(Targetname) iconsprite("editor/choreo_scene.vmt") = logic_choreographed_scene :
	"Manages a choreographed scene of one or more actors.\n\n"+
	"[VTMB] NOTES:\n\n"+
    "Some MDL files contain skeletal animation info for more than 1 model."+
    "logic_choreographed_scene allows you to identify default models for use by the animation.\n\n"+
    "The 'SceneFile' contains references to named Entities and Duration information for the animation (is it looping, 1 shot, how long should it play, etc...).\n"+
	"Note that this does NOT restrict the model.\n\n"+
    "You can create the model at runtime to be any compatible model you wish ( VTMB does this in the intro ), so long as you name it accordingly.\n\n"+
    "'BaseAnim' points to the MDL file containing the multi-skeletal animation."

[
	// Keys
	SceneFile(scene) : "Scene file"

	// Links
	target1(target_destination) : "Target 1"
	target2(target_destination) : "Target 2"
	target3(target_destination) : "Target 3"
	target4(target_destination) : "Target 4"

	// 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"

	// 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"

// vtmb ----
	BaseAnim(studio) : "Base Animation" : : "Points to the MDL file containing the multi-skeletal animation."
	MaleAnim(studio) : "Male Animation" : : "Points to the MDL file containing the multi-skeletal animation [-?]."
	FemaleAnim(studio) : "Male Animation" : : "Points to the MDL file containing the multi-skeletal animation [-?]."
	override_speech_target(target_destination) : "Override Speech Target" : : "Overrides target that is directed speech."
	position_start(integer) : "Start Position [-?]" : 0 : "[VTMB] Unknown yet..."
	position_end(integer) : "End Position [-?]" : 3 : "[VTMB] Unknown yet..."
	full_sound(choices) : "Full Sound [-?]" : "1" : "[VTMB] Unknown yet..." =
	[
		0 : "No"
		1 : "Yes"
	]
	hide_ents(choices) : "Hide Entites" : "0" : "Hides entites [-? not tested]." =
	[
		0 : "No"
		1 : "Yes"
	]
	force_lod(choices) : "Force LOD 1 [-?]" : "0" : "[VTMB] Unknown yet..." =
	[
		0 : "No"
		1 : "Yes"
	]
	force_lod_2(choices) : "Force LOD 2 [-?]" : "0" : "[VTMB] Unknown yet..." =
	[
		0 : "No"
		1 : "Yes"
	]
]




//===================================================================================================================
// logic_relay [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed OnSpawn (new)
//  added: new spawnflags
//  added: new outputs

@PointClass base(Targetname,EnableDisable) iconsprite("editor/logic_relay.vmt") = logic_relay :
	"A message forwarder. Fires an OnTrigger output when triggered, and " +
	"can be disabled to prevent forwarding outputs.\n\n" +
	"Useful 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: "Only trigger once" : 0
		2: "Allow fast retrigger" : 0
		8: "(unknown vtmb's)" : 0
		16: "(unknown vtmb's)" : 0
		48: "(unknown vtmb's)" : 0
		1024: "(unknown vtmb's)" : 0
	]

	// Inputs
	input Trigger(void) : "Trigger the relay, causing its OnTrigger output to fire if it is enabled."
	input Toggle(void) : "Toggle the relay between enabled and disabled."
	input CancelPending(void) : "Cancel any events fired by this relay that are currently pending in the I/O event queue."
	
	// Outputs
	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."

// vtmb ----
	output OnDialogEnd(void) : "[VTMB] Fired when dialog ends [not tested]."
	output OnMapLoad(void) : "[VTMB] Fired when the map is loaded for any reason."
]
	
	
	
	

//===================================================================================================================
// logic_timer [common]
//===================================================================================================================
// VTMB-adaptation:
//  added: new spawnflag
//  removed: AddToTimer (new)
//  removed: SubtractFromTimer (new)

@PointClass base(Targetname,EnableDisable) iconsprite("editor/logic_timer.vmt") = 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."
[
	// Keys
	spawnflags(flags) =
	[
		1 : "Oscillator (alternates between OnTimerHigh and OnTimerLow outputs)" : 0
		2 : "(unknown vtmb's)" : 0
	]
	UseRandomTime(choices) : "Use Random Time" : 0 =
	[
		0 : "No"
		1 : "Yes"
	]
	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."

	// 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."
]





//===================================================================================================================
// math_counter [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: some io's (new)

@PointClass base(Targetname,EnableDisable) iconsprite("editor/math_counter.vmt") = 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."
[
	// Keys
	startvalue(integer) : "Initial Value" : 0 : "Starting value for the counter."
	min(integer) : "Minimum Legal Value" : 0 : "Minimum legal value for the counter. If min=0 and max=0, no clamping is performed."
	max(integer) : "Maximum Legal Value" : 0 : "Maximum legal value for the counter. If min=0 and max=0, no clamping is performed."

	// Inputs
	input Add(integer) : "Add an amount to the counter and fire the OutValue output with the result."
	input Divide(integer): "Divide the counter by an amount and fire the OutValue output with the result."
	input Multiply(integer): "Multiply the counter by an amount and fire the OutValue output with the result."
	input SetValue(integer): "Set the counter to a new value and fire the OutValue output with the result."
	input SetValueNoFire(integer): "Set the counter to a new value without firing any outputs."
	input Subtract(integer): "Subtract an amount from the counter and fire the OutValue output with the result."

	// Outputs
	output OutValue(integer) : "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."
]









































//*******************************************************************************************************************
//*******************************************************************************************************************
//
// Moving, Keyframes and Ropes
//
//*******************************************************************************************************************
//*******************************************************************************************************************


//===================================================================================================================
// CLASS: RopeKeyFrame [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: DxLevelChoice (unused)
//  removed: NoWind (new)

@BaseClass = RopeKeyFrame
[
	spawnflags(Flags) = 
	[
		1 :  "Auto Resize" : 0
	]

	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(choices) : "Barbed" : 0 : "Test effect that makes the rope look sharper and more barbed." =
	[
		0 : "No"
		1 : "Yes"
	] 
	
	Width(string) : "Width (1-64)" : "2" : "Width of the rope."

	TextureScale(string) : "Texture Scale" : "1" : "This changes the texture resolution. The default resolution is 4 pixels per inch. Larger values stretch the texture and smaller values scrunch it up."
	
	Collide(choices) : "Collide with world" : 0 =
	[
		0 : "No"
		1 : "Yes"
	]

	Dangling(choices) : "Start Dangling" : 0 : "When set to Yes, the rope starts out detached from its target endpoint." =
	[
		0 : "No"
		1 : "Yes"
	] 

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

	RopeMaterial(material) : "Rope Material" : "cable/cable.vmt" : "The material to use when rendering the rope."

	// Inputs
	input SetScrollSpeed(float) : "Set the speed at which the texture scrolls."
	input SetForce(string) : "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."
]




//===================================================================================================================
// CLASS: VRopeKeyFrame [VTMB-specific]
//===================================================================================================================

@BaseClass base(RopeKeyFrame) = VRopeKeyFrame
[
	MoveTime(float) : "Move Time (secs)" : "1" : "[VTMB] Rope movie time (not tested)."
	Tension(integer) : "Rope Tension" : 20 : "[VTMB] Rope's tension when breakable (not tested)."
	RopeShader(choices) : "Rope Shader" : 0 : "[VTMB] Shader that will be used for entity processing/rendering." =
	[
		0 : "Shader 0 (default)"
		2 : "Shader 2 (unknown yet)"
		5 : "Shader 5 (unknown yet)"
	]
	TimeControl(choices) : "Time Modifier [-?]" : 0 : "[VTMB] Unknown yet..." =
	[
		0 : "Linear [-?]"
		1 : "Accel [-?]"
		2 : "Deaccel [-?]"
	]
]





//===================================================================================================================
// keyframe_rope [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Angles (included)
//  replaced: base(RopeKeyFrame)-> VRopeKeyFrame

@KeyFrameClass base(Targetname,Parentname,KeyFrame,VRopeKeyFrame) studio("models/editor/axis_helper_thick.mdl") keyframe() = keyframe_rope : 
	"A node entity that marks a point in a rope. The first node in the rope should be a move_rope, followed by 1 or more keyframe_ropes."
[
]




//===================================================================================================================
// move_rope [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Angles (included)
//  replaced: base(RopeKeyFrame)-> VRopeKeyFrame

@MoveClass base(Targetname,Parentname,KeyFrame,VRopeKeyFrame) studio("models/editor/axis_helper.mdl") animator() = move_rope : 
	"The first node in set of nodes that are used to place ropes in the world. It should connect to 1 or more keyframe_rope entities."
[
	PositionInterpolator(choices) : "Position Interpolator" : 2 : "Curve Type. Currently only type 2 (Rope) is fully supported." =
	[
		0 : "Linear"
		1 : "Catmull-Rom Spline"
		2 : "Rope"
	]
]








































//*******************************************************************************************************************
//*******************************************************************************************************************
// 
// PHYSICS POINT Entities
// 
//*******************************************************************************************************************
//*******************************************************************************************************************


//===================================================================================================================
// CLASS: TwoObjectPhysics [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: teleportfollowdistance (new)
//  added: output OnConstraintBroken

@BaseClass base(Targetname) = TwoObjectPhysics
[
	spawnflags(flags) =
	[
		1: "No Collision until break" : 0
		// 2 is defined independently by subclasses, do not reuse
		4: "Start inactive" : 0
		8: "Change mass to keep stable attachment to world" : 0
		16: "Do not connect entities until turned on" : 0
	]
	attach1(target_destination) : "Entity 1" : ""
	attach2(target_destination) : "Entity 2" : ""
	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."
	
	// 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."

// vtmb ----
	output OnConstraintBroken(void) : "Fired when a player breaks through the constraint."
]



//===================================================================================================================
// CLASS: ForceController [common]
//===================================================================================================================
// not changed.
// inserted to use modified classes.

@BaseClass base(Targetname) = ForceController
[
	spawnflags(flags) =
	[
		// Thrust is on by default (will turn off in forcetime)
		1: "Start On" : 0
		// Apply linear force (if off, torque only)
		2: "Apply Force" : 1
		// Apply rotational force (torque - if off, linear only)
		4: "Apply Torque" : 1
		// Maintain local relationship with the attached object
		8: "Orient Locally" : 1
		// Impulse is independent of object's mass (impulse is acceleration NOT force)
		16: "Ignore Mass" : 0
	]
	attach1(target_destination) : "Attached Object" : "" : "Object to apply the force to."

	forcetime(string) : "Time of Force (0=inf)" : "0" : "Automatic shut-off after this time has passed (0 = stay on forever or until deactivated)"

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





//===================================================================================================================
// phys_ballsocket [common]
//===================================================================================================================
// not changed.
// inserted to use modified classes.

@PointClass base(TwoObjectPhysics) iconsprite("editor/phys_ballsocket.vmt") = phys_ballsocket : 
	"A constraint that keeps the position of two objects fixed, relative to the constraint's origin. It does not affect rotation."
[
]



//===================================================================================================================
// phys_constraint [common]
//===================================================================================================================
// not changed.
// inserted to use modified classes.

@PointClass base(TwoObjectPhysics) studio("models/editor/axis_helper.mdl") = phys_constraint : 
	"A constraint that keeps the relative position and orientation of two objects fixed."
[
	spawnflags(flags) =
	[
		1: "No Collision until break" : 1
	]
]



//===================================================================================================================
// phys_constraintsystem [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: additionaliterations (new)

@PointClass base(Targetname) = 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."
[
]


//===================================================================================================================
// phys_convert [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: massoverride (new)
//  added: vtmb-note
//  added: makedebris
//  added: make_physhand_target

@PointClass base(Targetname) size(-8 -8 -8, 8 8 8) color(0 0 255) = 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.\n\n"+
	"NOTE: In VTMB-game it usually uses to convert door to debris."
[
	spawnflags(flags) =
	[
		1: "Convert Asleep" : 0
		2: "Convert As Debris" : 0
	]
	target(target_destination) : "Entity to convert" : : "Name of the entity that will be converted to a physics object when the ConvertTarget input is fired."
	swapmodel(string) : "Model Swap Entity"

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

	// Inputs
	input ConvertTarget(void) : "Converts this entity's target to a physically simulated object." 
	
// vtmb ----
	makedebris(choices) : "Make Debris" : 1 : "Makes debris when conversion end." = 
	[
		0 : "No"
		1 : "Yes"
	]
	make_physhand_target(choices) : "Make Physhand Target" : 1 : "Makes debris that can be taked by physical hands." = 
	[
		0 : "No"
		1 : "Yes"
	]
]



//===================================================================================================================
// phys_hinge [common]
//===================================================================================================================
// VTMB-adaptation:
//  deleted: episodic properties (new)
//  deleted: SystemLoadScale (new)
//  deleted: SetAngularVelocity (new)

@PointClass halfgridsnap size(-8 -8 -8, 8 8 8) base(TwoObjectPhysics) = 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"
]



//===================================================================================================================
// phys_thruster [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Angles (included)

@PointClass base(ForceController) = 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."
[
	force(string) : "Force" : "0" : "Force (will be integrated, units are force kg*in/s^2)"
	spawnflags(flags) =
	[
		// Put the thrust at the object center
		32: "Ignore Pos" : 0
	]
]








































//*******************************************************************************************************************
//*******************************************************************************************************************
// 
// PHYSICS BRUSH Entities
// 
//*******************************************************************************************************************
//*******************************************************************************************************************


//===================================================================================================================
// CLASS: BreakableBrush [common]
//===================================================================================================================
// VTMB-adaptation:
//  added: new spawnflag (256)
//  mark as unsupported: propdata
//  removed: gibdir (new)
//  removed: nodamageforces (new)
//  removed: gibmodel (obsolete)
//  removed: choices for spawnobject (uncompatible)
//  removed: DamageForces io's (new)

@BaseClass base(Breakable,Parentname,Global) = BreakableBrush
[
	spawnflags(flags) =
	[
		1 : "Only Break on Trigger" : 0
		2 : "Break on Touch" : 0
		4 : "Break on Pressure" : 0
		256 : "(unknown vtmb's)" : 0
		512: "Break immediately on Physics" : 0
		1024: "Don't take physics damage" : 0
	]
	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: "Web(defunct)"
		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"
	]
	spawnobject(choices) : "Spawn On Break" : 0 : "When broken, an entity of the selected type will be created." =
	[
		0 : "<none>"	// choices removed (vtmb)
		"item_*" : "<enter item name>"
	]
	explodemagnitude(integer) : "Explode Magnitude" : 0 : "If non-zero, when this entity breaks it will create an explosion that causes the specified amount of damage."
	pressuredelay(float) : "Pressure Delay" : 0 : "Delay, in seconds, after 'broken' by pressure before breaking apart (allows for sound to play before breaking apart)."

// unsupported by vtmb...
	propdata(choices) : "[HL2] Prop Data" : 0 : "[HL2-only] 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"
	]
]





//===================================================================================================================
// func_breakable [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Shadow (included)
//  mark as uncompatible: minhealthdmg
//  removed: _minlight (unused)
//  added: explosion_params
//  added: dmg_filter_name

@SolidClass base(BreakableBrush,Origin,RenderFields) = func_breakable : 
	"A brush entity that can be broken from damage, or an input." 
[
	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."

// vtmb ----
	collideable_gibs(choices) : "Collideable Gibs" : 0 : "[VTMB] Unknown yet..." = 
	[
		0 : "Type 0 (unknown)"
		1 : "Type 1 (unknown)"
		2 : "Type 2 (unknown)"
	]
	explosion_params(target_destination) : "Explosion Parameters" : : "[VTMB] Link to 'params_explosion' entity that defines explosion parameters [not tested]."
	dmg_filter_name(target_destination) : "Damage Filter" : : "[VTMB] Name of 'filter_' entity that defines damage filtering [not tested]."
	
	// inputs
	input SetDamageable(void) : "[VTMB] Set this entity as able to make damage."

// unsupported by vtmb
	minhealthdmg(integer) : "[HL2] Min Damage to Hurt" : 0 : "[HL2-only] The prop will ignore any damage events if the damage is less than this amount."
]






//===================================================================================================================
// func_breakable_surf [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Shadow (duplicated)
//  added: new spawnflag (256)
//  added: lowerleft,lowerright
//  added: upperleft,upperright
//  added: error (unknown)

@SolidClass quadbounds() base(BreakableBrush,RenderFields) = 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 : "Physics damage decals" : 0
		2 : "Take damage from held objects" : 0
		256 : "(unknown vtmb's)" : 0		// vtmb adding
	]
	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."
	surfacetype(choices) : "Surface Type" : 0 = 
	[
		0 : "Glass"
		1 : "Tile"
	]
	
	// 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 inches."

// vtmb ----
	collideable_gibs(choices) : "Collideable Gibs" : 0 : "[VTMB] Unknown yet..." = 
	[
		0 : "Type 0 (unknown)"
		1 : "Type 1 (unknown)"
		2 : "Type 2 (unknown)"
	]
	dmg_filter_name(target_destination) : "Damage Filter" : : "[VTMB] Name of 'filter_' entity that defines damage filtering [not tested]."

	lowerleft(string) : "Lower-Left (X Y Z)" : "0 0 0" : "[VTMB] Unknown yet..."
	lowerright(string) : "Lower-Right (X Y Z)" : "0 0 0" : "[VTMB] Unknown yet..."
	upperleft(string) : "Upper-Left (X Y Z)" : "0 0 0" : "[VTMB] Unknown yet..."
	upperright(string) : "Upper-Right (X Y Z)" : "0 0 0" : "[VTMB] Unknown yet..."
	error(string) : "Error Level [-?]" : 0 :"[VTMB] Probably not used..."

	// inputs
	input SetDamageable(void) : "[VTMB] Set this entity as able to make damage."
]






//===================================================================================================================
// func_physbox [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Shadow (included)
//  mark as unsupported: HL2-spawnflags
//  removed: some spawnflags (new)
//  added: new spawnflags
//  removed: _minlight (unused)
//  removed: OnMotionEnabled (new)
//  removed: BreakableBrush (unused)
//  removed: overridescript (unused)
//  removed: forcetoenablemotion (new)
//  removed: notsolid (new)
//  removed: preferredcarryangles (unused)
//  removed: some physgun io's

@SolidClass base(Targetname,Parentname,Origin,RenderFields) = func_physbox : 
	"A brush entity that's physically simulated."
[
	spawnflags(flags) =
	[
		// fixme...
		1  : "1 (unknown vtmb's)" : 0	// vtmb
		8  : "8 (unknown vtmb's)" : 0	// vtmb
		16  : "16 (unknown vtmb's)" : 0	// vtmb
		32  : "32 (unknown vtmb's)" : 0	// vtmb
		
		4096  : "[HL2-only] Start Asleep" : 0
		8192  : "[HL2-only] Ignore +USE for Pickup" : 0
		16384 : "[HL2-only] Debris - Don't collide with the player or other debris" : 0
		32768 : "[HL2-only] Motion Disabled" : 0
		65536 : "[HL2-only] Use Preferred Carry Angles" : 0
	]
	health(integer) : "Strength" : 0 : "Number of points of damage to take before breaking.  0 means don't break."

	// 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."

	// Outputs
	output OnDamaged(void) : "Fired when this entity is damaged."
	output OnAwakened(void) : "Fired when this entity becomes awake (collision/force is applied)."
	output OnPhysGunPickup(void) : "Fired when a player picks this object up, either with the physgun or +USE."
	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."
	
// vtmb ----
	physdamagescale(float) : "Physics Impact Damage Scale" : "1.0" : "[VTMB] 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."
	override_mass(float) : "Mass Override" : "-1" : "[VTMB] A scale multiplier for the object's mass. Same as 'Mass Scale' but compatible with VTMB."
	
	// inputs
	input physdamagescale(float) : "[VTMB] 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."
	
// left for new-engine compatiblity...
	Damagetype(choices) : "[HL2] Impact Damage Type" : 0 : "[HL2-only]" =
	[
		0: "Blunt"
		1: "Sharp"
	]
	massScale(float) : "[HL2] Mass Scale" : "0" : "[HL2-only] A scale multiplier for the object's mass [Uncompatible with VTMB]."
	overridescript(string) : "[HL2] Override parameters" : "" : "[HL2-only]"
	damagetoenablemotion(integer) : "[HL2] Health Level to Override Motion" : 0 : "[HL2-only] If specified, this object will start motion disabled. Once its health has dropped below this specified amount, it will enable motion."
	preferredcarryangles(vector) : "[HL2] Preferred Player-carry Angles" : "0 0 0" : "[HL2-only]"
	output OnMotionEnabled(void) : "[HL2-only] Fired when motion is enabled due to damage/physcannon/force."
]






//===================================================================================================================
// func_pushable [common, obsolete]
//===================================================================================================================

@SolidClass base(Targetname,Origin,RenderFields,VBreakingConnects) = func_pushable : 
	"A brush entity that can be pushed by player. Almost same as 'func_physbox' and now is obsolete."
[
	mass(float) : "Object mass" : "10.0" : "Set mass of this object."
	speed_damp(float) : "Speed Damping" : "10" : "Friction."
	rotate_damp(float) : "Rotate Damping" : "10" : "Rotate resistance."

	// inputs
	input SetDamageable(void) : "Set this entity as able to make damage."
]








































//*******************************************************************************************************************
//*******************************************************************************************************************
// 
// TRIGGERS
// 
//*******************************************************************************************************************
//*******************************************************************************************************************


//===================================================================================================================
// CLASS: VBaseTrigger [VTMB-specific]
//===================================================================================================================

@BaseClass base(Origin,EnableDisable,VMovingConnects) = VBaseTrigger
[
	targetname(target_source) : "Name"
	spawnflags(flags) =
	[
		1: "1 (initial state)" : 1
	]

 	// inputs
	input Enable(void) : "Enable this trigger."
	input Disable(void) : "Disable this trigger."
	input Toggle(void) : "Toggle this trigger between enabled and disabled states."
	input ToggleFlagClient(void) : "Toggle client's ability to use this trigger."
	input ToggleFlagNPC(void) : "Toggle NPC's ability to use this trigger."
	input EnableFlagClient(void) : "Enable client's ability to use this trigger."
	input EnableFlagNPC(void) : "Enable NPC's ability to use this trigger."
	input DisableFlagClient(void) : "Disable client's ability to use this trigger."
	input DisableFlagNPC(void) : "Disable NPC's ability to use this trigger."

	// outputs
	output OnStartTouch(void) : "Fired when an entity starts touching this trigger. The touching entity must pass this trigger's filter-flags to cause this output to fire."
	output OnEndTouch(void) : "Fired when an entity stops touching this trigger. Only entities that passed this trigger's filter-flags will cause this output to fire."
]




//===================================================================================================================
// CLASS: TriggerOnce [common]
//===================================================================================================================
// VTMB-adaptation:
//  replaced: base(VBaseTrigger)
//  removed: OnStartTouch,Toggle (duplicated)
//  removed: unused spawnflags (new)

@BaseClass base(Targetname,Parentname,Global,VBaseTrigger) = TriggerOnce
[
	spawnflags(flags) = 
	[
		1: "Clients" : 1
		2: "NPCs" : 0
		4: "Pushables": 0
		8: "Physics Objects" : 0
	]
	filtername(filterclass) : "Filter Name" : : "Filter to use to see if activator triggers me. See filter_activator_name for more explanation."
]




//===================================================================================================================
// CLASS: Trigger [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: OnEndTouch (duplicated now)
//  removed: OnStartTouchAll,OnEndTouchAll (unused)

@BaseClass base(TriggerOnce) = Trigger
[
]




//===================================================================================================================
// trigger_autosave [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: master (obsolete)
//  removed: DangerousTimer (new)
//  removed: MinimumHitPoints (new)
//  removed: NewLevelUnit (new)

@SolidClass base(Targetname) = trigger_autosave : 
	"A trigger volume that autosaves when the player touches it."
[
]




//===================================================================================================================
// trigger_changelevel [common]
//===================================================================================================================
// VTMB-adaptation:
//  replaced: base(Targetname,Parentname,VBaseTrigger)
//  added: Tip_Size
//  removed: ChangeLevel (unsupported)
//  removed: spawnflag (4 - new)

@SolidClass base(Targetname,Parentname,VBaseTrigger) = trigger_changelevel : 
	"An entity that triggers a level change.\n" +
	"Place an info_landmark in both maps that marks the 'same' location in each map.\n"+
	"TIPS & 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\n"+
	"To 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: "Disable Touch" : 0
	]
	
	// Outputs
	output OnChangeLevel(void) : "Fired when the level changes."
	
// vtmb ----
	Tip_Size(integer) : "Loading Tip Size" : 0 : "[VTMB] Size of tips shown when map loads [not tested]."
	input ChangeNow(void) : "[VTMB] Cause the level change. Use this when triggering the level change with a button, etc. In VTMB uses instead of 'ChangeLevel'."
]




//===================================================================================================================
// trigger_hurt [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: master (obsolete)
//  removed: nodmgforce (new)
//  removed: damagemodel (new)
//  removed: damagecap (new)
//  added: damagevelocitydir
//  added: damagevelocitymag
//  added: damagevelocitypos

@SolidClass base(Trigger) = trigger_hurt :
	"A trigger volume that damages entities that touch it."
[
	damage(integer) : "Damage" : 10 : "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."
	damagetype(choices) : "Damage Type" : 0 =
	[
		0 : "GENERIC"
		1 : "CRUSH"
		2 : "BULLET"
		4 : "SLASH"
		8 : "BURN"
		16 : "FREEZE"
		32 : "FALL"
		64 : "BLAST"
		128 : "CLUB"
		256 : "SHOCK"
		512 : "SONIC"
		1024 : "ENERGYBEAM"
		16384: "DROWN"
		32768 : "PARALYSE"
		65536 : "NERVEGAS"
		131072 : "POISON"
		262144 : "RADIATION"
		524288 : "DROWNRECOVER"
		1048576 : "CHEMICAL"
		2097152 : "SLOWBURN"
		4194304 : "SLOWFREEZE"
	]
	
	
	// 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."
	
// vtmb ----
	damagevelocitydir(choices) : "Damage Velocity Direction" : 0 : "[VTMB] Unknown yet..." =
	[
		0 : "Z [-?]"
		1 : "X [-?]"
		2 : "Y [-?]"
	]
	damagevelocitymag(float) : "Damage Velocity Magnitude" : 0 : "[VTMB] Unknown yet..."
	damagevelocitypos(vector) : "Damage Velocity Position" : "0 0 0" : "[VTMB] Unknown yet..."
	
	// inputs
	input HurtNow(float) : "[VTMB] Hurts the entity on output fired."
]




//===================================================================================================================
// trigger_impact [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Angles (included)
//  replaced: base(VBaseTrigger)

@SolidClass base(Targetname,Origin,VBaseTrigger) = 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.\n"+
	"Also outputs the force at the time of impact for anyone else that wants to use it."
[
	Magnitude(float) : "Magnitude" : 500 : "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."
]




//===================================================================================================================
// trigger_look [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Timeout (new)

@SolidClass base(Trigger) = 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: "Fire Once" : 1 
		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 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)."

	// Outputs
	output OnTrigger(void) : "Fired when the trigger is activated."
	output OnTimeout(void) : "Fired after the timeout interval expires if the player never looked at the target."
]



//===================================================================================================================
// trigger_multiple [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: TouchTest (new)
//  removed: OnTouching,OnNotTouching (new)

@SolidClass base(Trigger) = 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)."
	 
	// Outputs
	output OnTrigger(void) : "Fired whenever the trigger is activated."
]




//===================================================================================================================
// trigger_once [common]
//===================================================================================================================
// not changed.
// inserted to use modified classes.

@SolidClass base(TriggerOnce) = trigger_once :
	"A trigger volume that removes itself after it is triggered once."
[
	// Outputs
	output OnTrigger(void) : "Fired whenever the trigger is activated."
]




//===================================================================================================================
// trigger_push [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: alternateticksfix (new)
//  removed: spawnflag (256 - new)
//  added: inputs SetSpeed,SetTargetSpeed
//  added: inputs SetAcceleration,Accel

@SolidClass base(Trigger) = trigger_push : 
	"A trigger volume that pushes entities that touch it."
[
	speed(integer) : "Speed of Push" : 40 : "The speed at which to push entities away, in inches / second."
	pushdir(angle) : "Push Direction (Pitch Yaw Roll)" : "0 0 0" : "Angles indicating the direction to push touched entities."
	spawnflags(flags) = 
	[ 
		128: "Once Only" : 0
	]

// vtmb ----
	accel(float) : "Accel" : 20 : "[VTMB] Accel/Decel to the specified speed, as a ratio of max speed. Negative values reverse the direction [-1, 1]"

	// inputs
	input SetSpeed(float) : "[VTMB] Set the trigger pushing speed (not tested)."
	input SetTargetSpeed(float) : "[VTMB] Set the target pushing speed (not tested)."
	input SetAcceleration(float) : "[VTMB] Set the moving acceleration (not tested)."
	input accel(float) : "[VTMB] Set accel value (unknown)."
]




//===================================================================================================================
// trigger_teleport [common]
//===================================================================================================================
// VTMB-adaptation:
//  added: crossfade
//  removed: spawnflag (32 - new)

@SolidClass base(Trigger) = 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."
[
	target(target_destination) : "Remote Destination" : : "The entity specifying the point to which entities should be teleported."
	landmark(target_destination) : "Local Destination Landmark" : : "If specified, then teleported entities are offset from the target by their initial offset from the landmark."

// vtmb ----
	crossfade(float) : "Crossfade Time (secs)" : "0.5" : "[VTMB] Time of fading between player's transitions."
]








































//*******************************************************************************************************************
//*******************************************************************************************************************
//
// Basic Props
//
//*******************************************************************************************************************
//*******************************************************************************************************************


//===================================================================================================================
// CLASS: BreakableProp [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: pressuredelay (unused)

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




//===================================================================================================================
// CLASS: BaseFadeProp [common, new]
//===================================================================================================================
// VTMB-adaptation:
//  removed: fadescale (new)

@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)"
]




//===================================================================================================================
// CLASS: VBasePhysParams [VTMB-specific]
//===================================================================================================================

@BaseClass = VBasePhysParams
[ 
	collideable_gibs(choices) : "Collideable Gibs" : 0 : "[VTMB] Unknown yet..." = 
	[
		0 : "Type 0 (unknown)"
		1 : "Type 1 (unknown)"
		2 : "Type 2 (unknown)"
	]
	health(integer) : "Strength" : 0 : "[VTMB] Number of points of damage to take before breaking. 0 means don't break."

	// inputs
	input physdamagescale(float) : "[VTMB] Set the Physics Impact Damage Scale for this character. NOTE: 0 means this feature is disabled for backwards compatibility."
	input FadeOutKill(void) : "[VTMB] Kill entity when it fades out from player's FOV [-?]."
	input SetDebris(void) : "[VTMB] Set debris type spawned when entity breaks."
]




//===================================================================================================================
// CLASS: prop_dynamic_base [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Angles (included)
//  removed: DXLevelChoice (unused)
//  added: base(VBasePhysParams)
//  added: new solid value
//  added: new spawnflags
//  removed: spawnflags (64+ -new)
//  replaced: LoopSequence-> DefaultAnim
//  removed: SetBodyGroup (unused)
//  removed: SetPlaybackRate (new)
//  removed: lightingorigin (new)
//  removed: input SetBodyGroup (duplicated now)
//  removed: some io's (new)
//  added: new io's

@BaseClass base(Targetname,Parentname,Global,Studiomodel,BreakableProp,BaseFadeProp,VBasePhysParams,RenderFields) = prop_dynamic_base
[
	solid(choices) : "Collisions" : 6 =
	[
		0: "Not Solid"
		2: "Use Bounding Box"
		3: "(unknown vtmb's)"
		6: "Use VPhysics"
	]
	RandomAnimation(choices) : "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'." =
	[
		0: "No"
		1: "Yes"
	]
	MinAnimTime(float) : "Min Random Anim Time" : "5" : "Minimum time between random animations."
	MaxAnimTime(float) : "Max Random Anim Time" : "10" : "Maximum time between random animations."

	// Inputs
	input SetAnimation(string) : "Force the prop to play an animation. The parameter should be the name of the animation."
	input TurnOn(void) : "Make the prop visible."
	input TurnOff(void) : "Make the prop invisible."

	// Outputs
	output OnAnimationBegun(void) : "Fired whenever a new animation has begun playing."
	output OnAnimationDone(void) : "Fired whenever an animation is complete."

// vtmb's
	LoopSequence(string) : "Loop Sequence" : "" : "[VTMB] The name of the idle animation that this prop will revert to whenever it finishes a random or forced animation."

	spawnflags(flags) =
	[
		1 : "1 (unknown vtmb's)" : 0
		2 : "2 (unknown vtmb's)" : 0
		4 : "4 (unknown vtmb's)" : 0
		8192 : "8192 (unknown vtmb's)" : 0
	]

	input SetSkin(integer) : "[VTMB] Changes the model skin to the specified number (same as 'skin')."
	output OnAnimationLoop(void) : "[VTMB] Fired whenever a new animation has looping."
]




//===================================================================================================================
// CLASS: BasePropPhysics [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Angles (included)
//  removed: DXLevelChoice (unused)
//  added: base(BaseFadeProp -new)
//  added: base(VBasePhysParams)
//  removed: spawnflags (64+ -new)
//  removed: inertiaScale,massScale,overridescript (unused)
//  removed: damagetoenablemotion,forcetoenablemotion (unused)
//  removed: fademindist,fademaxdist (unused)
//  removed: puntsound (new) 
//  removed: shadowcastdist (new)
//  removed: physcannon io's (new)
//  removed: damageforces io's (new)
//  removed: puntsound io's (new)
//  removed: DisableFloating (new)
//  removed: OnMotionEnabled (new)
//  removed: OnOutOfWorld (new)
//  added: explosion_params
//  added: override_mass
//  added: npc_kickable
//  added: new io's

@BaseClass base(Targetname,Global,Studiomodel,BreakableProp,BaseFadeProp,VBasePhysParams) = BasePropPhysics
[ 
	spawnflags(flags) = 
	[
		1 : "Start Asleep" : 0
		2 : "Don't take physics damage" : 0
		4 : "Debris - Don't collide with the player or other debris" : 0
		8 : "Motion Disabled" : 0
	]
	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."

	// 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 physdamagescale(float) : "Set the Physics Impact Damage Scale for this character. NOTE: 0 means this feature is disabled for backwards compatibility."

	// Outputs
	output OnAwakened(void) : "Fired when this entity becomes awake (collision/force is applied to it while it's asleep)."
	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)."

// vtmb ----
	explosion_params(target_destination) : "Explosion Parameters" : : "A link to the 'point_explosion' entity that defines common explosion params."
	override_mass(float) : "Mass Override" : "-1" : "[VTMB] A scale multiplier for the object's mass. Same as 'Mass Scale' but compatible with VTMB."
	npc_kickable(choices) : "NPC Kickable [-?]" : 1 : "[VTMB] Unknown yet..." = 
	[
		0 : "No"
		1 : "Yes"
	]
	input SetCausesImpactDamage(void) : "[VTMB] If set, this prop can cause impact damage."
]




//===================================================================================================================
// CLASS: prop_static_base [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: DXLevelChoice (unused)
//  removed: screenspacefade,fadescale,ignorenormals (new)
//  removed: disablevertexlighting,disableselfshadowing (new)

@BaseClass base(Angles) = prop_static_base
[
	model(studio) : "World Model"
	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."
	solid(choices) : "Collisions" : 6 =
	[
		0: "Not Solid"
		2: "Use Bounding Box"
		6: "Use VPhysics"
	]
	disableshadows(choices) : "Disable Shadows" : 0 =
	[
		0 : "No"
		1 : "Yes"
	]
	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."
	lightingorigin(target_destination) : "Lighting Origin" : "" : "Select an info_lighting to specify a location to sample lighting from, instead of using this entity's origin."
]








//===================================================================================================================
// prop_dynamic [common]
//===================================================================================================================
// VTMB-adaptation:
//  added: explosion_params
//  added: input (SetCausesImpactDamage)

@PointClass base(prop_dynamic_base,EnableDisable) sphere(fademindist) sphere(fademaxdist) studioprop() = 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 be "+
	"used as a prop_dynamic. Upon level load it will display a warning in the console and remove itself. Use a prop_physics instead."
[
// vtmb ----
	explosion_params(target_destination) : "Explosion Parameters" : : "[VTMB] A link to the 'point_explosion' entity that defines common explosion params."
	blocks_traces(string) : "Blocks Traces [-?]" : : "[VTMB] Unknown yet..."
	npc_opaque(choices) : "NPC Opacity [-?]" : 1 : "Should be NPC opaque or not [not tested]." = 
	[
		0 : "No"
		1 : "Yes"
	]

	input SetCausesImpactDamage(integer) : "[VTMB] Set amount of damage that this prop causes on selected output."
]



//===================================================================================================================
// prop_dynamic_ornament [common]
//===================================================================================================================
// not changed.
// inserted to use modified classes.

@PointClass base(prop_dynamic_base) studioprop() = 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(string) : "Target Entity" : : "Name of the entity that this ornament should attach to, at startup."
	
	// Inputs
	input SetAttached(string) : "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."
]



//===================================================================================================================
// prop_physics [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: inputs (new)

@PointClass base(BasePropPhysics,RenderFields) studioprop() sphere(fademindist) sphere(fademaxdist) = 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 be "+
	"used as a prop_physics. Upon level load it will display a warning in the console and remove itself. Use a prop_dynamic instead."
[
]



//===================================================================================================================
// prop_static [common]
//===================================================================================================================
// not changed.
// inserted to use modified classes.

@PointClass base(prop_static_base) color(255 255 0) sphere(fademindist) sphere(fademaxdist) studioprop() = prop_static :
	"A prop that doesn't move and doesn't animate."
[
]



//===================================================================================================================
// prop_ragdoll [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Angles (included)
//  removed: DXLevelChoice (unused)
//  removed: spawnflags (new)
//  added: new spawnflag (32)
//  removed: angleOverride (new)
//  removed: StartRagdollBoogie (new)
//  removed: inputs (new)

@PointClass base(Targetname,Studiomodel) 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 : "Debris (don't collide with something)" : 1
		32 : "32 (unknown vtmb's)"	: 0		// vtmb
	]

// vtmb ----
 	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."
	input physdamagescale(float) : "[VTMB] Set the Physics Impact Damage Scale for this character. NOTE: 0 means this feature is disabled for backwards compatibility."
]








































//*******************************************************************************************************************
//*******************************************************************************************************************
// 
// NPCs
// 
//*******************************************************************************************************************
//*******************************************************************************************************************


//===================================================================================================================
// CLASS: VBaseNPC [VTMB-specific]
//===================================================================================================================

@BaseClass base(Targetname,Studiomodel,RenderFields) = VBaseNPC
[
	additionalequipment(choices) : "Base Equipment" : 0 : "This is the weapon that NPC will basically use." =
	[
		"0" : "Nothing"
		"item_w_avamp_blade" : "item_w_avamp_blade"
		"item_w_baseball_bat" : "item_w_baseball_bat"
		"item_w_baton" : "item_w_baton"
		"item_w_bush_hook" : "item_w_bush_hook"
		"item_w_colt_anaconda" : "item_w_colt_anaconda"
		"item_w_crossbow" : "item_w_crossbow"
		"item_w_crossbow_flaming" : "item_w_crossbow_flaming"
		"item_w_deserteagle" : "item_w_deserteagle"
		"item_w_fireaxe" : "item_w_fireaxe"
		"item_w_fists" : "item_w_fists"
		"item_w_flamethrower" : "item_w_flamethrower"
		"item_w_glock_17c" : "item_w_glock_17c"
		"item_w_grenade_frag" : "item_w_grenade_frag"
		"item_w_ithaca_m_37" : "item_w_ithaca_m_37"
		"item_w_katana" : "item_w_katana"
		"item_w_knife" : "item_w_knife"
		"item_w_mac_10" : "item_w_mac_10"
		"item_w_occultblade" : "item_w_occultblade"
		"item_w_remington_m_700" : "item_w_remington_m_700"
		"item_w_rem_m_700_bach" : "item_w_rem_m_700_bach"
		"item_w_severed_arm" : "item_w_severed_arm"
		"item_w_sheriff_sword" : "item_w_sheriff_sword"
		"item_w_sledgehammer" : "item_w_sledgehammer"
		"item_w_steyr_aug" : "item_w_steyr_aug"
		"item_w_supershotgun" : "item_w_supershotgun"
		"item_w_thirtyeight" : "item_w_thirtyeight"
		"item_w_throwing_star" : "item_w_throwing_star"
		"item_w_tire_iron" : "item_w_tire_iron"
		"item_w_torch" : "item_w_torch"
		"item_w_uzi" : "item_w_uzi"
		"item_w_zombie_fists" : "item_w_zombie_fists"
	]
	alternateequipment(choices) : "Alternate Equipment" : 0 : "This is the weapon that NPC will use as alternative." =
	[
		"0" : "Nothing"
		"item_w_avamp_blade" : "item_w_avamp_blade"
		"item_w_baseball_bat" : "item_w_baseball_bat"
		"item_w_baton" : "item_w_baton"
		"item_w_bush_hook" : "item_w_bush_hook"
		"item_w_colt_anaconda" : "item_w_colt_anaconda"
		"item_w_crossbow" : "item_w_crossbow"
		"item_w_crossbow_flaming" : "item_w_crossbow_flaming"
		"item_w_deserteagle" : "item_w_deserteagle"
		"item_w_fireaxe" : "item_w_fireaxe"
		"item_w_fists" : "item_w_fists"
		"item_w_flamethrower" : "item_w_flamethrower"
		"item_w_glock_17c" : "item_w_glock_17c"
		"item_w_grenade_frag" : "item_w_grenade_frag"
		"item_w_ithaca_m_37" : "item_w_ithaca_m_37"
		"item_w_katana" : "item_w_katana"
		"item_w_knife" : "item_w_knife"
		"item_w_mac_10" : "item_w_mac_10"
		"item_w_occultblade" : "item_w_occultblade"
		"item_w_remington_m_700" : "item_w_remington_m_700"
		"item_w_rem_m_700_bach" : "item_w_rem_m_700_bach"
		"item_w_severed_arm" : "item_w_severed_arm"
		"item_w_sheriff_sword" : "item_w_sheriff_sword"
		"item_w_sledgehammer" : "item_w_sledgehammer"
		"item_w_steyr_aug" : "item_w_steyr_aug"
		"item_w_supershotgun" : "item_w_supershotgun"
		"item_w_thirtyeight" : "item_w_thirtyeight"
		"item_w_throwing_star" : "item_w_throwing_star"
		"item_w_tire_iron" : "item_w_tire_iron"
		"item_w_torch" : "item_w_torch"
		"item_w_uzi" : "item_w_uzi"
		"item_w_zombie_fists" : "item_w_zombie_fists"
	]
	cantdropweapons(choices) : "NPC Can't Drop Weapons" : 0 : "If set, all NPC's weapons won't be available when it dead." =
	[
		0 : "No"
		1 : "Yes"
	]
	clothescolor1(color255) : "NPC's Clothes Color 1" : "0 0 0 0" : "Overrides cloth's diffuse texture color."
	clothescolor2(color255) : "NPC's Clothes Color 2" : "0 0 0 0" : "Overrides cloth's diffuse texture color."
	skincolor(color255) : "NPC's Skin Color" : "0 0 0 0" : "Overrides NPC's skin diffuse texture color."
	haircolor(color255) : "NPC's Hair Color" : "0 0 0 0" : "Overrides NPC's hair diffuse texture color."
	trimcolor(color255) : "NPC's Skin Color" : "0 0 0 0" : "Overrides NPC's trim diffuse texture color."
	base_gender(choices) : "Base Gender" : 1 : "Sets base NPC gender, such as male and female." =
	[
		0 : "Female"
		1 : "Male"
	]
	default_camera(choices) : "Default Camera Shot" : "DialogDefault" : "Default camera-shot definition applied when player interacts with this NPC. Related to 'vdata/CameraShots/*.txt' path." =
	[
		"DialogDefault" : "Dialog Default"
		"vdata/CameraShots/dialogdefaultwoman.txt" : "DialogDefaultWoman"
		"vdata/CameraShots/dialogdefaultfastmove.txt" : "DialogDefaultFastMove"
		"vdata/CameraShots/dialoglowcenter.txt" : "DialogLowCenter"
		"vdata/CameraShots/dialoglowleft.txt" : "DialogLowLeft"
		"vdata/CameraShots/dialoglowright.txt" : "DialogLowRight"
		"vdata/CameraShots/dialogmediumshot.txt" : "DialogMediumShot"
		"vdata/CameraShots/dialogoverplayerleftshoulder.txt" : "DialogOverPlayerLeftShoulder"
		"vdata/CameraShots/dynamic1.txt" : "Dynamic1"
		"vdata/CameraShots/dynamic2.txt" : "Dynamic2"
		"vdata/CameraShots/dynamic3.txt" : "Dynamic3"
		"vdata/CameraShots/dynamic4.txt" : "Dynamic4"
		"vdata/CameraShots/dynamic5.txt" : "Dynamic5"
		"vdata/CameraShots/dynamic6.txt" : "Dynamic6"
		"vdata/CameraShots/dynamic7.txt" : "Dynamic7"
		"vdata/CameraShots/dynamic8.txt" : "Dynamic8"
		"vdata/CameraShots/dynamic9.txt" : "Dynamic9"
		"vdata/CameraShots/longapproachcloseup.txt" : "LongApproachCloseUp"
		"vdata/CameraShots/lookattarget.txt" : "LookAtTarget"
		"vdata/CameraShots/lookattarget_b.txt" : "LookAtTarget_B"
		"vdata/CameraShots/lookattarget_snap.txt" : "LookAtTarget_Snap"
		"vdata/CameraShots/lookattargethead_snap.txt" : "LookAtTargetHead_Snap"
		"vdata/CameraShots/center.txt" : "Center"
		"vdata/CameraShots/centerfullview.txt" : "CenterFullView"
		"vdata/CameraShots/lowcenter.txt" : "LowCenter"
		"vdata/CameraShots/mediumshot.txt" : "MediumShot"
		"vdata/CameraShots/npcfollow.txt" : "NPCFollow"
		"vdata/CameraShots/npcfollowcut.txt" : "NPCFollowCut"
		"vdata/CameraShots/npcfollowfromplayer.txt" : "NPCFollowFromPlayer"
		"vdata/CameraShots/npcfollowmove.txt" : "NPCFollowMove"
	]
	default_disposition(choices) : "Default Disposition" : "Neutral" : "Default NPC's disposition. Goes to 'vdata/system/dispositiontable.txt' definitions." =
	[
		"Neutral" : "Neutral"
		"Anger" : "Anger"
		"Joy" : "Joy"
		"Sad" : "Sad"
		"Fear" : "Fear"
		"Disgust" : "Disgust"
		"Apathy" : "Apathy"
		"Flirtatious" : "Flirtatious"
		"Confused" : "Confused"
		"Lay" : "Lay"
		"Damaged" : "Damaged"
		"Dead" : "Dead"
		"Sitting" : "Sitting"
		"ChairDamaged" : "ChairDamaged"
		"BehindBack" : "BehindBack"
		"Therese" : "Therese"
		"Bartender" : "Bartender"
		"Lily" : "Lily"
		"PrinceSitting" : "PrinceSitting"
	]
	dialogname(choices) : "Dialog Name" : "" : "Defines dialogue script depending on certain NPC and situation." =
	[
		"" : "None"
	]
	combat_start_activity(choices) : "Initial Combat Activity" : "-1" : "Defines NPC's combat animation when none of actions or outputs applied to him." =
	[
		"-1" : "None (default)"
		"ACT_INVALID" : "Invalid"
	]

	invincible(choices) : "NPC is Invincible" : 0 : "If set, the player can't kill this NPC." =
	[
		0 : "No"
		1 : "Yes"
	]
	is_bossmonster(choices) : "NPC is Boss Monter" : 0 : "If set, shows blood scale on screen and process this NPC as a monster." =
	[
		0 : "No"
		1 : "Yes"
	]

	stattemplate(string) : "NPC Stat Template" : "NPCGeneric" : "Goes to data in 'vdata/system/npctemplate***.txt'. NPCs in Hammer are assigned one of these which determines their statistics."	
	npc_perception(integer) : "NPC's Perception Level" : 3 : "Defines NPC's Perception ability level [1...10]."

	player_reaction(choices) : "Reaction to Player" : "D_NU 0" : "Type of NPC's relationship with player. Use <str_type> <int_degree> format,\n\n"+
		"  where <type> is: \n"+
		"\tD_LI [0-10] --> Likes Player (Will Defend); \n"+
		"\tD_NU [0-10] --> Neutral (Default); \n"+
		"\tD_HT [0-10] --> Hates Player (Will Attack)." =
	[
		"D_LI 0" : "D_LI 0"
		"D_NU 0" : "D_NU 0"
		"D_HT 0" : "D_HT 0"
		"D_HT 5" : "D_HT 5"
	]

	allow_alert_lookaround(choices) : "Allow Alert on Lookaround" : 1 : "Defines, can NPC be alert if sees player at looks around [not tested]." =
	[
		0 : "No"
		1 : "Yes"
	]
	allow_kick_hint_use(choices) : "Allow Kick Hint Usage [-?]" : 1 : "[VTMB] Unknown yet..." =
	[
		0 : "No"
		1 : "Yes"
	]

	pl_criminal_attack(choices) : "Player Criminal Attack [-?]" : "-1" : "[VTMB] Unknown yet..." =
	[
		"-1" : "None"
		"1" : "Mode 1"
		"2" : "Mode 2"
		"3" : "Mode 3"
		"4" : "Mode 4"
		"5" : "Mode 5"
		"6" : "Mode 6 (default)"
	]
	pl_criminal_flee(choices) : "Player Criminal Flee [-?]" : "-1" : "[VTMB] Unknown yet..." =
	[
		"-1" : "None"
		"1" : "Mode 1"
		"2" : "Mode 2"
		"3" : "Mode 3"
		"4" : "Mode 4"
		"5" : "Mode 5"
		"6" : "Mode 6 (default)"
	]
	pl_investigate(choices) : "Player Investigate [-?]" : "-1" : "[VTMB] Unknown yet..." =
	[
		"-1" : "None"
		"1" : "Mode 1"
		"2" : "Mode 2"
		"3" : "Mode 3"
		"4" : "Mode 4"
		"5" : "Mode 5"
		"6" : "Mode 6 (default)"
	]
	pl_supernatural_attack(choices) : "Player Supernatural Attack [-?]" : "-1" : "[VTMB] Unknown yet..." =
	[
		"-1" : "None"
		"1" : "Mode 1"
		"2" : "Mode 2"
		"3" : "Mode 3"
		"4" : "Mode 4"
		"5" : "Mode 5"
		"6" : "Mode 6 (default)"
	]
	pl_supernatural_flee(choices) : "Player Supernatural Flee [-?]" : "-1" : "[VTMB] Unknown yet..." =
	[
		"-1" : "None"
		"1" : "Mode 1"
		"2" : "Mode 2"
		"3" : "Mode 3"
		"4" : "Mode 4"
		"5" : "Mode 5"
		"6" : "Mode 6 (default)"
	]

	investigate_mode(choices): "Investigate Mode" : "-1" : "[not tested] Measures your character's ability to notice minute or hidden details." =
	[
		"-1" : "None (default)"
		"1" : "Mode 1"
		"2" : "Mode 2"
		"3" : "Mode 3"
		"4" : "Mode 4"
		"5" : "Mode 5"
		"6" : "Mode 6 (often)"
	]
	investigate_mode_combat(choices): "Investigate Mode Combat" : "-1" : "[VTMB] Unknown yet..." =
	[
		"-1" : "None (default)"
		"1" : "Mode 1"
		"2" : "Mode 2"
		"3" : "Mode 3"
		"4" : "Mode 4"
		"5" : "Mode 5"
		"6" : "Mode 6 (often)"
	]

	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."
	follower_type(choices) : "Follower Type [-?]" : "Default" : "[VTMB] Unknown yet..." =
	[
		"Default" : "Default"
	]

	hearing(float) : "Hearing Volume" : "-1" : "NPC's hearing radius [0...100]. Set '-1' as default [not tested]."
	vision(float) : "Vision Radius" : "-1" : "NPC's vision radius (units). Set '-1' as default [not tested]."

	hint_groups(choices) : "Hint Groups" : "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32" : "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. Enter the hint grops numbers here (e.g. '5 12 23 31')." =
	[
		"0" : "None"
		"1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32" : "Default (All)"
	]

	percent_occluded_chase(integer) : "Percent Occluded Chase [-?]" : 30 : "[VTMB] Unknown yet..."
	percent_occluded_cover(integer) : "Percent Occluded Cover [-?]" : 30 : "[VTMB] Unknown yet..."
	percent_occluded_flank(integer) : "Percent Occluded Flank [-?]" : 20 : "[VTMB] Unknown yet..."
	percent_occluded_wait(integer) : "Percent Occluded Wait [-?]" : 10 : "[VTMB] Unknown yet..."
	percent_occluded_walk(integer) : "Percent Occluded Walk [-?]" : 10 : "[VTMB] Unknown yet..."

	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."
	usescript(string) : "Use Python Script" : : "This is a Python script that defines additional dialog params [not tested]."
	nav_ignore_physics_props(choices) : "AI Ignore Physics Props" : 0 : "When defined, the NPC will ignore physics props' collisions when navigated between AI-nodes." =
	[
		0 : "No"
		1 : "Yes"
	] 

	spawnflags(Flags) = 
	[
		1 : "1 (unknown vtmb's)" : 0
		2 : "2 (unknown vtmb's)" : 0
		4 : "Fall to ground (unchecked means *teleport* to ground)" : 1
		8 : "8 (unknown vtmb's)" : 0
		16 : "Efficient - Don't acquire enemies or avoid obstacles" : 0
		256: "Long Visibility/Shoot" : 0
		2048: "Template NPC (used by npc_maker, will not spawn)" : 0
		4096: "Do Alternate collision for this NPC (player avoidance)" : 0
		8192: "Don't drop weapons" : 0
		16384 : "16384 (unknown vtmb's)" : 0
		32768 : "32768 (unknown vtmb's)" : 0
	]

	// Inputs
	input SetHealth(integer) : "Set this NPC's health."
	input SetBodyGroup(integer) : "HACK: Sets this NPC's body group (from 0 - n). You'd better know what you are doing!"
	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 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 pl_investigate(string) : "[VTMB: untested connection]"
	input pl_criminal_flee(string) : "[VTMB: untested connection]"
	input pl_criminal_attack(string) : "[VTMB: untested connection]"
	input pl_supernatural_flee(string) : "[VTMB: untested connection]"
	input pl_supernatural_attack(string) : "[VTMB: untested connection]"
	input WalkToNode(string) : "Makes NPC walk to selected node."
	input TweakParam(void) : "[VTMB: untested connection]"
	input SetupPatrolType(void) : "[VTMB: untested connection]"
	input FollowPatrolPath(void) : "[VTMB: untested connection]"
	input ClearPatrolPath(void) : "[VTMB: untested connection]"
	input StartPlayerDialog(void) : "[VTMB: untested connection]"
	input StartPlayerDialogRemote(void) : "[VTMB: untested connection]"
	input StartPlayerDialogUnforced(void) : "[VTMB: untested connection]"
	input FleeAndDie(void) : "[VTMB: untested connection]"
	input Faint(void) : "[VTMB: untested connection]"
	input DisableThink(void) : "[VTMB: untested connection]"
	input TeleportToEntity(void) : "[VTMB: untested connection]"
	input TakeDamage(void) : "[VTMB: untested connection]"
	input MakeInvincible(void) : "Make NPC invincible."
	input UseInteresting(void) : "Allow use Interesting Places feature."
	input SetInvestigateMode(string) : "Set investigate mode [-?]."
	input SetInvestigateModeCombat(string) : "Set investigate mode on combat [-?]."
	input SetSpeechVolume(string) : "Set NPC's speech volume."
	input PlayDialogFile(string) : "Play dialog file that will be aplied to this NPC."
	input AllowAlertLookaround(void) : "[VTMB: untested connection]"
	input StayEntrenched(void) : "[VTMB: untested connection]"
	input AllowKickHintUse(void) : "[VTMB: untested connection]"
	input SetScriptedDiscipline(string) : "[VTMB: untested connection]"
	input SetBloodShieldDiscipline(string) : "[VTMB: untested connection]"
	input SetFollowerBoss(string) : "[VTMB: untested connection]"
	input SetFollowerType(string) : "[VTMB: untested connection]"
	input SetFallToGround(string) : "[VTMB: untested connection]"
	input ChangeSchedule(void) : "[VTMB: untested connection]"
	input SetDontFacePlayerInDialog(void) : "[VTMB: untested connection]"
	input SetBossMonster(void) : "Make this NPC to be a boss monster."
	input AllowOpenDoors(void) : "Give the NPC ability to open doors."
	input SetMovementMultiplier(void) : "[VTMB: untested connection]"
	input SetDefaultDialogCamera(void) : "Set camera shot to dialog-default."
	input HumanityAdd(void) : "Add humanity point to player."
	input Bloodloss(void) : "Take blood point [-?]."
	input Bloodgain(void) : "Gain blood level [-?]."
	input ClearActiveDisciplines(void) : "Clears currently launched disciplines."
	input Inventory_Remove(void) : "[VTMB: untested connection]"
	input MoneyAdd(void) : "Add amount of money."
	input MoneyRemove(void) : "Remove amount of money."
	input BarterBegin(void) : "Begin barter process..."
	input BarterEnd(void) : "End barter process..."
	input BloodHeal(void) : "Player will be healing by blood."
	input FrenzyCheck(void) : "[VTMB: untested connection]"
	input FrenzyTrigger(void) : "[VTMB: untested connection]"
	input HungerCheck(void) : "[VTMB: untested connection]"
	input FrenzyUpdate(void) : "[VTMB: untested connection]"
	input PlayFloat(void) : "[VTMB: untested connection]"
	input WillTalk(void) : "Make NPC talk [-?]"
	input ChangeMasqueradeLevel(void) : "Change player's Masquerade level."
	input FadeHeadAsCameraTarget(void) : "[VTMB: untested connection]"
	input FadeBodyAsCameraTarget(void) : "[VTMB: untested connection]"
	input SetHeadAsCameraTarget(void) : "[VTMB: untested connection]"
	input SetBodyAsCameraTarget(void) : "[VTMB: untested connection]"
	input LookAtEntityEye(void) : "[VTMB: untested connection]"
	input LookAtEntityCenter(void) : "[VTMB: untested connection]"
	input LookAtEntityOrigin(void) : "[VTMB: untested connection]"
	input LookAtEntityDefault(void) : "[VTMB: untested connection]"

	// 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 OnNPCDied(void) : "Fired when this NPC died."
	output OnLastNPCDied(void) : "Fired when the last of this NPC died [-?]."
	output OnDialogBegin(void) : "Fired when dialog with NPC begin."
	output OnDialogEnd(void) : "Fired when dialog with NPC end."
	output OnInterestingPlaceArrived(void) : "Fired when interesting place arrived."
	output OnInterestingPlaceLeft(void) : "Fired when interesting place left."
	output OnUnknownVisionPlayer(void) : "[VTMB: untested connection]"
	output OnStateFleeing(void) : "[VTMB: untested connection]"
	output OnIncapacitatedStart(void) : "[VTMB: untested connection]"
	output OnIncapacitatedEnd(void) : "[VTMB: untested connection]"
	output OnGrappleBegin(void) : "Fired when grapple begins [-?]."
	output OnGrappleEnd(void) : "Fired when grapple ends [-?]."
	output OnFedUponBegin(void) : "[VTMB: untested connection]"
	output OnFedUponEnd(void) : "[VTMB: untested connection]"
	output OnSellWeapon(void) : "Fired when weapon sold."
	output OnBarterClose(void) : "Fired when barter process end."
]






//===================================================================================================================
// CLASS: VAddNPCFeats [VTMB-specific]
//===================================================================================================================

@BaseClass = VAddNPCFeats
[
	full_investigate(choices) : "Full Investigate [-?]" : 0 : "[VTMB] Unknown yet..." =
	[
		0 : "No"
		1 : "Yes"
	]
	use_interesting(choices) : "Use Interesting Places [-?]" : 0 : "Make NPC to use Interesting Plases' features [not tested]." =
	[
		0 : "No"
		1 : "Yes"
	]
	interesting_place_groups(choices) : "Interesting Place Groups" : "0" : "[VTMB] Unknown yet. Type numbers of groups dividing with spaces." =
	[
		"0" : "None"
		"1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32" : "All"
	]
	soundgroup(choices) : "Sound Group" : : "NPC Sound group. \n\nThe group of sounds relative to 'sound/character/*' that specifies base NPC action sounds. See 'vdata/system/sndscheme_char.txt' for more details." = 
	[
		"" : "None"
	]
	team_name(string) : "Team Name" : : "[VTMB] Unknown yet..."
	ignore_detected_attack(choices) : "Ignore Detected Attack" : 0 : "Ignores when detects attack from other side." =
	[
		0 : "No"
		1 : "Yes"
	]
	no_alert_state(choices) : "No-Alert State" : 0 : "States of NPC when no alert goings on." =
	[
		0 : "State 0 (unknown yet)"
		1 : "State 1 (unknown yet)"
	]
	bright_route_penalty(integer) : "Bright Route Penalty [-?]" : 0 : "[VTMB] Unknown yet..."
	stay_entrenched(choices) : "Stay Entrenched [-?]" : 0 : "[VTMB] Unknown yet..." =
	[
		0 : "No"
		1 : "Yes"
	]
	teleport_move_timer(integer) : "Teleport Move Timer [-?]" : 0 : "[VTMB] Unknown yet..."
	floatfreq(integer) : "Float Frequency [-?]" : 0 : "[VTMB] Unknown yet..."
]






//===================================================================================================================
// CLASS: BaseNPCMaker [common]
//===================================================================================================================
// VTMB-adaptation:
//  removed: Angles (duplicated)
//  removed: EnableDisable (analog)
//  removed: some children-io's (new)
//  added: MinPCDistance
//  added: Vtmb-Flags

@BaseClass base(Targetname) iconsprite("editor/npc_maker.vmt") color(0 0 255) = BaseNPCMaker
[
	spawnflags(Flags) = 
	[
		// Only in npc_maker
		16 : "Fade Corpse" : 0
		32 : "Infinite Children" : 0
		64 : "Do Not Drop" : 0
		128 : "Don't Spawn While Visible" : 0
	]

	MaxNPCCount(integer) : "Num. of NPCs" : 4 : "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."
	
	// Outputs
	output OnSpawnNPC(string) : "Fired when an NPC is spawned. The activator is the NPC, and the string is the name of 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."

	// 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 SetMaxChildren(integer) : "Sets the maximum number of children for this spawner."

// vtmb ----
	MinPCDistance(integer) : "Minimum Player Distance [-?]" : 0 : "[VTMB] Unknown yet..."
	Flag_Fade(choices) : "Flag: Fade" : 0 : "Applies the selected property." = [ 0 : "False" 1 : "True" ]
	Flag_InfChild(choices) : "Flag: Infinity Child" : 0 : "Applies the selected property." = [ 0 : "False" 1 : "True" ]
	Flag_IsGlobalSpawner(choices) : "Flag: Is Global Spawner" : 0 : "Applies the selected property." = [ 0 : "False" 1 : "True" ]
	Flag_NoDrop(choices) : "Flag: No Drop" : 0 : "Applies the selected property." = [ 0 : "False" 1 : "True" ]
	Flag_NPCClip(choices) : "Flag: NPC-Clip" : 0 : "Applies the selected property." = [ 0 : "False" 1 : "True" ]
	Flag_StartDisabled(choices) : "Flag: Start Disabled" : 0 : "Applies the selected property." = [ 0 : "False" 1 : "True" ]
	Flag_UseGlobalSpawnerSettings(choices) : "Flag: Use Global Spawner Settings" : 0 : "Applies the selected property." = [ 0 : "False" 1 : "True" ]
	Flag_ViewCone(choices) : "Flag: View Cone" : 0 : "Applies the selected property." = [ 0 : "False" 1 : "True" ]
	Flag_ZombieAIType(choices) : "Flag: Zombie AI Type" : 0 : "Applies the selected property." = 
	[ 
		0 : "Do not use" 
		1 : "Type 1 (unknown yet)" 
		2 : "Type 2 (unknown yet)" 
		3 : "Type 3 (unknown yet)" 
		4 : "Type 4 (unknown yet)" 
		5 : "Type 5 (unknown yet)" 
		6 : "Type 6 (unknown yet)" 
		7 : "Type 7 (unknown yet)" 
		8 : "Type 8 (unknown yet)" 
	]
]







//===================================================================================================================
// npc_maker [common]
//===================================================================================================================
// VTMB-adaptation:
//  added: vtmb-notes
//  removed: Angles (included)
//  added: base(VBaseNPC,VAddNPCFeats)
//  removed: NPCHintGroup (analog)
//  removed: additionalequipment (included)
//  removed: spawnflags (included)

@PointClass base(BaseNPCMaker,VBaseNPC,VAddNPCFeats) iconsprite("editor/npc_maker.vmt") = npc_maker : 
	"NPC Maker.\n\n"+
	
	"[VTMB] NOTES: Many of the games entities are created dynamically. Most encounters involving combat, the enemies are spawned on the fly based on a template. The pedetrians walking around in the city and the cops... all spawned on the fly.\n\n"+

    "Dynamically spawned NPCs are created by npc_maker. Each maker is associated with an NPC template. Template definitions can be found under the vdata/system directory. You can also type 'vclans' in the console for a list of all templates. Note that most are named 'None'.\n\n"+

    "Templates have a templatename and then a normal name. templatename is required and must be unique, but not a normalname.. vclans only displays normal names.\n"+
	"As you might have guessed from the console command, Template and clan are pretty much the same thing. To tell the npc_maker object what kind of NPC template you want it to make, you set its stattemplate property.\n"+
	"You can override stattemplate values within the local embedded declaration. For example, you would likely set the model and starting equipment locally."
[
	NPCType(npcclass) : "NPCType" : "npc_VPedestrian" : "Class name of spawned NPC"
	NPCTargetname(string) : "Childrens' Name"
	NPCSquadname(string) : "Childrens' Squad Name"
]




















//*******************************************************************************************************************
//*******************************************************************************************************************
// 
// End of FGD
// 
//*******************************************************************************************************************
//*******************************************************************************************************************
