@BaseClass = bsp_solid_entity
[
	_lmscale(integer) : "_lmscale" :  : "Generates an `LMSHIFT` BSPX lump for use by a light util. Note that both scaled and unscaled lighting will normally be used."
	_mirrorinside(integer) : "_mirrorinside" : 0 : "Set to 1 to save mirrored inside faces for brush models, so when the player view is inside the model, they will still see the faces. (e.g. for func_water, or func_illusionary)"
	_chop_order(integer) : "_chop_order" : 0 : "Customize the brush order, which affects which brush “wins” in the CSG phase when there are multiple overlapping brushes, since most .map editors don’t directly expose the brush order. 
 Defaults to 0, brushes with higher values (equivalent to appearing later in the .map file) will clip away lower valued brushes."
	_hulls(integer) : "_hulls" : 0 : "Bitmap (“Flags” type in FGD) that selects for which hulls collision data will be generated. eg. a decimal value of 11 (0b1011) would generate hull 0, hull 1, and hull 3. Faces are computed using data from hull 0, not generating this hull will prevent a brush model from being rendered, acting as a CLIP brush only active for the specified hulls. 
 Defaults to 0 which will generate clipnodes for all hulls."
	_minlight(float) : "_minlight" : "0" : "`worldspawn`: Set a global minimum light level of this value across the whole map. This is an easy way to eliminate completely dark areas of the level, however you may lose some contrast as a result, so use with care. Default 0. 
 `model entity`: Set the minimum light level for any surface of the brush model. Default 0."
	_minlight_mottle(integer) : "_minlight_mottle" : 0 : "Whether minlight should have a mottled pattern. Defaults to 0."
	_minlight_color(color1) : "_minlight_color" : "255 255 255" : "Specify red(r), green(g) and blue(b) components for the colour of the minlight. RGB component values are between 0 and 255 (between 0 and 1 is also accepted). Default is white light (''255 255 255'')."
	_minlight_exclude(string) : "_minlight_exclude" : "" : "Faces with the given texture are excluded from receiving minlight on this brush model."
	_minlight_exclude2(string) : "_minlight_exclude2" : "" : "Faces with the given texture are excluded from receiving minlight on this brush model."
	_minlight_exclude3(string) : "_minlight_exclude3" : "" : "Faces with the given texture are excluded from receiving minlight on this brush model."
	_shadow(integer) : "_shadow" : 0 : "If set to 1, this model will cast shadows on other models and itself (i.e. ''_shadow'' implies ''_shadowself''). Note that this doesn’t magically give Quake dynamic lighting powers, so the shadows will not move if the model moves. Set to -1 on func_detail/func_group to prevent them from casting shadows. Default 0."
	_shadowself(integer) : "_shadowself" : 0 : "If set to 1, this model will cast shadows on itself if one part of the model blocks the light from another model surface. This can be a better compromise for moving models than full shadowing. Default 0."
	_shadowworldonly(integer) : "_shadowworldonly" : 0 : "If set to 1, this model will cast shadows on the world only (not other brush models)."
	_switchableshadow(integer) : "_switchableshadow" : 0 : "If set to 1, this model casts a shadow that can be switched on/off using QuakeC. To make this work, a lightstyle is automatically assigned and stored in a key called ''switchshadstyle'', which the QuakeC will need to read and call the ''lightstyle()'' builtin with ''a'' or ''m'' to switch the shadow on or off. Entities sharing the same targetname, and with ''_switchableshadow'' set to 1, will share the same lightstyle."
	_dirt(integer) : "_dirt" : 0 : "`worldspawn`: 1 enables dirtmapping (ambient occlusion) on all lights, borrowed from q3map2. This adds shadows to corners and crevices. You can override the global setting for specific lights with the ''_dirt'' light entity key or ''_sunlight_dirt'', ''_sunlight2_dirt'', and ''_minlight_dirt'' worldspawn keys. Default is no dirtmapping (-1). 
 `model entity`: For brush models, -1 prevents dirtmapping on the brush model. Useful it the brush model touches or sticks into the world, and you want to those ares from turning black. Default 0."
	_phong(integer) : "_phong" : 0 : "1 enables phong shading on this model with a default _phong_angle of 89 (softens columns etc)."
	_phong_angle(float) : "_phong_angle" : "89" : "Enables phong shading on faces of this model with a custom angle. Adjacent faces with normals this many degrees apart (or less) will be smoothed. Consider setting ''_anglescale'' to ''1'' on lights or worldspawn to make the effect of phong shading more visible. Use the ''-phongdebug'' command-line flag to save the interpolated normals to the lightmap for previewing (use ''r_lightmap 1'' or ''gl_lightmaps 1'' in your engine to preview.)"
	_phong_angle_concave(float) : "_phong_angle_concave" : "" : "Optional key for setting a different angle threshold for concave joints. A pair of faces will either use ''_phong_angle'' or ''_phong_angle_concave'' as the smoothing threshold, depending on whether the joint between the faces is concave or not. ''_phong_angle(_concave)'' is the maximum angle (in degrees) between the face normals that will still cause the pair of faces to be smoothed. The minimum setting for ''_phong_angle_concave'' is 1, this should make all concave joints non-smoothed (unless they’re less than 1 degree apart, almost a flat plane.) If it’s 0 or unset, the same value as ''_phong_angle'' is used."
	_phong_group(integer) : "_phong_group" : 0 : "Integer specifying a “smoothing group ID” for phong shading. Default 0, faces with a _phong_group will only smooth with faces with a matching _phong_group. 
 Equivalent to the Q2 .map format’s “value” field."
	_lightignore(integer) : "_lightignore" : 0 : "1 makes a model receive minlight only, ignoring all lights / sunlight. Could be useful on rotators / trains."
	_light_twosided(integer) : "_light_twosided" :  : "Set to 1 to enable receiving light from either side. 
 Default is 0 execept on liquids (Q1 *, Q2 contents LAVA/SLIME/WATER), where it defaults to 1."
	_light_alpha(float) : "_light_alpha" : "" : "Float, range 0-1. Allows customizing the opacity of this face when it’s acting as “stained glass”. 
 `ericw-tools todo` Document default, and which conditions cause a face to be “stained glass”"
	_litwater(integer) : "_litwater" :  : "Overrides the worldspawn/command line option qbsp -litwater for these specific brushes."
	_surflight_atten(float) : "_surflight_atten" : "" : "Overrides the worldspawn key _surflight_atten for these brushes."
	_surflight_rescale(integer) : "_surflight_rescale" :  : "Integer, 0 or 1. 
 If 1, rescales any surface light emitted by these brushes to emit 50% light at 90 degrees from the surface normal. Otherwise, use a more natural angle falloff of 0% at 90 degrees. 
 Default is 0 on sky faces, otherwise 1."
	_surflight_color(color1) : "_surflight_color" : "" : "Customize the emissive color of a surface light. 
 Default is to use the average texture color."
	_surflight_style(integer) : "_surflight_style" :  : "Override the surface light lightstyle number for light emitted from these brushes."
	_surflight_targetname(string) : "_surflight_targetname" : "" : "Override the surface light targetname for light emitted from these brushes."
	_surflight_minlight_scale(float) : "_surflight_minlight_scale" : "" : "Overrides the worldspawn setting `_surflight_minlight_scale`."
	_bounce(integer) : "_bounce" : 0 : "Set to -1 to prevent this model from bouncing light (i.e. prevents its brushes from emitting bounced light they receive from elsewhere.) Only has an effect if “_bounce” is enabled in worldspawn."
	_autominlight(integer) : "_autominlight" : 0 : "“Autominlight” is a feature for automatically choosing a suitable minlight color for a solid entity (e.g. a func_door), by averaging incoming light at the center of the model bounding box. 
 Default behaviour is to apply autominlight on occluded luxels only (e.g., for a door that opens vertically upwards, it would apply to the bottom face of the door, which is initially pressed against the ground). 
 A value of “-1” disables the feature (occluded luxels will be solid black), and “1” enables it as a minlight color even on non-occluded luxels."
	_autominlight_target(string) : "_autominlight_target" : "" : "For autominlight, instead of using the center of the model bounds as the sample point, searches for an entity with its “targetname” key set to “name”, and use that entity’s origin (typically you’d use an “info_null” for this)."
	_world_units_per_luxel(float) : "_world_units_per_luxel" : "" : "When -world_units_per_luxel is in use, customizes the lightmap scale on this entity."
	_surflight_group(integer) : "_surflight_group" : 0 : "Integer. Default 0. 
 Can be set to a nonzero value to make these brushes emit as surface lights only from a light template with a matching _surflight_group value."
	_lightcolorscale(float) : "_lightcolorscale" : "1" : "Saturation control as a postprocessing step on these specific faces’ lightmaps. 
 Default 1.0, 0.0 is fully desaturated to greyscale."
	_object_channel_mask(integer) : "_object_channel_mask" : 1 : "Mask of lighting channels that this bmodel receives light on, blocks light on, and tests for AO on. 
 Default 1. 
 NOTE: Changing this from 1 will disable bouncing light off of this bmodel. 
 NOTE: Changing this from 1 implicitly enables _shadow. 
 NOTE: Changing to 2, for example, will cause the bmodel to initially be solid black. You’ll need to add minlight or lights with _light_channel_mask 2."
]

@SolidClass = named_entity
[
	name(string) : "name" : "" : ""
]

@PointClass base(transform) model({ "path": "models/spawn.glb" }) = spawn_point
[
]

@BaseClass = transform
[
	origin(vector) : "Translation/Origin" : "0 0 0" : ""
	angles(vector) : "Rotation (pitch yaw roll) in degrees" : "0 0 0" : ""
	scale(vector) : "Scale" : "1 1 1" : ""
]

@SolidClass = worldspawn
[
]

