//
// Quake 2 game definition file (.fgd)
//
// Originally written by by autolycus
// Special thanks to: Disruptor, Zoid, Zaphod, Imaginos, and EutecTic.
//
// Lasted updated by xaGe : 20200415

//
// worldspawn
//

// 0302 - added "nextmap" key
@SolidClass = worldspawn : "World entity"
[
	sky(string) : "Environment map name"
	skyaxis(string) : "Vector axis for rotating sky"
	skyrotate(string) : "Speed of rotation (degrees/second)"
	sounds(integer) : "CD Track Number" : 1
	gravity(integer) : "Gravity" : 800
	message(string) : "Level name"
	nextmap(string) : "Next map (DM only)"
]

//
// base marker definitions
//model({ "path": ":models/items/keys/target/tris.md2" }) =

@baseclass = Appearflags [
	spawnflags(Flags) =
	[
		256 : "Not in Easy" : 0
		512 : "Not in Normal" : 0
		1024 : "Not in Hard" : 0
		2048 : "Not in Deathmatch" : 0
	]
]
@baseclass = Angle [ angle(integer) : "Direction" ]
@baseclass = Targetname [ targetname(target_source) : "Name" ]
@baseclass = Target [ target(target_destination) : "Target" ]

//
// player start, deathmatch, coop, deathmatch intermission
//

@baseclass base(Appearflags, Targetname) size(-16 -16 -24, 16 16 32) color(0 255 0) model({ "path": ":models/monsters/insane/tris.md2", "frame":209, "skin":1}) = PlayerClass []
@PointClass base(PlayerClass) = info_player_start : "Player 1 start" []
@PointClass base(PlayerClass) = info_player_deathmatch : "Player deathmatch start" []
@PointClass base(PlayerClass) = info_player_coop : "Player cooperative start" []
@PointClass base(PlayerClass) = info_player_intermission : "Deathmatch intermission point"
[
	angles(string) : "pitch yaw roll"
]

// Notes on the 'team' key: First of all, it's really only useful in DM because it creates a
// random respawn pattern. Let's say that in one spot, you want to have the shotgun, Quad
// damage and mega health item to respawn in alternance. Place all of them in approximately
// the same location, team them and voila! The FIRST item that you place in the map will be
// the team MASTER - the others will be SLAVES. In DM play, the Master will be the first one
// to spawn. Once the Master is picked up, the respawn pattern becomes RANDOM: it could be
// the same or one of the other 2. If you try to use this in a Single Player map, it's
// pretty useless because only the team MASTER spawns and the others never appear obviously.

@BaseClass base(Appearflags, Target) color(76 76 255) size(-16 -16 -16, 16 16 16) = Ammo
[
	team(string) : "Team"
]

@PointClass base(Ammo) model({ "path": ":models/items/ammo/shells/medium/tris.md2" }) = ammo_shells : "Shotgun ammo" []
@PointClass base(Ammo) model({ "path": ":models/items/ammo/bullets/medium/tris.md2" }) = ammo_bullets : "Machine/Chain gun ammo" []
@PointClass base(Ammo) model({ "path": ":models/items/ammo/cells/medium/tris.md2" }) = ammo_cells : "Blaster/BFG ammo" []
@PointClass base(Ammo) model({ "path": ":models/items/ammo/grenades/medium/tris.md2" }) = ammo_grenades : "Grenades" []
@PointClass base(Ammo) model({ "path": ":models/items/ammo/rockets/medium/tris.md2" }) = ammo_rockets : "Rockets" []
@PointClass base(Ammo) model({ "path": ":models/items/ammo/slugs/medium/tris.md2" }) = ammo_slugs : "Rail gun ammo" []

// Keep in mind when using func_areaportal that it must
// *completely* separate two areas.  otherwise, you will
// get an error message and the areaportal will not work
//
// 0221 - is there any point in a "style" key?
@SolidClass base(Appearflags, Targetname) = func_areaportal : "Area portal (Vis blocker)" []

// 0221 - added "pathtarget"
// 0221 - changed "sounds" information
@SolidClass base(Appearflags, Target, Targetname) color(0 128 204) = func_button : "Button"
[
	pathtarget(string) : "Elevator level target"
	speed(integer) : "Speed" : 40
	wait(choices) : "Wait before reset" : 1 =
	[
		-1 : "Never Return"
	]
	lip(integer) : "Lip remaining after move" : 4
	health(integer) : "Health (shootable)"
	sounds(choices) : "Sounds" : 0 =
	[
		0 : "Audible"
		1 : "Silent"
	]
//	sounds(choices) : "Sounds" : 2 =
//	[
//		1 : "Silent"
//		2 : "Steam Metal"
//		3 : "Wodden Clunk"
//		4 : "Metallic Click"
//		5 : "In-Out"
//	]
	message(string) : "Activation message"
	_minlight(integer) : "Minimum light (optional)"
]

// 0221 - added "count" key...oops :)
@PointClass base(Appearflags, Targetname) color(0 0 255) size(-8 -8 -8, 8 8 8) = func_clock : "Clock"
[
	spawnflags(Flags) =
	[
		1 : "Timer Up" : 0
		2 : "Timer Down" : 0
		4 : "Start Off" : 0
		8 : "Multi Use" : 0
	]
	count(integer) : "Clock Count"
	pathtarget(string) : "Target"
	style(choices) : "Style" : 0 =
	[
		0 : "xx"
		1 : "xx:xx"
		2 : "xx:xx:xx"
	]
]

// func_conveyor code is incomplete.  use the surface attribute "flowing"
// and the "current" content flag.  (texture won't scroll)
//
// 0221 - added _minlight
@SolidClass base(Appearflags, Targetname) color(0 128 204) = func_conveyor : "Conveyor belt"
[
	spawnflags(Flags) =
	[
		1 : "Start On" : 0
		2 : "Toggle" : 0
	]
	speed(integer) : "Speed" : 100
	_minlight(integer) : "Minimum light (optional)"
]

// 0221 - updated "sounds" information
// 0221 - added "killtarget"
@SolidClass base(Angle, Appearflags, Targetname, Target) color(0 128 204) = func_door : "Door"
[
	spawnflags(Flags) =
	[
		1 : "Start Open" : 0
		4 : "Crusher" : 0
		8 : "No Monsters" : 0
		16 : "Animated" : 0
		32 : "Toggle" : 0
		64 : "Animated Fast" : 0
	]
	killtarget(string) : "Kill Target"
	team(string) : "Team"
	message(string) : "Trigger message"
	health(integer) : "Health (shootable)"
	speed(integer) : "Speed" : 100
	wait(choices) : "Wait before close" : 3 =
	[
		-1 : "Stay open"
	]
	lip(integer) : "Lip remaining after move" : 8
	dmg(integer) : "Damage when blocked" : 2
	sounds(choices) : "Sounds" : 0 =
	[
		0 : "Audible"
		1 : "Silent"
	]
//	sounds(choices) : "Sounds" : 3 =
//	[
//		1 : "Silent"
//		2 : "Light"
//		3 : "Medium"
//		4 : "Heavy"
//	]
	_minlight(integer) : "Minimum light (optional)"
]

// 0221 - added "killtarget" and "target" keys
// 0221 - updated "sounds" info
// 0221 - removed "lip" key
@SolidClass base(Appearflags, Targetname, Target) color(0 128 204) = func_door_rotating : "Rotating Door"
[
	spawnflags(Flags) =
	[
		1 : "Start Open" : 0
		2 : "Reverse" : 0
		4 : "Crusher" : 0
		8 : "No Monsters" : 0
		16 : "Animated" : 0
		32 : "Toggle" : 0
		64 : "X Axis" : 0
		128 : "Y Axis" : 0
	]
	killtarget(string) : "Kill Target"
	team(string) : "Team"
	distance(integer) : "Degrees of rotation" : 90
	message(string) : "Trigger message"
	health(integer) : "Health (shootable)"
	speed(integer) : "Speed" : 100
	wait(choices) : "Wait before close" : 3 =
	[
		-1 : "Stay open"
	]
	dmg(integer) : "Damage when blocked" : 2
	sounds(choices) : "Sounds" : 0 =
	[
		0 : "Audible"
		1 : "Silent"
	]
//	sounds(choices) : "Sounds" : 3 =
//	[
//		1 : "Silent"
//		2 : "Light"
//		3 : "Medium"
//		4 : "Heavy"
//	]
	_minlight(integer) : "Minimum light (optional)"
]

// 0221 - added "_minlight" key (even tho you dont want it to stand out)
// 0221 - added "message" key
// 0221 - removed "team" key
@SolidClass base(Angle, Appearflags, Targetname) color(0 128 204) = func_door_secret : "Secret Door"
[
	spawnflags(Flags) =
	[
		1 : "Always shoot" : 0
		2 : "1st Left" : 0
		4 : "1st Down" : 0
	]
	dmg(integer) : "Damage when blocked" : 2
	wait(choices) : "Wait before close" : 5 =
	[
		-1 : "Stay open"
	]
	message(string) : "Message"
	_minlight(integer) : "Minimum light (optional)"
]

// not visible in DM mode
//
// 0221 - added "_minlight" key (even tho you dont want it to stand out)
@SolidClass base(Appearflags, Targetname, Target) color(0 128 204) = func_explosive : "Exploding/Breakable brush"
[
	spawnflags(Flags) =
	[
		1 : "Trigger Spawn" : 0
		2 : "Animated" : 0
		4 : "Animated Fast" : 0
	]
	health(integer) : "Health" : 100
	mass(integer) : "Mass (debris)" : 75
	dmg(integer) : "Damage" : 0
	_minlight(integer) : "Minimum light (optional)"
]

@SolidClass base(Appearflags, Targetname) color(255 0 0) = func_killbox : "Instant death" []

// 0221 - added "_minlight" key
@SolidClass base(Appearflags, Targetname) color (0 128 204) = func_object : "Solid bmodel, will fall if its support is removed"
[
	spawnflags(Flags) =
	[
		1 : "Trigger Spawn" : 0
		2 : "Animated" : 0
		4 : "Animated Fast" : 0
	]
	_minlight(integer) : "Minimum light (optional)"
]

// 0221 - removed "sounds" key
@SolidClass base(Appearflags, Targetname) color(0 128 204) = func_plat : "Platform"
[
	spawnflags(Flags) =
	[
		1 : "Plat Low Trigger" : 0
	]
	speed(integer) : "Speed" : 100
	accel(integer) : "Acceleration" : 500
	lip(integer) : "Lip remaining after move" : 8
	height(integer) : "Movement distance"
	_minlight(integer) : "Minimum light (optional)"
]

// 0222 - added "team" key
@SolidClass base(Appearflags, Targetname) color(0 128 204) = func_rotating : "Rotating brush"
[
	spawnflags(Flags) =
	[
		1 : "Start On" : 0
		2 : "Reverse" : 0
		4 : "X Axis" : 0
		8 : "Y Axis" : 0
		16 : "Pain on Touch" : 0
		32 : "Block Stops" : 0
		64 : "Animated" : 0
		128 : "Animated Fast" : 0
	]
	team(string) : "Team"
	speed(integer) : "Speed" : 100
	dmg(integer) : "Damage when blocked" : 2
	_minlight(integer) : "Minimum light (optional)"
]

@PointClass base(Appearflags, Targetname, Target) color(76 25 153) size(-8 -8 -8, 8 8 8) = func_timer : "Timer"
[
	spawnflags(Flags) =
	[
		1 : "Start On" : 0
	]
	wait(integer) : "Base wait time" : 1
	random(integer) : "Wait variance (+/-)"
	delay(integer) : "Delay before first firing"
	pausetime(integer) : "Additional delay"
]

// 0219 - added "team" key
@SolidClass base(Appearflags, Targetname) color(0 128 204) = func_train : "Moving platform"
[
	spawnflags(Flags) =
	[
		1 : "Start On" : 0
		2 : "Toggle" : 0
		4 : "Block Stops" : 0
	]
	target(string) : "First stop target"
	team(string) : "Team"
	speed(integer) : "Speed" : 100
	dmg(integer) : "Damage when blocked" : 2
	noise(string) : "Sound (path/file.wav)"
	_minlight(integer) : "Minimum light (optional)"
]

// 0221 - added a "_minlight" key
@SolidClass base(Appearflags, Targetname) color(0 128 204) = func_wall : "Solid Wall"
[
	spawnflags(Flags) =
	[
		1 : "Trigger Spawn" : 0
		2 : "Toggle" : 0
		4 : "Start On" : 0
		8 : "Animated" : 0
		16 : "Animated Fast" : 0
	]
	_minlight(integer) : "Minimum light (optional)"
]

// must never be transparent?
//
// 0221 - added a "_minlight" key
@SolidClass base(Appearflags, Targetname) color(0 128 204) = func_water : "Moveable water"
[
	spawnflags(Flags) =
	[
		1 : "Start Open" : 0
	]
	speed(integer) : "Speed" : 25
	wait(choices) : "Wait before return" : -1 =
	[
		-1 : "Toggle"
	]
	lip(integer) : "Lip remaining after move"
	sounds(Choices) : "Sounds" : 1 =
	[
		0 : "No Sounds"
		1 : "Water"
		2 : "Lava"
	]
	team(string) : "Team"
	_minlight(integer) : "Minimum light (optional)"
]

@PointClass base(Appearflags, Targetname) color(0 128 0) size(-4 -4 -4, 4 4 4) = info_null : "Spotlight target" []
@PointClass base(info_null) = info_notnull : "Lightning target" []

@BaseClass base(Appearflags, Target) color(76 76 255) size(-16 -16 -16, 16 16 16) = Items
[
	team(string) : "Team"
]

@PointClass base(Items) model({ "path": ":models/items/adrenal/tris.md2" }) = item_adrenaline : "+1 to max health" []
@PointClass base(Items) model({ "path": ":models/items/c_head/tris.md2" }) = item_ancient_head : "+2 to max health" []
@PointClass base(Items) model({ "path": ":models/items/armor/body/tris.md2" }) = item_armor_body : "Body armor" []
@PointClass base(Items) model({ "path": ":models/items/armor/combat/tris.md2" }) = item_armor_combat : "Combat armor" []
@PointClass base(Items) model({ "path": ":models/items/armor/jacket/tris.md2" }) = item_armor_jacket : "Jacket armor" []
@PointClass base(Items) model({ "path": ":models/items/armor/shard/tris.md2" }) = item_armor_shard : "Armor shard" []
@PointClass base(Items) model({ "path": ":models/items/band/tris.md2" }) = item_bandolier : "Equipment belt" []
@PointClass base(Items) model({ "path": ":models/items/breather/tris.md2" }) = item_breather : "Underwater breather" []
@PointClass base(Items) model({ "path": ":models/items/enviro/tris.md2" }) = item_enviro : "Enviro-Suit" []
@PointClass base(Items) model({ "path": ":models/items/healing/medium/tris.md2" }) = item_health : "+10 health" []
@PointClass base(Items) model({ "path": ":models/items/healing/stimpack/tris.md2" }) = item_health_small : "+2 health" []
@PointClass base(Items) model({ "path": ":models/items/healing/large/tris.md2" }) = item_health_large : "+25 health" []
@PointClass base(Items) model({ "path": ":models/items/mega_h/tris.md2" }) = item_health_mega : "+100 health" []
@PointClass base(Items) model({ "path": ":models/items/invulner/tris.md2" }) = item_invulnerability : "Invulnerability" []
@PointClass base(Items) model({ "path": ":models/items/pack/tris.md2" }) = item_pack : "Heavy backpack" []
@PointClass base(Items) model({ "path": ":models/items/armor/screen/tris.md2" }) = item_power_screen : "Power screen" []
@PointClass base(Items) model({ "path": ":models/items/armor/shield/tris.md2" }) = item_power_shield : "Power shield" []
@PointClass base(Items) model({ "path": ":models/items/quaddama/tris.md2" }) = item_quad : "Quad damage" []
@PointClass base(Items) model({ "path": ":models/items/silencer/tris.md2" }) = item_silencer : "Silencer" []

@BaseClass base(Appearflags, Target) color(0 128 204) size(-16 -16 -16, 16 16 16) = Keys []

@PointClass base(Keys) model({ "path": ":models/items/keys/target/tris.md2" }) = key_airstrike_target : "Tank commander's head" []
@PointClass base(Keys) model({ "path": ":models/items/keys/key/tris.md2" }) = key_blue_key : "Normal door key - blue" []
@PointClass base(Keys) model({ "path": ":models/monsters/commandr/head/tris.md2" }) = key_commander_head : "Tank commander's head" []
@PointClass base(Keys) model({ "path": ":models/items/keys/data_cd/tris.md2" }) = key_data_cd : "Key for computer centers" []
@PointClass base(Keys) model({ "path": ":models/items/keys/spinner/tris.md2" }) = key_data_spinner : "Key for city computer" []
@PointClass base(Keys) model({ "path": ":models/items/keys/pass/tris.md2" }) = key_pass : "Security pass for secret level" []

// 0301 - added "targetname" key
@PointClass base(Keys, Targetname) model({ "path": ":models/items/keys/power/tris.md2" }) = key_power_cube : "Warehouse circuits"
[
	spawnflags(Flags) =
	[
		1 : "Trigger Spawn" : 0
		2 : "No Touch" : 0
	]
]
@PointClass base(Keys) model({ "path": ":models/items/keys/pyramid/tris.md2" }) = key_pyramid : "Key for entrance to jail3" []
@PointClass base(Keys) model({ "path": ":models/items/keys/red_key/tris.md2" }) = key_red_key : "normal door key - red" []

@PointClass base(Appearflags, Target, Targetname) color(0 255 0) size(-8 -8 -8, 8 8 8) = light : "Light"
[
	spawnflags(Flags) =
	[
		1 : "Start Off" : 0
	]
	light(integer) : "Brightness" : 300
	style(Choices) : "Style" : 0 =
	[
		0 : "Normal"
		1 : "Flicker #1"
		6 : "Flicker #2"
		2 : "Slow Strong Pulse"
		3 : "Candle #1"
		7 : "Candle #2"
		8 : "Candle #3"
		4 : "Fast Strobe"
		5 : "Gentle Pulse #1"
		9 : "Slow Strobe"
		10 : "Fluorescent Flicker"
		11 : "Slow pulse, no black"
	]
	_cone(integer) : "Size of light (spotlight)" : 10
]

@PointClass base(light) color(0 255 0) size(-2 -2 -12, 2 2 12) model({ "path": ":models/objects/minelite/light1/tris.md2", "skin": 0 }) = light_mine1 : "Clean fluorescent light fixture"	[spawnflags(Flags) =	[	1 : "" : 0	]]
@PointClass base(light) color(0 255 0) size(-2 -2 -12, 2 2 12) model({ "path": ":models/objects/minelite/light2/tris.md2", "skin": 0 }) = light_mine2 : "Dusty fluorescent light fixture"	[spawnflags(Flags) = [	1 : "" : 0]]




// actor code is still broken...leaving this in because i know *someone* will fix
// this because its pretty damn cool.
@PointClass base(PlayerClass, Target) = misc_actor : "Actor"
[
	health(integer) : "Health" : 100
]
@PointClass base(Appearflags, Targetname) = target_actor : "Actor path"
[
	spawnflags(Flags) =
	[
		1 : "Jump" : 0
		2 : "Shoot" : 0
		4 : "Attack" : 0
		16 : "Hold" : 0
		32 : "Brutal" : 0
	]
	target(string) : "Next path target"
	pathtarget(string) : "Action target"
	wait(integer) : "Pause time"
	message(string) : "Message"
	speed(integer) : "Forward (jump)" : 200
	height(integer) : "Height (jump)" : 200
]

// 0224 - changed banner size from (-4 -4 -4, 4 4 4) to (-4 -4 0, 4 4 246)
@PointClass base(Appearflags) color(255 128 0) size(-4 -4 0, 4 4 246) model({ "path": ":models/objects/banner/tris.md2" }) = misc_banner : "Flowing banner" []

@PointClass base(Appearflags) color(255 128 0) size(-8 -8 -8, 8 8 8) model({ "path": ":models/objects/black/tris.md2" }) = misc_blackhole : "Blackhole" []

@PointClass base(Appearflags) color(255 128 0) size(-16 -16 0, 16 16 16)	model({{
  spawnflags & 32 -> { "path": ":models/deadbods/dude/tris.md2", "frame": 5 },
  spawnflags & 16 -> { "path": ":models/deadbods/dude/tris.md2", "frame": 4 },
  spawnflags &  8 -> { "path": ":models/deadbods/dude/tris.md2", "frame": 3 },
  spawnflags &  4 -> { "path": ":models/deadbods/dude/tris.md2", "frame": 2 },
  spawnflags &  2 -> { "path": ":models/deadbods/dude/tris.md2", "frame": 1 },
                             	":models/deadbods/dude/tris.md2"
  }}) = misc_deadsoldier : "Dead guys! 6 of em!"
[
	spawnflags(Flags) =
	[
		1 : "On Back" : 0
		2 : "On Stomach" : 0
		4 : "Back, Decap" : 0
		8 : "Fetal Position" : 0
		16 : "Sitting, Decap" : 0
		32 : "Impaled" : 0
	]
]

// The following three entities are eye-candy - they don't do anything
@PointClass base(Appearflags) color(255 128 0) size(-32 -32 -16, 32 32 32) model({ "path": ":models/monsters/tank/tris.md2",	"frame":254, "skin": 0}) = misc_eastertank : "Tank sitting down. Make him a chair out of brushes." []
@PointClass base(Appearflags) color(255 128 0) size(-32 -32 0, 32 32 32) model({ "path": ":models/monsters/bitch/tris.md2", "frame":208}) = misc_easterchick : "Chick #1 sitting: Place her near misc_eastertank." []
@PointClass base(Appearflags) color(255 128 0) size(-32 -32 0, 32 32 32) model({ "path": ":models/monsters/bitch/tris.md2", "frame":248}) = misc_easterchick2 : "Chick #2 sitting w/ different pose. Can be placed close to misc_eastertank's for full effect." []

// 0225 - removed "target" key - id concluded being able to target
// something with a movable barrel was a bug and removed that function :(
@PointClass base(Appearflags, Targetname) color(0 128 204) size(-16 -16 0, 16 16 40) model({ "path": ":models/objects/barrels/tris.md2" }) = misc_explobox : "Large exploding box"
[
	mass(integer) : "Mass" : 100
	health(integer) : "Health" : 80
	dmg(integer) : "Damage" : 150
]

// set angle for gib direction, otherwise it just drops
@PointClass base(Appearflags) color(255 0 0) size(-8 -8 -8, 8 8 8) model({ "path": ":models/objects/gibs/arm/tris.md2" }) = misc_gib_arm : "arm gib, use with target_spawner" []
@PointClass base(Appearflags) color(255 0 0) size(-8 -8 -8, 8 8 8) model({ "path": ":models/objects/gibs/head/tris.md2" }) = misc_gib_head : "head gib, use with target_spawner" []
@PointClass base(Appearflags) color(255 0 0) size(-8 -8 -8, 8 8 8) model({ "path": ":models/objects/gibs/arm/tris.md2" }) = misc_gib_leg : "leg gib, use with target_spawner" []



// new
@PointClass base(Appearflags, Targetname, Target) color(255 128 0) size(-16 -16 -24, 16 16 32) model({{
  spawnflags & 32 -> { "path": ":models/monsters/insane/tris.md2", "frame": 0 },
  spawnflags & 16 -> { "path": ":models/monsters/insane/tris.md2", "frame": 74 },
  spawnflags &  8 -> { "path": ":models/monsters/insane/tris.md2", "frame": 252 },
  spawnflags &  4 -> { "path": ":models/monsters/insane/tris.md2", "frame": 38 },
  spawnflags &  2 -> { "path": ":models/monsters/insane/tris.md2", "frame": 0 },
                             	":models/monsters/insane/tris.md2"
  }}) = misc_insane : "Insane Soldiers"
[
	spawnflags(Flags) =
	[
    1 : "Ambush" : 0
    2 : "Trigger Spawn" : 0
    4 : "Crawl" : 0
    8 : "Crucified" : 0
   16 : "Stand Ground" : 0
   32 : "Always Stand" : 0
	]
  deathtarget(string) : "Entity to trigger at death"
  killtarget(string) : "Entity to remove at death"
  item(string) : "Item to spawn at death"
]

@PointClass base(Appearflags, Targetname) color(255 128 0) size(-64 -64 0, 64 64 128) model({ "path": ":models/objects/satellite/tris.md2" }) = misc_satellite_dish : "Satellite Dish" []
@PointClass base(Appearflags, Targetname) color(255 128 0) size(-16 -16 0, 16 16 32) model({ "path": ":models/ships/strogg1/tris.md2" }) = misc_strogg_ship : "Strogg ship for flybys"
[
	target(string) : "First path target"
	speed(integer) : "Speed"

]

@PointClass base(Appearflags, Targetname) color(255 0 0) size(-32 -32 -24, 32 32 -16) model({ "path": ":models/objects/dmspot/tris.md2", "skin": 1 }) = misc_teleporter : "Teleporter: To hide the teleport pads, place them units 10 units into a brush."	[	target(string) : "Teleport Destination"	]
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-32 -32 -24, 32 32 -16) model({ "path": ":models/objects/dmspot/tris.md2", "skin": 0 }) = misc_teleporter_dest : "Teleport Destination: To hide the teleport pads, place them units 10 units into a brush." []
@PointClass base(Appearflags) color(255 128 0) size(-176 -120 -24, 176 120 72) model({ "path": ":models/ships/bigviper/tris.md2" }) = misc_bigviper : "Large stationary Viper" []
@PointClass base(Appearflags, Targetname) color(255 128 0) size(-16 -16 0, 16 16 32) model({ "path": ":models/ships/viper/tris.md2" }) = misc_viper : "Viper for flybys"
[
	target(string) : "First path target"
	speed(integer) : "Speed"

]
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) model({ "path": ":models/objects/bomb/tris.md2" }) = misc_viper_bomb : "Viper Bomb"
[
	dmg(integer) : "Damage"
]

//
// Monsters!
//

@BaseClass base(Appearflags, Target, Targetname) color(255 128 0) size(-16 -16 -24, 16 16 32) = Monsters
[
	spawnflags(Flags) =
	[
		1 : "Ambush" : 0
		2 : "Trigger Spawn" : 0
		4 : "Sight" : 0
	]
	combattarget(string) : "Point combat target"
	deathtarget(string) : "Entity to trigger at death"
	killtarget(string) : "Entity to remove at death"
	item(string) : "Spawn Item"
]

@PointClass base(Monsters) model({ "path": ":models/monsters/berserk/tris.md2" }) = monster_berserk : "Berserker" []
@PointClass base(Monsters) size(-56 -56 0, 56 56 80) model({ "path": ":models/monsters/boss2/tris.md2" }) = monster_boss2 : "Hornet" []

// Just fidgets in one spot and teleports away when triggered
//
// 0221 - removed Monsters class inheritance
@PointClass base(Appearflags, Targetname) size(-32 -32 0, 32 32 80) model({ "path": ":models/monsters/boss3/rider/tris.md2", "frame": 414}) = monster_boss3_stand : "Stationnary Makron" []
@PointClass base(Monsters) model({ "path": ":models/monsters/brain/tris.md2" }) = monster_brain : "Brains" []
@PointClass base(Monsters) model({ "path": ":models/monsters/bitch/tris.md2" }) = monster_chick : "Iron Maiden" []
@PointClass base(Appearflags, Targetname) color(255 128 0) size(-32 -32 0, 32 32 48) model({ "path": ":models/monsters/commandr/tris.md2" }) = monster_commander_body : "Tank commander's decapitated body" []
@PointClass base(Monsters) model({ "path": ":models/monsters/flipper/tris.md2" }) = monster_flipper : "Barracuda shark" []
@PointClass base(Monsters) model({ "path": ":models/monsters/float/tris.md2" }) = monster_floater : "Technician" []
@PointClass base(Monsters) model({ "path": ":models/monsters/flyer/tris.md2" }) = monster_flyer : "Flyer" []
@PointClass base(Monsters) size(-32 -32 -24, 32 32 64) model({ "path": ":models/monsters/gladiatr/tris.md2" }) = monster_gladiator : "Gladiator" []
@PointClass base(Monsters) model({ "path": ":models/monsters/gunner/tris.md2" }) = monster_gunner : "Gunner" []
@PointClass base(Monsters) model({ "path": ":models/monsters/hover/tris.md2" }) = monster_hover : "Icarus" []
@PointClass base(Monsters) model({ "path": ":models/monsters/infantry/tris.md2", "frame": 64}) = monster_infantry : "Infantry" []
@PointClass base(Monsters) size(-80 -80 0, 90 90 140) model({ "path": ":models/monsters/boss3/jorg/tris.md2" }) = monster_jorg : "Jorg" []

// 0221 - this entity can only spawn once the Jorg dies ... im sure someone will change that tho
@PointClass base(Monsters) size(-32 -32 0, 32 32 80) model({ "path": ":models/monsters/boss3/rider/tris.md2", "frame": 414}) = monster_makron : "Makron" []
@PointClass base(Monsters) model({ "path": ":models/monsters/medic/tris.md2" }) = monster_medic : "Medic" []
@PointClass base(Monsters) size(-32 -32 -24, 32 32 32) model({ "path": ":models/monsters/mutant/tris.md2" }) = monster_mutant : "Mutant" []
@PointClass base(Monsters) model({ "path": ":models/monsters/parasite/tris.md2" }) = monster_parasite : "Parasite" []
@PointClass base(Monsters) model({ "path": ":models/monsters/soldier/tris.md2", "skin": 0 }) = monster_soldier_light : "Light Soldier" []
@PointClass base(Monsters) model({ "path": ":models/monsters/soldier/tris.md2", "skin": 2 }) = monster_soldier : "Soldier" []
@PointClass base(Monsters) model({ "path": ":models/monsters/soldier/tris.md2", "skin": 4 }) = monster_soldier_ss : "SS Soldier" []
@PointClass base(Monsters) size(-32 -32 -16, 32 32 72) model({ "path": ":models/monsters/tank/tris.md2" }) = monster_tank : "Tank" []
@PointClass base(Monsters) size(-32 -32 -16, 32 32 72) model({ "path": ":models/monsters/tank/tris.md2", "skin": 2 }) = monster_tank_commander : "Tank Commander" []
@PointClass base(Monsters) size(-64 -64 0, 64 64 72) model({ "path": ":models/monsters/boss1/tris.md2" }) = monster_supertank : "Super Tank Boss" []

// using a "wait" value of -1 on a path corner causes a func_train to go silent between
// itself and the next path corner when the train is restarted. The train's sound will
// resume as soon as it reaches a path corner with a "wait" value other than -1
@PointClass base(Appearflags, Targetname) color(128 76 0) size(-8 -8 -8, 8 8 8) = path_corner : "Path marker"
[
	spawnflags(Flags) =
	[
		1 : "Teleport" : 0
	]
	target(string) : "Next path target"
	pathtarget(string) : "Event to trigger"
	wait(choices) : "Wait" : 0 =
	[
		-1 : "Wait for retrigger"
	]
]

// "target" doesn't work (for now)...a separate trigger is needed
@PointClass base(Appearflags, Targetname, Target) color(128 76 9) size(-8 -8 -8, 8 8 8) = point_combat : "1st point of combat"
[
	spawnflags(Flags) =
	[
		1 : "Hold" : 0
	]
]

@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_blaster : "Blaster"
[
	spawnflags(Flags) =
	[
		1 : "No Trail" : 0
		2 : "No Effects" : 0
	]
	dmg(integer) : "Damage" : 15
	speed(integer) : "Speed" : 1000
]

// set "map" value to "mapname$playername" where playername equals
// the targetname of a corresponding info_player_start in the
// next map.  To play a cinematic before starting the level, the
// "map" value should be "cinemeatic.cin+mapname$playername". Note
// that a playername is not required if the corresponding info_player_start
// doesn't have a targetname.  If you want this to be designated as the last
// level of a unit, place an asterix (*) before the map name.
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_changelevel : "Change level"
[
	map(string) : "Next map"
]

// 0221 - added "_minlight" key
@SolidClass base(Appearflags, Targetname) color(0 0 255) = target_character : "Use with target_string and func_clock"
[
	team(string) : "Team"
	count(integer) : "Position in the string"
	_minlight(string) : "Minimum light (optional)"
]

@PointClass base(Appearflags, Targetname, Target) color(128 128 128) size(-8 -8 -8, 8 8 8) = target_crosslevel_trigger : "Cross-level trigger"
[
	spawnflags(Flags) =
	[
		1 : "Trigger 1" : 0
		2 : "Trigger 2" : 0
		4 : "Trigger 3" : 0
		8 : "Trigger 4" : 0
		16 : "Trigger 5" : 0
		32 : "Trigger 6" : 0
		64 : "Trigger 7" : 0
		128 : "Trigger 8" : 0
	]
	killtarget(string) : "Kill Target"
	message(string) : "Message"
	delay(integer) : "Trigger delay"
]

@PointClass base(Appearflags, Targetname, Target) color(128 128 128) size(-8 -8 -8, 8 8 8) = target_crosslevel_target : "Cross-level trigger"
[
	spawnflags(Flags) =
	[
		1 : "Trigger 1" : 0
		2 : "Trigger 2" : 0
		4 : "Trigger 3" : 0
		8 : "Trigger 4" : 0
		16 : "Trigger 5" : 0
		32 : "Trigger 6" : 0
		64 : "Trigger 7" : 0
		128 : "Trigger 8" : 0
	]
	killtarget(string) : "Kill Target"
	delay(integer) : "Trigger delay (if activated)" : 1
]

@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_earthquake : "Level wide earthquake"
[
	speed(integer) : "Severity of quake" : 200
	count(integer) : "Duration" : 5
]

@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_explosion : "Explosion"
[
	delay(integer) : "Delay before explosion"
	dmg(integer) : "Radius damage" : 0
]

@PointClass base(Appearflags, Targetname) color(255 0 255) size(-8 -8 -8, 8 8 8) = target_goal : "Counts a goal completed" []

@PointClass base(Appearflags, Targetname) color(255 0 255) size(-8 -8 -8, 8 8 8) = target_help : "Computer help message"
[
	spawnflags(Flags) =
	[
		1 : "Main Onjective" : 0
	]
	message(string) : "Computer message"
]

// if no color spawnflags are set, the laser color defaults to dim gray (and hard to see
// setting the damage to 0 makes it use the default damage of 1
// setting the damage to a negative number will actually give health
@PointClass base(Appearflags, Targetname, Target) color(0 128 204) size(-8 -8 -8, 8 8 8) = target_laser : "Laser"
[
	spawnflags(Flags) =
	[
		1 : "Start On" : 0
		2 : "Red" : 0
		4 : "Green" : 0
		8 : "Blue" : 0
		16 : "Yellow" : 0
		32 : "Orange" : 0
		64 : "Fat" : 0
	]
	dmg(integer) : "Damage"
]

// 0221 - added "target" key
@PointClass base(Appearflags, Targetname, Target) color(0 128 204) size(-8 -8 -8, 8 8 8) = target_lightramp : "Light ramp"
[
	spawnflags(Flags) =
	[
		1 : "Toggle" : 0
	]
	speed(integer) : "Speed"
	message(string) : "start/end light level"
]

@PointClass base(Appearflags, Targetname) color(255 0 255) size(-8 -8 -8, 8 8 8) = target_secret : "Counts a secret found"
[
	message(string) : "Message to print" : "You have found a secret."
]

// set speed and angle, otherwise spawned object drops
//
// 0221 - changed "target" key description for clarity
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_spawner : "Monster/Item spawner"
[
	target(string) : "Monster/Item to spawn"
	speed(integer) : "Speed"
]

// looped sounds are automatically volume 1, attenuation 3 :\
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_speaker : "Sound player"
[
	spawnflags(Flags) =
	[
		1 : "Looped On" : 0
		2 : "Looped Off" : 0
		4 : "Reliable" : 0
	]
	noise(string) : "Sound (path/file.wav)"
	attenuation(Choices) : "Attenuation" : 1 =
	[
		-1 : "None, send to whole level"
		1 : "Normal fighting sounds"
		2 : "Idle sound level"
		3 : "Ambient sound level"
	]
	volume(integer) : "Volume (0.0 - 1.0)" : 1
]

// "sounds" values other than 1 are silent.  leaving in the other
// options for availability to mods/fixes
//
// 0221 - clarified "count" description
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_splash : "Creates a splash when used"
[
	sounds(choices) : "Type of splash" : 2 =
	[
		1 : "Sparks"
		2 : "Blue water"
		3 : "Brown water"
		4 : "Slime"
		5 : "Lava"
		6 : "Blood"
	]
	count(integer) : "Number of pixels in splash (1 - 255)"
	dmg(integer) : "Radius damage"
]

// 0221 - removed "message" key (?)
@PointClass base(Appearflags, Targetname) color(0 0 255) size(-8 -8 -8, 8 8 8) = target_string : "String"
[
	team(string) : "Team"
]

// eye candy... Particles #2 (style 22) is quite cool
@PointClass base(Appearflags, Targetname) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_temp_entity : "Temp entity"
[
	style(choices) : "Style" : 22 =
	[
		20 : "Green Fireball"
		21 : "Particles #1"
		22 : "Particles #2"
	]
]

// 0221 - added "delay" and "killtarget" keys
@PointClass base(Appearflags, Target) color(128 128 128) size(-8 -8 -8, 8 8 8) = trigger_always : "Always triggers"
[
	killtarget(string) : "Kill Target"
	delay(integer) : "Time before triggering"
]

@SolidClass base(Appearflags, Targetname, Target) color(128 128 128) = trigger_counter : "Counter"
[
	spawnflags(Flags) =
	[
		1 : "No Message" : 0
	]
	count(integer) : "Count before trigger" : 2
]

@PointClass base(Appearflags, Targetname, Target) color(76 25 153) = trigger_elevator : "Elevator trigger" []

@SolidClass base(Appearflags) color(128 128 128) = trigger_gravity : "Change gravity"
[
	gravity(integer) : "Gravity (standard = 1.0)" : 1
]

@SolidClass base(Appearflags, Targetname) color(128 128 128) = trigger_hurt : "Hurts on touch"
[
	spawnflags(Flags) =
	[
		1 : "Start Off" : 0
		2 : "Toggle" : 0
		4 : "Silent" : 0
		8 : "No Protection" : 0
		16 : "Slow hurt" : 0
	]
	dmg(integer) : "Damage" : 5
]

@PointClass base(Appearflags, Targetname, Target) color(128 128 128) size(-8 -8 -8, 8 8 8) = trigger_key : "Triggers with key"
[
	killtarget(string) : "Kill target"
	item(string) : "Item classname" : "key_blue_key"
]

@SolidClass base(Appearflags) color(128 128 128) = trigger_monsterjump : "Makes monsters jump"
[
	speed(integer) : "Speed thrown forward" : 200
	height(integer) : "Height thrown upward" : 200
]

// 0221 - switched around _relay, _once, and _multiple
@PointClass base(Appearflags, Targetname, Target) color(128 128 128) = trigger_relay : "Relay trigger"
[
	killtarget(string) : "Kill Target"
	delay(integer) : "Time before triggering"
	message(string) : "Trigger message"
]

// 0303 - removed "sounds" key
@SolidClass base(trigger_relay) = trigger_once : "Single fire trigger"
[
	spawnflags(Flags) =
	[
		4 : "Triggered" : 0
	]
]

@SolidClass base(trigger_once) = trigger_multiple : "Multiple fire trigger"
[
	spawnflags(Flags) =
	[
		1 : "Monster" : 0
		2 : "Not Player" : 0
	]
	wait(integer) : "Seconds between triggers" : 0
]

@SolidClass base(Appearflags) color(128 128 128) = trigger_push : "Push trigger"
[
	spawnflags(Flags) =
	[
		1 : "Push Once" : 0
	]
	speed(integer) : "Speed of push" : 1000
]

// 0221 - added "_minlight" key to _breach and _base
@SolidClass base(Appearflags, Targetname, Target) color(128 255 128) = turret_breach : "Turret breach"
[
	speed(integer) : "Speed" : 50
	dmg(integer) : "Damage" : 10
	minpitch(integer) : "Miminum pitch angle" : -30
	maxpitch(integer) : "Maximum pitch angle" : 30
	minyaw(integer) : "Minimum yaw angle" : 0
	maxyaw(integer) : "Maximum yaw angle" : 360
	team(string) : "Team"
	_minlight(string) : "Minimum light (optional)"
]
@SolidClass base(Appearflags) color(128 255 128) = turret_base : "Turret base"
[
	team(string) : "Team"
	_minlight(string) : "Minimum light (optional)"
]
@PointClass base(Appearflags) color(128 255 128) size(-16 -16 -24, 16 16 32) model({ "path": ":models/monsters/infantry/tris.md2"}) = turret_driver : "Turret driver"	[	target(string) : "Target (turret_breach)"	]
@PointClass base(Appearflags) color(0 128 204) size(-8 -8 -8, 8 8 8) = viewthing : "Just for debugging level - dont use" []
@BaseClass base(Appearflags, Target) color(76 76 255) size(-16 -16 -16, 16 16 16) = Weapons
[
	team(string) : "Team"
]

//
// Weapons!
//

@PointClass base(Weapons) model({ "path": ":models/weapons/g_shotg/tris.md2" }) = weapon_shotgun : "Shotgun" []
@PointClass base(Weapons) model({ "path": ":models/weapons/g_shotg2/tris.md2" }) = weapon_supershotgun : "Super shotgun" []
@PointClass base(Weapons) model({ "path": ":models/weapons/g_machn/tris.md2" }) = weapon_machinegun : "Machinegun" []
@PointClass base(Weapons) model({ "path": ":models/weapons/g_chain/tris.md2" }) = weapon_chaingun : "Chain gun" []
@PointClass base(Weapons) model({ "path": ":models/weapons/g_launch/tris.md2" }) = weapon_grenadelauncher : "Grenade launcher" []
@PointClass base(Weapons) model({ "path": ":models/weapons/g_rocket/tris.md2" }) = weapon_rocketlauncher : "Rocket launcher" []
@PointClass base(Weapons) model({ "path": ":models/weapons/g_hyperb/tris.md2" }) = weapon_hyperblaster : "Hyperblaster" []
@PointClass base(Weapons) model({ "path": ":models/weapons/g_rail/tris.md2" }) = weapon_railgun : "Rail gun" []
@PointClass base(Weapons) model({ "path": ":models/weapons/g_bfg/tris.md2" }) = weapon_bfg : "Big Freakin Gun!" []
