//
// Quake 2 game definition file (.fgd)
//
// Originally written by by autolycus
// Special thanks to: Disruptor, Zoid, Zaphod, Imaginos, EutecTic, xaGe.
//
// Last updated by Paril for re-release

// Includes stuff from the tools for lighting etc
@include "ericw_tools.fgd" 

//
// worldspawn
//

// 0302 - added "nextmap" key
@SolidClass base(EWT_base_Worldspawn) = worldspawn : "World entity"
[
    sky(string) : "Environment map name"
    skyaxis(vector) : "Vector axis for rotating sky"
    skyrotate(string) : "Speed of rotation (degrees/second)"
    skyautorotate(integer) : "Disable to set sky rotation manually" : 1
    sounds(integer) : "CD Track Number" : 1
    gravity(integer) : "Gravity" : 800
    instantitems(integer) : "Instant Item Use" : 0
    message(string) : "Level name"
    nextmap(string) : "Next map (DM only)"
    start_items(string) : "Starting items: a semi-colon delimited list of items and amounts to be given to player if they have a clear inventory."
	achievement(string) : "If an EOU is triggered from this map, this is the achievement to give out."

    fog_density(float) : "density value of fog, 0-1"
    fog_color(color) : "color value of fog, 3d vector with values between 0-1 (r g b)"
    fog_sky_factor(float) : "sky factor value of fog, 0-1"
    heightfog_falloff(float) : "falloff value of heightfog, 0-1"
    heightfog_density(float) : "density value of heightfog, 0-1"
    heightfog_start_color(color) : "start color of heightfog, 3d vector with values between 0-1 (r g b)"
    heightfog_end_color(color) : "end color of heightfog, 3d vector with values between 0-1 (r g b)"
    heightfog_start_dist(float) : "start distance value of heightfog, in world units"
    heightfog_end_dist(float) : "start distance value of heightfog, in world units"
]

//
// base marker definitions
//

// EditorFlags apply to everything - all entities should inherit it.
@baseclass = EditorFlags [
    spawnflags(Flags) =
    [
        256 : "Not in Easy" : 0
        512 : "Not in Normal" : 0
        1024 : "Not in Hard" : 0
        2048 : "Not in Deathmatch" : 0
        // Paril: Rogue
        4096 : "Not in Coop" : 0
        8192 : "Reserved Editor Flag" : 0
        // Paril: Kex
        16384 : "Coop Only" : 0
        32768 : "Reserved Editor Flag" : 0
    ]
]

// Entity can take angle or angles.
@baseclass = Angleable [
	angle(choices) : "Facing angle (yaw)" : 0 =
	[
		-1 : "Up"
		-2 : "Down"
	]
    angles(vector) : "pitch yaw roll" : "0 0 0" : "Facing angles"
]

// Entity can be targeted by stuff.
@baseclass = Targetable [
	targetname(target_source) : "Name for firing"
]

// Entity will call G_UseTargets
@baseclass = UseTargets [
	target(target_destination) : "Target to fire"
	delay(float) : "Target delay"
	message(string): "Message on activation"
	killtarget(target_destination) : "Targets to fully delete"
]

// Entity supports pointing at something, but won't call G_UseTargets
@baseclass = Target [
	target(target_destination) : "Target to fire"
]

// Entity supports "team"
@baseclass = Teamable [
	team(string) : "Team identifier"
]

// Entity supports brush model animations
@baseclass = BmodelAnim [
	bmodel_anim_start(integer) : "Start frame of animation"
	bmodel_anim_end(integer) : "End frame of animation"
	bmodel_anim_style(choices) : "Animation style" : 0 =
    [
        0 : "Forwards"
        1 : "Backwards"
        2 : "Random"
    ]
	bmodel_anim_speed(integer) : "Animation speed, in milliseconds"
	bmodel_anim_nowrap(integer) : "If set, frames are clamped rather than wrapping"

	bmodel_anim_alt_start(integer) : "Start frame of alternate animation"
	bmodel_anim_alt_end(integer) : "End frame of alternate animation"
	bmodel_anim_alt_style(choices) : "Alternate animation style" : 0 =
    [
        0 : "Forwards"
        1 : "Backwards"
        2 : "Random"
    ]
	bmodel_anim_alt_speed(integer) : "Alternate animation speed, in milliseconds"
	bmodel_anim_alt_nowrap(integer) : "If set, alternate frames are clamped rather than wrapping"
]

// Entity supports brush model sound modifications
@baseclass = BmodelSounds [
	noise_start(string) : "Noise to play on activation"
	noise_middle(string) : "Noise to play while traveling"
	noise_end(string) : "Noise to play on end"
]

// Entity supports noise key
@baseclass = Noise [
	noise(string) : "Noise to play"
]

// Entity supports alpha key
@baseclass = Alpha [
	alpha(float) : "Alpha"
]

// Entity supports scale key
@baseclass = Scale [
	scale(float) : "Scale"
]

// Includes stuff related to the kex dynamic lights
@include "kexlights.fgd"

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

@baseclass base(EditorFlags, Angleable) 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 start" []
@PointClass base(PlayerClass) = info_player_deathmatch : "Player deathmatch start" []
@PointClass base(PlayerClass) = info_player_coop : "Player cooperative start" [
    targetname(string) : "Spawn point name, to be matched to previous levels' target_changelevel"
]

@PointClass base(PlayerClass) = info_player_coop_lava : "Smart Water lava spawn point" []

@PointClass base(PlayerClass, Targetable) = info_player_intermission : "Deathmatch intermission point" []

@PointClass base(PlayerClass) = info_player_team1 : "CTF Red start" []
@PointClass base(PlayerClass) = info_player_team2 : "CTF Blue start" []

// 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.
// Also, in CTF, only the master appears. No idea why.
@BaseClass base(EditorFlags, Angleable, UseTargets, Targetable) color(76 76 255) size(-15 -15 -15, 15 15 15) = Item [
    team(string) : "Team"
    spawnflags(Flags) =
    [
        1 : "Trigger Spawn" : 0
        2 : "Disable Pickup" : 0
        4 : "Toss Item On Spawn" : 0
    ]
]

@BaseClass base(Item) color(76 76 255) = Ammo []
@BaseClass base(Item) color(255 76 76) = Weapons []
@BaseClass base(Item) color(76 255 255) size(-16 -16 -16, 16 16 16) = Items []
@BaseClass base(Item) color(0 128 204) size(-16 -16 -16, 16 16 16) = Keys []

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

@PointClass base(Ammo) model({ "path": ":models/objects/ammo/tris.md2" }) = ammo_magslug : "Phalanx ammo" []
@PointClass base(Ammo) model({ "path": ":models/ammo/am_flechette/tris.md2" }) = ammo_flechettes : "ETF Rifle ammo" []
@PointClass base(Ammo) model({ "path": ":models/ammo/am_flechette/tris.md2" }) = ammo_nails : "ETF Rifle ammo" []
@PointClass base(Ammo) model({ "path": ":models/ammo/am_prox/tris.md2" }) = ammo_prox : "Prox Launcher ammo" []
@PointClass base(Ammo) model({ "path": ":models/ammo/am_disr/tris.md2" }) = ammo_disruptor : "Disruptor ammo" []
@PointClass base(Ammo) model({ "path": ":models/weapons/g_trap/tris.md2" }) = ammo_trap : "Traps" []
@PointClass base(Ammo) model({ "path": ":models/ammo/am_tesl/tris.md2" }) = ammo_tesla : "Teslas" []
@PointClass base(Ammo) model({ "path": ":models/weapons/g_nuke/tris.md2" }) = ammo_nuke : "A-M Bomb (usable nuke); DM only" []

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

@PointClass base(Weapons) model({ "path": ":models/weapons/g_chainf/tris.md2" }) = weapon_chainfist : "Chainfist" []
@PointClass base(Weapons) model({ "path": ":models/weapons/g_etf_rifle/tris.md2" }) = weapon_etf_rifle : "ETF Rifle" []
@PointClass base(Weapons) model({ "path": ":models/weapons/g_etf_rifle/tris.md2" }) = weapon_nailgun : "ETF Rifle" []
@PointClass base(Weapons) model({ "path": ":models/weapons/g_plaunch/tris.md2" }) = weapon_proxlauncher : "Prox Launcher" []
@PointClass base(Weapons) model({ "path": ":models/weapons/g_boom/tris.md2" }) = weapon_boomer : "Ionripper" []
@PointClass base(Weapons) model({ "path": ":models/weapons/g_beamer/tris.md2" }) = weapon_plasmabeam : "Plasma Beam" []
@PointClass base(Weapons) model({ "path": ":models/weapons/g_beamer/tris.md2" }) = weapon_heatbeam : "Plasma Beam" []
@PointClass base(Weapons) model({ "path": ":models/weapons/g_shotx/tris.md2" }) = weapon_phalanx : "Phalanx" []
@PointClass base(Weapons) model({ "path": ":models/weapons/g_dist/tris.md2" }) = weapon_disintegrator : "Disruptor" []

@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" []
@PointClass base(Items) model({ "path": ":models/items/silencer/tris.md2" }) = item_flashlight : "Flashlight" []

@PointClass base(Items) model({ "path": ":models/items/quadfire/tris.md2" }) = item_quadfire : "DualFire Damage" []
@PointClass base(Items) model({ "path": ":models/items/goggles/tris.md2" }) = item_ir_goggles : "IR Goggles" []
@PointClass base(Items) model({ "path": ":models/items/ddamage/tris.md2" }) = item_double : "Double Damage" []

@PointClass base(Items) model({ "path": ":models/items/vengnce/tris.md2" }) = item_sphere_vengeance : "vengeance sphere" []
@PointClass base(Items) model({ "path": ":models/items/hunter/tris.md2" }) = item_sphere_hunter : "hunter sphere" []
@PointClass base(Items) model({ "path": ":models/items/defender/tris.md2" }) = item_sphere_defender : "defender sphere" []
@PointClass base(Items) model({ "path": ":models/items/dopple/tris.md2" }) = item_doppleganger : "Doppleganger" []


@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 (key)" []
@PointClass base(Keys) model({ "path": ":models/items/keys/data_cd/tris.md2" }) = key_data_cd : "Data CD key for computer centers" []
@PointClass base(Keys) model({ "path": ":models/items/keys/spinner/tris.md2" }) = key_data_spinner : "Data Spinner key for city computer" []
@PointClass base(Keys) model({ "path": ":models/items/keys/pass/tris.md2" }) = key_pass : "Security pass for secret level" []

@PointClass base(Keys) model({ "path": ":models/items/keys/power/tris.md2" }) = key_power_cube : "Warehouse circuits" []
@PointClass base(Keys) model({ "path": ":models/items/keys/pyramid/tris.md2" }) = key_pyramid : "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" []
// Expansions
@PointClass base(Keys) model({ "path": ":models/items/keys/green_key/tris.md2" }) = key_green_key : "normal door key - green" []
@PointClass base(Keys) model({ "path": ":models/weapons/g_nuke/tris.md2" }) = key_nuke_container : "Antimatter Pod (nuke key part 1)" []
@PointClass base(Keys) model({ "path": ":models/weapons/g_nuke/tris.md2" }) = key_nuke : "Antimatter Bomb (nuke key part 2)" []
// N64
@PointClass base(Keys) model({ "path": ":models/items/n64/charge/tris.md2" }) = key_explosive_charges : "Explosive Charge" []
@PointClass base(Keys) model({ "path": ":models/items/n64/yellow_key/tris.md2" }) = key_yellow_key : "Yellow Key" []
@PointClass base(Keys) model({ "path": ":models/items/n64/power_core/tris.md2" }) = key_power_core : "Power Core" []
// CTF
@PointClass base(Keys) model({ "path": ":players/male/flag1.md2" }) = item_flag_team1 : "CTF Flag (red)" []
@PointClass base(Keys) model({ "path": ":players/male/flag2.md2" }) = item_flag_team2 : "CTF Flag (blue)" []


// 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
@SolidClass base(EditorFlags, Targetable) = func_areaportal : "Area portal (Vis blocker)" []

@SolidClass base(EditorFlags, Angleable, UseTargets, Targetable, EWT_base_BModel, BmodelAnim, BmodelSounds) color(0 128 204) = func_button : "Button"
[
    speed(float) : "Speed" : "40"
    wait(choices) : "Wait before reset" : 1 =
    [
        -1 : "Never Return"
    ]
    lip(float) : "Lip remaining after move" : "4"
    health(float) : "Health (shootable)"
    sounds(choices) : "Sounds" : 0 =
    [
        0 : "Audible"
        1 : "Silent"
    ]
]

@PointClass base(EditorFlags, Targetable, UseTargets) 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" : 3600
    pathtarget(target_destination) : "Target to fire"
	target(target_destination) : "Should be targeting a target_string"
    style(choices) : "Style" : 0 =
    [
        0 : "xx"
        1 : "xx:xx"
        2 : "xx:xx:xx"
    ]
]

@PointClass base(EditorFlags, Targetable) color(0 0 255) size(-8 -8 -8, 8 8 8) = target_string : "func_clock holder for time string"
[
    team(string) : "target_characters to team with"
]

@SolidClass base(EditorFlags, Targetable, EWT_base_BModel) color(0 0 255) = target_character : "single character for target_string"
[
    team(string) : "Team"
    count(integer) : "Position in the string"
]


@SolidClass base(Angleable, EditorFlags, Targetable, UseTargets, Teamable, EWT_base_BModel, BmodelSounds) 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
    ]
    health(float) : "Health (shootable)"
    speed(float) : "Speed" : "100"
    wait(choices) : "Wait before close" : 3 =
    [
        -1 : "Stay open"
    ]
    lip(float) : "Lip remaining after move" : "8"
    dmg(float) : "Damage when blocked" : "2"
    sounds(choices) : "Sounds" : 0 =
    [
        0 : "Audible"
        1 : "Silent"
    ]
]

@SolidClass base(Angleable, EditorFlags, Targetable, UseTargets, EWT_base_BModel, BmodelSounds) 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
        65536 : "Inactive (must be triggered)" : 0
		131072 : "Safe Open (opens opposite dir. if activator facing 'angles')" : 0
    ]
    team(string) : "Team"
    distance(float) : "Degrees of rotation" : "90"
    health(float) : "Health (shootable)"
    speed(float) : "Speed" : "100"
    wait(choices) : "Wait before close" : 3 =
    [
        -1 : "Stay open"
    ]
    dmg(float) : "Damage when blocked" : "2"
    sounds(choices) : "Sounds" : 0 =
    [
        0 : "Audible"
        1 : "Silent"
    ]
]

@SolidClass base(Angleable, EditorFlags, Targetable, UseTargets, EWT_base_BModel, BmodelSounds) color(0 128 204) = func_door_secret : "Secret Door"
[
    spawnflags(Flags) =
    [
        1 : "Always shoot" : 0
        2 : "1st Left" : 0
        4 : "1st Down" : 0
    ]
    dmg(float) : "Damage when blocked" : "2"
    wait(choices) : "Wait before close" : 5 =
    [
        -1 : "Stay open"
    ]
]

// not visible in DM mode
@SolidClass base(EditorFlags, Targetable, UseTargets, EWT_base_BModel) color(0 128 204) = func_explosive : "Exploding/Breakable brush"
[
    spawnflags(Flags) =
    [
        1 : "Trigger Spawn" : 0
        2 : "Animated" : 0
        4 : "Animated Fast" : 0
    ]
    health(float) : "Health" : "100"
    mass(float) : "Mass (debris)" : "75"
    dmg(float) : "Damage" : "0"
    sounds(choices) : "Sounds" : 0 =
    [
        0 : "Silent"
        1 : "Glass Break"
    ]
]

@SolidClass base(EditorFlags, Targetable) color(255 0 0) = func_killbox : "Instant death"
[
    spawnflags(Flags) =
    [
        2 : "Level Restart Required" : 0
        4 : "Exact Trigger Collision" : 0
    ]
]

@SolidClass base(EditorFlags, Targetable, EWT_base_BModel) 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
    ]
	dmg(float) : "Crush damage" : "100"
]

@SolidClass base(EditorFlags, Targetable, EWT_base_BModel, BmodelSounds) 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
        65536 : "Acceleration" : 0
    ]
    team(string) : "Team"
    speed(float) : "Speed" : "100"
    dmg(float) : "Damage when blocked" : "2"
    accel(float) : "Acceleration speed, when flag is enabled" : "1"
    decel(float) : "Deceleration speed, when flag is enabled" : "1"
]

@PointClass base(EditorFlags, Targetable, UseTargets) color(76 25 153) size(-8 -8 -8, 8 8 8) = func_timer : "Timer"
[
    spawnflags(Flags) =
    [
        1 : "Start On" : 0
    ]
    wait(float) : "Base wait time" : "1"
    random(float) : "Wait variance (+/-) - should be <= wait"
    delay(float) : "Delay before firing when used"
    pausetime(float) : "Additional delay for START_ON timers"
]

// 0219 - added "team" key
@SolidClass base(EditorFlags, Targetable, UseTargets, Teamable, EWT_base_BModel) color(0 128 204) = func_train : "Moving platform"
[
    spawnflags(Flags) =
    [
        1 : "Start On" : 0
        2 : "Toggle" : 0
        4 : "Block Stops" : 0
        8 : "Move Teamchain" : 0
		16 : "Fix Offset (fixes legacy -1,-1,-1 offset)" : 0
		32 : "Use Origin" : 0
    ]
    pathtarget(target_destination) : "Target to fire when we reach a point"
	target(target_destination) : "First corner to be placed at"
    speed(float) : "Speed" : "100"
    dmg(float) : "Damage when blocked" : "2"
    noise(string) : "Travel noise (path/file.wav)"
]

@SolidClass base(EditorFlags, Targetable, EWT_base_BModel) 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
    ]
]

@SolidClass base(EditorFlags, Targetable, Teamable, EWT_base_BModel, BmodelSounds) color(0 128 204) = func_water : "Moveable water"
[
    spawnflags(Flags) =
    [
        1 : "Start Open" : 0
        2 : "Smart Water (player position aware rising)" : 0
    ]
    speed(float) : "Speed" : "25"
    wait(choices) : "Wait before return" : -1 =
    [
        -1 : "Toggle"
    ]
    lip(float) : "Lip remaining after move"
    sounds(Choices) : "Sounds" : 1 =
    [
        0 : "No Sounds"
        1 : "Water"
        2 : "Water"
    ]
    accel(float) : "divisor of lowest player's distance, to determine rising speed" : "20"
]

@PointClass base(Targetable) color(128 0 0) size(-2 -2 -2, 2 2 2) = info_null : "Compiler-only target (spotlights, etc)" []
@PointClass base(EditorFlags, Targetable) color(0 128 0) size(-4 -4 -4, 4 4 4) = info_notnull : "Game target" []

// expansion
@PointClass base(info_notnull) = info_teleport_destination : "Teleport Destination" []

@PointClass base(EditorFlags, Targetable, Target, EWT_base_PointLight) color(0 255 0) size(-8 -8 -8, 8 8 8) = light : "Light"
[
    spawnflags(Flags) =
    [
        1 : "Start Off" : 0
        2 : "Allow In Deathmatch" : 0
    ]
    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"
    ]
]

@PointClass base(EditorFlags, Targetable, Target) 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"   []
@PointClass base(EditorFlags, Targetable, Target) 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"   []

@PointClass base(EditorFlags) color(255 128 0) size(-4 -4 0, 4 4 246) model({ "path": ":models/objects/banner/tris.md2" }) = misc_banner : "Flowing banner" []
@PointClass base(EditorFlags, Targetable, Scale, Alpha) color(255 128 0) size(-8 -8 -8, 8 8 8) model({ "path": ":models/objects/black/tris.md2" }) = misc_blackhole : "Blackhole" [
    spawnflags(Flags) =
    [
        1 : "Auto-Noise (N64)" : 0
    ]
]

// Expansion
@PointClass base(EditorFlags, Targetable) color(255 128 0) size(-8 -8 -8, 8 8 8) model({ "path": ":models/objects/core/tris.md2" }) = misc_nuke_core : "Nuke Core (must be targeted to appear)" []

@PointClass base(EditorFlags) color(255 128 0) size(-8 -8 -8, 8 8 8) model({ "path": ":models/items/spawngro2/tris.md2", "frame": 2 }) = target_orb : "Large Orb" []

@PointClass base(EditorFlags) color(255 128 0) size(-8 -8 -8, 8 8 8) model({ "path": ":models/items/spawngro2/tris.md2", "frame": 1 }) = target_blacklight : "Large Orb (black light)" []

@PointClass base(EditorFlags) 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(EditorFlags) color(255 128 0) size(-32 -32 -16, 32 32 32) model({ "path": ":models/monsters/tank/tris.md2",    "frame":254, "skin": 2}) = misc_eastertank : "Tank sitting down. Make him a chair out of brushes." []
@PointClass base(EditorFlags) 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(EditorFlags) 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." []

@PointClass base(EditorFlags) color(0 128 204) size(-16 -16 0, 16 16 40) model({ "path": ":models/objects/barrels/tris.md2" }) = misc_explobox : "Large exploding box"
[
    mass(float) : "Mass" : "100"
    health(float) : "Health" : "80"
    dmg(float) : "Damage" : "150"
]

// set angle for gib direction, otherwise it just drops
@PointClass base(EditorFlags) 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(EditorFlags) 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(EditorFlags) 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" []


@PointClass base(EditorFlags, Targetable) color(255 128 0) size(-64 -64 0, 64 64 128)
    model(
        {{
            spawnflags & 32 -> { "path": ":models/objects/satellite/tris.md2", "frame": 38 },
                                  ":models/objects/satellite/tris.md2"
        }}
    ) =
misc_satellite_dish : "Satellite Dish" 
[
   spawnflags(Flags) =
   [
		32 : "(editor only) Show End Position" : 0
   ]
]

@PointClass base(EditorFlags, Targetable, Target) 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"
[
    speed(float) : "Speed" : "300"
]

@PointClass base(EditorFlags, Target) 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."
[
    spawnflags(Flags) =
    [
        1 : "No Sound" : 0
        2 : "No Effect" : 0
        4 : "N64 Effect" : 0
    ]
]

@PointClass base(EditorFlags, Targetable) 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 or use an info_notnull." []

@PointClass base(EditorFlags) 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(misc_strogg_ship) model({ "path": ":models/ships/viper/tris.md2" }) = misc_viper : "Viper for flybys" []

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

// Expansion
@PointClass base(misc_strogg_ship) model({ "path": ":models/ships/viper/tris.md2" }) = misc_crashviper : "Viper that crashes"
[
]

@PointClass base(EditorFlags, Targetable, Target) color(255 0 0) size(-8 -8 -8, 8 8 8) model({ "path": ":models/objects/bomb/tris.md2" }) = misc_viper_missile : "Viper Missile"
[
    dmg(float) : "Damage" : "250"
]

@PointClass base(misc_strogg_ship) model({ "path": ":models/objects/ship/tris.md2" }) = misc_transport : "Xatrix Transport"
[
]


//
// Monsters!
//

@BaseClass base(EditorFlags, Targetable, Target, Scale, Alpha) color(255 128 0) size(-16 -16 -24, 16 16 32) = Monsters
[
    spawnflags(Flags) =
    [
        1 : "Ambush" : 0
        2 : "Trigger Spawn" : 0
		4 : "Ambush Override (don't use)" : 0
        65536 : "Spawn Dead" : 0
        131072 : "Super Step" : 0
		262144 : "drop to ground" : 0
    ]
    combattarget(target_destination) : "Point combat target"
    deathtarget(target_destination) : "Entity to trigger at death"
    healthtarget(target_destination) : "Entity to trigger when health hits target"
    itemtarget(target_destination) : "Entity to trigger when item dropped by this monster is picked up"
    killtarget(target_destination) : "Entity to remove at death"
    item(string) : "Spawn Item"
    health_multiplier(float) : "Set health based on multiplier of base health" : "1.0"
	dead_frame(integer) : "Frame to spawn dead monsters on" : 0
	power_armor_power(integer) : "Override power armor amount"
	power_armor_type(Choices) : "Override power armor type" : 0 =
    [
        0 : "None"
        1 : "Screen"
        2 : "Shield"
    ]
]

@PointClass base(Monsters) 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) =
    [
    4 : "Crawl" : 0
    8 : "Crucified" : 0
   16 : "Stand Ground" : 0
   32 : "Always Stand" : 0
   64 : "Quiet" : 0
    ]
]

@PointClass base(Monsters) model({ "path": ":models/monsters/berserk/tris.md2" }) = monster_berserk : "Berserker" [
    spawnflags(Flags) =
    [
        8 : "No jumping" : 0
    ]
]
@PointClass base(Monsters) size(-56 -56 0, 56 56 80) model({ "path": ":models/monsters/boss2/tris.md2" }) = monster_boss2 : "Hornet"
[
    spawnflags(Flags) =
    [
        8 : "N64 (hyperblaster, staggered rockets)" : 0
    ]
]

// Just fidgets in one spot and teleports away when triggered
//
// 0221 - removed Monsters class inheritance
@PointClass base(EditorFlags, Targetable) 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"
[
	spawnflags(Flags) =
	[
		1 : "Ambush" : 0
		2 : "Trigger Spawn" : 0
		8 : "no laser eyes" : 0
	]
]
@PointClass base(Monsters) model({ "path": ":models/monsters/bitch/tris.md2" }) size(-16 -16 0, 16 16 56) = monster_chick : "Iron Maiden" []
@PointClass base(EditorFlags, Targetable) 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) size(-24 -24 -24, 24 24 48) model({ "path": ":models/monsters/float/tris.md2" }) = monster_floater : "Technician"
[
    spawnflags(Flags) =
    [
        1 : "Ambush" : 0
        2 : "Trigger Spawn" : 0
        8 : "Disguise as barrel" : 0
    ]
]
@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"
[
    spawnflags(Flags) =
    [
        8 : "No jumping" : 0
    ]
]
@PointClass base(Monsters) model({ "path": ":models/monsters/gunner/tris.md2", "frame": 249 }) = monster_guncmdr : "Gunner Commander"
[
    spawnflags(Flags) =
    [
        8 : "No jumping" : 0
    ]
]
@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"
[
    spawnflags(Flags) =
    [
        8 : "No jumping" : 0
    ]
]
@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(
        {{
            spawnflags & 65536 -> { "path": ":models/monsters/mutant/tris.md2", "skin": 1, "frame": 33 },
                                  ":models/monsters/mutant/tris.md2"
        }}
    ) =
monster_mutant : "Mutant"
[
    spawnflags(Flags) =
    [
        8 : "No jumping" : 0
    ]
]
@PointClass base(Monsters) model({ "path": ":models/monsters/parasite/tris.md2" }) = monster_parasite : "Parasite"
[
    spawnflags(Flags) =
    [
        8 : "No jumping" : 0
    ]
]
@PointClass base(Monsters) model({ "path": ":models/monsters/soldier/tris.md2", "skin": 0 }) = monster_soldier_light : "Light Soldier"
[
    spawnflags(Flags) =
    [
        1 : "Ambush" : 0
        2 : "Trigger Spawn" : 0
        8 : "Blind" : 0
    ]
]
@PointClass base(Monsters) model({ "path": ":models/monsters/soldier/tris.md2", "skin": 2 }) = monster_soldier : "Soldier"
[
    spawnflags(Flags) =
    [
        1 : "Ambush" : 0
        2 : "Trigger Spawn" : 0
        8 : "Blind" : 0
    ]
]
@PointClass base(Monsters) model({ "path": ":models/monsters/soldier/tris.md2", "skin": 4 }) = monster_soldier_ss : "SS Soldier"
[
    spawnflags(Flags) =
    [
        1 : "Ambush" : 0
        2 : "Trigger Spawn" : 0
        8 : "Blind" : 0
    ]
]
@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"
[
	speed(float) : "homing missile speed" : "0.0"
    spawnflags(Flags) =
    [
        8 : "N64" : 0
		16 : "Heat-Seeking Missiles" : 0
    ]
]
@PointClass base(Monsters) size(-64 -64 0, 64 64 72) model({ "path": ":models/monsters/boss1/tris.md2" }) = monster_supertank : "Super Tank Boss"
[
    spawnflags(Flags) =
    [
        1 : "Ambush" : 0
        2 : "Trigger Spawn" : 0
        8 : "Power Shield" : 0
    ]
]

// Expansions
@PointClass base(Monsters) model({ "path": ":models/monsters/soldier/tris.md2", "skin": 6 }) = monster_soldier_ripper : "Ripper Soldier"
[
    spawnflags(Flags) =
    [
        1 : "Ambush" : 0
        2 : "Trigger Spawn" : 0
        8 : "Blind" : 0
    ]
]
@PointClass base(Monsters) model({ "path": ":models/monsters/soldier/tris.md2", "skin": 8 }) = monster_soldier_hypergun : "Hypergun Soldier"
[
    spawnflags(Flags) =
    [
        1 : "Ambush" : 0
        2 : "Trigger Spawn" : 0
        8 : "Blind" : 0
    ]
]
@PointClass base(Monsters) model({ "path": ":models/monsters/soldier/tris.md2", "skin": 10 }) = monster_soldier_lasergun : "Lasergun Soldier"
[
    spawnflags(Flags) =
    [
        1 : "Ambush" : 0
        2 : "Trigger Spawn" : 0
        8 : "Blind" : 0
    ]
]

@PointClass base(Monsters) size(-32 -32 -24, 32 32 24) model({ "path": ":models/monsters/fixbot/tris.md2" }) = monster_fixbot : "Fixbot"
[
    spawnflags(Flags) =
    [
        1 : "Ambush" : 0
        2 : "Trigger Spawn" : 0
        4 : "Fix stuff" : 0
        8 : "Takeoff" : 0
        16 : "Landing" : 0
    ]
]

@SolidClass base(EditorFlags, Targetable) color (0 128 204) = func_object_repair : "Fixbot repair object"
[
    delay(float) : "delay between sparks" : "1"
]

@PointClass base(Monsters) size(-24 -24 -24, 24 24 24)
    model(
        {{
            spawnflags & 65536 -> { "path": ":models/monsters/gekk/tris.md2", "skin": 2, "frame": 141 },
                                  ":models/monsters/gekk/tris.md2"
        }}
    ) =
monster_gekk : "Gekk"
[
    spawnflags(Flags) =
    [
        1 : "Ambush" : 0
        2 : "Trigger Spawn" : 0
        8 : "Chanting" : 0
        16: "No jumping" : 0
        32: "No swimming" : 0
    ]
]
@PointClass base(Monsters) model({ "path": ":models/monsters/bitch/tris.md2", "skin": 2 }) size(-16 -16 0, 16 16 56) = monster_chick_heat : "Iron Maiden (heat-seeking missile)" []
@PointClass base(Monsters) size(-32 -32 -24, 32 32 64) model({ "path": ":models/monsters/gladiatr/tris.md2", "skin": 2 }) = monster_gladb : "Gladiator (phalanx)" []

@PointClass base(Monsters) size(-64 -64 0, 64 64 72) model({ "path": ":models/monsters/boss1/tris.md2", "skin": 2 }) = monster_boss5 : "Super Tank Boss (power armor)" []

@PointClass base(info_notnull, Target, Targetable) = hint_path : "Monster Path"
[
    spawnflags(Flags) =
    [
        1 : "Endpoint" : 0
    ]
    wait(float) : "wait for this amount of time" : "0"
]

@PointClass base(Monsters) model({ "path": ":models/monsters/hover/tris.md2", "skin": 2 }) = monster_daedalus : "Daedalus" []

@PointClass base(Monsters) size(-56 -56 -44, 56 56 44) model({ "path": ":models/monsters/carrier/tris.md2" }) = monster_carrier : "Carrier"
[
    reinforcements(string): "Semicolon separated list of entity classes and cost of monster to spawn" : "monster_flyer 1;monster_flyer 1;monster_flyer 1;monster_kamikaze 1"
    monster_slots(integer) : "How many points to spend on monster spawns. Increases by up to 2x for Hard skill" : 3
]

@PointClass base(Monsters) size(-40 -40 0, 40 40 144) model({ "path": ":models/monsters/blackwidow/tris.md2" }) = monster_widow : "Black Widow (on foot)" []
//Why is there two of these with no difference?
//@PointClass base(Monsters) size(-70 -70 0, 70 70 144) model({ "path": ":models/monsters/blackwidow2/tris.md2" }) = monster_widow : "Black Widow (spider)" []

@PointClass base(Monsters) model({ "path": ":models/monsters/medic/tris.md2", "skin": 2 }) = monster_medic_commander : "Medic Commander"
[
    reinforcements(string): "Semicolon separated list of entity classes and cost of monster to spawn" : "monster_soldier_light 1;monster_soldier 2;monster_soldier_ss 2;monster_infantry 3;monster_gunner 4;monster_medic 5;monster_gladiator 6"
    monster_slots(integer) : "How many points to spend on monster spawns. Increases by up to 2x for Hard skill" : 3
]
@PointClass base(Monsters) model({ "path": ":models/monsters/flyer/tris.md2" }) = monster_kamikaze : "Flyer (kamikaze)" []

@PointClass base(Monsters) size(-12 -12 -12, 12 12 12) model({ "path": ":models/monsters/turret/tris.md2" }) = monster_turret : "Turret Monster"
[
    spawnflags(Flags) =
    [
        1 : "Ambush" : 0
        2 : "Trigger Spawn" : 0
        8 : "Blaster" : 0
        16 : "Chaingun" : 0
        32 : "Rocket" : 0
        128: "Wall Unit (must be targeted)" : 0
		262144 : "No Lasersight (beware)" : 0
    ]
]

@PointClass base(Monsters) size(-28 -28 -18, 28 28 18) model({ "path": ":models/monsters/stalker/tris.md2" }) = monster_stalker : "Stalker"
[
    spawnflags(Flags) =
    [
        1 : "Ambush" : 0
        2 : "Trigger Spawn" : 0
        8 : "Start On Roof" : 0
		16 : "No Jumping" : 0
    ]
]

// 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(EditorFlags, Targetable, UseTargets) color(128 76 0) size(-8 -8 -8, 8 8 8) = path_corner : "Path marker"
[
    spawnflags(Flags) =
    [
        1 : "Teleport" : 0
    ]
    target(target_destination) : "Next path target"
    pathtarget(target_destination) : "Event to trigger"
    wait(choices) : "Wait" : 0 =
    [
        -1 : "Wait for retrigger"
    ]
]

@PointClass base(path_corner) color(128 76 9) size(-8 -8 -8, 8 8 8) = point_combat : "Point of combat - should be the first/only target of a monster"
[
    spawnflags(Flags) =
    [
        1 : "Hold" : 0
    ]
]

@PointClass base(EditorFlags, Targetable, Angleable) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_blaster : "Blaster (use angles to point it)"
[
    spawnflags(Flags) =
    [
        1 : "No Trail" : 0
        2 : "No Effects" : 0
    ]
    dmg(float) : "Damage" : "15"
    speed(float) : "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(EditorFlags, Targetable, Target) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_changelevel : "Change level"
[
    spawnflags(Flags) =
    [
        8 : "Clear Inventory" : 0
		16 : "No End of Unit" : 0
		32 : "Fade out" : 0
		64 : "Immediate Leave" : 0
    ]
    map(string) : "Next map; append $targetname to spawn at matched targetname"
    target(target_destination) : "Name of info_landmark in the next map to link this exit to"
]

@PointClass base(EditorFlags, Targetable) 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

		65536 : "Trigger 9" : 0
		131072 : "Trigger 10" : 0
		262144 : "Trigger 11" : 0
		524288 : "Trigger 12" : 0
		1048576 : "Trigger 13" : 0
		2097152 : "Trigger 14" : 0
		4194304 : "Trigger 15" : 0
		8388608 : "Trigger 16" : 0
    ]
]

@PointClass base(EditorFlags, Targetable, UseTargets) 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

		65536 : "Trigger 9" : 0
		131072 : "Trigger 10" : 0
		262144 : "Trigger 11" : 0
		524288 : "Trigger 12" : 0
		1048576 : "Trigger 13" : 0
		2097152 : "Trigger 14" : 0
		4194304 : "Trigger 15" : 0
		8388608 : "Trigger 16" : 0
    ]
]

@PointClass base(target_crosslevel_trigger) color(128 128 128) size(-8 -8 -8, 8 8 8) = target_crossunit_trigger : "Cross-unit trigger"
[
]

@PointClass base(target_crosslevel_target) color(128 128 128) size(-8 -8 -8, 8 8 8) = target_crossunit_target : "Cross-unit target"
[
]

@PointClass base(EditorFlags, Targetable) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_earthquake : "Level wide earthquake"
[
    spawnflags(Flags) =
    [
        1 : "Silent" : 0
		2 : "Toggle" : 0
		8 : "One Shot" : 0
    ]

    speed(float) : "Severity of quake" : "200"
    count(float) : "Duration" : "5"
]

@PointClass base(EditorFlags, Targetable, UseTargets) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_explosion : "Explosion"
[
    delay(float) : "Delay before explosion"
    dmg(float) : "Radius damage" : "0"
]

@PointClass base(EditorFlags, Targetable, UseTargets) color(255 0 255) size(-8 -8 -8, 8 8 8) = target_goal : "Counts a goal completed"
[
    spawnflags(Flags) =
    [
        1 : "Keep Music" : 0
    ]
]

@PointClass base(EditorFlags, Targetable) color(255 0 255) size(-8 -8 -8, 8 8 8) = target_healthbar : "Monster Health bar"
[
	delay(float) : "Delay before healthbar disappears after death" : "0.0"
	message(string) : "Boss name" : ""
	target(string): "Boss" : ""
]

@PointClass base(EditorFlags, Targetable) color(255 0 255) size(-8 -8 -8, 8 8 8) = target_help : "Computer help message"
[
    spawnflags(Flags) =
    [
        1 : "Main Onjective" : 0
        2 : "Set POI on use" : 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(EditorFlags, Targetable, Target, Angleable) 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
        128 : "Stop on windows" : 0
		65536 : "Lightning" : 0
    ]
    dmg(float) : "Damage"
	rgba(integer) : "Laser colors; four palette indices separated by spaces"
]

// Expansion
@PointClass base(EditorFlags, Targetable) color(255 0 0) size(-8 -8 -8, 8 8 8) = misc_nuke : "Nuke (kill all entities)"
[
]

@PointClass base(EditorFlags, Targetable, Target) color(0 128 204) size(-8 -8 -8, 8 8 8) = target_mal_laser : "Laser (Xatrix; Mal 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
    ]
    delay(float) : "Delay" : "0.1"
    wait(float) : "Wait" : "0.1"
    dmg(float) : "Damage"
]

@PointClass base(EditorFlags, Targetable, Target) color(0 128 204) size(-8 -8 -8, 8 8 8) = target_lightramp : "Light ramp"
[
    spawnflags(Flags) =
    [
        1 : "Toggle" : 0
    ]
    speed(float) : "Speed"
    message(string) : "start/end light level"
]

@PointClass base(EditorFlags, Targetable, UseTargets) color(255 0 255) size(-8 -8 -8, 8 8 8) = target_secret : "Counts a secret found"
[
    message(string) : "Message to print"
	noise(string) : "Noise to play" : "misc/secret.wav"
]

// set speed and angle, otherwise spawned object drops
@PointClass base(EditorFlags, Targetable, Angleable) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_spawner : "Monster/Item spawner"
[
    target(target_destination) : "Monster/Item to spawn"
    speed(float) : "Speed"
]

@PointClass base(EditorFlags, Targetable) 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
        8 : "No Stereo Panning" : 0
    ]
    noise(string) : "Sound (path/file.wav)"
    attenuation(Choices) : "Attenuation" : 0 =
    [
        -1 : "None, send to whole level"
		0 : "Default (1 for non-looped, 3 for looped)"
        1 : "Normal fighting sounds"
        2 : "Idle sound level"
        3 : "Ambient sound level"
    ]
    volume(float) : "Volume (0.0 - 1.0)" : "1"
]


@PointClass base(EditorFlags) color(255 0 0) size(-8 -8 -8, 8 8 8) = misc_amb4 : "Amb4 speaker"
[
]

@PointClass base(EditorFlags, Targetable) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_music : "Change music"
[
    sounds(integer) : "CD Track Number" : 1
]


// "sounds" values other than 1 are silent.  leaving in the other
// options for availability to mods/fixes
//
@PointClass base(EditorFlags, Targetable) 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"
        7 : "N64 Sparks"
    ]
    count(integer) : "Number of pixels in splash (1 - 255)"
    dmg(float) : "Radius damage"
]

// eye candy... Particles #2 (style 22) is quite cool
@PointClass base(EditorFlags, Targetable) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_temp_entity : "Temp entity"
[
    style(choices) : "Style" : 22 =
    [
        6 : "Grenade explosion #1" 
		8 : "Grenade explosion #2"
		18 : "Grenade explosion #3 (underwater)"
		20 : "Green Fireball (BFG small)"
        21 : "Particles #1 (BFG big)"
        22 : "Particles #2 (boss teleport)"
		35 : "Plain explosion"
		45 : "chainfist smoke"
		47 : "Tracker Explosion (black particles)"
		48 : "Teleport effect #1"
		49 : "Teleport effect #2"
		51 : "Nuke Blast"
		52 : "Widow Splash"
		58 : "Berserk Slam"
    ]
]

@PointClass base(EditorFlags, UseTargets) color(128 128 128) size(-8 -8 -8, 8 8 8) = trigger_always : "Always triggers" []

@PointClass base(EditorFlags, Targetable, UseTargets) color(128 128 128) = trigger_counter : "Counter"
[
    spawnflags(Flags) =
    [
        1 : "No Message" : 0
    ]
    count(integer) : "Count before trigger" : 2
]

@PointClass base(EditorFlags, Targetable, Target) color(76 25 153) = trigger_elevator : "Elevator trigger; note that whoever targets this must have a pathtarget set" []

@SolidClass base(EditorFlags, Targetable) 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
        32 : "No Players" : 0
        64 : "No Monsters" : 0
		128 : "Clipped (must touch brushes, not just aabb)" : 0
    ]
    dmg(float) : "Damage" : "5"
]

@PointClass base(EditorFlags, Targetable, UseTargets) color(128 128 128) size(-8 -8 -8, 8 8 8) = trigger_key : "Triggers with key"
[
    item(string) : "Item classname" : "key_blue_key"
]

@SolidClass base(EditorFlags, Targetable) color(128 128 128) = trigger_monsterjump : "Makes monsters jump"
[
    spawnflags(Flags) =
    [
        1 : "Toggle" : 0
        2 : "Start Off" : 0
        4 : "Clipped (must touch brushes, not just aabb)" : 0
    ]

    speed(float) : "Speed thrown forward" : "200"
    height(float) : "Height thrown upward" : "200"
]

@PointClass base(EditorFlags, Targetable, UseTargets) color(128 128 128) = trigger_relay : "Relay trigger" []

@SolidClass base(trigger_relay) = trigger_once : "Single fire trigger"
[
    spawnflags(Flags) =
    [
        4 : "Triggered" : 0
        32 : "Clipped (must exactly touch brushes, not just aabb)" : 0
    ]
]

@SolidClass base(trigger_once) = trigger_multiple : "Multiple fire trigger"
[
    spawnflags(Flags) =
    [
        1 : "Monster" : 0
        2 : "Not Player" : 0
        4 : "Triggered (triggering will enable; starts off)" : 0
        8 : "Toggled (triggering will toggle between on/off; starts off)" : 0
        16 : "Latched (will trigger when an entity first enters & last leaves)" : 0
        32 : "Clipped (must exactly touch brushes, not just aabb)" : 0
    ]
    wait(float) : "Seconds between triggers" : "0"
]

@SolidClass base(EditorFlags) color(128 128 128) = trigger_push : "Push trigger"
[
    spawnflags(Flags) =
    [
        1 : "Push Once" : 0
        2 : "Wait & Effect" : 0
        4 : "Silent" : 0
        8 : "Start Off" : 0
        16 : "Clipped (must exactly touch brushes, not just aabb)" : 0
    ]
    speed(float) : "Speed of push" : "1000"
    wait(float) : "Time to wait between pushes" : "10"
]

// Expansion
@SolidClass base(EditorFlags) color(128 128 128) = trigger_gravity : "Gravity trigger"
[
    spawnflags(Flags) =
    [
        1 : "Toggle" : 0
        2 : "Start Off" : 0
        4 : "Clipped (must exactly touch brushes, not just aabb)" : 0
    ]
    gravity(float) : "Gravity (standard = 1.0)" : "1"
]

@SolidClass base(EditorFlags, Targetable, Target, EWT_base_BModel, Teamable) color(128 255 128) = turret_breach : "Turret breach"
[
    speed(float) : "Speed" : "50"
    dmg(float) : "Damage" : "10"
    minpitch(float) : "Miminum pitch angle" : "-30"
    maxpitch(float) : "Maximum pitch angle" : "30"
    minyaw(float) : "Minimum yaw angle" : "0"
    maxyaw(float) : "Maximum yaw angle" : "360"
]

@SolidClass base(EditorFlags, EWT_base_BModel, Teamable) color(128 255 128) = turret_base : "Turret base"
[
]

@PointClass base(EditorFlags) color(128 255 128) size(-16 -16 -24, 16 16 32) model({ "path": ":models/monsters/infantry/tris.md2"}) = turret_driver : "Turret driver"   [   target(target_destination) : "Target (turret_breach)"   ]

// Expansions
@PointClass base(EditorFlags) color(128 255 128) size(-4 -4 -4, 4 4 4) = turret_invisible_brain : "Turret invisible brain"
[
    delay(float) : "Delay between firing; leave unset for skill ramping" : "0"
    target(target_destination) : "Target (turret_breach)"
    killtarget(target_destination) : "Entity to be attacked"
]

@SolidClass base(EWT_base_BModel) color(0 128 204) = func_group : "group" []

// Paril: CTF
@PointClass base(EditorFlags) color(255 128 0) size(-4 -4 0, 4 4 246) model({ "path": ":models/ctf/banner/tris.md2" }) = misc_ctf_banner : "Flowing CTF banner"
[
    spawnflags(Flags) =
    [
        1 : "Blue Team" : 0
    ]
]

@PointClass base(EditorFlags) color(255 128 0) size(-4 -4 0, 4 4 246) model({ "path": ":models/ctf/banner/small.md2" }) = misc_ctf_small_banner : "Smaller flowing CTF banner"
[
    spawnflags(Flags) =
    [
        1 : "Blue Team" : 0
    ]
]

// Expansions
@PointClass base(EditorFlags, Targetable) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_killplayers : "Nuke (kill all players)" []

@PointClass base(EditorFlags, Targetable) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_anger : "Anger (make monster angry at something)"
[
    killtarget(target_destination) : "Target to be angry at"
    target(target_destination) : "Target(s) to make angry"
]

@PointClass base(EditorFlags, Targetable, Target) color(255 0 0) size(-8 -8 -8, 8 8 8) = target_steam : "Steam Emitter"
[
    speed(float) : "velocity of particles" : "75"
    count(integer) : "number of particles" : 32
    sounds(integer) : "color of particles (palette index)" : 8
    wait(float) : "seconds to run before stopping"
]

@SolidClass base(EditorFlags) color(128 128 128) = trigger_disguise : "Disguise"
[
    spawnflags(Flags) =
    [
        2 : "Start On" : 0
        4 : "Remove" : 0
    ]
]

@SolidClass base(EditorFlags, Targetable, Target, Angleable) color(128 128 128) = trigger_teleport : "Teleport"
[
    spawnflags(Flags) =
    [
        8 : "Start On" : 0
    ]
]

@SolidClass base(func_door_secret) color(0 128 204) = func_door_secret2 : "Secret Door (Rogue)" []

@SolidClass base(EditorFlags, Targetable, EWT_base_BModel) color(0 128 204) = func_force_wall : "Force Wall"
[
    spawnflags(Flags) =
    [
        1 : "Start On" : 0
    ]
    style(integer) : "Color (palette index)" : 208
]

@SolidClass base(EditorFlags, Targetable, EWT_base_BModel) color(0 128 204) = func_plat : "OG Platform"
[
    spawnflags(Flags) =
    [
        1 : "Plat Low Trigger" : 0
		2 : "No Monsters" : 0
    ]
    speed(float) : "Speed" : "200"
    accel(float) : "Acceleration" : "50"
    decel(float) : "Acceleration" : "50"
    lip(float) : "Lip remaining after move" : "8"
    height(float) : "Movement distance"
    dmg(float) : "Damage" : "2"
]

@SolidClass base(EditorFlags, Targetable, EWT_base_BModel) color(0 128 204) = func_plat2 : "Callable Platform"
[
    spawnflags(Flags) =
    [
        1 : "Plat Low Trigger" : 0
        2 : "Toggle" : 0
        4 : "Top" : 0
		8 : "Start Enabled" : 0
        32 : "Box Lift" : 0
    ]
    speed(float) : "Speed" : "200"
    accel(float) : "Acceleration" : "50"
    decel(float) : "Acceleration" : "50"
    lip(float) : "Lip remaining after move" : "0"
    height(float) : "Movement distance"
    dmg(float) : "Damage" : "2"
]

@PointClass base(EditorFlags) = misc_flare : "(N64) Light Flare"
[
    spawnflags(Flags) =
    [
        1 : "Red rim" : 0
        2 : "Green rim" : 0
        4 : "Blue rim" : 0
        8 : "Fixed rotation" : 0
    ]
    image(string) : "image" : "" : "The path to a custom flare image to use instead of the default"
    radius(float) : "1.0" : "Scale multiplier"
    rgba(color255) : "Color" : "255 255 255 255" : "Flare color"
    fade_start_dist(integer) : "Distance in units that fade begins, should be smaller than fade_end_dist" : 96
    fade_end_dist(integer) : "Distance in units that fade ends, should be greater than fade_start_dist" : 384
]

@PointClass base(EditorFlags, Targetable) = target_camera : "(N64) Camera"
[
    speed(float) : "Speed" : "75"
]

@PointClass base(EditorFlags, Targetable) = info_landmark : "Landmark - connect one level to another with a seamless transition"
[
]

@PointClass base(Monsters) size(-32 -32 -24, 32 32 64) model({ "path": ":models/monsters/shambler/tris.md2" }) = monster_shambler : "Shambler"
[
]

@SolidClass base(EditorFlags) = trigger_flashlight : "Enable/Disable Flashlight"
[
    spawnflags(Flags) =
    [
        1 : "Clipped (must touch brushes, not just aabb)" : 0
    ]
    style(choices) : "style" : 0 =
    [
        0 : "Default"
        1 : "Always turn on"
        2 : "Always turn off"
    ]
    angles(string) : "pitch yaw roll" : "Player traveling this direction will enable light, against it will disable."
]

@PointClass base(EditorFlags) = misc_lavaball : "(N64) Lavaball"
[
]

@PointClass base(EditorFlags) = misc_hologram : "(N64) Ship Hologram"
[
]

@SolidClass base(EditorFlags) = trigger_fog : "Fog Transitions"
[
    spawnflags(Flags) =
    [
        1 : "Affect global fog" : 0
        2 : "Affect height fog" : 0
        4 : "Instaneous transition" : 0
        8 : "Force use (regardless of direction)" : 0
		16 : "Blend" : 0
    ]
    angles(string) : "angles" : "0 0 0" : "Direction of player travel for start/end"
    target(target_destination) : "info_notnull target for fog params"
    delay(float) : "Delay": "0.5" : "Time in seconds after transition starts to fully end"
	wait(float) : "Wait" : "0.0" : "Time in seconds before a re-trigger will occur; mainly for Blend"
    fog_density(float) : "density value of fog, 0-1"
    fog_color(color) : "color value of fog, 3d vector with values between 0-1 (r g b)"
    fog_sky_factor(float) : "sky_factor value of fog, 0-1"
    fog_density_off(float) : "transition density value of fog, 0-1"
    fog_color_off(color) : "transition color value of fog, 3d vector with values between 0-1 (r g b)"
    fog_sky_factor_off(float) : "transition sky_factor value of fog, 0-1"

    heightfog_falloff(float) : "falloff value of heightfog, 0-1"
    heightfog_density(float) : "density value of heightfog, 0-1"
    heightfog_start_color(color) : "start color of heightfog, 3d vector with values between 0-1 (r g b)"
    heightfog_end_color(color) : "end color of heightfog, 3d vector with values between 0-1 (r g b)"
    heightfog_start_dist(float) : "start distance value of heightfog, in world units"
    heightfog_end_dist(float) : "start distance value of heightfog, in world units"

    heightfog_falloff_off(float) : "transition falloff value of heightfog, 0-1"
    heightfog_density_off(float) : "transition density value of heightfog, 0-1"
    heightfog_start_color_off(color) : "transition start color of heightfog, 3d vector with values between 0-1 (r g b)"
    heightfog_end_color_off(color) : "transition end color of heightfog, 3d vector with values between 0-1 (r g b)"
    heightfog_start_dist_off(float) : "transition start distance value of heightfog, in world units"
    heightfog_end_dist_off(float) : "transition start distance value of heightfog, in world units"
]

@SolidClass base(EditorFlags, Angleable, UseTargets, EWT_base_BModel) color(0 128 204) = func_eye : "Camera-like brush model"
[
    pathtarget(target_destination) : "point to an info_notnull (which gets freed after spawn) attached to the bmodel to automatically set the eye_position"
    eye_position(string) : "x y z" : "Offset from the origin brush's center of the camera where the eye is located"
    radius(float) : "512" : "detection radius for players"
    speed(float) : "45" : "how fast, in degrees per second, we should move on each axis to reach the target"
    vision_cone(float) : "0.5" : "how wide the cone of vision should be"
    wait(float) : "the amount of time to wait after losing target before returning to neutral angles"
]

@SolidClass base(EditorFlags, Targetable, EWT_base_BModel, BmodelAnim) color(0 128 204) = func_animation : "Similar to func_wall, but triggering it will toggle animation state rather than going on/off."
[
    spawnflags(Flags) =
    [
        1 : "Start in Alternate" : 0
    ]
]

@SolidClass base(EditorFlags, Targetable, UseTargets, EWT_base_BModel) color(128 128 128) = trigger_coop_relay : "Co-op relay trigger; will only fire if all entities are inside of the bounds, otherwise prints messages."
[
    spawnflags(Flags) =
    [
        1 : "Auto-Fire" : 0
    ]

    message(string) : "Trigger message to send to the triggerer"
    message2(string) : "Trigger message to send to the players not in the bounds"
	wait(float) : "1.0" : "Time in seconds for auto-fire triggers to check bounds"
]

@PointClass base(Monsters) size(-96 -96 -66, 96 96 62) model({ "path": ":models/monsters/guardian/tris.md2" }) = monster_guardian : "Guardian (PSX)" []
@PointClass base(Monsters) size(-48 -48 -20, 48 48 48) model({ "path": ":models/monsters/arachnid/tris.md2" }) = monster_arachnid : "Arachnid (PSX)" []

@PointClass base(EditorFlags, Targetable, Teamable) color(255 0 0) size(-4 -4 -4, 4 4 4) = target_poi : "Compass POI"
[
    spawnflags(Flags) =
    [
        1 : "Pick nearest to player (teamed)" : 0
        2 : "Dummy" : 0
		4 : "Dynamic (teamed)" : 0
    ]

	count(integer) : "stage value; if set, will only allow activation if last stage activated is <= this value" : 0
	style(integer) : "teamed POIs only; the lowest styled POI will take priority" : 0
	image(string) : "Image to display at the POI" : "friend"
]

@PointClass base(Angleable, EditorFlags, Target, Targetable) color(255 255 0) size(-8 -8 -8, 8 8 8) = info_world_text : "Info_World_Text"
[
	spawnflags(Flags) =
	[
		1 : "Start Off" : 0
		2 : "Trigger Once" : 0
		4 : "Remove On Trigger" : 0
	]
	
	angle(float) : "Direction. -3 = Track Player. -2 = Down, -1 = Up, 0 - 360 = Yaw" : "-3"
	radius(float) : "Text Size" : "0.2"
	sounds(integer) : "Color Of Text. 0 = White, 1 = Red, 2 = Blue, 3 = Green, 4 = Yellow, 5 = Black, 6 = Cyan, 7 = Orange" : 0
]

@PointClass base(EditorFlags, Target, Targetable) = info_nav_lock : "Flip locked flag on targeted doors"
[
]


@PointClass base(EditorFlags, Targetable, UseTargets) color(128 128 128) = trigger_health_relay : "Health relay trigger"
[
	speed(float) : "Percent of health that must be reached to fire"
]

@PointClass base(EditorFlags, Targetable) = target_autosave : "Autosave"
[
]


@PointClass base(EditorFlags, Targetable) = target_sky : "Change sky parameters"
[
    sky(string) : "Environment map name"
    skyaxis(vector) : "Vector axis for rotating sky"
    skyrotate(string) : "Speed of rotation (degrees/second)"
    skyautorotate(integer) : "Disable to set sky rotation manually" : 1
]

@PointClass base(EditorFlags, Targetable) color(255 128 255) size(-16 -16 -24, 16 16 32) model({ "path": ":models/monsters/insane/tris.md2", "frame":209, "skin":1}) = misc_player_mannequin : "Player Mannequin"
[
  distance(integer) : "Gesture To Use When Triggered. 0 = FlipOff, 1 = Salute, 2 = Taunt, 3 = Wave, 4 = Point" : 1 
  height(integer) : "Type Of Model To Use. 1 = Female, 2 = Male, 3 = Cyborg" : 1
  radius(float) : "Scale To Use For Model"
  goals(string) : "Name Of MD2 Player Weapon Model To Hold. EX: 'w_hyperblaster'"
  image(string) : "Name Of PCX Player Skin To Use. EX: 'venus'"
]
