linedefflags
{
  twosided = "Doublesided";
	dontpegtop = "Upper unpegged";
	dontpegbottom = "Lower unpegged";
	blocking = "Impassable";
	blockeverything = "Block everything";
	blockplayers = "Block players";
	blockmonsters = "Block monsters";
	blocklandmonsters = "Block land monsters";
	blockfloaters = "Block floating monsters";
	blocksound = "Block sound";
	blockprojectiles = "Block projectiles";
	blockhitscan = "Block hitscans";
	blockuse = "Block use actions";
	blocksight = "Block monster line of sight";
	jumpover = "Jump-over railing";
	clipmidtex = "Clip middle texture";
	wrapmidtex = "Wrap middle texture";
	midtex3dimpassible = "Projectile shoot-through middle texture";
	midtex3d = "Walkable middle texture";
	mapped = "Initially shown on map";
	secret = "Shown as 1-sided on map";
	dontdraw = "Not shown on map";
	transparent = "Transparent (25% opacity)";
	translucent = "Translucent (obsolete)";
	monsteractivate = "Monster activates";
}

linedefactivations
{
  repeatspecial
	{
		name = "Repeatable action";
		istrigger = false;
	}
	playeruse = "When player presses use";
	playercross = "When player walks over";
	playerpush = "When player bumps";
	monsteruse = "When monster presses use";
	monstercross = "When monster walks over";
	monsterpush = "When monsters bumps";
	anycross = "Any crossing non-missile activates";
	missilecross = "When projectile crosses";
	impact = "On player hitscan/projectile impact";
	checkswitchrange
	{
		name = "Switch height check";
		istrigger = false;
	}
	passuse
	{
		name = "Pass use on";
		istrigger = false;
	}
	firstsideonly
	{
		name = "Front side only";
		istrigger = false;
	}
	playeruseback
	{
		name = "Player can use from back side";
		istrigger = false;
	}
}

// Linedef flags UDMF translation table
// This is needed for copy/paste and prefabs to work properly
// When the UDMF field name is prefixed with ! it is inverted
linedefflagstranslation
{
  include("Doom_misc.cfg", "linedefflagstranslation");
  include("Hexen_misc.cfg", "linedefflagstranslation");

  6144 = "playeruse,passuse"; //mxd
	7168 = "impact,missilecross"; //mxd
	16384 = "blockplayers";
}

sidedefflags
{
  clipmidtex = "Clip middle texture";
	wrapmidtex = "Wrap middle texture";
	smoothlighting = "Smooth lighting";
	nofakecontrast = "Even lighting";
}

thingflags
{
  skill1 = "Skill 1";
	skill2 = "Skill 2";
	skill3 = "Skill 3";
	skill4 = "Skill 4";
	skill5 = "Skill 5";
	single = "Singleplayer";
	coop = "Cooperative";
	dm = "Deathmatch";
	friend = "Friendly (MBF logic)";
	ambush = "Ambush players";
	dormant = "Dormant";
	translucent = "Translucent (25%)";
	invisible = "Invisible";
  countsecret = "Count as secret";
}

// How to compare thing flags (for the stuck things error checker)
thingflagscompare
{
	skills
	{
		skill1;
		skill2;
		skill3;
		skill4;
		skill5;
	}

	gamemodes
	{
		single { requiredgroups = "skills"; }
		coop   { requiredgroups = "skills"; }
		dm      { ignoredgroups = "skills"; }
	}
}

//mxd. Thing flags UDMF translation table
// This is needed for copy/paste and prefabs to work properly
// When the UDMF field name is prefixed with ! it is inverted
thingflagstranslation
{
  include("Doom_misc.cfg", "thingflagstranslation");
  include("Hexen_misc.cfg", "thingflagstranslation");

  256 = "single";
	512 = "coop";
	1024 = "dm";
	2048 = "translucent";
	4096 = "invisible";
	8192 = "friend";
}

// Default flags for first new thing
defaultthingflags
{
  skill1;
	skill2;
	skill3;
	skill4;
	skill5;
	single;
	coop;
	dm;
}

// Default thing filters
// (these are not required, just useful for new users)
thingsfilters
{
	filter0
	{
		name = "Keys only";
		category = "keys";
		type = -1;
	}

	filter1
	{
		name = "Deathmatch";
		category = "";
		type = -1;

		fields
		{
			dm = true;
		}
	}

	filter2
	{
		name = "Cooperative";
		category = "";
		type = -1;

		fields
		{
			coop = true;
		}
	}

	filter3
	{
		name = "Skill 1";
		category = "";
		type = -1;

		fields
		{
			skill1 = true;
		}
	}

	filter4
	{
		name = "Skill 2";
		category = "";
		type = -1;

		fields
		{
			skill2 = true;
		}
	}

	filter5
	{
		name = "Skill 3";
		category = "";
		type = -1;

		fields
		{
			skill3 = true;
		}
	}

	filter6
	{
		name = "Skill 4";
		category = "";
		type = -1;

		fields
		{
			skill4 = true;
		}
	}

	filter7
	{
		name = "Skill 5";
		category = "";
		type = -1;

		fields
		{
			skill5 = true;
		}
	}
}

// Things flags masks
include("Hexen_misc.cfg", "thingflagsmasks");

/*
ADDITIONAL UNIVERSAL DOOM MAP FORMAT FIELD DEFINITIONS
Only add fields here that Doom Builder does not edit with its own user-interface!
The "default" field must match the UDMF specifications!

Field data types:
0 = integer *
1 = float
2 = string
3 = bool
4 = linedef action (integer) *
5 = sector effect (integer) *
6 = texture (string)
7 = flat (string)
8 = angle in degrees (integer)
9 = angle in radians (float)
10 = XXRRGGBB color (integer)
11 = enum option (integer) *
12 = enum bits (integer) *
13 = sector tag (integer) *
14 = thing tag (integer) *
15 = linedef tag (integer) *
16 = enum option (string)
17 = angle in degrees (float)
22 = byte angle (integer)
*/
universalfields
{
  linedef
	{
		comment
		{
			type = 2;
			default = "";
		}

		health
		{
			type = 0;
			default = 0;
			managed = false;
		}

		healthgroup
		{
			type = 0;
			default = 0;
			managed = false;
		}

		// Should be moved to flags eventually
		damagespecial
		{
			type = 3;
			default = false;
			managed = false;
		}

		// Should be moved to flags eventually
		deathspecial
		{
			type = 3;
			default = false;
			managed = false;
		}

		automapstyle
		{
			type = 11;
			default = 0;
			enum
			{
				0 = "Default";
				1 = "One-sided wall";
				2 = "Two-sided wall";
				3 = "Floor levels of front and back sectors are different";
				4 = "Ceiling levels of front and back sectors are different";
				5 = "3D floor border";
				6 = "Wall with special non-door action";
				7 = "Secret door";
				8 = "Wall not seen yet";
				9 = "Locked door";
				10 = "Intra-level teleporter";
				11 = "Inter-level or game-ending teleporter";
				12 = "Unexplored secret wall";
				13 = "Portal line";
			}
			managed = false;
		}

		arg0str
		{
			type = 2;
			default = "";
		}

		alpha
		{
			type = 1;
			default = 1.0;
		}

		locknumber
		{
			type = 0;
			default = 0;
		}
	}

	sidedef
	{
		comment
		{
			type = 2;
			default = "";
		}

		scalex_mid
		{
			type = 1;
			default = 1.0;
		}

		lightabsolute
		{
			type = 3;
			default = false;
		}

		offsetx_top
		{
			type = 1;
			default = 0.0;
		}

		scalex_bottom
		{
			type = 1;
			default = 1.0;
		}

		offsety_bottom
		{
			type = 1;
			default = 0.0;
		}

		offsetx_bottom
		{
			type = 1;
			default = 0.0;
		}

		scaley_bottom
		{
			type = 1;
			default = 1.0;
		}

		light
		{
			type = 0;
			default = 0;
		}

		offsetx_mid
		{
			type = 1;
			default = 0.0;
		}

		offsety_top
		{
			type = 1;
			default = 0.0;
		}

		scaley_top
		{
			type = 1;
			default = 1.0;
		}

		scaley_mid
		{
			type = 1;
			default = 1.0;
		}

		offsety_mid
		{
			type = 1;
			default = 0.0;
		}

		scalex_top
		{
			type = 1;
			default = 1.0;
		}

		light_top
		{
			type = 0;
			default = 0;
		}

		lightabsolute_top
		{
			type = 3;
			default = false;
		}

		light_mid
		{
			type = 0;
			default = 0;
		}

		lightabsolute_mid
		{
			type = 3;
			default = false;
		}

		light_bottom
		{
			type = 0;
			default = 0;
		}

		lightabsolute_bottom
		{
			type = 3;
			default = false;
		}

		xscroll
		{
			type = 1;
			default = 0.0;
			managed = false;
		}

		yscroll
		{
			type = 1;
			default = 0.0;
			managed = false;
		}

		xscrolltop
		{
			type = 1;
			default = 0.0;
			managed = false;
		}

		yscrolltop
		{
			type = 1;
			default = 0.0;
			managed = false;
		}

		xscrollmid
		{
			type = 1;
			default = 0.0;
			managed = false;
		}

		yscrollmid
		{
			type = 1;
			default = 0.0;
			managed = false;
		}

		xscrollbottom
		{
			type = 1;
			default = 0.0;
			managed = false;
		}

		yscrollbottom
		{
			type = 1;
			default = 0.0;
			managed = false;
		}
	}

	thing
	{
		comment
		{
			type = 2;
			default = "";
		}

		gravity
		{
			type = 1;
			default = 0.0;
		}

		alpha
		{
			type = 1;
			default = 1.0;
		}

		health
		{
			type = 1;
			default = 1.0;
		}

		arg0str
		{
			type = 2;
			default = "";
		}
	}

	sector
	{
		comment
		{
			type = 2;
			default = "";
		}

		ypanningfloor
		{
			type = 1;
			default = 0.0;
		}

		xpanningfloor
		{
			type = 1;
			default = 0.0;
		}

		lightfloorabsolute
		{
			type = 3;
			default = false;
		}

		lightfloor
		{
			type = 0;
			default = 0;
		}

		damageinterval
		{
			type = 0;
			default = 32;
		}

		rotationceiling
		{
			type = 1;
			default = 0.0;
		}

		damageamount
		{
			type = 0;
			default = 0;
		}

		rotationfloor
		{
			type = 1;
			default = 0.0;
		}

		yscalefloor
		{
			type = 1;
			default = 1.0;
		}

		leakiness
		{
			type = 0;
			default = 0;
		}

		ypanningceiling
		{
			type = 1;
			default = 0.0;
		}

		lightceiling
		{
			type = 0;
			default = 0;
		}

		yscaleceiling
		{
			type = 1;
			default = 1.0;
		}

		gravity
		{
			type = 1;
			default = 1.0;
		}

		xpanningceiling
		{
			type = 1;
			default = 0.0;
		}

		xscaleceiling
		{
			type = 1;
			default = 1.0;
		}

		xscalefloor
		{
			type = 1;
			default = 1.0;
		}

		lightceilingabsolute
		{
			type = 3;
			default = false;
		}

		xscrollfloor
		{
			type = 1;
			default = 0.0;
			managed = false;
		}

		yscrollfloor
		{
			type = 1;
			default = 0.0;
			managed = false;
		}

		scrollfloormode
		{
			type = 12;
			default = 0;
			enum
			{
				1 = "Affects textures";
				2 = "Affects static objects";
				4 = "Affects players";
				8 = "Affects monsters";
			}
			managed = false;
		}

		xscrollceiling
		{
			type = 1;
			default = 0.0;
			managed = false;
		}

		yscrollceiling
		{
			type = 1;
			default = 0.0;
			managed = false;
		}

		scrollceilingmode
		{
			type = 12;
			default = 0;
			enum
			{
				1 = "Affects textures";
				2 = "Affects static objects";
				4 = "Affects players";
				8 = "Affects monsters";
			}
			managed = false;
		}

		xthrust
		{
			type = 1;
			default = 0.0;
			managed = false;
		}

		ythrust
		{
			type = 1;
			default = 0.0;
			managed = false;
		}

		thrustgroup
		{
			type = 12;
			default = 0;
			enum
			{
				1 = "Affects static objects";
				2 = "Affects players";
				4 = "Affects monsters";
				8 = "Affects projectiles";
				16 = "Affects WINDTHRUST actors";
			}
			managed = false;
		}

		thrustlocation
		{
			type = 12;
			default = 0;
			enum
			{
				1 = "Affects grounded actors";
				2 = "Affects airborne actors";
				4 = "Affects ceiling actors";
			}
			managed = false;
		}

		colormap
		{
			type = 2;
			default = "";
			managed = false;
		}

		skyfloor
		{
			type = 2;
			default = "";
			managed = false;
		}

		skyceiling
		{
			type = 2;
			default = "";
			managed = false;
		}

		frictionfactor
		{
			type = 1;
			default = 0.90625;
			managed = false;
		}

		movefactor
		{
			type = 1;
			default = 0.03125;
			managed = false;
		}
	}
}

// DEFAULT SECTOR BRIGHTNESS LEVELS
sectorbrightness
{
  256; 248; 240; 232; 224; 216; 208; 200; 192; 184; 176; 168; 160; 152; 144; 136;
	128; 120; 112; 104; 96; 88; 80; 72; 64; 56; 48; 40; 32; 24; 16; 8; 0;
}

// ENUMERATIONS
// Each engine has its own additional thing types
// These are enumerated lists for linedef types and UDMF fields.
enums
{
	// Basic game enums
	include("Doom_misc.cfg", "enums");
	// Standard ZDoom enums
	include("ZDoom_misc.cfg", "enums");
	// Additional ZDoom enums for that game
	include("ZDoom_misc.cfg", "enums_doom");

	sector_flags = null;
	sector_flags
	{
		1 = "Silent";
		16 = "Boom Friction";
		32 = "Boom Push / Pull";
		256 = "End god mode";
		512 = "End level";
		1024 = "Hazard";
		2048 = "No attack";
	}
}

maplumpnames
{
  ~MAP
	{
		required = true;
		blindcopy = true;
		nodebuild = false;
	}

	TEXTMAP
	{
		required = true;
		nodebuild = true;
		allowempty = true;
	}

  ZNODES
	{
		required = false;
		nodebuild = true;
		allowempty = false;
	}

	BLOCKMAP
	{
		required = false;
		nodebuild = true;
		allowempty = true;
	}

	REJECT
	{
		required = false;
		nodebuild = true;
		allowempty = true;
	}

  ENDMAP
	{
		required = true;
		nodebuild = false;
		allowempty = true;
	}
}
