//
// Hexen 2 game definition file (.fgd) for WorldCraft 1.6 and above
// version 1.00 latest update: 03 Sept 98
// (was 0.93 from Eutectic, 15 Mar 98)
// For changes from 0.92 to 1.0, see hexen2.fgd.readme.txt, written
// by Eutectic
//
// written by Autolycus / autolycus@planetquake.com
// email with improvements and suggestions
// Changes by Aenn Seidhe Priest - sidhepriest@yandex.ru
//
// revised by Eutectic / jfgrol@cam.org
//


//
// worldspawn
//

@SolidClass = worldspawn : "World entity"
[
	message(integer) : "Level name: line # in strings.txt"
      netname(string) : "Level name: text - 1.12 and up"
	worldtype(choices) : "World Type" : 0 =
	[
		0 : "Castle"
		1 : "Egypt"
		2 : "Mesoamerican"
		3 : "Roman"
	]
	CD(integer) : "CD track to play" : 2
	midi(string) : "MIDI file to play" : "casa1"

	spawnflags(Flags) =
	[
		1 : "Portal of Praevus behaviour" : 0
	]

]

//
// base marker definitions
//

@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 = Targetname [ targetname(target_source) : "Targetname" ]
@baseclass = Target [ target(target_destination) : "Target" ]

//
// player starts, deathmatch, coop, teleport
//

@baseclass base(Appearflags) size(-16 -16 -32, 16 16 32)
	color(0 255 0) = PlayerClass []

@PointClass base(PlayerClass, Targetname) = info_player_start : "Player 1 start" []
@PointClass base(PlayerClass, Targetname) = info_player_start2 : "Player 1 start" []
@PointClass base(PlayerClass) = info_player_deathmatch : "Player deathmatch start" []
@PointClass base(PlayerClass) = info_player_coop : "Player cooperative start" []

@PointClass base(PlayerClass, Targetname) = info_teleport_destination : "Teleport destination" []

//
// Artifacts
//

@Baseclass base(Appearflags) size(-8 -8 -44, 8 8 20) = Artifact
[
	spawnflags(Flags) =
	[
		1 : "Floating" : 0
	]
]

@PointClass base(Artifact) = art_blastradius : "Disc of Repulsion" []
@PointClass base(Artifact) = art_cubeofforce : "Cube of Force" []
@PointClass base(Artifact) = art_glyph : "Glyph of the Ancients" []
@PointClass base(Artifact) = art_haste : "Boots of Speed" []
@PointClass base(Artifact) = art_HealthBoost : "Quartz Flask" []
@PointClass base(Artifact) = art_invincibility : "Icon of the Defender" []
@PointClass base(Artifact) = art_invisibility : "Invisibility Sphere" []
@PointClass base(Artifact) = art_manaboost : "Krater of Might" []
@PointClass base(Artifact) = art_polymorph : "Seal of the Ovinomancer" []
@PointClass base(Artifact) = art_summon : "Stone of Summoning" []
@PointClass base(Artifact) = art_SuperHBoost : "Mystic Urn" []
@PointClass base(Artifact) = art_teleport : "Chaos Device" []
@PointClass base(Artifact) = art_tomeofpower : "Tome of Power" []
@PointClass base(Artifact) = art_torch : "Torch" []

@SolidClass base(Appearflags) = breakable_brush : "Breakable brush"
[
	spawnflags(Flags) =
	[
		1 : "Kill All" : 0
		2 : "Hierarchy" : 0
		4 : "No Link" : 0
		8 : "Check Name" : 0
		16 : "Ordered" : 0
		32 : "Translucent" : 0
		64 : "Invincible" : 0
		128 : "Invisible" : 0
	]
	targetname(string) : "Targetname"
	killtarget(string) : "Killtarget"
      killtarget(string) : "Target"
	thingtype(choices) : "Material type" : 17 =
	[
		1 : "grey stone"
		2 : "wood"
		3 : "metal"
		4 : "flesh"
		5 : "soft stone"
		6 : "clay"
		7 : "green leaves"
		8 : "hay"
		9 : "brown stone"
		10 : "red cloth"
		11 : "wood & green leaves"
		12 : "wood & metal"
		13 : "wood & gray stone"
		14 : "metal & gray stone"
		15 : "metal & red cloth"
		16 : "spider web"
		17 : "glass (default)"
		18 : "ice"
		19 : "clear glass"
		20 : "red glass"
	]
	health(choices) : "Health" : 0 =
	[
		0 : "Based on material"
	]
	abslight(string) : "Absolute light level"
]

@SolidClass base(Appearflags) = brush_pushable : "Pushable brush"
[
	mass(integer) : "Mass" : 5
]

@SolidClass base(Appearflags, Targetname) = plaque : "Readable plaque"
[
	spawnflags(Flags) =
	[
		1 : "invisible" : 0
		2 : "deactivated" : 0
            4: "NOLINEOFSIGHT - PoP" : 0
		8: "NOTSOLID - PoP": 0
	]
	message(integer) : "Message: line # in strings.txt"
	targetname(string) : "Targetname: for trigger_activate"
	noise1(string) : "Noise (dir/sound.wav)"
	wait(integer) : "Wait"
]

//
// Cute. Just target to a "target_null" entity and point your favourite
// trigger to it and voila! Instant "out-of-body" experience. Eutectic
//

@PointClass base(Appearflags, Targetname) size(-8 -8 -8, 8 8 8) = camera_remote : "Camera Remote"
[
	target(string) : "Target (target_null)"
	targetname(string) : "Targetname"
	wait(integer) : "Time in camera mode" : 3
	angles_x(integer) : "pitch (optional)"
	angles_y(integer) : "yaw (optional)"
	netname(string) : "Netname"
	health(integer) : "Health"
]

@PointClass base(Appearflags, Targetname) size(-8 -8 -8, 8 8 8) = target_null : "Null target for camera" []

//
// Traps
//

@PointClass base(Appearflags, Target, Targetname) size(-8 -8 -8, 8 8 8) = trap_fireball : "Fireball trap"
[
	spawnflags(Flags) =
	[
		1 : "Trigger-only" : 0
	]
	wait(integer) : "Time between shots"
	aflag(integer) : "Radius limiter"
	dmg(integer) : "Damage"
]

@PointClass base(Appearflags, Target, Targetname) size(-8 -8 -8, 8 8 8) = trap_lightning : "Lightning"
[
	spawnflags(Flags) =
	[
		1 : "track" : 0
		2 : "once" : 0
	]
	noise(choices) : "Sounds" : 2 =
	[
		1 : "no sound"
		2 : "lightning"
	]
	wait(integer) : "Time between shots"
	aflag(integer) : "Radius limiter"
	dmg(integer) : "Damage"
]
@PointClass base(Appearflags, Targetname) size(-8 -8 -8, 8 8 8) = trap_shooter : "Shooter"
[
	spawnflags(Flags) =
	[
		1 : "super spike" : 0
		2 : "laser" : 0
	]
	wait(integer) : "Time between shots" : 1
	nextthink(integer) : "Delay before start"
]
@PointClass base(Appearflags, Targetname) size(-8 -8 -8, 8 8 8) = trap_spikeshooter_spray : "Shooter"
[
	wait(integer) : "Time between shots" : 1
	nextthink(integer) : "Delay before start"
]
@PointClass base(Appearflags, Targetname) size(-8 -8 -8, 8 8 8) = trap_spikeshooter : "Shooter"
[
	wait(integer) : "Time between shots" : 1
	nextthink(integer) : "Delay before start"
]

//
// Triggers. All except trigger_control (for ballista control) and
// trigger_monsterjump. Eutectic
//

@BaseClass base(Appearflags, Targetname, Target) = Trigger
[
	killtarget(string) : "Killtarget"
	netname(string) : "Netname"
	aflag(integer) : "Order"
	wait(integer) : "Wait"
	health(integer) : "Health"
	delay(string) : "Delay before trigger"
	message(integer) : "Message: line # in strings.txt"
]

// The silent flag actually works now (isn't that amazing?). Eutectic

@SolidClass base(Appearflags, Targetname, Target) = trigger_teleport : "Trigger teleport"
[
	spawnflags(flags) =
	[
		1 : "player-only" : 0
		2 : "silent" : 0
		4 : "activate" : 0
	]
]

@SolidClass base(Trigger) = trigger_check : "Check child entities"
[
failtarget(string) : "On target fail - PoP"
wait(integer) : "Wait"
]

@SolidClass base(Trigger) = trigger_attack : "Trigger on weapon fire" []

@SolidClass base(Trigger) = trigger_combination_assign : "Assign combination to counter"
[
	spawnflags(Flags) =
	[
		1 : "no touch" : 0
		2 : "monster touch" : 0
		4 : "push touch" : 0
		8 : "deactivated" : 0
		16 : "remove puzzle" : 0
		32 : "no puzzle" : 0
		64 : "light start low" : 0
	]
	mangle(string) : "Mangle (x1 x2 x3)" : "0 0 0"
]

// For ordered counting, count = (number of triggers - 1). For unordered
// counting, count = number of triggers.

@SolidClass base(Appearflags, Target, Targetname) = trigger_counter : "Counter"
[
	spawnflags(Flags) =
	[
		1 : "no message" : 0
		2 : "ordered" : 0
		4 : "always return" : 0
		8 : "deactivated" : 0
	]
	killtarget(string) : "Killtarget"
	netname(string) : "Netname"
	aflag(integer) : "order"
	wait(integer) : "Wait" : -1
	health(integer) : "Health"
	delay(string) : "Delay before trigger"
	message(integer) : "Message: line # in strings.txt"
	count(integer) : "number of triggers - 1"
	mangle(string) : "Mangle (x1 x2 x3)"
]

@SolidClass base(Trigger) = trigger_counter_reset : "Counter reset"
[
	spawnflags(Flags) =
	[
		1 : "no touch" : 0
		2 : "monster touch" : 0
		4 : "push touch" : 0
		8 : "deactivated" : 0
		16 : "remove puzzle" : 0
		32 : "no puzzle" : 0
		64 : "light toggle" : 0
		128 : "light start low" : 0
	]
]

@SolidClass base(Trigger) = trigger_activate : "Activate target"
[
	spawnflags(Flags) =
	[
		1 : "once" : 0
		2 : "relay" : 0
		8 : "deactivated" : 0
	]
]

@SolidClass base(trigger_activate) = trigger_deactivate : "Deactivate target" []

// Use this one only if you know what you're doing since it can kill the worldspawn
// entity itself. EutecTic

@SolidClass base(Appearflags, Targetname) = trigger_deathtouch : "Removes whatever it touches"
[
	th_die(integer) : "Death type"
]

// Once triggered, keeps re-triggering its own target at pre-determined time intervals.
// Use the wait key to set time interval between trigger firings. EutecTic

@PointClass base(Trigger) size(-8 -8 -8, 8 8 8) = trigger_interval : "Automatic time interval retriggering" []

// When triggered, displays its message and transfers its target and targetname
// values to the entities that it targets without actually "triggering" them.

@SolidClass base(Appearflags, Targetname, Target) = trigger_message_transfer : "Target transferer"
[
	message(integer) : "Message: line # in strings.txt"
]

@SolidClass base(Trigger) = trigger_multiple : "Multiple trigger"
[
	spawnflags(Flags) =
	[
		1 : "no touch" : 0
		2 : "monster touch" : 0
		4 : "push touch" : 0
		8 : "deactivated" : 0
		16 : "remove puzzle" : 0
		32 : "no puzzle" : 0
		64 : "light toggle" : 0
		128 : "light start low" : 0
	]
	soundtype(choices) : "Sounds" : 0 =
	[
		0 : "no sound"
		1 : "secret"
		2 : "beep beep"
		3 : "large switch"
	]
	puzzle_piece_1(string) : "Puzzle Piece 1"
	puzzle_piece_2(string) : "Puzzle Piece 2"
	puzzle_piece_3(string) : "Puzzle Piece 3"
	puzzle_piece_4(string) : "Puzzle Piece 4"
	no_puzzle_msg(integer) : "Puzzle msg: line # in strings.txt"

]

@SolidClass base(trigger_multiple) = trigger_once : "Single trigger"
[
	style(integer) : "Light toggle style (33 - 63)"
	lightvalue1(integer) : "Low light value" : 0
	lightvalue2(integer) : "High light value" : 11
	fadespeed(string) : "Fade speed" : "0.5"
]

@SolidClass base(Appearflags, Targetname) = trigger_push : "Push"
[
	spawnflags(Flags) =
	[
		1 : "push once" : 0
	]
	speed(integer) : "Speed of push"
]

@PointClass base(Trigger) size(-8 -8 -8, 8 8 8) = trigger_relay : "Relay" []

@SolidClass base(Trigger) = trigger_changelevel : "Changes level"
[
	spawnflags(Flags) =
	[
		1 : "no intermission" : 0
		2 : "end of unit" : 0
		4 : "end of episode" : 0
	]
	map(string) : "Map name"
]

@SolidClass base(Trigger) = trigger_crosslevel : "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
	]
]

@SolidClass base(trigger_crosslevel) = trigger_crosslevel_target : "Crosslevel trigger target" []

@SolidClass base(Appearflags) = trigger_hurt : "Hurt brush"
[
	dmg(integer) : "Damage" : 5
]

@PointClass base(Appearflags, Targetname, Target) size(-10 -10 -10, 10 10 10) = trigger_quake : "Quake! er...Earthquake!"
[
	spawnflags(Flags) =
	[
		1 : "do damage" : 0
		2 : "multiple" : 0
	]
	items(integer) : "Radius of quake"
	dmg(integer) : "Damage" : 5
	lifespan(integer) : "Duration" : 2
	wait(integer) : "Delay before quake" : 1
]

@SolidClass = func_button : "Button"
[
	wait(choices) : "Wait" : 1 =
	[
		1 : "Wait one second"
		-1 : "Stay pressed"
	]
	health(integer) : "Health"
	abslight(string) : "Absolute light value"
	soundtype(choices) : "Sounds" : 0 =
	[
		0 : "steam metal"
		1 : "wooden clunk"
		2 : "metallic click"
		3 : "in-out"
	]
	speed(integer) : "Speed" : 40
	lip(integer) : "Lip" : 4
	target(string) : "Target"
	targetname(string) : "Name"
	spawnflags(Flags) =
	[
		1 : "Deactivated" : 0
		2 : "Fired only" : 0
		4 : "Fire multiple" : 0
		256 : "Not in Easy" : 0
		512 : "Not in Normal" : 0
		1024 : "Not in Hard" : 0
		2048 : "Not in Deathmatch" : 0
	]
]

@SolidClass base(func_button) = func_pressure : "Pressure plate - weight activated"
[
	spawnflags(Flags) =
	[
		2 : "" : 0
		4 : "" : 0
	]
	mass(integer) : "Mass required"
]

// Make your own guillotine. Save a dollar today! Perfect for nasty
// surprises or working class revolutions.

@SolidClass base(Appearflags, Targetname) = func_crusher : "Crusher"
[
	spawnflags(Flags) =
	[
		1 : "multiple" : 0
		2 : "slide" : 0
		4 : "start open" : 0
		8 : "end open" : 0
	]
	speed(integer) : "Speed" : 150
	dmg(integer) : "Damage" : 10
	lip(integer) : "Lip" : 4
	wait(integer) : "Wait" : 1
	soundtype(choices) : "Sounds" : 1 =
	[
		1 : "base fast"
		2 : "chain slow"
		3 : "guillotine"
	]
]

//
// Doors: they all work now. Eutectic
//

@BaseClass base(Appearflags, Targetname) = Door
[
	spawnflags(Flags) =
	[
		1 : "start open" : 0
		2 : "reverse" : 0
		4 : "dont link" : 0
	]
	message(integer) : "Message: line # in strings.txt"
	wait(choices) : "Wait" : 3 =
	[
		3 : "default (3)"
		-1 : "Never return"
	]
	dmg(choices) : "Damage" : 2 =
	[
		2 : "default (2)"
		666 : "instant kill (666)"
	]
	soundtype(choices) : "Sounds" : 4 =
	[
		0 : "no sound"
		1 : "big metal door, swinging"
		2 : "big stone door, sliding"
		3 : "big wood door, swinging"
		4 : "normal wood door, swinging"
		5 : "big wood door, sliding"
		6 : "drawbridge"
		7 : "rotating walkway"
		8 : "big metal door, sliding"
		9 : "pendulum swinging"
	]
	puzzle_piece_1(string) : "Puzzle Piece 1"
	puzzle_piece_2(string) : "Puzzle Piece 2"
	puzzle_piece_3(string) : "Puzzle Piece 3"
	puzzle_piece_4(string) : "Puzzle Piece 4"
	no_puzzle_msg(integer) : "Puzzle msg: line # in strings.txt"
]

@SolidClass base(Door) = func_door : "Door"
[
	spawnflags(Flags) =
	[
		1 : "start open" : 0
		2 : "reverse" : 0
		4 : "don't link" : 0
		8 : "toggle" : 0
		16 : "slide" : 0
		32 : "normal move" : 0
		64 : "remove puzzle" : 0
		128 : "no puzzle" : 0
	]
	level(integer) : "movement level"
	wait(integer) : "waiting time"
	dmg(integer) : "damage"
	lip(integer) : "Lip" : 8
	speed(integer) : "Speed" : 100
	abslight(string) : "Absolute light value"
	target(string): "Target"
	targetname(string): "Targetname"
	close_target(string) : "Close target (PoP)"
]

@SolidClass base(Door) = func_door_rotating : "Rotating door"
[
	spawnflags(Flags) =
	[
		8 : "remove puzzle" : 0
		16 : "no puzzle" : 0
		32 : "toggle" : 0
		64 : "x axis" : 0
		128 : "y axis" : 0
	]
	origin(string) : "Center of rotation" : "0 0 0"
	flags(integer) : "Degrees of rotation"
	flags2(integer) : "Damage when touched"
	speed(integer) : "Speed" : 100
	abslight(string) : "Absolute light value"
]

@SolidClass base(Door) = func_door_secret : "Secret door"
[
	spawnflags(Flags) =
	[
		1 : "open once" : 0
		2 : "1st reverse" : 0
		4 : "1st down" : 0
		8 : "no shoot" : 0
		16 : "always shoot" : 0
		32 : "" : 0
		64 : "remove puzzle" : 0
		128: "no puzzle" : 0
	]
	t_width(integer) : "Override width"
	t_length(integer) : "Override length"
]

//
// Puzzle pieces for Doors and triggers. puzzle_id must be the name of an
// existing .mdl file in the models/puzzle subdirectory in the pak0 or pak1
// files without the file extension.
//

@PointClass base(Appearflags, Target) size(-8 -8 -8, 8 8 16) = puzzle_piece : "Puzzle piece"
[
	spawnflags(Flags) =
	[
		1 : "spawn" : 0
		2 : "floating" : 0
		4 : "auto get" : 0
	]
	puzzle_id(string) : "Puzzle id"
	netname(string) : "Name of piece"
]

@PointClass base(Appearflags) size(-8 -8 -8, 8 8 8) = puzzle_static_piece : "Static puzzle piece"
[
	puzzle_id(string) : "Puzzle id"
	lifespan(integer) : "Lifespan"
]

@SolidClass base(Appearflags) = func_illusionary : "Illusionary brush"
[
	spawnflags(Flags) =
	[
		1 : "translucent" : 0
		2 : "light" : 0
	]
	abslight(string) : "Absolute light value"
]

@PointClass base(Appearflags) size(-16 -16 0, 16 16 56) = func_monsterspawn_spot : "Monster spawn spot - use with spawner"
[
	spawnflags(Flags) =
	[
		1 : "Imp" : 0
		2 : "Archer" : 0
		4 : "Wizard" : 0
		8 : "Scorpion" : 0
		16 : "Spider" : 0
		64 : "quiet" : 0
	]
	aflag(integer) : "Spawn order"
	cnt(integer) : "Number of spawns" : 17
	spawnername(string) : "Spawnername"
	wait(string) : "Time between spawns" : "0.5"
]

@PointClass base(func_monsterspawn_spot) size(-16 -16 0, 16 16 56) = func_monsterspawner : "Monster spawner"
[
	spawnflags(Flags) =
	[
		32 : "on death" : 0
		128 : "trigger only" : 0
	]
	targetname(string) : "Name"
]

//
// Platforms
//

@SolidClass base(Appearflags) = func_newplat : "New platform - non targetable"
[
	spawnflags(Flags) =
	[
		1 : "bottom start" : 0
		2 : "return to start" : 0
		4 : "continuous" : 0
	]
	speed(integer) : "Speed" : 150
	height(integer) : "Height"
	soundtype(choices) : "Sounds" : 2 =
	[
		1 : "base fast"
		2 : "chain slow"
	]
	wait(integer) : "Wait before moving" : 3
]

@SolidClass base(Appearflags, Targetname) = func_plat : "Standard platform"
[
	spawnflags(Flags) =
	[
		1 : "trigger low" : 0
	]
	speed(integer) : "Speed" : 150
	height(integer) : "Height"
	soundtype(choices) : "Sounds" : 2 =
	[
		1 : "pully"
		2 : "chain"
	]
	wait(integer) : "Wait before moving" : 3
]

//
// Rotating stuff
//

@SolidClass base(Appearflags, Target, Targetname) = func_angletrigger : "rotating trigger"
[
	spawnflags(Flags) =
	[
		1 : "Reverse (neg)" : 0
		2 : "X axis" : 0
		4 : "Y axis" : 0
	]
	origin(string) : "Center of rotation" : "0 0 0"
	mangle(string) : "Mangle (Y Z X)" : "0 0 0"
	cnt(integer) : "Degrees per move"
	speed(integer) : "Speed" : 40
	dmg(integer) : "Damage when blocked" : 2
	netname(string) : "Netname"
	abslight(string) : "Absolute light value"
]

@SolidClass base(Appearflags, Targetname) = func_rotating : "Rotating object"
[
	spawnflags(Flags) =
	[
		1 : "start on" : 0
		2 : "reverse" : 0
		4 : "x axis" : 0
		8 : "y axis" : 0
		16 : "break" : 0
		32 : "gradual" : 0
		64 : "toggle reverse" : 0
		128 : "keep start" : 0
	]
	origin(string) : "Center of rotation" : "0 0 0"
	speed(integer) : "Speed" : 100
	dmg(integer) : "Damage when blocked" : 2
	lifetime(choices) : "Lifetime" : 0 =
	[
		0 : "Continuous"
	]
	wait(integer) : "Time between lifetimes" : 3
	thingtype(choices) : "Material type" : 2 =
	[
		1 : "grey stone"
		2 : "wood (default)"
		3 : "metal"
		4 : "flesh"
		5 : "soft stone"
		6 : "clay"
		7 : "green leaves"
		8 : "hay"
		9 : "brown stone"
		10 : "red cloth"
		11 : "wood & green leaves"
		12 : "wood & metal"
		13 : "wood & gray stone"
		14 : "metal & gray stone"
		15 : "metal & red cloth"
		16 : "spider web"
		17 : "glass"
		18 : "ice"
		19 : "clear glass"
		20 : "red glass"
	]
	health(choices) : "Health" : 0 =
	[
		0 : "Based on material"
	]
	abslight(string) : "Absolute light value"
	anglespeed(integer) : "accel/decell time" : 10
]

// func_rotating_movechain is supposed to link rotating ents to moving ents. untested

@SolidClass base(Appearflags, Targetname) = func_rotating_movechain : "move chain"
[
	spawnflags(Flags) =
	[
		1 : "No angle chain" : 0
	]
	netname(string) : "Netname"
	dmg(integer) : "Damage on touch"
	noise(string) : "Noise"
	noise1(string) : "Impact noise"
	wait(integer) : "Length of sound (for looping)"
	avelocity(string) : "Pitch/Yaw/Roll" : "0 0 0"
]

//
// Functional Train
//
// The good news: it's breakable and rotates. Multi-axis rotation is possible
//                although they can be a bit unpredictable in that respect
//
// The bad news: same old sound as Quake and same old kludge too. Don't
//               bother trying to trigger these unless you enjoy chewing
//               off pieces of your keyboard to vent frustration
//

@SolidClass base(Appearflags, Targetname) = func_train : "Functional train"
[
	spawnflags(Flags) =
	[
		1 : "glow" : 0
		2 : "toggle" : 0
		4 : "return" : 0
		8 : "translucent" : 0
	]
	target(string) : "Spawn path_corner"
	origin(string) : "Center of rotation" : "0 0 0"
	speed(integer) : "Speed" : 100
	dmg(integer) : "Damage when blocked" : 2
      soundtype(choices) : "Sound" : 1 =
	[
		0 : "no sound"
		1 : "ratchet metal"
	]
	anglespeed(integer) : "Speed of rotation" : 100
	pausetime(integer) : "Pause before explode"
	thingtype(choices) : "Material" : 1 =
	[
		1 : "grey stone (default)"
		2 : "wood"
		3 : "metal"
		4 : "flesh"
		5 : "soft stone"
		6 : "clay"
		7 : "green leaves"
		8 : "hay"
		9 : "brown stone"
		10 : "red cloth"
		11 : "wood & green leaves"
		12 : "wood & metal"
		13 : "wood & gray stone"
		14 : "metal & gray stone"
		15 : "metal & red cloth"
		16 : "spider web"
		17 : "glass"
		18 : "ice"
		19 : "clear glass"
		20 : "red glass"
	]
	abslight(string) : "Absolute light value"
]

@PointClass base(Appearflags, Targetname) size(-8 -8 -8, 8 8 8) = path_corner : "Monster and Train path"
[
	spawnflags(Flags) =
	[
		1 : "Synch" : 0
	]
	target(string) : "Next path_corner"
      wait(choices) : "Wait between moves" : 0 =
	[
		0 : "no wait"
		-1 : "stop"
		-2 : "explode"
	]
	speed(integer) : "Speed"
	angles(string) : "Rotation angle (Y Z X)" : "0 0 0"
	anglespeed(integer) : "Rotation speed"
]

@SolidClass base(Appearflags, Targetname) = func_wall : "Wall"
[
      spawnflags(Flags) =
	[
		1 : "Translucent" : 0
	]
	abslight(string) : "Absolute light value"
]

@PointClass base(Appearflags) = sound_ambient : "Ambient sound"
[
	soundtype(choices) : "Sound" : 4 =
	[
		1 : "windmill"
		2 : "sewer water sound"
		3 : "dripping water, no echo"
		4 : "subtle sky/wind"
		5 : "crickets / night sounds"
		6 : "birds"
		7 : "raven caw"
		8 : "rocks falling"
		9 : "lava bubble"
		10 : "water gurgle"
		11 : "metal"
		12 : "pounding"
		13 : "moans and screams"
		14 : "creaking"
		15 : "chain rattling"
	]
]

@PointClass base(Appearflags, Targetname) size(-10 -10 -8, 10 10 8) = sound_maker : "Triggerable sound"
[
	soundtype(choices) : "Sound" : 1 =
	[
		1 : "bell ringing"
		2 : "organ music"
		3 : "tomb sound"
	]
]
//Dehumaniser's little modifications
@PointClass base(Appearflags) = tiglari_sound_ambient : "Sound generator"
[
      netname(string) : "Sound 'subdir/name.wav'"
      flags(integer) : "Max time between repeating"
      flags2(integer) : "Min time between repeating"
]
//end Dehumaniser's little mod
@PointClass base(Appearflags, Targetname) size(-8 -8 -8, 8 8 8) = fx_smoke_generator : "Smoke puffs"
[
	wait(integer) : "Time between puffs" : 2
	thingtype(choices) : "Type of smoke" : 0 =
	[
		0 : "white puff"
		1 : "red"
		2 : "green"
		3 : "grey"
	]
]

@SolidClass base(Appearflags) = weather_rain : "Rain area"
[
	spawnflags(Flags) =
	[
		1 : "fall straight" : 0
		2 : "no splat" : 0
	]
	color(integer) : "Base color" : 414
	counter(integer) : "Density" : 300
	wait(string) : "Frequency" : "0.1"
	soundtype(choices) : "Sounds" : 1 =
	[
		0 : "rain"
		1 : "drip"
	]
]

@PointClass base(Appearflags, Targetname, Target) = weather_lightning_start : "Beginning of lighting"
[
	spawnflags(Flags) =
	[
		1 : "start off" : 0
		2 : "thunder sound" : 0
	]
	noise(choices) : "Sounds" : 2 =
	[
		1 : "no sound"
		2 : "lightning"
	]
	wait(choices) : "Time between strikes" : -1 =
	[
		-1 : "triggerable"
	]
	lifespan(integer) : "Duration"
]

@PointClass base(Appearflags, Targetname) = weather_lightning_end : "End of lightning bolt" []

@PointClass base(Appearflags, Targetname, Target) = weather_sunbeam_start : "Start of sunbeam"
[
	spawnflags(Flags) =
	[
		1 : "start off" : 0
	]
	noise(choices) : "Sounds" : 2 =
	[
		1 : "no sound"
		2 : "lightning"
	]
	wait(choices) : "Time between strikes" : -1 =
	[
		-1 : "triggerable"
	]
	lifespan(integer) : "Duration"
]

@PointClass base(Appearflags, Targetname) size(-8 -8 -8, 8 8 8) = weather_sunbeam_end : "End of sunbeam" []

@PointClass base(Appearflags) size(-16 -16 -16, 16 16 16) = info_intermission : "intermission camera"
[
	mangle(string) : "Pitch/Roll/Yaw" : "0 0 0"
]

@PointClass base(Appearflags, Targetname) size(-4 -4 -4, 4 4 4) = info_null : "null target" []

@BaseClass base(Appearflags, Target) size(-8 -8 -20, 8 8 45) = Item
[
	spawnflags(Flags) =
	[
		1 : "floating" : 0
	]
]

@PointClass base(Item) = item_armor_amulet : "Amulet" []
@PointClass base(Item) = item_armor_bracer : "Bracers" []
@PointClass base(Item) = item_armor_breastplate : "Breastplate" []
@PointClass base(Item) = item_armor_helmet : "Helmet" []
@PointClass base(Item) = item_health : "Healing Vial" []
@PointClass base(Item) = item_mana_both : "Combined Mana"
[
	spawnflags(Flags) =
	[
		2 : "big (30)" : 0
	]
]
@PointClass base(item_mana_both) = item_mana_blue : "Blue Mana" []
@PointClass base(item_mana_both) = item_mana_green : "Green Mana" []

// No idea how this works

@PointClass base(Item) = item_spawner : "generic item spawner" []

//
// Lights. Can be faded on and off with a trigger. Cool! Doesn't work with
//         anything else than a straight light though.
//

@PointClass base(Appearflags, Target, Targetname) size(-8 -8 -8, 8 8 8) = light : "normal light"
[
	spawnflags(Flags) =
	[
		1 : "Start Low" : 0
		
	]
	light(integer) : "Brightness" : 300
	style(integer) : "Style" : 0
]

@PointClass base(Appearflags, Target) size(-10 -10 -40, 10 10 40) = light_flame_large_yellow : "flame"
[
	light(integer) : "Brightness" : 300
	style(integer) : "Style" : 0
	dmg(integer) : "Damage, req. Hurt flag" : 0

	spawnflags(Flags) =
	[
		2 : "hurt" : 0
	]

]

@PointClass base(Appearflags, Target) size(-10 -10 -12, 12 12 18) = light_flame_small_yellow : "flame"
[
	light(integer) : "Brightness" : 300
	style(integer) : "Style" : 0
	dmg(integer) : "Damage, req. Hurt flag" : 0

	spawnflags(Flags) =
	[
		2 : "hurt" : 0
	]

]
@PointClass base(Appearflags, Target) size(-8 -8 -8, 8 8 8) = light_gem : "gem light"
[
	light(integer) : "Brightness" : 300
	style(integer) : "Style" : 0
]

@PointClass base(Appearflags, Target) size(-10 -10 -20, 10 10 20) = light_torch_small_walltorch : "walltorch"
[
	light(integer) : "Brightness" : 200
	style(integer) : "Style" : 0
	dmg(integer) : "Damage, req. Hurt flag" : 0

	spawnflags(Flags) =
	[
		2 : "hurt" : 0
	]

]

@PointClass base(Appearflags, Target) size(-8 -8 -8, 8 8 8) = light_torch_castle : "castle torch"
[
	light(integer) : "Brightness" : 300
	style(integer) : "Style" : 0
	dmg(integer) : "Damage, req. Hurt flag" : 0

	spawnflags(Flags) =
	[
		2 : "hurt" : 0
	]

]

@PointClass base(light_torch_castle) = light_torch_meso : "meso torch" []
@PointClass base(light_torch_castle) = light_torch_rome : "roman torch" []
@PointClass base(light_torch_castle) = light_torch_egypt : "Egyptian torch" []

@PointClass base(Appearflags, Targetname) size(-8 -8 -8, 8 8 8) = light_thunderstorm : "Thunderstorm effect"
[
	spawnflags(Flags) =
	[
		1 : "lightning" : 0
	]
	light(integer) : "Brightness" : 300
	wait(integer) : "Wait (1 - 100)" : 33
	dmg(integer) : "Lightning frequency" : 10
	lightvalue1(integer) : "Normal light value" : 11
	frags(integer) : "Lightning area radius" : 1000
]

@PointClass base(Appearflags) size(-8 -8 -8, 8 8 8) = misc_fireball : "Blue(?) lava balls" []

@PointClass base(Appearflags) size(0 0 0, 32 32 32) = misc_fountain : "Fountain"
[
	angles(string) : "Direction (Y Z X)" : "0 0 0"
	movedir(string) : "Force (Y Z X)" : "1 1 1"
	color(integer) : "Color" : 256
	cnt(integer) : "Number of particles" : 2
]

//
// trigger: only one for ballista control
//

@SolidClass base(Appearflags, Target, Targetname) = trigger_control : "Ballista control"
[
	killtarget(string) : "Killtarget"
	netname(string) : "Netname"
	aflag(integer) : "order"
	wait(integer) : "Wait"
	health(integer) : "Health"
	delay(string) : "Delay before trigger"
	message(integer) : "Message: line # in strings.txt"
]

//
// objects!!!
//

@PointClass base(Appearflags, Targetname) size(-45 -45 0, 45 45 60) = obj_ballista : "Ballista"
[
	spawnflags(Flags) =
	[
		1 : "track" : 0
	]
	health(choices) : "Health" : 0 =
	[
		0 : "Indestructible"
	]
	cnt(integer) : "degrees of pitch off start" : 30
	count(integer) : "degrees per movement" : 5
	dmg(integer) : "Damage of projectile" : 50
	speed(integer) : "Delay between firings" : 5
]

@PointClass base(Appearflags) size(-13 -13 0, 13 13 36) = obj_barrel_indestructible : "Barrel"
[
	spawnflags(Flags) =
	[
		1 : "downhill" : 0
		2 : "no drop" : 0
		4 : "on side" : 0
		8 : "sink in water" : 0
	]
]

@PointClass base(obj_barrel_indestructible) = obj_barrel : "Barrel"
[
	health(integer) : "Health" : 25
]

@PointClass base(obj_barrel) = obj_barrel_exploding : "Barrel" []

@PointClass base(Appearflags) size(-10 -10 -5, 10 10 32) = obj_barstool : "Bar stool" []
@PointClass base(Appearflags) size(-16 -16 0, 16 16 40) = obj_beefslab : "Slab o' beef" []
@PointClass base(Appearflags) size(-100 -100 -210, 100 100 8) = obj_bell : "Bell" []
@PointClass base(Appearflags) size(-30 -30 0, 30 30 40) = obj_bench : "Bench" []
@PointClass base(Appearflags) size(-10 -10 0, 10 10 10) = obj_bonepile : "Pile o' bones" []
@PointClass base(Appearflags) size(-8 -8 0, 8 8 10) = obj_book_closed : "Closed book" []
@PointClass base(obj_book_closed) = obj_book_open : "Open book" []
@PointClass base(Appearflags) size(-16 -16 0, 16 16 40) = obj_bush1 : "Bush" []
@PointClass base(Appearflags) size(-36 -32 -10, 36 75 64) = obj_cart : "Cart" []
@PointClass base(Appearflags) size(-16 -16 0, 16 16 40) = obj_cauldron : "Cauldron" []
@PointClass base(Appearflags) size(-10 -10 -5, 10 10 40) = obj_chair : "Chair" []
@PointClass base(Appearflags) size(-100 -100 0, 100 100 200) = obj_chaos_orb : "Chaos Orb" []
@PointClass base(Appearflags) size(-16 -16 0, 16 16 32) = obj_chest3 : "Chest #3" []
@PointClass base(obj_chest3) = obj_chest1 : "Chest #1"
[
	skin(choices) : "Skin" : 0 =
	[
		0 : "generic texture"
		1 : "roman texture"
	]
]
@PointClass base(obj_chest3) = obj_chest2 : "Chest #2"
[
	skin(choices) : "Skin" : 0 =
	[
		0 : "generic texture"
		1 : "meso texture"
		2 : "egypt texture"
	]
]

@PointClass base(Appearflags) size(-32 -32 0, 32 32 10) = obj_corpse1 : "Corpse #1"
[
	skin(choices) : "Skin" : 1 =
	[
		0 : "burnt, nude guy"
		1 : "normal, nude guy"
		2 : "yucky diseased, nude guy"
		3 : "wound in back, has pants on"
	]
]
@PointClass base(obj_corpse1) = obj_corpse2 : "Corpse #2"
[
	skin(choices) : "Skin" : 1 =
	[
		0 : "shoulder and facial wounds"
		1 : "clawed chest"
		2 : "stomach wound"
		3 : "just dead"
		4 : "webbed"
	]
]
@PointClass base(Appearflags) size(-26 -26 0, 26 26 70) = obj_fence : "Fence" []
@PointClass base(Appearflags) size(-16 -16 0, 16 16 160) = obj_flag : "Flag" []
@PointClass base(Appearflags) size(-24 -24 0, 24 24 80) = obj_fountain : "Fountain" []
@PointClass base(Appearflags) size(-16 -16 0, 16 16 80) = obj_hedge1 : "X-Mas tree" []
@PointClass base(obj_hedge1) = obj_hedge2 : "Square, medium hedge" []
@PointClass base(obj_hedge2) = obj_hedge3 : "Tall, thin hedge" []
@SolidClass base(Appearflags) = obj_ice : "Ice"
[
	spawnflags(Flags) =
	[
		1 : "no translucency" : 0
	]
	health(integer) : "Health" : 20
	friction(string) : "Friction (0 - 10)" : "0.2"
	abslight(string) : "Absolute light value" : "0.5"
]
@PointClass base(Appearflags) size(-16 -40 0, 16 40 50) = obj_pew : "Pew" []
@PointClass base(Appearflags) size(-10 -10 0, 10 10 20) = obj_plant_generic : "Generic plant" []
@PointClass base(Appearflags) size(-10 -10 0, 10 10 40) = obj_plant_meso : "Meso plant" []
@PointClass base(Appearflags) size(-24 -24 0, 24 24 90) = obj_plant_rome : "Roman plant" []
@PointClass base(Appearflags) size(-8 -8 0, 8 8 16) = obj_playerhead_assassin : "Assassin head" []
@PointClass base(obj_playerhead_assassin) = obj_playerhead_crusader : "Crusader head" []
@PointClass base(obj_playerhead_assassin) = obj_playerhead_necromancer : "Necro head" []
@PointClass base(obj_playerhead_assassin) = obj_playerhead_paladin : "Paladin head" []
@PointClass base(Appearflags) size(-24 -24 0, 24 24 50) = obj_pot1 : "Pot #1" []
@PointClass base(obj_pot1) size(-16 -16 0, 16 16 40) = obj_pot2 : "Pot #2" []
@PointClass base(obj_pot2) = obj_pot3 : "Pot #3" []
@PointClass base(Appearflags) size(-8 -8 0, 8 8 32) = obj_seaweed : "Sea weed" []
@PointClass base(Appearflags) size(-8 -8 0, 8 8 16) = obj_skull : "Skull" []
@PointClass base(Appearflags) size(-16 -16 0, 16 16 40) = obj_skull_stick2 : "2 skulls on a stick" []
@PointClass base(obj_skull_stick2) = obj_skullstick : "1 skull on a stick" []
@PointClass base(Appearflags) size(-60 -60 0, 60 60 120) = obj_statue_angel : "Angel" []
@PointClass base(Appearflags) size(-30 -30 0, 30 30 90) = obj_statue_athena : "Athena" []
@PointClass base(Appearflags) size(-24 -24 0, 24 24 90) = obj_statue_caesar : "Caesar" []
@PointClass base(Appearflags) size(-30 -30 0, 30 30 120) = obj_statue_king : "King" []
@PointClass base(Appearflags) size(-56 -14 0, 56 14 60) = obj_statue_lion : "Lion" []
@PointClass base(Appearflags) size(-30 -30 0, 30 30 80) = obj_statue_mars : "Mars" []
@PointClass base(Appearflags) size(-16 -16 0, 16 16 160) = obj_statue_mummy : "Mummy" []
@PointClass base(Appearflags) size(-16 -16 -26, 16 16 160) = obj_statue_mummy_head : "Mummy head"[]
@PointClass base(Appearflags) size(-30 -30 0, 30 30 100) = obj_statue_neptune : "Neptune" []
@PointClass base(Appearflags) size(-40 -40 0, 40 40 130) = obj_statue_olmec : "Olmec" []
@PointClass base(Appearflags) size(-16 -16 0, 16 16 80) = obj_statue_snake : "Snake" []
@PointClass base(Appearflags) size(-44 -44 0, 44 44 90) = obj_statue_snake_coil : "Coiling snake" []
@PointClass base(Appearflags) size(-36 -36 0, 36 36 248) = obj_statue_tut : "Tut" []
@PointClass base(Appearflags) size(-16 -16 -8, 16 16 8) = obj_sword : "Sword" []
@PointClass base(Appearflags) size(-24 -24 0, 24 24 60) = obj_tombstone1 : "Cross tombstone" []
@PointClass base(Appearflags) size(-16 -16 0, 16 16 40) = obj_tombstone2 : "Rounded tombstone" []
@PointClass base(Appearflags) size(-42 -42 0, 42 42 160) = obj_tree : "Leafless tree" []
@PointClass base(Appearflags) size(-140 -140 -16, 140 140 220) = obj_tree2 : "Normal tree" []
@PointClass base(Appearflags) size(-25 -25 -25, 25 25 25) = obj_webs : "Spider web"
[
	spawnflags(Flags) =
	[
		1 : "solid" : 0
		2 : "animate" : 0
		4 : "weak" : 0
		8 : "touchmove" : 0
		16 : "flat" : 0
		32 : "no translucency" : 0
	]
	abslight(integer) : "Absolute light value"
	health(integer) : "Health" : 0
	skin(choices) : "Skin" : 0 =
	[
		0 : "Many little webs"
		1 : "corner web"
		2 : "cobwebs"
		3 : "giant web"
		4 : "big ass web (15x)"
	]
	scale(integer) : "Scale (0 - 2.5)" : 1
	v_angle(string) : "Angle of web (Y Z X)" : "0 0 0"
]

@PointClass base(Appearflags, Target) size(-8 -8 0, 8 8 32) = player_sheep : "Sheep"
[
	spawnflags(Flags) =
	[
		1 : "stationary" : 0
		2 : "stuck" : 0
		4 : "jump" : 0
		8 : "play dead" : 0
		16 : "dormant" : 0
		32 : "no drop" : 0
	]
]

//
// Monsters
//

@BaseClass base(Appearflags, Target, Targetname) size(-16 -16 0, 16 16 50) = Monster
[
	spawnflags(Flags) =
	[
		1 : "ambush" : 0
		2 : "stuck" : 0
		4 : "jump" : 0
		8 : "play dead" : 0
		16 : "dormant" : 0
		32 : "no drop" : 0
		64 : "frozen" : 0
	]
]

@PointClass base(Monster) = monster_archer : "Archer" []
@PointClass base(Monster) = monster_archer_lord : "Archer lord" []

// For some reason, Eidolon cannot be just inserted like a regular monster.
// If anybody has info on this, email me. EutecTic

@PointClass base(Appearflags, Targetname, Target) size(-100 -100 0, 100 100 666) = monster_eidolon : "Eidolon" []
@PointClass base(Monster) size(-14 -14 -41, 14 14 23) = monster_fallen_angel : "Fallen angel" []
@PointClass base(monster_fallen_angel) = monster_fallen_angel_lord : "Fallen angel lord" []

// Just a fish, doesn't bite. Only one skin BTW

@PointClass base(Appearflags, Targetname, Target) size(-16 -16 -8, 16 16 8) = monster_fish : "Fish" []

@PointClass base(Appearflags, Targetname, Target) size(-64 -64 0, 64 64 194) = monster_golem_bronze : "Bronze golem"
[
	spawnflags(Flags) =
	[
		1 : "ambush" : 0
	]
]

// The Crystal golem has to be trigered in order for the player to be able
// kill it.

@PointClass base(monster_golem_bronze) size(-32 -32 -24, 32 32 64) = monster_golem_crystal : "Crystal golem" []
@PointClass base(monster_golem_bronze) size(-55 -55 0, 55 55 120) = monster_golem_iron : "Iron golem" []
@PointClass base(monster_golem_bronze) size(-32 -32 0, 32 32 88) = monster_golem_stone : "Stone golem" []
@PointClass base(Appearflags, Targetname, Target) size(-40 -40 -42, 40 40 42) = monster_hydra : "Hydra"
[
	spawnflags(Flags) =
	[
		1 : "stand" : 0
		2 : "hover" : 0
		4 : "jump" : 0
		8 : "play dead" : 0
		16 : "dormant" : 0
	]
]

// This one disappears a short while after spawning

@PointClass base(Appearflags, Targetname, Target) = monster_imp_fire : "Fire imp"
[
	spawnflags(Flags) =
	[
		1 : "stand" : 0
		2 : "hover" : 0
		16 : "gargoyle" : 0
	]
]

@PointClass base(monster_imp_fire) = monster_imp_ice : "Ice imp" []
@PointClass base(monster_imp_fire) = monster_imp_lord : "Lord imp" []

// Is there a difference between the green and red medusa?
// If there is, I sure can't tell! EutecTic

@PointClass base(Monster) = monster_medusa_green : "Green medusa"
[
	spawnflags(Flags) =
	[
		32 : "" : 0
		64 : "" : 0
	]
]

@PointClass base(monster_medusa_green) = monster_medusa_red : "Red medusa" []

@PointClass base(Appearflags, Targetname, Target) size(-16 -16 0, 16 16 55) = monster_mummy : "Mummy"
[
	spawnflags(Flags) =
	[
		1 : "Ambush" : 0
	]
]

@PointClass base(Monster) = monster_mummy_lord : "Mummy lord"
[
	spawnflags(Flags) =
	[
		32 : "" : 0
		64 : "" : 0
	]
]

@PointClass base(Appearflags, Targetname, Target) size(-3 -3 0, 3 3 7) = monster_rat : "Rat"
[
	spawnflags(Flags) =
	[
		1 : "Ambush" : 0
	]
]

@PointClass base(monster_rat) size(-20 -20 0, 20 20 10) = monster_ratnest : "Rat's nest" []
@PointClass base(Monster) = monster_raven : "Raven" []

@PointClass base(Appearflags, Targetname, Target) size(-10 -10 0, 10 10 64) = monster_scorpion_yellow : "Yellow scorpion"
[
	spawnflags(Flags) =
	[
		1 : "Ambush" : 0
	]
]

@PointClass base(monster_scorpion_yellow) = monster_scorpion_black : "Black scorpion" []

@PointClass base(Appearflags, Targetname, Target) size(-24 -24 0, 24 24 64) = monster_skull_wizard : "Skull wizard"
[
	spawnflags(Flags) =
	[
		1 : "Ambush" : 0
	]
]

@PointClass base(monster_skull_wizard) = monster_skull_wizard_lord : "Skull wizard lord" []

// The snake monster has to be triggered to come to life. Otherwise, it's just
// a huge statue. It also goes back to sleep after a while.

@PointClass base(Appearflags, Targetname, Target) size(-80 -80 0, 80 80 200) = monster_snake : "Snake"
[
	spawnflags(Flags) =
	[
		1 : "Ambush" : 0
	]
]

@BaseClass base(Appearflags, Targetname, Target) = Spider
[
	spawnflags(Flags) =
	[
		1 : "ambush" : 0
		2 : "stuck" : 0
		4 : "jump" : 0
		8 : "play dead" : 0
		16 : "dormant" : 0
		32 : "on wall" : 0
	]
]

@PointClass base(Spider) size(-16 -16 0, 16 16 26) = monster_spider_red_large : "Big red bug" []
@PointClass base(Spider) size(-12 -12 0, 12 12 16) = monster_spider_red_small : "Small red bug" []
@PointClass base(Spider) size(-16 -16 0, 16 16 26) = monster_spider_yellow_large : "Big yellow bug" []
@PointClass base(Spider) size(-12 -12 0, 12 12 16) = monster_spider_yellow_small : "Small yellow bug" []

@PointClass base(Monster) = monster_werejaguar : "Werejaguar"
[
	spawnflags(Flags) =
	[
		32 : "" : 0
		64 : "" : 0
	]
]

@PointClass base(monster_werejaguar) = monster_werepanther : "Werepanther" []

// The riders and their related triggers, like Eidolon, can't simply be
// popped in a map to work. How does one make them work? Good question!
// E-mail me if you know. EutecTic

@PointClass base(Appearflags, Targetname) size(-55 -55 -24, 55 55 100) = rider_death : "Death!"
[
	spawnflags(Flags) =
	[
		1 : "trigger wait" : 0
	]
	map(string) : "Next map after killing"
	target(string) : "Start spot on next map"
]

@PointClass base(rider_death) = rider_famine : "Famine!" []
@PointClass base(rider_death) = rider_pestilence : "Pestilence!" []
@PointClass base(rider_death) size(-50 -50 -24, 50 50 100) = rider_war : "War!" []

@SolidClass base(Appearflags, Targetname) = rider_quake : "Rider quake" []
@PointClass base(Appearflags) = rider_quake_center : "Quake center" []

@SolidClass base(Appearflags) = rider_trigger_multiple : "Trigger multiple"
[
	rt_chance(integer) : "Chance of triggering (0 - 1)" : 1
]

@SolidClass base(rider_trigger_multiple) = rider_trigger_once : "Trigger once" []

//
// One trigger for the monster trampoline act
//

@SolidClass base(Appearflags) = trigger_monsterjump : "Monster jumper"
[
	speed(integer) : "Speed forward" : 200
	height(integer) : "Speed upwards" : 200
]

//
// Rings
//

@PointClass base(Appearflags, Target) size(-8 -8 -44, 8 8 20) = Ring_Flight : "Ring o' flight"
[
	spawnflags(Flags) =
	[
		1 : "floating" : 0
	]
]

@PointClass base(Ring_Flight) = Ring_Regeneration : "Ring o' regeneration" []
@PointClass base(Ring_Flight) = Ring_Turning : "Ring o' turning" []
@PointClass base(Ring_Flight) = Ring_WaterBreathing : "Ring o' water breathing" []

@PointClass base(Appearflags) = viewthing : "Debugging only, do not use" []
@PointClass base(Appearflags, Target) size(-8 -8 -44, 8 8 20) = wp_weapon2 : "Weapon 2"
[
	spawnflags(Flags) =
	[
		1 : "floating" : 0
	]
]

@PointClass base(wp_weapon2) = wp_weapon3 : "Weapon 3" []
@PointClass base(wp_weapon2) = wp_weapon4_head : "Weapon 4 head" []
@PointClass base(wp_weapon2) = wp_weapon4_staff : "Weapon 4 staff" []