<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://eternity.youfailit.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Printz</id>
	<title>Eternity Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://eternity.youfailit.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Printz"/>
	<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/wiki/Special:Contributions/Printz"/>
	<updated>2026-04-27T16:38:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.2</generator>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Polyobject&amp;diff=6418</id>
		<title>Polyobject</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Polyobject&amp;diff=6418"/>
		<updated>2026-04-23T17:24:40Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Creating PolyObjects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PolyObjects are special sets of one-sided linedefs which, unlike any other lines, can be moved on the map during gameplay. Unlike the Hexen implementation of PolyObjects, Eternity does not restrict these objects to one per subsector, and they are also allowed to move any distance from their spawn point, even across subsector boundaries. &lt;br /&gt;
&lt;br /&gt;
PolyObjects fully clip normal objects such as the player and enemies, optionally doing crushing damage depending upon the type of spawn spot used. They also block bullet tracers and monsters&#039; lines of sight. They do not, however, clip sound propagation, so it may be necessary to use sound blocking lines near areas where PolyObjects are meant to function as a normal wall until they move. &lt;br /&gt;
&lt;br /&gt;
Although Eternity does allow PolyObjects to move between different subsectors, this will only work properly if the subsectors on both sides of a line have the same properties (floor &amp;amp; ceiling heights, light level, and flat). However, since the implementation of [[dynaseg]]s, Eternity does not require a &amp;quot;PolyObject-aware&amp;quot; node builder. &lt;br /&gt;
&lt;br /&gt;
Finally, Eternity allows PolyObjects to be used in DOOM-format maps via the use of [[ExtraData]]. See the subsections below for more information on how to create and move PolyObjects. &lt;br /&gt;
&lt;br /&gt;
{{Backto|Linedef types}}&lt;br /&gt;
&lt;br /&gt;
==Creating PolyObjects==&lt;br /&gt;
&lt;br /&gt;
PolyObjects are a combination of a set of lines, which are typically placed in a &amp;quot;control sector&amp;quot; area outside of the main map, and exactly two mapthings: one spawn spot, and one anchor point. There are two different methods for grouping lines into a PolyObject.&lt;br /&gt;
&lt;br /&gt;
The lines are typically one-sided walls, but two-sided line polyobjects are also possible.&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Method 1: The &amp;lt;code&amp;gt;Polyobj_StartLine&amp;lt;/code&amp;gt; Special&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
:The &amp;lt;code&amp;gt;348:Polyobj_StartLine(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;mirror_id&#039;&#039;&#039;)&amp;lt;/code&amp;gt; special marks the first line in a PolyObject which is made up of a cyclic set of linedefs (that is, each line &amp;quot;points toward&amp;quot; the next line, ending at the first vertex of the first line). &lt;br /&gt;
&lt;br /&gt;
:Diagrammatic Example: &lt;br /&gt;
:[[File:Polyobjects_basic.png]]&lt;br /&gt;
:Assume that the linedef &#039;&#039;&#039;A&#039;&#039;&#039; is assigned the &amp;lt;code&amp;gt;Polyobj_StartLine&amp;lt;/code&amp;gt; special and has argument #1 set to &amp;quot;1&amp;quot; -- this is its &#039;&#039;&#039;PolyObject ID number&#039;&#039;&#039;, which must be unique amongst all on the map, and must be a number greater than zero. &lt;br /&gt;
&lt;br /&gt;
:Starting from line &#039;&#039;&#039;A&#039;&#039;&#039;, the engine will go from vertex to vertex, adding the first line found which shares the current line&#039;s second vertex as its first vertex. In this example, since the object is closed as is required, the process will end at the first vertex of line &#039;&#039;&#039;A&#039;&#039;&#039;, and there will be four lines in the PolyObject (note that unlike Hexen, there is NO limit to the number of lines that can be placed in one PolyObject). &lt;br /&gt;
&lt;br /&gt;
:Now, once the lines are added, it is necessary to define the control objects. Points &#039;&#039;&#039;B&#039;&#039;&#039; and &#039;&#039;&#039;C&#039;&#039;&#039; are the two required objects: &lt;br /&gt;
:* &#039;&#039;&#039;B&#039;&#039;&#039;: This is the PolyObject&#039;s anchor point (type EEPolyObjAnchor with DoomEd #9300). It defines the point relative to which all the lines in the PolyObject will be translated to the spawn point. This object&#039;s angle must be set to the same value as the StartLine&#039;s first argument (the &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039;). There must be one and only one of these objects for each &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039;. &lt;br /&gt;
:* &#039;&#039;&#039;C&#039;&#039;&#039;: This is the PolyObject&#039;s spawn point (one of EEPolyObjSpawnSpot [9301] or EEPolyObjSpawnSpotCrush [9302]). It defines the point where the PolyObject will initially spawn on the map. The anchor point will be translated to this exact location, and all lines in the PolyObject will maintain their relative positions to it. This object must also have its angle field set to the same value as both the StartLine&#039;s first argument and the anchor point&#039;s angle field. There must be one and only one of these objects for each PolyObject ID. Use 9302 to cause the PolyObject to do crushing damage to things that block it while it is in motion. &lt;br /&gt;
&lt;br /&gt;
:Note that when you use this method, the other lines belonging to the PolyObject can be given their own line specials, including ones which affect the PolyObject itself. When the player presses the PolyObject, the specials will work as expected. &lt;br /&gt;
&lt;br /&gt;
:The complete arguments to &amp;lt;code&amp;gt;Polyobj_StartLine(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;mirror_id&#039;&#039;&#039;)&amp;lt;/code&amp;gt; are as follows: &lt;br /&gt;
:* &#039;&#039;polyobj_id&#039;&#039; : the unique ID number (greater than zero) of the PolyObject &lt;br /&gt;
:* &#039;&#039;mirror_id&#039;&#039; : the ID number of a PolyObject that you want to mirror every action that affects this PolyObject. This number cannot be the same as the PolyObject&#039;s own ID. &lt;br /&gt;
&lt;br /&gt;
:In order to use this line special in a DOOM-format map, it is necessary to use [[ExtraData]]. In that case, you must give the line you want to have the Polyobj_StartLine special the ExtraData linedef control special (#270) instead, and then specify Polyobj_StartLine and its arguments in its corresponding ExtraData linedef record. &lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Method 2: The &amp;lt;code&amp;gt;Polyobj_ExplicitLine&amp;lt;/code&amp;gt; Special&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
:The &amp;lt;code&amp;gt;349:Polyobj_ExplicitLine(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;index&#039;&#039;&#039;, &#039;&#039;&#039;mirror_id&#039;&#039;&#039;)&amp;lt;/code&amp;gt; special demarcates every line that will be added to a PolyObject and the exact order in which the lines will be added. This affords a bit more flexibility in the construction of PolyObjects at the price of not allowing any other line specials to be placed on the object itself. &lt;br /&gt;
&lt;br /&gt;
:Diagrammatic Example: &lt;br /&gt;
:[[File:Polyobjects_adv.png]]&lt;br /&gt;
:Assume that the linedefs labeled 1 through 4 are assigned (via [[ExtraData]]) the &amp;lt;code&amp;gt;Polyobj_ExplicitLine&amp;lt;/code&amp;gt; special, all have argument &#039;&#039;&#039;#1&#039;&#039;&#039; set to &amp;quot;1&amp;quot; -- this is its PolyObject ID number (which must be unique amongst all on the map, and must be a number greater than zero), and argument &#039;&#039;&#039;#2&#039;&#039;&#039; set also to whatever their tag is (in this case again it&#039;s &#039;&#039;1&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
:The game engine will search through all linedefs in the entire map for ones with the current &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039; in argument &#039;&#039;&#039;#1&#039;&#039;&#039; and a value greater than zero in argument &#039;&#039;&#039;#2&#039;&#039;&#039;. The lines will be collected and then sorted by the &#039;&#039;&#039;LineDef id&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
:Now, once the lines are added, it is necessary to define the control objects. This is exactly the same as it is for the &amp;lt;code&amp;gt;StartLine(...)&amp;lt;/code&amp;gt; special above. &lt;br /&gt;
:* &#039;&#039;&#039;B&#039;&#039;&#039;: This is the PolyObject&#039;s anchor point (type EEPolyObjAnchor with DoomEd #9300). It defines the point relative to which all the lines in the PolyObject will be translated to the spawn point. This object&#039;s angle must be set to the same value as the &amp;lt;code&amp;gt;ExplicitLines&#039;&amp;lt;/code&amp;gt; first argument (the &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039;). There must be one and only one of these objects for each &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039;. &lt;br /&gt;
:* &#039;&#039;&#039;C&#039;&#039;&#039;: This is the PolyObject&#039;s spawn point (one of EEPolyObjSpawnSpot [9301] or EEPolyObjSpawnSpotCrush [9302]). It defines the point where the PolyObject will initially spawn on the map. The anchor point will be translated to this exact location, and all lines in the PolyObject will maintain their relative positions to it. This object must also have its angle field set to the same value as both the ExplicitLines&#039; first argument and the anchor point&#039;s angle field. There must be one and only one of these objects for each &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039;. Use 9302 to cause the PolyObject to do crushing damage to things that block it while it is in motion. &lt;br /&gt;
&lt;br /&gt;
:The complete arguments to &amp;lt;code&amp;gt;Polyobj_ExplicitLine(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;index&#039;&#039;&#039;, &#039;&#039;&#039;mirror_id&#039;&#039;&#039;)&amp;lt;/code&amp;gt; are as follows: &lt;br /&gt;
:* &#039;&#039;polyobj_id&#039;&#039; : the unique ID number (greater than zero) of the PolyObject &lt;br /&gt;
:* &#039;&#039;index&#039;&#039; : specifies the order in which the line will be added to the PolyObject. This number should be unique amongst all lines to be added to the same object, and must be a value greater than zero. &lt;br /&gt;
:* &#039;&#039;mirror_id&#039;&#039; : the ID number of a PolyObject that you want to mirror every action that affects this PolyObject. This number cannot be the same as the PolyObject&#039;s own ID. &lt;br /&gt;
&lt;br /&gt;
:In order to use this line special in a DOOM-format map, it is necessary to use ExtraData. In that case, you can either give the lines you want to have the Polyobj_ExplicitLine special the ExtraData linedef control special (#270) instead, and then specify Polyobj_ExplicitLine and its arguments in all the corresponding ExtraData linedef records; or simply use the line special normally, and specify the ExtraData record number in the linedef&#039;s tag, specifying only the arguments inside the ExtraData record.&lt;br /&gt;
&lt;br /&gt;
===Note===&lt;br /&gt;
As of EE 3.37.00, thing type 9303 is available, which is similar to the ZDoom damaging polyobject type.&lt;br /&gt;
&lt;br /&gt;
==Moving PolyObjects==&lt;br /&gt;
&lt;br /&gt;
There are two types of basic motion which PolyObjects can currently undergo: translation and rotation. Using &amp;quot;override&amp;quot; actions, it is possible to combine the two to have a PolyObject which rotates while moving in the xy plane. &lt;br /&gt;
&lt;br /&gt;
[[File:Polyobject_rotating.gif]]&lt;br /&gt;
&lt;br /&gt;
===Translating PolyObjects===&lt;br /&gt;
&lt;br /&gt;
To move a PolyObject in the xy plane, use one of the following line specials: &lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_Move(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;speed&#039;&#039;&#039;, &#039;&#039;&#039;angle&#039;&#039;&#039;, &#039;&#039;&#039;dist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_OR_Move(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;speed&#039;&#039;&#039;, &#039;&#039;&#039;angle&#039;&#039;&#039;, &#039;&#039;&#039;dist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both of these line specials use the same arguments:&lt;br /&gt;
* &#039;&#039;polyobj_id&#039;&#039; : Specifies which PolyObject to intially move. If the object is already moving, nothing will happen unless the action is Polyobj_OR_Move. If this object has a mirror, the same action will be recursively applied to every mirror PolyObject, reversing the angle of movement for each subsequent mirror. &lt;br /&gt;
* &#039;&#039;speed&#039;&#039; : Speed of the motion in eighths of a unit per tic. &lt;br /&gt;
* &#039;&#039;angle&#039;&#039; : Byte angle specifying the direction of motion. To convert from degrees to byte angles, use this formula: byteangle = (degrees * 256) / 360. Round or chop the result to an integer. 0 means East, 64 means North, 128 means West, and 192 means South. &lt;br /&gt;
* &#039;&#039;dist&#039;&#039; : The total distance to move the object in units. &lt;br /&gt;
&lt;br /&gt;
All PolyObjects will inflict thrust on objects which block them with force proportional to the speed of motion. If the PolyObject was spawned with the EEPolyObjSpawnSpotCrush object (DoomEd num 9302), then if the object does not fit at the location it is being pushed toward, it will be damaged 3 hitpoints per tic (105 damage per second). &lt;br /&gt;
&lt;br /&gt;
===Rotating PolyObjects===&lt;br /&gt;
&lt;br /&gt;
To rotate a PolyObject, use one of the following line specials: &lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_RotateRight(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;aspeed&#039;&#039;&#039;, &#039;&#039;&#039;adist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_OR_RotateRight(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;aspeed&#039;&#039;&#039;, &#039;&#039;&#039;adist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_RotateLeft(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;aspeed&#039;&#039;&#039;, &#039;&#039;&#039;adist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_OR_RotateLeft(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;aspeed&#039;&#039;&#039;, &#039;&#039;&#039;adist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All these line specials use the same arguments:&lt;br /&gt;
* &#039;&#039;polyobj_id&#039;&#039; : Specifies which PolyObject to initially rotate. If the object is already moving, nothing will happen unless the action is Polyobj_OR_RotateRight or Polyobj_OR_RotateLeft. If this object has a mirror, the same action will be recursively applied to every mirror PolyObject, reversing the direction of rotation for each subsequent mirror. &lt;br /&gt;
* &#039;&#039;aspeed&#039;&#039; : Angular speed of the rotation in byte angles per tic. Same as for the &amp;quot;angle&amp;quot; parameter to Move actions. &lt;br /&gt;
* &#039;&#039;adist&#039;&#039; : Angular distance to rotate in byte angles. Same as for aspeed, except with two special caveats: &lt;br /&gt;
&lt;br /&gt;
The byte angle value 0 (zero) means to rotate exactly 360 degrees. &lt;br /&gt;
&lt;br /&gt;
The byte angle value 255 means to rotate perpetually. This type of action never ends and thus only override actions can subsequently be applied to the PolyObject.&lt;br /&gt;
&lt;br /&gt;
===PolyObject Examples===&lt;br /&gt;
====[https://s3-eu-west-1.amazonaws.com/eternity/polyobjects.wad PolyObject Demo]====&lt;br /&gt;
A demonstration of both rotating and translating PolyObjects. Plays on &#039;&#039;&#039;Doom 2&#039;&#039;&#039; / &#039;&#039;&#039;Map01&#039;&#039;&#039;. The map is linked to an [[ExtraData]] lump (via [[EMAPINFO]]).&lt;br /&gt;
&lt;br /&gt;
It is recommended that you open the Demo WAD in a WAD manager program like &#039;&#039;&#039;SLADE3&#039;&#039;&#039; or &#039;&#039;&#039;XWE&#039;&#039;&#039; to read the &#039;&#039;&#039;ExtraData&#039;&#039;&#039; and &#039;&#039;&#039;ACS&#039;&#039;&#039; scripts together with provided comments. For example this script explains how LineDefs are configured for a manually operated rotating PolyObject:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//===============================&lt;br /&gt;
//= MANUALLY ROTATING POLYOBJECT&lt;br /&gt;
//=============================&lt;br /&gt;
&lt;br /&gt;
// This PolyObject doesn&#039;t move unless activated by a a nearby switch.&lt;br /&gt;
linedef {&lt;br /&gt;
  recordnum = 2&lt;br /&gt;
  special = PolyObj_StartLine&lt;br /&gt;
  args = { 2 }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
linedef {&lt;br /&gt;
  recordnum = 3&lt;br /&gt;
  extflags = &amp;quot;use player&amp;quot; // Defines how the LineDef action is activated.&lt;br /&gt;
                          // The lack of &amp;quot;repeat&amp;quot; flag means it&#039;s a one-time&lt;br /&gt;
                          // action.&lt;br /&gt;
  &lt;br /&gt;
  special = Polyobj_RotateRight&lt;br /&gt;
  args = { 2, 2, 255 }  // Starts Rotating PolyObject with PolyID: 2&lt;br /&gt;
                        // at a speed of 2 units and angular distance&lt;br /&gt;
                        // of 255 units - which means it&#039;ll rotate&lt;br /&gt;
                        // continuously.&lt;br /&gt;
}  (...)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====[https://s3-eu-west-1.amazonaws.com/eternity/polyobjects_adv.wad PolyObject Advanced Demo]====&lt;br /&gt;
A demonstration of rotating and translating PolyObjects made with &amp;lt;code&amp;gt;PolyObj_ExplicitLine()&amp;lt;/code&amp;gt; Plays on &#039;&#039;&#039;Doom 2&#039;&#039;&#039; / &#039;&#039;&#039;Map01&#039;&#039;&#039;. The map is linked to an [[ExtraData]] lump (via [[EMAPINFO]]). It shows how more advanced PolyObjects can be constructed and moved to fake 3D objects. It also includes PolyObject Doors discussed in the next section of this article.&lt;br /&gt;
&lt;br /&gt;
It is recommended that you play go through  the first Demo in the series and open the Demo WAD in a WAD manager program like &#039;&#039;&#039;SLADE3&#039;&#039;&#039; or &#039;&#039;&#039;XWE&#039;&#039;&#039; to read the &#039;&#039;&#039;ExtraData&#039;&#039;&#039; and &#039;&#039;&#039;ACS&#039;&#039;&#039; scripts together with provided comments.&lt;br /&gt;
&lt;br /&gt;
==PolyObject Doors==&lt;br /&gt;
There are two distinct types of actions provided to allow PolyObjects to function as doors: swinging and sliding. There are no override versions of door actions, and applying other overrides to currently moving PolyObject doors will most likely cause the doors to malfunction and move erratically. &lt;br /&gt;
&lt;br /&gt;
All PolyObject doors accept a delay parameter, and this specifies the amount of time the door will wait before closing. A door which is closing will reopen if blocked by an object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Swinging PolyObject Door===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Poly_swingdoor_schema.png|200px]] || [[Image:Poly_swigning_door.gif]]&lt;br /&gt;
|-&lt;br /&gt;
| PolyObject swinging door schema || PolyObject swinging door&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Polyobj_DoorSwing (&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;aspeed&#039;&#039;&#039;, &#039;&#039;&#039;adist&#039;&#039;&#039;, &#039;&#039;&#039;delay&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This action creates a swinging door from a PolyObject and takes the following arguments: &lt;br /&gt;
:* &#039;&#039;polyobj_id&#039;&#039; : The ID number of PolyObject to affect. Mirroring works for doors as well and is the most common use for PolyObject mirroring. &lt;br /&gt;
:* &#039;&#039;aspeed&#039;&#039; : Angular speed in byte angles per tic. &lt;br /&gt;
:* &#039;&#039;adist&#039;&#039; : Angular distance to rotate when opening, and again but in the opposite direction when closing. &lt;br /&gt;
:* &#039;&#039;delay&#039;&#039; : Amount of time before the door attempts to close after fully opening in tics. If the door is forced to reopen due to being blocked, it will also wait this amount of time before once again closing. &lt;br /&gt;
Swinging doors currently only rotate left. A right-rotating swinging door special will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
===Sliding PolyObject Door===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Poly_slidedoor_schema.png|200px]] || [[Image:Poly_sliding_door.gif|180px]]&lt;br /&gt;
|-&lt;br /&gt;
| PolyObject sliding door schema || PolyObject sliding door&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Polyobj_DoorSlide (&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;speed&#039;&#039;&#039;, &#039;&#039;&#039;angle&#039;&#039;&#039;, &#039;&#039;&#039;dist&#039;&#039;&#039;, &#039;&#039;&#039;delay&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:This action creates a sliding door from a PolyObject and takes the following arguments: &lt;br /&gt;
:* &#039;&#039;polyobj_id&#039;&#039; : The ID number of PolyObject to affect. Mirroring works for doors as well and is the most common use for PolyObject mirroring. &lt;br /&gt;
:* &#039;&#039;speed&#039;&#039; : Speed of the door&#039;s opening and closing in eighths of a unit per tic. &lt;br /&gt;
:* &#039;&#039;angle&#039;&#039; : Byte angle of door&#039;s initial motion. This angle is reversed when the door closes. &lt;br /&gt;
:* &#039;&#039;dist&#039;&#039; : Distance the door moves when opening, and again when closing, in units. &lt;br /&gt;
:* &#039;&#039;delay&#039;&#039; : Amount of time before the door attempts to close after fully opening in tics. If the door is forced to reopen due to being blocked, it will also wait this amount of time before once again closing. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===PolyObject Door Examples===&lt;br /&gt;
====[https://s3-eu-west-1.amazonaws.com/eternity/polyobj_doors.wad PolyObject Doors Demo]====&lt;br /&gt;
A demonstration of both swinging and sliding doors, mirrored and single. Plays on &#039;&#039;&#039;Doom 2&#039;&#039;&#039; / &#039;&#039;&#039;Map01&#039;&#039;&#039;. The map is linked to an [[ExtraData]] lump (via [[EMAPINFO]]).&lt;br /&gt;
&lt;br /&gt;
It is recommended that you open the Demo WAD in a WAD manager program like &#039;&#039;&#039;SLADE3&#039;&#039;&#039; or &#039;&#039;&#039;XWE&#039;&#039;&#039; to read the &#039;&#039;&#039;ExtraData&#039;&#039;&#039; scripts together with provided comments. For example the first script explains how LineDefs are configured for a single swinging door:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//=============================&lt;br /&gt;
//= BASIC SINGLE SWINGING DOOR&lt;br /&gt;
//===========================&lt;br /&gt;
linedef {&lt;br /&gt;
  recordnum = 1 // corresponds to a LineDef with action: 270, tag: 1&lt;br /&gt;
  &lt;br /&gt;
  special = PolyObj_StartLine // this defines the current LineDef as a&lt;br /&gt;
                              // starting point for the PolyObject&lt;br /&gt;
                &lt;br /&gt;
  args = { 1 }  // since this is a very basic PolyObj, it requires only one&lt;br /&gt;
                // argument (it&#039;s not to be confused with LineDef / Sector tag)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
linedef {&lt;br /&gt;
  recordnum = 2 // corresponds to a LineDef with action: 270, tag: 2&lt;br /&gt;
  &lt;br /&gt;
  extflags = &amp;quot;use player repeat&amp;quot; // describes how the LineDef is activated&lt;br /&gt;
  &lt;br /&gt;
  special = PolyObj_DoorSwing&lt;br /&gt;
  args = { 1,20,64,160 } // swing the door with PolyId: 1, AngularSpeed: 20&lt;br /&gt;
                         // AngularDeistance 64 units (90 deg),&lt;br /&gt;
                         // Delay: 160 tics&lt;br /&gt;
}  (...)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Polyobjects with portals==&lt;br /&gt;
:See [[Linked_portals#Polyobject_portals | Polyobject portals]]&lt;br /&gt;
&lt;br /&gt;
[[category:Editing reference]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Polyobject&amp;diff=6417</id>
		<title>Polyobject</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Polyobject&amp;diff=6417"/>
		<updated>2026-04-23T17:23:18Z</updated>

		<summary type="html">&lt;p&gt;Printz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PolyObjects are special sets of one-sided linedefs which, unlike any other lines, can be moved on the map during gameplay. Unlike the Hexen implementation of PolyObjects, Eternity does not restrict these objects to one per subsector, and they are also allowed to move any distance from their spawn point, even across subsector boundaries. &lt;br /&gt;
&lt;br /&gt;
PolyObjects fully clip normal objects such as the player and enemies, optionally doing crushing damage depending upon the type of spawn spot used. They also block bullet tracers and monsters&#039; lines of sight. They do not, however, clip sound propagation, so it may be necessary to use sound blocking lines near areas where PolyObjects are meant to function as a normal wall until they move. &lt;br /&gt;
&lt;br /&gt;
Although Eternity does allow PolyObjects to move between different subsectors, this will only work properly if the subsectors on both sides of a line have the same properties (floor &amp;amp; ceiling heights, light level, and flat). However, since the implementation of [[dynaseg]]s, Eternity does not require a &amp;quot;PolyObject-aware&amp;quot; node builder. &lt;br /&gt;
&lt;br /&gt;
Finally, Eternity allows PolyObjects to be used in DOOM-format maps via the use of [[ExtraData]]. See the subsections below for more information on how to create and move PolyObjects. &lt;br /&gt;
&lt;br /&gt;
{{Backto|Linedef types}}&lt;br /&gt;
&lt;br /&gt;
==Creating PolyObjects==&lt;br /&gt;
&lt;br /&gt;
PolyObjects are a combination of a set of 1S lines, which are typically placed in a &amp;quot;control sector&amp;quot; area outside of the main map, and exactly two mapthings: one spawn spot, and one anchor point. There are two different methods for grouping lines into a PolyObject. &lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Method 1: The &amp;lt;code&amp;gt;Polyobj_StartLine&amp;lt;/code&amp;gt; Special&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
:The &amp;lt;code&amp;gt;348:Polyobj_StartLine(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;mirror_id&#039;&#039;&#039;)&amp;lt;/code&amp;gt; special marks the first line in a PolyObject which is made up of a cyclic set of linedefs (that is, each line &amp;quot;points toward&amp;quot; the next line, ending at the first vertex of the first line). &lt;br /&gt;
&lt;br /&gt;
:Diagrammatic Example: &lt;br /&gt;
:[[File:Polyobjects_basic.png]]&lt;br /&gt;
:Assume that the linedef &#039;&#039;&#039;A&#039;&#039;&#039; is assigned the &amp;lt;code&amp;gt;Polyobj_StartLine&amp;lt;/code&amp;gt; special and has argument #1 set to &amp;quot;1&amp;quot; -- this is its &#039;&#039;&#039;PolyObject ID number&#039;&#039;&#039;, which must be unique amongst all on the map, and must be a number greater than zero. &lt;br /&gt;
&lt;br /&gt;
:Starting from line &#039;&#039;&#039;A&#039;&#039;&#039;, the engine will go from vertex to vertex, adding the first line found which shares the current line&#039;s second vertex as its first vertex. In this example, since the object is closed as is required, the process will end at the first vertex of line &#039;&#039;&#039;A&#039;&#039;&#039;, and there will be four lines in the PolyObject (note that unlike Hexen, there is NO limit to the number of lines that can be placed in one PolyObject). &lt;br /&gt;
&lt;br /&gt;
:Now, once the lines are added, it is necessary to define the control objects. Points &#039;&#039;&#039;B&#039;&#039;&#039; and &#039;&#039;&#039;C&#039;&#039;&#039; are the two required objects: &lt;br /&gt;
:* &#039;&#039;&#039;B&#039;&#039;&#039;: This is the PolyObject&#039;s anchor point (type EEPolyObjAnchor with DoomEd #9300). It defines the point relative to which all the lines in the PolyObject will be translated to the spawn point. This object&#039;s angle must be set to the same value as the StartLine&#039;s first argument (the &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039;). There must be one and only one of these objects for each &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039;. &lt;br /&gt;
:* &#039;&#039;&#039;C&#039;&#039;&#039;: This is the PolyObject&#039;s spawn point (one of EEPolyObjSpawnSpot [9301] or EEPolyObjSpawnSpotCrush [9302]). It defines the point where the PolyObject will initially spawn on the map. The anchor point will be translated to this exact location, and all lines in the PolyObject will maintain their relative positions to it. This object must also have its angle field set to the same value as both the StartLine&#039;s first argument and the anchor point&#039;s angle field. There must be one and only one of these objects for each PolyObject ID. Use 9302 to cause the PolyObject to do crushing damage to things that block it while it is in motion. &lt;br /&gt;
&lt;br /&gt;
:Note that when you use this method, the other lines belonging to the PolyObject can be given their own line specials, including ones which affect the PolyObject itself. When the player presses the PolyObject, the specials will work as expected. &lt;br /&gt;
&lt;br /&gt;
:The complete arguments to &amp;lt;code&amp;gt;Polyobj_StartLine(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;mirror_id&#039;&#039;&#039;)&amp;lt;/code&amp;gt; are as follows: &lt;br /&gt;
:* &#039;&#039;polyobj_id&#039;&#039; : the unique ID number (greater than zero) of the PolyObject &lt;br /&gt;
:* &#039;&#039;mirror_id&#039;&#039; : the ID number of a PolyObject that you want to mirror every action that affects this PolyObject. This number cannot be the same as the PolyObject&#039;s own ID. &lt;br /&gt;
&lt;br /&gt;
:In order to use this line special in a DOOM-format map, it is necessary to use [[ExtraData]]. In that case, you must give the line you want to have the Polyobj_StartLine special the ExtraData linedef control special (#270) instead, and then specify Polyobj_StartLine and its arguments in its corresponding ExtraData linedef record. &lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Method 2: The &amp;lt;code&amp;gt;Polyobj_ExplicitLine&amp;lt;/code&amp;gt; Special&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
:The &amp;lt;code&amp;gt;349:Polyobj_ExplicitLine(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;index&#039;&#039;&#039;, &#039;&#039;&#039;mirror_id&#039;&#039;&#039;)&amp;lt;/code&amp;gt; special demarcates every line that will be added to a PolyObject and the exact order in which the lines will be added. This affords a bit more flexibility in the construction of PolyObjects at the price of not allowing any other line specials to be placed on the object itself. &lt;br /&gt;
&lt;br /&gt;
:Diagrammatic Example: &lt;br /&gt;
:[[File:Polyobjects_adv.png]]&lt;br /&gt;
:Assume that the linedefs labeled 1 through 4 are assigned (via [[ExtraData]]) the &amp;lt;code&amp;gt;Polyobj_ExplicitLine&amp;lt;/code&amp;gt; special, all have argument &#039;&#039;&#039;#1&#039;&#039;&#039; set to &amp;quot;1&amp;quot; -- this is its PolyObject ID number (which must be unique amongst all on the map, and must be a number greater than zero), and argument &#039;&#039;&#039;#2&#039;&#039;&#039; set also to whatever their tag is (in this case again it&#039;s &#039;&#039;1&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
:The game engine will search through all linedefs in the entire map for ones with the current &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039; in argument &#039;&#039;&#039;#1&#039;&#039;&#039; and a value greater than zero in argument &#039;&#039;&#039;#2&#039;&#039;&#039;. The lines will be collected and then sorted by the &#039;&#039;&#039;LineDef id&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
:Now, once the lines are added, it is necessary to define the control objects. This is exactly the same as it is for the &amp;lt;code&amp;gt;StartLine(...)&amp;lt;/code&amp;gt; special above. &lt;br /&gt;
:* &#039;&#039;&#039;B&#039;&#039;&#039;: This is the PolyObject&#039;s anchor point (type EEPolyObjAnchor with DoomEd #9300). It defines the point relative to which all the lines in the PolyObject will be translated to the spawn point. This object&#039;s angle must be set to the same value as the &amp;lt;code&amp;gt;ExplicitLines&#039;&amp;lt;/code&amp;gt; first argument (the &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039;). There must be one and only one of these objects for each &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039;. &lt;br /&gt;
:* &#039;&#039;&#039;C&#039;&#039;&#039;: This is the PolyObject&#039;s spawn point (one of EEPolyObjSpawnSpot [9301] or EEPolyObjSpawnSpotCrush [9302]). It defines the point where the PolyObject will initially spawn on the map. The anchor point will be translated to this exact location, and all lines in the PolyObject will maintain their relative positions to it. This object must also have its angle field set to the same value as both the ExplicitLines&#039; first argument and the anchor point&#039;s angle field. There must be one and only one of these objects for each &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039;. Use 9302 to cause the PolyObject to do crushing damage to things that block it while it is in motion. &lt;br /&gt;
&lt;br /&gt;
:The complete arguments to &amp;lt;code&amp;gt;Polyobj_ExplicitLine(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;index&#039;&#039;&#039;, &#039;&#039;&#039;mirror_id&#039;&#039;&#039;)&amp;lt;/code&amp;gt; are as follows: &lt;br /&gt;
:* &#039;&#039;polyobj_id&#039;&#039; : the unique ID number (greater than zero) of the PolyObject &lt;br /&gt;
:* &#039;&#039;index&#039;&#039; : specifies the order in which the line will be added to the PolyObject. This number should be unique amongst all lines to be added to the same object, and must be a value greater than zero. &lt;br /&gt;
:* &#039;&#039;mirror_id&#039;&#039; : the ID number of a PolyObject that you want to mirror every action that affects this PolyObject. This number cannot be the same as the PolyObject&#039;s own ID. &lt;br /&gt;
&lt;br /&gt;
:In order to use this line special in a DOOM-format map, it is necessary to use ExtraData. In that case, you can either give the lines you want to have the Polyobj_ExplicitLine special the ExtraData linedef control special (#270) instead, and then specify Polyobj_ExplicitLine and its arguments in all the corresponding ExtraData linedef records; or simply use the line special normally, and specify the ExtraData record number in the linedef&#039;s tag, specifying only the arguments inside the ExtraData record.&lt;br /&gt;
&lt;br /&gt;
===Note===&lt;br /&gt;
As of EE 3.37.00, thing type 9303 is available, which is similar to the ZDoom damaging polyobject type.&lt;br /&gt;
&lt;br /&gt;
==Moving PolyObjects==&lt;br /&gt;
&lt;br /&gt;
There are two types of basic motion which PolyObjects can currently undergo: translation and rotation. Using &amp;quot;override&amp;quot; actions, it is possible to combine the two to have a PolyObject which rotates while moving in the xy plane. &lt;br /&gt;
&lt;br /&gt;
[[File:Polyobject_rotating.gif]]&lt;br /&gt;
&lt;br /&gt;
===Translating PolyObjects===&lt;br /&gt;
&lt;br /&gt;
To move a PolyObject in the xy plane, use one of the following line specials: &lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_Move(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;speed&#039;&#039;&#039;, &#039;&#039;&#039;angle&#039;&#039;&#039;, &#039;&#039;&#039;dist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_OR_Move(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;speed&#039;&#039;&#039;, &#039;&#039;&#039;angle&#039;&#039;&#039;, &#039;&#039;&#039;dist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both of these line specials use the same arguments:&lt;br /&gt;
* &#039;&#039;polyobj_id&#039;&#039; : Specifies which PolyObject to intially move. If the object is already moving, nothing will happen unless the action is Polyobj_OR_Move. If this object has a mirror, the same action will be recursively applied to every mirror PolyObject, reversing the angle of movement for each subsequent mirror. &lt;br /&gt;
* &#039;&#039;speed&#039;&#039; : Speed of the motion in eighths of a unit per tic. &lt;br /&gt;
* &#039;&#039;angle&#039;&#039; : Byte angle specifying the direction of motion. To convert from degrees to byte angles, use this formula: byteangle = (degrees * 256) / 360. Round or chop the result to an integer. 0 means East, 64 means North, 128 means West, and 192 means South. &lt;br /&gt;
* &#039;&#039;dist&#039;&#039; : The total distance to move the object in units. &lt;br /&gt;
&lt;br /&gt;
All PolyObjects will inflict thrust on objects which block them with force proportional to the speed of motion. If the PolyObject was spawned with the EEPolyObjSpawnSpotCrush object (DoomEd num 9302), then if the object does not fit at the location it is being pushed toward, it will be damaged 3 hitpoints per tic (105 damage per second). &lt;br /&gt;
&lt;br /&gt;
===Rotating PolyObjects===&lt;br /&gt;
&lt;br /&gt;
To rotate a PolyObject, use one of the following line specials: &lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_RotateRight(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;aspeed&#039;&#039;&#039;, &#039;&#039;&#039;adist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_OR_RotateRight(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;aspeed&#039;&#039;&#039;, &#039;&#039;&#039;adist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_RotateLeft(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;aspeed&#039;&#039;&#039;, &#039;&#039;&#039;adist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_OR_RotateLeft(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;aspeed&#039;&#039;&#039;, &#039;&#039;&#039;adist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All these line specials use the same arguments:&lt;br /&gt;
* &#039;&#039;polyobj_id&#039;&#039; : Specifies which PolyObject to initially rotate. If the object is already moving, nothing will happen unless the action is Polyobj_OR_RotateRight or Polyobj_OR_RotateLeft. If this object has a mirror, the same action will be recursively applied to every mirror PolyObject, reversing the direction of rotation for each subsequent mirror. &lt;br /&gt;
* &#039;&#039;aspeed&#039;&#039; : Angular speed of the rotation in byte angles per tic. Same as for the &amp;quot;angle&amp;quot; parameter to Move actions. &lt;br /&gt;
* &#039;&#039;adist&#039;&#039; : Angular distance to rotate in byte angles. Same as for aspeed, except with two special caveats: &lt;br /&gt;
&lt;br /&gt;
The byte angle value 0 (zero) means to rotate exactly 360 degrees. &lt;br /&gt;
&lt;br /&gt;
The byte angle value 255 means to rotate perpetually. This type of action never ends and thus only override actions can subsequently be applied to the PolyObject.&lt;br /&gt;
&lt;br /&gt;
===PolyObject Examples===&lt;br /&gt;
====[https://s3-eu-west-1.amazonaws.com/eternity/polyobjects.wad PolyObject Demo]====&lt;br /&gt;
A demonstration of both rotating and translating PolyObjects. Plays on &#039;&#039;&#039;Doom 2&#039;&#039;&#039; / &#039;&#039;&#039;Map01&#039;&#039;&#039;. The map is linked to an [[ExtraData]] lump (via [[EMAPINFO]]).&lt;br /&gt;
&lt;br /&gt;
It is recommended that you open the Demo WAD in a WAD manager program like &#039;&#039;&#039;SLADE3&#039;&#039;&#039; or &#039;&#039;&#039;XWE&#039;&#039;&#039; to read the &#039;&#039;&#039;ExtraData&#039;&#039;&#039; and &#039;&#039;&#039;ACS&#039;&#039;&#039; scripts together with provided comments. For example this script explains how LineDefs are configured for a manually operated rotating PolyObject:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//===============================&lt;br /&gt;
//= MANUALLY ROTATING POLYOBJECT&lt;br /&gt;
//=============================&lt;br /&gt;
&lt;br /&gt;
// This PolyObject doesn&#039;t move unless activated by a a nearby switch.&lt;br /&gt;
linedef {&lt;br /&gt;
  recordnum = 2&lt;br /&gt;
  special = PolyObj_StartLine&lt;br /&gt;
  args = { 2 }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
linedef {&lt;br /&gt;
  recordnum = 3&lt;br /&gt;
  extflags = &amp;quot;use player&amp;quot; // Defines how the LineDef action is activated.&lt;br /&gt;
                          // The lack of &amp;quot;repeat&amp;quot; flag means it&#039;s a one-time&lt;br /&gt;
                          // action.&lt;br /&gt;
  &lt;br /&gt;
  special = Polyobj_RotateRight&lt;br /&gt;
  args = { 2, 2, 255 }  // Starts Rotating PolyObject with PolyID: 2&lt;br /&gt;
                        // at a speed of 2 units and angular distance&lt;br /&gt;
                        // of 255 units - which means it&#039;ll rotate&lt;br /&gt;
                        // continuously.&lt;br /&gt;
}  (...)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====[https://s3-eu-west-1.amazonaws.com/eternity/polyobjects_adv.wad PolyObject Advanced Demo]====&lt;br /&gt;
A demonstration of rotating and translating PolyObjects made with &amp;lt;code&amp;gt;PolyObj_ExplicitLine()&amp;lt;/code&amp;gt; Plays on &#039;&#039;&#039;Doom 2&#039;&#039;&#039; / &#039;&#039;&#039;Map01&#039;&#039;&#039;. The map is linked to an [[ExtraData]] lump (via [[EMAPINFO]]). It shows how more advanced PolyObjects can be constructed and moved to fake 3D objects. It also includes PolyObject Doors discussed in the next section of this article.&lt;br /&gt;
&lt;br /&gt;
It is recommended that you play go through  the first Demo in the series and open the Demo WAD in a WAD manager program like &#039;&#039;&#039;SLADE3&#039;&#039;&#039; or &#039;&#039;&#039;XWE&#039;&#039;&#039; to read the &#039;&#039;&#039;ExtraData&#039;&#039;&#039; and &#039;&#039;&#039;ACS&#039;&#039;&#039; scripts together with provided comments.&lt;br /&gt;
&lt;br /&gt;
==PolyObject Doors==&lt;br /&gt;
There are two distinct types of actions provided to allow PolyObjects to function as doors: swinging and sliding. There are no override versions of door actions, and applying other overrides to currently moving PolyObject doors will most likely cause the doors to malfunction and move erratically. &lt;br /&gt;
&lt;br /&gt;
All PolyObject doors accept a delay parameter, and this specifies the amount of time the door will wait before closing. A door which is closing will reopen if blocked by an object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Swinging PolyObject Door===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Poly_swingdoor_schema.png|200px]] || [[Image:Poly_swigning_door.gif]]&lt;br /&gt;
|-&lt;br /&gt;
| PolyObject swinging door schema || PolyObject swinging door&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Polyobj_DoorSwing (&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;aspeed&#039;&#039;&#039;, &#039;&#039;&#039;adist&#039;&#039;&#039;, &#039;&#039;&#039;delay&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This action creates a swinging door from a PolyObject and takes the following arguments: &lt;br /&gt;
:* &#039;&#039;polyobj_id&#039;&#039; : The ID number of PolyObject to affect. Mirroring works for doors as well and is the most common use for PolyObject mirroring. &lt;br /&gt;
:* &#039;&#039;aspeed&#039;&#039; : Angular speed in byte angles per tic. &lt;br /&gt;
:* &#039;&#039;adist&#039;&#039; : Angular distance to rotate when opening, and again but in the opposite direction when closing. &lt;br /&gt;
:* &#039;&#039;delay&#039;&#039; : Amount of time before the door attempts to close after fully opening in tics. If the door is forced to reopen due to being blocked, it will also wait this amount of time before once again closing. &lt;br /&gt;
Swinging doors currently only rotate left. A right-rotating swinging door special will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
===Sliding PolyObject Door===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Poly_slidedoor_schema.png|200px]] || [[Image:Poly_sliding_door.gif|180px]]&lt;br /&gt;
|-&lt;br /&gt;
| PolyObject sliding door schema || PolyObject sliding door&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Polyobj_DoorSlide (&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;speed&#039;&#039;&#039;, &#039;&#039;&#039;angle&#039;&#039;&#039;, &#039;&#039;&#039;dist&#039;&#039;&#039;, &#039;&#039;&#039;delay&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:This action creates a sliding door from a PolyObject and takes the following arguments: &lt;br /&gt;
:* &#039;&#039;polyobj_id&#039;&#039; : The ID number of PolyObject to affect. Mirroring works for doors as well and is the most common use for PolyObject mirroring. &lt;br /&gt;
:* &#039;&#039;speed&#039;&#039; : Speed of the door&#039;s opening and closing in eighths of a unit per tic. &lt;br /&gt;
:* &#039;&#039;angle&#039;&#039; : Byte angle of door&#039;s initial motion. This angle is reversed when the door closes. &lt;br /&gt;
:* &#039;&#039;dist&#039;&#039; : Distance the door moves when opening, and again when closing, in units. &lt;br /&gt;
:* &#039;&#039;delay&#039;&#039; : Amount of time before the door attempts to close after fully opening in tics. If the door is forced to reopen due to being blocked, it will also wait this amount of time before once again closing. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===PolyObject Door Examples===&lt;br /&gt;
====[https://s3-eu-west-1.amazonaws.com/eternity/polyobj_doors.wad PolyObject Doors Demo]====&lt;br /&gt;
A demonstration of both swinging and sliding doors, mirrored and single. Plays on &#039;&#039;&#039;Doom 2&#039;&#039;&#039; / &#039;&#039;&#039;Map01&#039;&#039;&#039;. The map is linked to an [[ExtraData]] lump (via [[EMAPINFO]]).&lt;br /&gt;
&lt;br /&gt;
It is recommended that you open the Demo WAD in a WAD manager program like &#039;&#039;&#039;SLADE3&#039;&#039;&#039; or &#039;&#039;&#039;XWE&#039;&#039;&#039; to read the &#039;&#039;&#039;ExtraData&#039;&#039;&#039; scripts together with provided comments. For example the first script explains how LineDefs are configured for a single swinging door:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//=============================&lt;br /&gt;
//= BASIC SINGLE SWINGING DOOR&lt;br /&gt;
//===========================&lt;br /&gt;
linedef {&lt;br /&gt;
  recordnum = 1 // corresponds to a LineDef with action: 270, tag: 1&lt;br /&gt;
  &lt;br /&gt;
  special = PolyObj_StartLine // this defines the current LineDef as a&lt;br /&gt;
                              // starting point for the PolyObject&lt;br /&gt;
                &lt;br /&gt;
  args = { 1 }  // since this is a very basic PolyObj, it requires only one&lt;br /&gt;
                // argument (it&#039;s not to be confused with LineDef / Sector tag)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
linedef {&lt;br /&gt;
  recordnum = 2 // corresponds to a LineDef with action: 270, tag: 2&lt;br /&gt;
  &lt;br /&gt;
  extflags = &amp;quot;use player repeat&amp;quot; // describes how the LineDef is activated&lt;br /&gt;
  &lt;br /&gt;
  special = PolyObj_DoorSwing&lt;br /&gt;
  args = { 1,20,64,160 } // swing the door with PolyId: 1, AngularSpeed: 20&lt;br /&gt;
                         // AngularDeistance 64 units (90 deg),&lt;br /&gt;
                         // Delay: 160 tics&lt;br /&gt;
}  (...)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Polyobjects with portals==&lt;br /&gt;
:See [[Linked_portals#Polyobject_portals | Polyobject portals]]&lt;br /&gt;
&lt;br /&gt;
[[category:Editing reference]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=CheckSight&amp;diff=6416</id>
		<title>CheckSight</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=CheckSight&amp;diff=6416"/>
		<updated>2026-04-23T06:06:26Z</updated>

		<summary type="html">&lt;p&gt;Printz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ACSFunction|description=Checks if there is a line of sight between two actors.&lt;br /&gt;
|usage=&#039;&#039;boolean&#039;&#039; &#039;&#039;&#039;CheckSight&#039;&#039;&#039;(&#039;&#039;int&#039;&#039; &#039;&#039;tid1&#039;&#039;, &#039;&#039;int&#039;&#039; &#039;&#039;tid2&#039;&#039;, &#039;&#039;flags&#039;&#039;)&lt;br /&gt;
|parameters=&lt;br /&gt;
*&#039;&#039;tid1&#039;&#039;: [[TID]] of first actor&lt;br /&gt;
*&#039;&#039;tid2&#039;&#039;: [[TID]] of second actor&lt;br /&gt;
*&#039;&#039;flags&#039;&#039;: reserved, must be 0&lt;br /&gt;
|notes=This uses the same line of sight rule as the one for monster sights, explosion rays etc. If any of the two actors is completely gone from the game, the function returns 0. It will still return 1 if there&#039;s a line of sight if they still exist as corpses or in any way still present in the game.&lt;br /&gt;
|id=-35}}&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=CheckSight&amp;diff=6415</id>
		<title>CheckSight</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=CheckSight&amp;diff=6415"/>
		<updated>2026-04-23T05:52:57Z</updated>

		<summary type="html">&lt;p&gt;Printz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ACSFunction|description=Checks if there is a line of sight between two actors.&lt;br /&gt;
|usage=&#039;&#039;boolean&#039;&#039; &#039;&#039;&#039;CheckSight&#039;&#039;&#039;(&#039;&#039;int&#039;&#039; &#039;&#039;tid1&#039;&#039;, &#039;&#039;int&#039;&#039; &#039;&#039;tid2&#039;&#039;, &#039;&#039;flags&#039;&#039;)&lt;br /&gt;
|parameters=&lt;br /&gt;
*&#039;&#039;tid1&#039;&#039;: [[TID]] of first actor&lt;br /&gt;
*&#039;&#039;tid2&#039;&#039;: [[TID]] of second actor&lt;br /&gt;
*&#039;&#039;flags&#039;&#039;: reserved, must be 0&lt;br /&gt;
|id=-35}}&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=CheckSight&amp;diff=6414</id>
		<title>CheckSight</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=CheckSight&amp;diff=6414"/>
		<updated>2026-04-23T05:51:32Z</updated>

		<summary type="html">&lt;p&gt;Printz: Created page with &amp;quot;{{ACSFunction|description=Checks if there is a line of sight between two actors. |usage=&amp;#039;&amp;#039;boolean&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;CheckSight&amp;#039;&amp;#039;&amp;#039;(&amp;#039;&amp;#039;int&amp;#039;&amp;#039; &amp;#039;&amp;#039;tid1&amp;#039;&amp;#039;, &amp;#039;&amp;#039;int&amp;#039;&amp;#039; &amp;#039;&amp;#039;tid2&amp;#039;&amp;#039;, &amp;#039;&amp;#039;flags&amp;#039;&amp;#039;) |parameters= *&amp;#039;&amp;#039;tid1&amp;#039;&amp;#039;: TID of first actor *&amp;#039;&amp;#039;tid2&amp;#039;&amp;#039;: TID of second actor *&amp;#039;&amp;#039;flags&amp;#039;&amp;#039;: reserved, must be 0}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ACSFunction|description=Checks if there is a line of sight between two actors.&lt;br /&gt;
|usage=&#039;&#039;boolean&#039;&#039; &#039;&#039;&#039;CheckSight&#039;&#039;&#039;(&#039;&#039;int&#039;&#039; &#039;&#039;tid1&#039;&#039;, &#039;&#039;int&#039;&#039; &#039;&#039;tid2&#039;&#039;, &#039;&#039;flags&#039;&#039;)&lt;br /&gt;
|parameters=&lt;br /&gt;
*&#039;&#039;tid1&#039;&#039;: [[TID]] of first actor&lt;br /&gt;
*&#039;&#039;tid2&#039;&#039;: [[TID]] of second actor&lt;br /&gt;
*&#039;&#039;flags&#039;&#039;: reserved, must be 0}}&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=GetSigilPieces&amp;diff=6413</id>
		<title>GetSigilPieces</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=GetSigilPieces&amp;diff=6413"/>
		<updated>2026-04-23T05:46:09Z</updated>

		<summary type="html">&lt;p&gt;Printz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ACSFunction|description=Returns the number of Sigil (Strife) pieces.&lt;br /&gt;
|usage=int GetSigilPieces(void)&lt;br /&gt;
|return=the number of Sigil pieces&lt;br /&gt;
|notes=This function only applies for Strife. Currently there is no Sigil in Eternity so this returns 0.&lt;br /&gt;
|id=ACS internal}}&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_item_effects_and_inventory&amp;diff=6412</id>
		<title>EDF item effects and inventory</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_item_effects_and_inventory&amp;diff=6412"/>
		<updated>2026-04-23T05:43:39Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* armoreffect */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Define what happens when an item is picked up and used (and eventually, dropped from the inventory - this is not complete yet). A tutorial on defining each of these can be found at [[Creating a pickup]].&lt;br /&gt;
&lt;br /&gt;
==Thing type based pick-up==&lt;br /&gt;
The recommended way to define pick-up effects is by adding the &#039;&#039;&#039;pickupeffect&#039;&#039;&#039; section in the [[thingtype]] definition of a class.&lt;br /&gt;
&lt;br /&gt;
The fields are as such:&lt;br /&gt;
&lt;br /&gt;
 thingtype &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  ...&lt;br /&gt;
  pickupeffect&lt;br /&gt;
  {&lt;br /&gt;
   effects      &amp;lt;name&amp;gt;, ...&lt;br /&gt;
   flags        &amp;lt;flags&amp;gt;&lt;br /&gt;
   changeweapon &amp;lt;name&amp;gt;&lt;br /&gt;
   message      &amp;lt;text&amp;gt;&lt;br /&gt;
   sound        &amp;lt;name&amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
For explanation of the fields, see the sprite-based block definition&#039;s corresponding fields.&lt;br /&gt;
&lt;br /&gt;
==Sprite based pick-ups==&lt;br /&gt;
===pickupeffect===&lt;br /&gt;
Defines what happens when player picks up an item with the &#039;&#039;&#039;SPECIAL&#039;&#039;&#039; [[Thing type flags|flag]]. Commonly in DOOM and Heretic, pick-up effects are associated with the visual sprites of the things, instead of being mapped directly to the thing class.&lt;br /&gt;
&lt;br /&gt;
In the base game definitions, you can find the pick-up effects defined in sprites.edf.&lt;br /&gt;
 pickupeffect &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  sprite       &amp;lt;name&amp;gt;&lt;br /&gt;
  effects      &amp;lt;name&amp;gt;, ...&lt;br /&gt;
  flags        &amp;lt;flags&amp;gt;&lt;br /&gt;
  changeweapon &amp;lt;name&amp;gt;&lt;br /&gt;
  message      &amp;lt;text&amp;gt;&lt;br /&gt;
  sound        &amp;lt;name&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
====Explanation of fields====&lt;br /&gt;
*&#039;&#039;&#039;sprite&#039;&#039;&#039;&lt;br /&gt;
:Default: no sprite.&lt;br /&gt;
:If set as a four-character sprite name, this will associate any [[thingtype]] with the &#039;&#039;&#039;SPECIAL&#039;&#039;&#039; [[Thing type flags|flag]] whose current sprite shows as this value to trigger this &#039;&#039;&#039;pickupeffect&#039;&#039;&#039;.&lt;br /&gt;
:Example: &amp;lt;code&amp;gt;sprite BON1&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;effects&#039;&#039;&#039;&lt;br /&gt;
:Default: no effect.&lt;br /&gt;
:This is a list of effects incurred on player when picking up the item. Each one must be defined in EDF as one of the following: &#039;&#039;&#039;ammoeffect&#039;&#039;&#039;, &#039;&#039;&#039;armoreffect&#039;&#039;&#039;, &#039;&#039;&#039;artifact&#039;&#039;&#039;, &#039;&#039;&#039;healtheffect&#039;&#039;&#039;, &#039;&#039;&#039;powereffect&#039;&#039;&#039; or &#039;&#039;&#039;weapongiver&#039;&#039;&#039;.&lt;br /&gt;
:Example: &amp;lt;code&amp;gt;effects Berserk, BerserkHealth&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;flags&#039;&#039;&#039;&lt;br /&gt;
:Default: no flags.&lt;br /&gt;
:This is an optional set of one or more flags, joined together by | (vertical bar). The flags you can use are:&lt;br /&gt;
:*&#039;&#039;&#039;ALWAYSPICKUP&#039;&#039;&#039;: item shall always be picked, even if according to the &#039;&#039;&#039;effects&#039;&#039;&#039;, there would be no need for the item. Example: health potions in DOOM.&lt;br /&gt;
:*&#039;&#039;&#039;LEAVEINMULTI&#039;&#039;&#039;: if game is multiplayer, keep item on the ground for every players to find it. Commonly used by access keys.&lt;br /&gt;
:*&#039;&#039;&#039;NOSCREENFLASH&#039;&#039;&#039;: if picked up, item will not flash player&#039;s screen.&lt;br /&gt;
:*&#039;&#039;&#039;SILENTNOBENEFIT&#039;&#039;&#039;: only has effect in conjunction with &#039;&#039;&#039;ALWAYSPICKUP&#039;&#039;&#039;: if picked up when unneeded, all user feedback (message, sound, flash) is suppressed.&lt;br /&gt;
:*&#039;&#039;&#039;COMMERCIALONLY&#039;&#039;&#039;: only relevant for demo compatibility, marks the item as DOOM 2 (the &amp;quot;commercial&amp;quot; release) specific. The megasphere has this flag. Not needed for new mods.&lt;br /&gt;
:*&#039;&#039;&#039;GIVESBACKPACKAMMO&#039;&#039;&#039;: commonly used by the entries with the &#039;&#039;&#039;BackpackItem&#039;&#039;&#039; in &#039;&#039;&#039;effects&#039;&#039;&#039; (which doubles player&#039;s ammo capacity) to also provide the backpack ammo amount for each available ammo &#039;&#039;&#039;artifact&#039;&#039;&#039; in the game.&lt;br /&gt;
*&#039;&#039;&#039;changeweapon&#039;&#039;&#039;&lt;br /&gt;
:Default: nothing.&lt;br /&gt;
:If set, causes the item to change player&#039;s current weapon to the designated one whenever picked up. Expects a [[weaponinfo]] definition. This is based on how the [[Doom Wiki:Berserk|Berserk pack]] acts in DOOM.&lt;br /&gt;
:Example: &amp;lt;code&amp;gt;changeweapon Fist&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;message&#039;&#039;&#039;&lt;br /&gt;
:Default: no message.&lt;br /&gt;
:What message to display at the top of the view when picking up the item. This doesn&#039;t cover special cases such as the medikit low health message or the special BFG9000 variants.&lt;br /&gt;
:Example: &amp;lt;code&amp;gt;message &amp;quot;picked up an item.&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;sound&#039;&#039;&#039;&lt;br /&gt;
:Default: none&lt;br /&gt;
:Sets the [[sound]] to play when picking up the item.&lt;br /&gt;
:Example: &amp;lt;code&amp;gt;sound itemup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: the &#039;&#039;&#039;pfxname&#039;&#039;&#039; field (which you may encounter in the base EDF) is only needed for compatibility with a deprecated feature.&lt;br /&gt;
&lt;br /&gt;
==Effect definitions==&lt;br /&gt;
From a &#039;&#039;&#039;pickupeffect&#039;&#039;&#039;&#039;s &#039;&#039;&#039;effects&#039;&#039;&#039; field, one can add from many different types of item effect definitions:&lt;br /&gt;
&lt;br /&gt;
===Base definitions===&lt;br /&gt;
&lt;br /&gt;
====artifact====&lt;br /&gt;
An artifact is an item which, when collected, goes into the player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
 artifact &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  amount         &amp;lt;int&amp;gt; // amount gained with one pickup&lt;br /&gt;
  maxamount      &amp;lt;int&amp;gt; // max amount that can be carried in inventory&lt;br /&gt;
  interhubamount &amp;lt;int&amp;gt; // max amount carryable between levels in different hubs;&lt;br /&gt;
                       // -1 if this field should not apply at all&lt;br /&gt;
  sortorder      &amp;lt;int&amp;gt; // key used for sorting the player&#039;s inventory&lt;br /&gt;
  icon           &amp;lt;str&amp;gt; // name of icon graphic for invbar&lt;br /&gt;
  usesound       &amp;lt;str&amp;gt; // sound made when item is used&lt;br /&gt;
  useeffect      &amp;lt;str&amp;gt; // name of item effect to use for activation&lt;br /&gt;
  useaction      &amp;lt;action function&amp;gt; // codepointer and arguments called (e.g. A_GauntletAttack(1))&lt;br /&gt;
  &lt;br /&gt;
  [+-]undroppable      // if +, cannot be dropped from inventory&lt;br /&gt;
  [+-]invbar           // if +, appears in invbar; otherwise, invisible&lt;br /&gt;
  [+-]keepdepleted     // if +, will remain in inventory with amount of zero&lt;br /&gt;
  [+-]fullamountonly   // if +, cannot pickup unless full amount is needed&lt;br /&gt;
  [+-]noshareware      // if +, non-shareware&lt;br /&gt;
  &lt;br /&gt;
  // artifacttype determines what sort of artifact this is.  &lt;br /&gt;
  artifacttype   &amp;lt;str&amp;gt; // &amp;quot;Normal&amp;quot;, &amp;quot;Ammo&amp;quot;, &amp;quot;Key&amp;quot;, &amp;quot;Puzzle&amp;quot;, &amp;quot;Power&amp;quot;, &amp;quot;Weapon&amp;quot;,&lt;br /&gt;
                       // or &amp;quot;Quest&amp;quot;&lt;br /&gt;
                       &lt;br /&gt;
  // The following fields apply only to certain artifact types. They have no&lt;br /&gt;
  // effect if specified on other types.&lt;br /&gt;
  &lt;br /&gt;
  // Ammo&lt;br /&gt;
  ammo.backpackamount    &amp;lt;int&amp;gt; // amount of this ammo type given by a Backpack&lt;br /&gt;
  ammo.backpackmaxamount &amp;lt;int&amp;gt; // max amount after collecting a Backpack&lt;br /&gt;
 &lt;br /&gt;
  // Autouse health: this applies only for health-effect artifacts.&lt;br /&gt;
  // If enabled, game will automatically trigger when player is about to die,&lt;br /&gt;
  // to restore health and keep them alive.&lt;br /&gt;
 &lt;br /&gt;
  // &amp;quot;none&amp;quot; or &amp;quot;heretic&amp;quot;. If &amp;quot;heretic&amp;quot;, this is enabled and works like Heretic&lt;br /&gt;
  autouse.health.mode     &amp;lt;option&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  // Optional restrictions. If omitted, there is no game restriction. Otherwise,&lt;br /&gt;
  // it can be a &amp;quot;|&amp;quot;-joined combination of &amp;quot;baby&amp;quot; and &amp;quot;deathmatch&amp;quot;. Then the&lt;br /&gt;
  // autouse will happen IF ANY of the given conditions are met.&lt;br /&gt;
  autouse.health.restrict &amp;lt;flags&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====healtheffect====&lt;br /&gt;
A health effect gives the player health in one of many possible ways. &lt;br /&gt;
 healtheffect &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  amount     &amp;lt;int&amp;gt; // amount of health to give&lt;br /&gt;
  maxamount  &amp;lt;int&amp;gt; // max amount this item can health to.&lt;br /&gt;
  lowmessage &amp;lt;str&amp;gt; // alternate message to give instead of pickupfx message when&lt;br /&gt;
                   // health is less than amount; if starts with $, is a BEX mnemonic.&lt;br /&gt;
  &lt;br /&gt;
  [+-]alwayspickup  // if +, item is picked up even when unneeded (e.g. Health Bonus)&lt;br /&gt;
  [+-]sethealth     // if +, item SETS health rather than adding to it (e.g. Megasphere)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====armoreffect====&lt;br /&gt;
An armor effect defines the properties of player armor &lt;br /&gt;
 armoreffect &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  saveamount    &amp;lt;int&amp;gt; // amount of armor given&lt;br /&gt;
  savefactor    &amp;lt;int&amp;gt; // numerator of fraction determining save percentage&lt;br /&gt;
  savedivisor   &amp;lt;int&amp;gt; // denominator of fraction determining save percentage&lt;br /&gt;
  maxsaveamount &amp;lt;int&amp;gt; // max amount his item can give; if player has greater&lt;br /&gt;
                      // armor, the item cannot be picked up at all&lt;br /&gt;
                      &lt;br /&gt;
  [+-]alwayspickup    // item is picked up even when unneeded (e.g. Armor Bonus)&lt;br /&gt;
  [+-]additive        // if +, adds to the current amount of armor&lt;br /&gt;
  [+-]setabsorption   // if +, sets absorption values (savefactor &amp;amp; savedivisor)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;saveamount&#039;&#039;&#039; currently worn by a player can be queried at playtime using the ACS function [[PlayerArmorPoints]].&lt;br /&gt;
&lt;br /&gt;
====ammoeffect====&lt;br /&gt;
Ammo givers give an Ammo type artifact to the player.&lt;br /&gt;
 ammoeffect &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  ammo       &amp;lt;str&amp;gt; // Name of an Ammo-type artifact definition&lt;br /&gt;
  amount     &amp;lt;int&amp;gt; // Amount to give for an ordinary pickup&lt;br /&gt;
  dropamount &amp;lt;int&amp;gt; // Amount to give if dropped by an enemy&lt;br /&gt;
  &lt;br /&gt;
  [+-]ignoreskill  // if +, does not double on skills that give double ammo  &lt;br /&gt;
 }&lt;br /&gt;
====powereffect====&lt;br /&gt;
Power givers buff the player with a temporary or level-permanent effect. They&#039;re typical of artifacts such as the radiation suit or the blur sphere.&lt;br /&gt;
 powereffect &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  duration   &amp;lt;int&amp;gt;  // Length of time to last in tics&lt;br /&gt;
  type       &amp;lt;str&amp;gt;  // Name of power to give&lt;br /&gt;
  &lt;br /&gt;
  [+-]additivetime  // if +, adds to current duration&lt;br /&gt;
  [+-]permanent     // if +, lasts forever  &lt;br /&gt;
  [+-]overridesself // if +, getting the power again while still under its influence is allowed&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039; can be any of the following:&lt;br /&gt;
*&#039;&#039;&#039;PowerAllmap&#039;&#039;&#039;: Doom computer area map, Heretic map scroll&lt;br /&gt;
*&#039;&#039;&#039;PowerFlight&#039;&#039;&#039;: Heretic wings of wrath&lt;br /&gt;
*&#039;&#039;&#039;PowerGhost&#039;&#039;&#039;: Heretic shadow sphere&lt;br /&gt;
*&#039;&#039;&#039;PowerInvulnerable&#039;&#039;&#039;: Doom invulnerability artifact, Heretic ring of invulnerability&lt;br /&gt;
*&#039;&#039;&#039;PowerIronFeet&#039;&#039;&#039;: Doom radiation shielding suit&lt;br /&gt;
*&#039;&#039;&#039;PowerLightAmp&#039;&#039;&#039;: Doom light amplification visor&lt;br /&gt;
*&#039;&#039;&#039;PowerPartialInvisibility&#039;&#039;&#039;: Doom blur artifact&lt;br /&gt;
*&#039;&#039;&#039;PowerSilent&#039;&#039;&#039;: Eternity silencer&lt;br /&gt;
*&#039;&#039;&#039;PowerStrength&#039;&#039;&#039;: Doom berserk pack&lt;br /&gt;
*&#039;&#039;&#039;PowerTorch&#039;&#039;&#039;: Heretic torch&lt;br /&gt;
*&#039;&#039;&#039;PowerTotalInvisibility&#039;&#039;&#039;: Eternity total invisibility&lt;br /&gt;
*&#039;&#039;&#039;PowerWeaponLevel2&#039;&#039;&#039;: Heretic tome of power&lt;br /&gt;
&lt;br /&gt;
====weapongiver====&lt;br /&gt;
Weapon givers give a Weapon type artifact to the player, and optionally any number of Ammo artifact types.&lt;br /&gt;
 weapongiver &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  weapon     &amp;lt;str&amp;gt; // Name of a weaponinfo to give to the player&lt;br /&gt;
  // Note that you can specify as many ammogiven properties as you want in a single weapongiver&lt;br /&gt;
  ammogiven  &amp;lt;ammo&amp;gt;, &amp;lt;amount&amp;gt; [, &amp;lt;dropamount&amp;gt; [, &amp;lt;dmamount&amp;gt; [, &amp;lt;coopweaponsstay&amp;gt;]]] // Ammo type artifact given, and the amounts&lt;br /&gt;
                                                                                      // given based on how it was picked up. If the&lt;br /&gt;
                                                                                      // last three are left blank, only &amp;quot;amount&amp;quot; is used.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Delta structures===&lt;br /&gt;
The following can be used to replace already defined effects. They can be cascaded (i.e. any number of loaded mods can change the previous definition and all its deltas). For each of them, the &#039;&#039;&#039;name&#039;&#039;&#039; field represents the name of the base to modify. They are the following:&lt;br /&gt;
 healthdelta&lt;br /&gt;
 {&lt;br /&gt;
  name &amp;lt;name&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 armordelta&lt;br /&gt;
 {&lt;br /&gt;
  name &amp;lt;name&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 ammodelta&lt;br /&gt;
 {&lt;br /&gt;
  name &amp;lt;name&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 powerdelta&lt;br /&gt;
 {&lt;br /&gt;
  name &amp;lt;name&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 weapongiverdelta&lt;br /&gt;
 {&lt;br /&gt;
  name &amp;lt;name&amp;gt;&lt;br /&gt;
  clearammogiven   // if added, removes the &amp;quot;given ammo&amp;quot; definitions&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 artifactdelta&lt;br /&gt;
 {&lt;br /&gt;
  name &amp;lt;name&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[[Category:EDF]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=PlayerArmorPoints&amp;diff=6411</id>
		<title>PlayerArmorPoints</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=PlayerArmorPoints&amp;diff=6411"/>
		<updated>2026-04-23T05:42:18Z</updated>

		<summary type="html">&lt;p&gt;Printz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ACSFunction|description=Returns activator&#039;s armor points.&lt;br /&gt;
|usage=&#039;&#039;int&#039;&#039; PlayerArmorPoints()&lt;br /&gt;
|return=The value of the armor.&lt;br /&gt;
|notes=This only returns the armor value (i.e. what shows up as &amp;quot;percentage&amp;quot; on the status bar in Doom), not also the armor toughness. Only players have armor.&lt;br /&gt;
|id=ACS internal&lt;br /&gt;
|seealso=&lt;br /&gt;
*[[EDF_item_effects_and_inventory#armoreffect|EDF armor effects]]}}&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Polyobject&amp;diff=6410</id>
		<title>Polyobject</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Polyobject&amp;diff=6410"/>
		<updated>2026-04-21T20:59:47Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Method 2: The Polyobj_ExplicitLine Special */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PolyObjects are special sets of one-sided linedefs which, unlike any other lines, can be moved on the map during gameplay. Unlike the Hexen implementation of PolyObjects, Eternity does not restrict these objects to one per subsector, and they are also allowed to move any distance from their spawn point, even across subsector boundaries. &lt;br /&gt;
&lt;br /&gt;
PolyObjects fully clip normal objects such as the player and enemies, optionally doing crushing damage depending upon the type of spawn spot used. They also block bullet tracers and monsters&#039; lines of sight. They do not, however, clip sound propagation, so it may be necessary to use sound blocking lines near areas where PolyObjects are meant to function as a normal wall until they move. &lt;br /&gt;
&lt;br /&gt;
Although Eternity does allow PolyObjects to move between different subsectors, this will only work properly if the subsectors on both sides of a line have the same properties (floor &amp;amp; ceiling heights, light level, and flat). However, since the implementation of [[dynaseg]]s, Eternity does not require a &amp;quot;PolyObject-aware&amp;quot; node builder. &lt;br /&gt;
&lt;br /&gt;
Finally, Eternity allows PolyObjects to be used in DOOM-format maps via the use of [[ExtraData]]. See the subsections below for more information on how to create and move PolyObjects. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Polyobjects must be convex, to be rendered properly.&lt;br /&gt;
&lt;br /&gt;
{{Backto|Linedef types}}&lt;br /&gt;
&lt;br /&gt;
==Creating PolyObjects==&lt;br /&gt;
&lt;br /&gt;
PolyObjects are a combination of a set of 1S lines, which are typically placed in a &amp;quot;control sector&amp;quot; area outside of the main map, and exactly two mapthings: one spawn spot, and one anchor point. There are two different methods for grouping lines into a PolyObject. &lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Method 1: The &amp;lt;code&amp;gt;Polyobj_StartLine&amp;lt;/code&amp;gt; Special&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
:The &amp;lt;code&amp;gt;348:Polyobj_StartLine(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;mirror_id&#039;&#039;&#039;)&amp;lt;/code&amp;gt; special marks the first line in a PolyObject which is made up of a cyclic set of linedefs (that is, each line &amp;quot;points toward&amp;quot; the next line, ending at the first vertex of the first line). &lt;br /&gt;
&lt;br /&gt;
:Diagrammatic Example: &lt;br /&gt;
:[[File:Polyobjects_basic.png]]&lt;br /&gt;
:Assume that the linedef &#039;&#039;&#039;A&#039;&#039;&#039; is assigned the &amp;lt;code&amp;gt;Polyobj_StartLine&amp;lt;/code&amp;gt; special and has argument #1 set to &amp;quot;1&amp;quot; -- this is its &#039;&#039;&#039;PolyObject ID number&#039;&#039;&#039;, which must be unique amongst all on the map, and must be a number greater than zero. &lt;br /&gt;
&lt;br /&gt;
:Starting from line &#039;&#039;&#039;A&#039;&#039;&#039;, the engine will go from vertex to vertex, adding the first line found which shares the current line&#039;s second vertex as its first vertex. In this example, since the object is closed as is required, the process will end at the first vertex of line &#039;&#039;&#039;A&#039;&#039;&#039;, and there will be four lines in the PolyObject (note that unlike Hexen, there is NO limit to the number of lines that can be placed in one PolyObject). &lt;br /&gt;
&lt;br /&gt;
:Now, once the lines are added, it is necessary to define the control objects. Points &#039;&#039;&#039;B&#039;&#039;&#039; and &#039;&#039;&#039;C&#039;&#039;&#039; are the two required objects: &lt;br /&gt;
:* &#039;&#039;&#039;B&#039;&#039;&#039;: This is the PolyObject&#039;s anchor point (type EEPolyObjAnchor with DoomEd #9300). It defines the point relative to which all the lines in the PolyObject will be translated to the spawn point. This object&#039;s angle must be set to the same value as the StartLine&#039;s first argument (the &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039;). There must be one and only one of these objects for each &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039;. &lt;br /&gt;
:* &#039;&#039;&#039;C&#039;&#039;&#039;: This is the PolyObject&#039;s spawn point (one of EEPolyObjSpawnSpot [9301] or EEPolyObjSpawnSpotCrush [9302]). It defines the point where the PolyObject will initially spawn on the map. The anchor point will be translated to this exact location, and all lines in the PolyObject will maintain their relative positions to it. This object must also have its angle field set to the same value as both the StartLine&#039;s first argument and the anchor point&#039;s angle field. There must be one and only one of these objects for each PolyObject ID. Use 9302 to cause the PolyObject to do crushing damage to things that block it while it is in motion. &lt;br /&gt;
&lt;br /&gt;
:Note that when you use this method, the other lines belonging to the PolyObject can be given their own line specials, including ones which affect the PolyObject itself. When the player presses the PolyObject, the specials will work as expected. &lt;br /&gt;
&lt;br /&gt;
:The complete arguments to &amp;lt;code&amp;gt;Polyobj_StartLine(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;mirror_id&#039;&#039;&#039;)&amp;lt;/code&amp;gt; are as follows: &lt;br /&gt;
:* &#039;&#039;polyobj_id&#039;&#039; : the unique ID number (greater than zero) of the PolyObject &lt;br /&gt;
:* &#039;&#039;mirror_id&#039;&#039; : the ID number of a PolyObject that you want to mirror every action that affects this PolyObject. This number cannot be the same as the PolyObject&#039;s own ID. &lt;br /&gt;
&lt;br /&gt;
:In order to use this line special in a DOOM-format map, it is necessary to use [[ExtraData]]. In that case, you must give the line you want to have the Polyobj_StartLine special the ExtraData linedef control special (#270) instead, and then specify Polyobj_StartLine and its arguments in its corresponding ExtraData linedef record. &lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Method 2: The &amp;lt;code&amp;gt;Polyobj_ExplicitLine&amp;lt;/code&amp;gt; Special&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
:The &amp;lt;code&amp;gt;349:Polyobj_ExplicitLine(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;index&#039;&#039;&#039;, &#039;&#039;&#039;mirror_id&#039;&#039;&#039;)&amp;lt;/code&amp;gt; special demarcates every line that will be added to a PolyObject and the exact order in which the lines will be added. This affords a bit more flexibility in the construction of PolyObjects at the price of not allowing any other line specials to be placed on the object itself. &lt;br /&gt;
&lt;br /&gt;
:Diagrammatic Example: &lt;br /&gt;
:[[File:Polyobjects_adv.png]]&lt;br /&gt;
:Assume that the linedefs labeled 1 through 4 are assigned (via [[ExtraData]]) the &amp;lt;code&amp;gt;Polyobj_ExplicitLine&amp;lt;/code&amp;gt; special, all have argument &#039;&#039;&#039;#1&#039;&#039;&#039; set to &amp;quot;1&amp;quot; -- this is its PolyObject ID number (which must be unique amongst all on the map, and must be a number greater than zero), and argument &#039;&#039;&#039;#2&#039;&#039;&#039; set also to whatever their tag is (in this case again it&#039;s &#039;&#039;1&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
:The game engine will search through all linedefs in the entire map for ones with the current &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039; in argument &#039;&#039;&#039;#1&#039;&#039;&#039; and a value greater than zero in argument &#039;&#039;&#039;#2&#039;&#039;&#039;. The lines will be collected and then sorted by the &#039;&#039;&#039;LineDef id&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
:Now, once the lines are added, it is necessary to define the control objects. This is exactly the same as it is for the &amp;lt;code&amp;gt;StartLine(...)&amp;lt;/code&amp;gt; special above. &lt;br /&gt;
:* &#039;&#039;&#039;B&#039;&#039;&#039;: This is the PolyObject&#039;s anchor point (type EEPolyObjAnchor with DoomEd #9300). It defines the point relative to which all the lines in the PolyObject will be translated to the spawn point. This object&#039;s angle must be set to the same value as the &amp;lt;code&amp;gt;ExplicitLines&#039;&amp;lt;/code&amp;gt; first argument (the &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039;). There must be one and only one of these objects for each &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039;. &lt;br /&gt;
:* &#039;&#039;&#039;C&#039;&#039;&#039;: This is the PolyObject&#039;s spawn point (one of EEPolyObjSpawnSpot [9301] or EEPolyObjSpawnSpotCrush [9302]). It defines the point where the PolyObject will initially spawn on the map. The anchor point will be translated to this exact location, and all lines in the PolyObject will maintain their relative positions to it. This object must also have its angle field set to the same value as both the ExplicitLines&#039; first argument and the anchor point&#039;s angle field. There must be one and only one of these objects for each &#039;&#039;&#039;PolyObject ID&#039;&#039;&#039;. Use 9302 to cause the PolyObject to do crushing damage to things that block it while it is in motion. &lt;br /&gt;
&lt;br /&gt;
:The complete arguments to &amp;lt;code&amp;gt;Polyobj_ExplicitLine(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;index&#039;&#039;&#039;, &#039;&#039;&#039;mirror_id&#039;&#039;&#039;)&amp;lt;/code&amp;gt; are as follows: &lt;br /&gt;
:* &#039;&#039;polyobj_id&#039;&#039; : the unique ID number (greater than zero) of the PolyObject &lt;br /&gt;
:* &#039;&#039;index&#039;&#039; : specifies the order in which the line will be added to the PolyObject. This number should be unique amongst all lines to be added to the same object, and must be a value greater than zero. &lt;br /&gt;
:* &#039;&#039;mirror_id&#039;&#039; : the ID number of a PolyObject that you want to mirror every action that affects this PolyObject. This number cannot be the same as the PolyObject&#039;s own ID. &lt;br /&gt;
&lt;br /&gt;
:In order to use this line special in a DOOM-format map, it is necessary to use ExtraData. In that case, you can either give the lines you want to have the Polyobj_ExplicitLine special the ExtraData linedef control special (#270) instead, and then specify Polyobj_ExplicitLine and its arguments in all the corresponding ExtraData linedef records; or simply use the line special normally, and specify the ExtraData record number in the linedef&#039;s tag, specifying only the arguments inside the ExtraData record.&lt;br /&gt;
&lt;br /&gt;
===Note===&lt;br /&gt;
As of EE 3.37.00, thing type 9303 is available, which is similar to the ZDoom damaging polyobject type.&lt;br /&gt;
&lt;br /&gt;
==Moving PolyObjects==&lt;br /&gt;
&lt;br /&gt;
There are two types of basic motion which PolyObjects can currently undergo: translation and rotation. Using &amp;quot;override&amp;quot; actions, it is possible to combine the two to have a PolyObject which rotates while moving in the xy plane. &lt;br /&gt;
&lt;br /&gt;
[[File:Polyobject_rotating.gif]]&lt;br /&gt;
&lt;br /&gt;
===Translating PolyObjects===&lt;br /&gt;
&lt;br /&gt;
To move a PolyObject in the xy plane, use one of the following line specials: &lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_Move(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;speed&#039;&#039;&#039;, &#039;&#039;&#039;angle&#039;&#039;&#039;, &#039;&#039;&#039;dist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_OR_Move(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;speed&#039;&#039;&#039;, &#039;&#039;&#039;angle&#039;&#039;&#039;, &#039;&#039;&#039;dist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both of these line specials use the same arguments:&lt;br /&gt;
* &#039;&#039;polyobj_id&#039;&#039; : Specifies which PolyObject to intially move. If the object is already moving, nothing will happen unless the action is Polyobj_OR_Move. If this object has a mirror, the same action will be recursively applied to every mirror PolyObject, reversing the angle of movement for each subsequent mirror. &lt;br /&gt;
* &#039;&#039;speed&#039;&#039; : Speed of the motion in eighths of a unit per tic. &lt;br /&gt;
* &#039;&#039;angle&#039;&#039; : Byte angle specifying the direction of motion. To convert from degrees to byte angles, use this formula: byteangle = (degrees * 256) / 360. Round or chop the result to an integer. 0 means East, 64 means North, 128 means West, and 192 means South. &lt;br /&gt;
* &#039;&#039;dist&#039;&#039; : The total distance to move the object in units. &lt;br /&gt;
&lt;br /&gt;
All PolyObjects will inflict thrust on objects which block them with force proportional to the speed of motion. If the PolyObject was spawned with the EEPolyObjSpawnSpotCrush object (DoomEd num 9302), then if the object does not fit at the location it is being pushed toward, it will be damaged 3 hitpoints per tic (105 damage per second). &lt;br /&gt;
&lt;br /&gt;
===Rotating PolyObjects===&lt;br /&gt;
&lt;br /&gt;
To rotate a PolyObject, use one of the following line specials: &lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_RotateRight(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;aspeed&#039;&#039;&#039;, &#039;&#039;&#039;adist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_OR_RotateRight(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;aspeed&#039;&#039;&#039;, &#039;&#039;&#039;adist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_RotateLeft(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;aspeed&#039;&#039;&#039;, &#039;&#039;&#039;adist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Polyobj_OR_RotateLeft(&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;,  &#039;&#039;&#039;aspeed&#039;&#039;&#039;, &#039;&#039;&#039;adist&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All these line specials use the same arguments:&lt;br /&gt;
* &#039;&#039;polyobj_id&#039;&#039; : Specifies which PolyObject to initially rotate. If the object is already moving, nothing will happen unless the action is Polyobj_OR_RotateRight or Polyobj_OR_RotateLeft. If this object has a mirror, the same action will be recursively applied to every mirror PolyObject, reversing the direction of rotation for each subsequent mirror. &lt;br /&gt;
* &#039;&#039;aspeed&#039;&#039; : Angular speed of the rotation in byte angles per tic. Same as for the &amp;quot;angle&amp;quot; parameter to Move actions. &lt;br /&gt;
* &#039;&#039;adist&#039;&#039; : Angular distance to rotate in byte angles. Same as for aspeed, except with two special caveats: &lt;br /&gt;
&lt;br /&gt;
The byte angle value 0 (zero) means to rotate exactly 360 degrees. &lt;br /&gt;
&lt;br /&gt;
The byte angle value 255 means to rotate perpetually. This type of action never ends and thus only override actions can subsequently be applied to the PolyObject.&lt;br /&gt;
&lt;br /&gt;
===PolyObject Examples===&lt;br /&gt;
====[https://s3-eu-west-1.amazonaws.com/eternity/polyobjects.wad PolyObject Demo]====&lt;br /&gt;
A demonstration of both rotating and translating PolyObjects. Plays on &#039;&#039;&#039;Doom 2&#039;&#039;&#039; / &#039;&#039;&#039;Map01&#039;&#039;&#039;. The map is linked to an [[ExtraData]] lump (via [[EMAPINFO]]).&lt;br /&gt;
&lt;br /&gt;
It is recommended that you open the Demo WAD in a WAD manager program like &#039;&#039;&#039;SLADE3&#039;&#039;&#039; or &#039;&#039;&#039;XWE&#039;&#039;&#039; to read the &#039;&#039;&#039;ExtraData&#039;&#039;&#039; and &#039;&#039;&#039;ACS&#039;&#039;&#039; scripts together with provided comments. For example this script explains how LineDefs are configured for a manually operated rotating PolyObject:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//===============================&lt;br /&gt;
//= MANUALLY ROTATING POLYOBJECT&lt;br /&gt;
//=============================&lt;br /&gt;
&lt;br /&gt;
// This PolyObject doesn&#039;t move unless activated by a a nearby switch.&lt;br /&gt;
linedef {&lt;br /&gt;
  recordnum = 2&lt;br /&gt;
  special = PolyObj_StartLine&lt;br /&gt;
  args = { 2 }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
linedef {&lt;br /&gt;
  recordnum = 3&lt;br /&gt;
  extflags = &amp;quot;use player&amp;quot; // Defines how the LineDef action is activated.&lt;br /&gt;
                          // The lack of &amp;quot;repeat&amp;quot; flag means it&#039;s a one-time&lt;br /&gt;
                          // action.&lt;br /&gt;
  &lt;br /&gt;
  special = Polyobj_RotateRight&lt;br /&gt;
  args = { 2, 2, 255 }  // Starts Rotating PolyObject with PolyID: 2&lt;br /&gt;
                        // at a speed of 2 units and angular distance&lt;br /&gt;
                        // of 255 units - which means it&#039;ll rotate&lt;br /&gt;
                        // continuously.&lt;br /&gt;
}  (...)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====[https://s3-eu-west-1.amazonaws.com/eternity/polyobjects_adv.wad PolyObject Advanced Demo]====&lt;br /&gt;
A demonstration of rotating and translating PolyObjects made with &amp;lt;code&amp;gt;PolyObj_ExplicitLine()&amp;lt;/code&amp;gt; Plays on &#039;&#039;&#039;Doom 2&#039;&#039;&#039; / &#039;&#039;&#039;Map01&#039;&#039;&#039;. The map is linked to an [[ExtraData]] lump (via [[EMAPINFO]]). It shows how more advanced PolyObjects can be constructed and moved to fake 3D objects. It also includes PolyObject Doors discussed in the next section of this article.&lt;br /&gt;
&lt;br /&gt;
It is recommended that you play go through  the first Demo in the series and open the Demo WAD in a WAD manager program like &#039;&#039;&#039;SLADE3&#039;&#039;&#039; or &#039;&#039;&#039;XWE&#039;&#039;&#039; to read the &#039;&#039;&#039;ExtraData&#039;&#039;&#039; and &#039;&#039;&#039;ACS&#039;&#039;&#039; scripts together with provided comments.&lt;br /&gt;
&lt;br /&gt;
==PolyObject Doors==&lt;br /&gt;
There are two distinct types of actions provided to allow PolyObjects to function as doors: swinging and sliding. There are no override versions of door actions, and applying other overrides to currently moving PolyObject doors will most likely cause the doors to malfunction and move erratically. &lt;br /&gt;
&lt;br /&gt;
All PolyObject doors accept a delay parameter, and this specifies the amount of time the door will wait before closing. A door which is closing will reopen if blocked by an object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Swinging PolyObject Door===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Poly_swingdoor_schema.png|200px]] || [[Image:Poly_swigning_door.gif]]&lt;br /&gt;
|-&lt;br /&gt;
| PolyObject swinging door schema || PolyObject swinging door&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Polyobj_DoorSwing (&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;aspeed&#039;&#039;&#039;, &#039;&#039;&#039;adist&#039;&#039;&#039;, &#039;&#039;&#039;delay&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This action creates a swinging door from a PolyObject and takes the following arguments: &lt;br /&gt;
:* &#039;&#039;polyobj_id&#039;&#039; : The ID number of PolyObject to affect. Mirroring works for doors as well and is the most common use for PolyObject mirroring. &lt;br /&gt;
:* &#039;&#039;aspeed&#039;&#039; : Angular speed in byte angles per tic. &lt;br /&gt;
:* &#039;&#039;adist&#039;&#039; : Angular distance to rotate when opening, and again but in the opposite direction when closing. &lt;br /&gt;
:* &#039;&#039;delay&#039;&#039; : Amount of time before the door attempts to close after fully opening in tics. If the door is forced to reopen due to being blocked, it will also wait this amount of time before once again closing. &lt;br /&gt;
Swinging doors currently only rotate left. A right-rotating swinging door special will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
===Sliding PolyObject Door===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Poly_slidedoor_schema.png|200px]] || [[Image:Poly_sliding_door.gif|180px]]&lt;br /&gt;
|-&lt;br /&gt;
| PolyObject sliding door schema || PolyObject sliding door&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Polyobj_DoorSlide (&#039;&#039;&#039;polyobj_id&#039;&#039;&#039;, &#039;&#039;&#039;speed&#039;&#039;&#039;, &#039;&#039;&#039;angle&#039;&#039;&#039;, &#039;&#039;&#039;dist&#039;&#039;&#039;, &#039;&#039;&#039;delay&#039;&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:This action creates a sliding door from a PolyObject and takes the following arguments: &lt;br /&gt;
:* &#039;&#039;polyobj_id&#039;&#039; : The ID number of PolyObject to affect. Mirroring works for doors as well and is the most common use for PolyObject mirroring. &lt;br /&gt;
:* &#039;&#039;speed&#039;&#039; : Speed of the door&#039;s opening and closing in eighths of a unit per tic. &lt;br /&gt;
:* &#039;&#039;angle&#039;&#039; : Byte angle of door&#039;s initial motion. This angle is reversed when the door closes. &lt;br /&gt;
:* &#039;&#039;dist&#039;&#039; : Distance the door moves when opening, and again when closing, in units. &lt;br /&gt;
:* &#039;&#039;delay&#039;&#039; : Amount of time before the door attempts to close after fully opening in tics. If the door is forced to reopen due to being blocked, it will also wait this amount of time before once again closing. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===PolyObject Door Examples===&lt;br /&gt;
====[https://s3-eu-west-1.amazonaws.com/eternity/polyobj_doors.wad PolyObject Doors Demo]====&lt;br /&gt;
A demonstration of both swinging and sliding doors, mirrored and single. Plays on &#039;&#039;&#039;Doom 2&#039;&#039;&#039; / &#039;&#039;&#039;Map01&#039;&#039;&#039;. The map is linked to an [[ExtraData]] lump (via [[EMAPINFO]]).&lt;br /&gt;
&lt;br /&gt;
It is recommended that you open the Demo WAD in a WAD manager program like &#039;&#039;&#039;SLADE3&#039;&#039;&#039; or &#039;&#039;&#039;XWE&#039;&#039;&#039; to read the &#039;&#039;&#039;ExtraData&#039;&#039;&#039; scripts together with provided comments. For example the first script explains how LineDefs are configured for a single swinging door:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//=============================&lt;br /&gt;
//= BASIC SINGLE SWINGING DOOR&lt;br /&gt;
//===========================&lt;br /&gt;
linedef {&lt;br /&gt;
  recordnum = 1 // corresponds to a LineDef with action: 270, tag: 1&lt;br /&gt;
  &lt;br /&gt;
  special = PolyObj_StartLine // this defines the current LineDef as a&lt;br /&gt;
                              // starting point for the PolyObject&lt;br /&gt;
                &lt;br /&gt;
  args = { 1 }  // since this is a very basic PolyObj, it requires only one&lt;br /&gt;
                // argument (it&#039;s not to be confused with LineDef / Sector tag)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
linedef {&lt;br /&gt;
  recordnum = 2 // corresponds to a LineDef with action: 270, tag: 2&lt;br /&gt;
  &lt;br /&gt;
  extflags = &amp;quot;use player repeat&amp;quot; // describes how the LineDef is activated&lt;br /&gt;
  &lt;br /&gt;
  special = PolyObj_DoorSwing&lt;br /&gt;
  args = { 1,20,64,160 } // swing the door with PolyId: 1, AngularSpeed: 20&lt;br /&gt;
                         // AngularDeistance 64 units (90 deg),&lt;br /&gt;
                         // Delay: 160 tics&lt;br /&gt;
}  (...)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Polyobjects with portals==&lt;br /&gt;
:See [[Linked_portals#Polyobject_portals | Polyobject portals]]&lt;br /&gt;
&lt;br /&gt;
[[category:Editing reference]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=UMAPINFO&amp;diff=6409</id>
		<title>UMAPINFO</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=UMAPINFO&amp;diff=6409"/>
		<updated>2026-04-05T14:49:17Z</updated>

		<summary type="html">&lt;p&gt;Printz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eternity supports the common UMAPINFO lump, a standard defined in PrBoom+um. See its [https://github.com/kraflab/umapinfo/blob/master/docs/spec.md specification]. Make sure to adhere to the strict standard if you want the maps to be playable on all implementing ports. Otherwise, if you make the mod for Eternity, [[EMAPINFO]] is more recommended, since it contains the entire feature set.&lt;br /&gt;
&lt;br /&gt;
==UMAPINFO - EMAPINFO equivalence table==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!UMAPINFO property&lt;br /&gt;
!EMAPINFO equivalent&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;levelname&#039;&#039;&#039;, &#039;&#039;&#039;label&#039;&#039;&#039;||Both of these influence &#039;&#039;&#039;levelname&#039;&#039;&#039; and &#039;&#039;&#039;inter-levelname&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;levelpic&#039;&#039;&#039;||&#039;&#039;&#039;levelpic&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;next&#039;&#039;&#039;||&#039;&#039;&#039;nextlevel&#039;&#039;&#039;. Beware that omitting &#039;&#039;&#039;next&#039;&#039;&#039; in UMAPINFO will reset &#039;&#039;&#039;nextlevel&#039;&#039;&#039; to the next numbered map (if following the ExMy/MAPxy format).&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;nextsecret&#039;&#039;&#039;||&#039;&#039;&#039;nextsecret&#039;&#039;&#039;. Same situations as with UMAPINFO &#039;&#039;&#039;next&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;skytexture&#039;&#039;&#039;||&#039;&#039;&#039;skyname&#039;&#039;&#039;. For more advanced sky effects, you need EMAPINFO.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;music&#039;&#039;&#039;||&#039;&#039;&#039;music&#039;&#039;&#039;. Beware that in UMAPINFO you must specify the entire lump length (including D_ or MUS_, based on game).&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;exitpic&#039;&#039;&#039;||&#039;&#039;&#039;interpic&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;enterpic&#039;&#039;&#039;||&#039;&#039;&#039;enterpic&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;partime&#039;&#039;&#039;||&#039;&#039;&#039;partime&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;endgame = false&#039;&#039;&#039;||&lt;br /&gt;
:&#039;&#039;&#039;finaletype text&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;endofgame false&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;finale-early false&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;endgame = true&#039;&#039;&#039;||Effect depends on the current episode (if map lump is named in a standard manner).&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;endpic&#039;&#039;&#039;||&lt;br /&gt;
:&#039;&#039;&#039;endofgame false&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;finaletype endpic&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;endpic&#039;&#039;&#039; &#039;&#039;lump&#039;&#039;&lt;br /&gt;
It also enables the finale for both the normal and secret exits.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;endbunny = true&#039;&#039;&#039;||&lt;br /&gt;
:&#039;&#039;&#039;endofgame false&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;finaletype doom_bunny&#039;&#039;&#039;&lt;br /&gt;
It also enables the finale for both the normal and secret exits.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;endcast = true&#039;&#039;&#039;||&lt;br /&gt;
:&#039;&#039;&#039;endofgame true&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;finaletype text&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;nointermission&#039;&#039;&#039;||&#039;&#039;&#039;finale-early&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;intertext&#039;&#039;&#039;, &#039;&#039;&#039;intertextsecret&#039;&#039;&#039;&#039;||Like &#039;&#039;&#039;intertext&#039;&#039;&#039; and &#039;&#039;&#039;intertext-secret&#039;&#039;&#039; but gets the text directly from UMAPINFO. It also sets or clears &#039;&#039;&#039;finale-normal&#039;&#039;&#039; and &#039;&#039;&#039;finale-secret&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;interbackdrop&#039;&#039;&#039;||&#039;&#039;&#039;inter-backdrop&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;intermusic&#039;&#039;&#039;||&#039;&#039;&#039;intermusic&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;episode&#039;&#039;&#039;||[[EDF menu reference]]. See &#039;&#039;&#039;mn_episode&#039;&#039;&#039; in particular. If mod has this EDF menu defined, it takes priority over UMAPINFO.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;bossaction&#039;&#039;&#039;||&#039;&#039;&#039;levelaction-bossdeath&#039;&#039;&#039;. However, the UMAPINFO always uses classic specials, whereas the EMAPINFO version uses UDMF parameterized specials. Clearing &#039;&#039;&#039;bossaction&#039;&#039;&#039; is like setting EMAPINFO &#039;&#039;&#039;boss-specials 0&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
==See also==&lt;br /&gt;
*[[EMAPINFO]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Accelerative_scrolling&amp;diff=6408</id>
		<title>Accelerative scrolling</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Accelerative_scrolling&amp;diff=6408"/>
		<updated>2026-04-04T19:09:41Z</updated>

		<summary type="html">&lt;p&gt;Printz: Redirected page to Scroller linedef types#Accelerative Scrollers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Scroller_linedef_types#Accelerative_Scrollers]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Displacement_scrolling&amp;diff=6407</id>
		<title>Displacement scrolling</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Displacement_scrolling&amp;diff=6407"/>
		<updated>2026-04-04T19:09:10Z</updated>

		<summary type="html">&lt;p&gt;Printz: Redirected page to Scroller linedef types#Displacement Scrollers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Scroller_linedef_types#Displacement_Scrollers]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Scroll_Floor&amp;diff=6406</id>
		<title>Scroll Floor</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Scroll_Floor&amp;diff=6406"/>
		<updated>2026-04-04T19:08:23Z</updated>

		<summary type="html">&lt;p&gt;Printz: Created page with &amp;quot;{{LineSpecial|description=This is the parameterized scrolling special for the floor. |usage=&amp;#039;&amp;#039;&amp;#039;Scroll_Floor&amp;#039;&amp;#039;&amp;#039;(&amp;#039;&amp;#039;tag&amp;#039;&amp;#039;, &amp;#039;&amp;#039;flags&amp;#039;&amp;#039;, &amp;#039;&amp;#039;type&amp;#039;&amp;#039;, &amp;#039;&amp;#039;x&amp;#039;&amp;#039;, &amp;#039;&amp;#039;y&amp;#039;&amp;#039;) |parameters= *&amp;#039;&amp;#039;tag&amp;#039;&amp;#039;: tag of sectors whose floors to scroll; *&amp;#039;&amp;#039;flags&amp;#039;&amp;#039;: zero or a sum of the following values: :*1: set displacement scrolling :*2: set accelerative scrolling. This overrides displacement scrolling if both flags are set. :*4: use linedef vector to direct the scrolling (scrolling will happen wh...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LineSpecial|description=This is the parameterized scrolling special for the floor.&lt;br /&gt;
|usage=&#039;&#039;&#039;Scroll_Floor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;flags&#039;&#039;, &#039;&#039;type&#039;&#039;, &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;)&lt;br /&gt;
|parameters=&lt;br /&gt;
*&#039;&#039;tag&#039;&#039;: tag of sectors whose floors to scroll;&lt;br /&gt;
*&#039;&#039;flags&#039;&#039;: zero or a sum of the following values:&lt;br /&gt;
:*1: set [[displacement scrolling]]&lt;br /&gt;
:*2: set [[accelerative scrolling]]. This overrides displacement scrolling if both flags are set.&lt;br /&gt;
:*4: use linedef vector to direct the scrolling (scrolling will happen wherever the linedef points on the map). Divide the length of the line by 32 to obtain the scrolling velocity. Parameters &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; will be ignored.&lt;br /&gt;
*&#039;&#039;type&#039;&#039;: type of scroller. Can be:&lt;br /&gt;
:*0: scroll only the texture;&lt;br /&gt;
:*1: only carry the things, without animating the texture;&lt;br /&gt;
:*2: both scroll the texture and carry things.&lt;br /&gt;
*&#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;: if &#039;&#039;flags&#039;&#039; doesn&#039;t include 4, then these parameters control the scrolling direction. Please see in &#039;&#039;&#039;Notes&#039;&#039;&#039; about how they&#039;re scaled.&lt;br /&gt;
|notes=This special acts &#039;&#039;static&#039;&#039; when set on a linedef: it triggers at map startup, not when activated by player or others. But it can also be called from [[ACS]].&lt;br /&gt;
|udmf=223&lt;br /&gt;
|extradata=484&lt;br /&gt;
&lt;br /&gt;
Scales of &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; differ between map placement and ACS:&lt;br /&gt;
*on the map, due to Hexen format legacy, you need to subtract 128 from the parameter, then divide by 32, to obtain the actual direction.&lt;br /&gt;
*in ACS: multiply by 10, then divide by 32.}}&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=WeaponReady&amp;diff=6405</id>
		<title>WeaponReady</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=WeaponReady&amp;diff=6405"/>
		<updated>2026-04-04T15:17:55Z</updated>

		<summary type="html">&lt;p&gt;Printz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{codepointer|description=WeaponReady is a player weapon codepointer. This codepointer readies the player&#039;s gun to fire or to change to another weapon. It should be called from any weapon&#039;s ready state.&lt;br /&gt;
|usage=&#039;&#039;&#039;A_WeaponReady&#039;&#039;&#039;(&#039;&#039;flags&#039;&#039;)&lt;br /&gt;
|parameters=&lt;br /&gt;
*&#039;&#039;flags&#039;&#039;: optional, can be &#039;&#039;&#039;WRF_NOBOB&#039;&#039;&#039; if mentioned. Disables weapon bobbing.&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;code&amp;gt;A_WeaponReady&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;A_WeaponReady(WRF_NOBOB)&amp;lt;/code&amp;gt;&lt;br /&gt;
|notes=This pointer also plays the chainsaw&#039;s idle sound, as determined by [[weaponinfo]] &#039;&#039;&#039;readysound&#039;&#039;&#039;.&lt;br /&gt;
|seealso=&lt;br /&gt;
*[[Lower]]&lt;br /&gt;
*[[Raise]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=SetWeapon&amp;diff=6404</id>
		<title>SetWeapon</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=SetWeapon&amp;diff=6404"/>
		<updated>2026-04-04T11:25:14Z</updated>

		<summary type="html">&lt;p&gt;Printz: Created page with &amp;quot;{{ACSFunction|description=Changes activator&amp;#039;s current weapon. |usage=&amp;#039;&amp;#039;boolean&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;SetWeapon&amp;#039;&amp;#039;&amp;#039;(&amp;#039;&amp;#039;str weapon&amp;#039;&amp;#039;) |parameters= *&amp;#039;&amp;#039;weapon&amp;#039;&amp;#039;: name of weapon to switch to. This name is one defined by an EDF weaponinfo block, which for the base games is stored in &amp;#039;&amp;#039;&amp;#039;player.edf&amp;#039;&amp;#039;&amp;#039;. |return=&amp;#039;&amp;#039;&amp;#039;TRUE&amp;#039;&amp;#039;&amp;#039; if the weapon was successfully selected or was already active, &amp;#039;&amp;#039;&amp;#039;FALSE&amp;#039;&amp;#039;&amp;#039; otherwise. |examples=  &amp;lt;code&amp;gt;int result = SetWeapon(&amp;quot;Crossbow&amp;quot;);   // will return TRUE if player...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ACSFunction|description=Changes activator&#039;s current weapon.&lt;br /&gt;
|usage=&#039;&#039;boolean&#039;&#039; &#039;&#039;&#039;SetWeapon&#039;&#039;&#039;(&#039;&#039;str weapon&#039;&#039;)&lt;br /&gt;
|parameters=&lt;br /&gt;
*&#039;&#039;weapon&#039;&#039;: name of weapon to switch to. This name is one defined by an [[EDF]] [[weaponinfo]] block, which for the base games is stored in &#039;&#039;&#039;player.edf&#039;&#039;&#039;.&lt;br /&gt;
|return=&#039;&#039;&#039;TRUE&#039;&#039;&#039; if the weapon was successfully selected or was already active, &#039;&#039;&#039;FALSE&#039;&#039;&#039; otherwise.&lt;br /&gt;
|examples=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int result = SetWeapon(&amp;quot;Crossbow&amp;quot;);   // will return TRUE if player has and can use crossbow&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|notes=&lt;br /&gt;
This function only works if activator is a player.&lt;br /&gt;
&lt;br /&gt;
This will not allow selecting a weapon missing from activator&#039;s [[playerclass]] &#039;&#039;&#039;weaponslot&#039;&#039;&#039; items (i.e. weapons not allowed for the given character class), even if the player holds it in the inventory.&lt;br /&gt;
&lt;br /&gt;
If Heretic tome of power (from [[powereffect]] &#039;&#039;&#039;type&#039;&#039;&#039; &#039;&#039;&#039;PowerWeaponLevel2&#039;&#039;&#039;) is active, it will always choose the powered type even if you specify the unpowered &#039;&#039;&#039;weaponinfo&#039;&#039;&#039; definition name.&lt;br /&gt;
|id=(ACS internal)}}&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Powereffect&amp;diff=6403</id>
		<title>Powereffect</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Powereffect&amp;diff=6403"/>
		<updated>2026-04-04T11:23:45Z</updated>

		<summary type="html">&lt;p&gt;Printz: Changed redirect target from EDF item effects and inventory to EDF item effects and inventory#powereffect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[EDF item effects and inventory#powereffect]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Powereffect&amp;diff=6402</id>
		<title>Powereffect</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Powereffect&amp;diff=6402"/>
		<updated>2026-04-04T11:23:26Z</updated>

		<summary type="html">&lt;p&gt;Printz: Redirected page to EDF item effects and inventory&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[EDF item effects and inventory]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_item_effects_and_inventory&amp;diff=6401</id>
		<title>EDF item effects and inventory</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_item_effects_and_inventory&amp;diff=6401"/>
		<updated>2026-03-27T18:16:45Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* weapongiver */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Define what happens when an item is picked up and used (and eventually, dropped from the inventory - this is not complete yet). A tutorial on defining each of these can be found at [[Creating a pickup]].&lt;br /&gt;
&lt;br /&gt;
==Thing type based pick-up==&lt;br /&gt;
The recommended way to define pick-up effects is by adding the &#039;&#039;&#039;pickupeffect&#039;&#039;&#039; section in the [[thingtype]] definition of a class.&lt;br /&gt;
&lt;br /&gt;
The fields are as such:&lt;br /&gt;
&lt;br /&gt;
 thingtype &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  ...&lt;br /&gt;
  pickupeffect&lt;br /&gt;
  {&lt;br /&gt;
   effects      &amp;lt;name&amp;gt;, ...&lt;br /&gt;
   flags        &amp;lt;flags&amp;gt;&lt;br /&gt;
   changeweapon &amp;lt;name&amp;gt;&lt;br /&gt;
   message      &amp;lt;text&amp;gt;&lt;br /&gt;
   sound        &amp;lt;name&amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
For explanation of the fields, see the sprite-based block definition&#039;s corresponding fields.&lt;br /&gt;
&lt;br /&gt;
==Sprite based pick-ups==&lt;br /&gt;
===pickupeffect===&lt;br /&gt;
Defines what happens when player picks up an item with the &#039;&#039;&#039;SPECIAL&#039;&#039;&#039; [[Thing type flags|flag]]. Commonly in DOOM and Heretic, pick-up effects are associated with the visual sprites of the things, instead of being mapped directly to the thing class.&lt;br /&gt;
&lt;br /&gt;
In the base game definitions, you can find the pick-up effects defined in sprites.edf.&lt;br /&gt;
 pickupeffect &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  sprite       &amp;lt;name&amp;gt;&lt;br /&gt;
  effects      &amp;lt;name&amp;gt;, ...&lt;br /&gt;
  flags        &amp;lt;flags&amp;gt;&lt;br /&gt;
  changeweapon &amp;lt;name&amp;gt;&lt;br /&gt;
  message      &amp;lt;text&amp;gt;&lt;br /&gt;
  sound        &amp;lt;name&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
====Explanation of fields====&lt;br /&gt;
*&#039;&#039;&#039;sprite&#039;&#039;&#039;&lt;br /&gt;
:Default: no sprite.&lt;br /&gt;
:If set as a four-character sprite name, this will associate any [[thingtype]] with the &#039;&#039;&#039;SPECIAL&#039;&#039;&#039; [[Thing type flags|flag]] whose current sprite shows as this value to trigger this &#039;&#039;&#039;pickupeffect&#039;&#039;&#039;.&lt;br /&gt;
:Example: &amp;lt;code&amp;gt;sprite BON1&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;effects&#039;&#039;&#039;&lt;br /&gt;
:Default: no effect.&lt;br /&gt;
:This is a list of effects incurred on player when picking up the item. Each one must be defined in EDF as one of the following: &#039;&#039;&#039;ammoeffect&#039;&#039;&#039;, &#039;&#039;&#039;armoreffect&#039;&#039;&#039;, &#039;&#039;&#039;artifact&#039;&#039;&#039;, &#039;&#039;&#039;healtheffect&#039;&#039;&#039;, &#039;&#039;&#039;powereffect&#039;&#039;&#039; or &#039;&#039;&#039;weapongiver&#039;&#039;&#039;.&lt;br /&gt;
:Example: &amp;lt;code&amp;gt;effects Berserk, BerserkHealth&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;flags&#039;&#039;&#039;&lt;br /&gt;
:Default: no flags.&lt;br /&gt;
:This is an optional set of one or more flags, joined together by | (vertical bar). The flags you can use are:&lt;br /&gt;
:*&#039;&#039;&#039;ALWAYSPICKUP&#039;&#039;&#039;: item shall always be picked, even if according to the &#039;&#039;&#039;effects&#039;&#039;&#039;, there would be no need for the item. Example: health potions in DOOM.&lt;br /&gt;
:*&#039;&#039;&#039;LEAVEINMULTI&#039;&#039;&#039;: if game is multiplayer, keep item on the ground for every players to find it. Commonly used by access keys.&lt;br /&gt;
:*&#039;&#039;&#039;NOSCREENFLASH&#039;&#039;&#039;: if picked up, item will not flash player&#039;s screen.&lt;br /&gt;
:*&#039;&#039;&#039;SILENTNOBENEFIT&#039;&#039;&#039;: only has effect in conjunction with &#039;&#039;&#039;ALWAYSPICKUP&#039;&#039;&#039;: if picked up when unneeded, all user feedback (message, sound, flash) is suppressed.&lt;br /&gt;
:*&#039;&#039;&#039;COMMERCIALONLY&#039;&#039;&#039;: only relevant for demo compatibility, marks the item as DOOM 2 (the &amp;quot;commercial&amp;quot; release) specific. The megasphere has this flag. Not needed for new mods.&lt;br /&gt;
:*&#039;&#039;&#039;GIVESBACKPACKAMMO&#039;&#039;&#039;: commonly used by the entries with the &#039;&#039;&#039;BackpackItem&#039;&#039;&#039; in &#039;&#039;&#039;effects&#039;&#039;&#039; (which doubles player&#039;s ammo capacity) to also provide the backpack ammo amount for each available ammo &#039;&#039;&#039;artifact&#039;&#039;&#039; in the game.&lt;br /&gt;
*&#039;&#039;&#039;changeweapon&#039;&#039;&#039;&lt;br /&gt;
:Default: nothing.&lt;br /&gt;
:If set, causes the item to change player&#039;s current weapon to the designated one whenever picked up. Expects a [[weaponinfo]] definition. This is based on how the [[Doom Wiki:Berserk|Berserk pack]] acts in DOOM.&lt;br /&gt;
:Example: &amp;lt;code&amp;gt;changeweapon Fist&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;message&#039;&#039;&#039;&lt;br /&gt;
:Default: no message.&lt;br /&gt;
:What message to display at the top of the view when picking up the item. This doesn&#039;t cover special cases such as the medikit low health message or the special BFG9000 variants.&lt;br /&gt;
:Example: &amp;lt;code&amp;gt;message &amp;quot;picked up an item.&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;sound&#039;&#039;&#039;&lt;br /&gt;
:Default: none&lt;br /&gt;
:Sets the [[sound]] to play when picking up the item.&lt;br /&gt;
:Example: &amp;lt;code&amp;gt;sound itemup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: the &#039;&#039;&#039;pfxname&#039;&#039;&#039; field (which you may encounter in the base EDF) is only needed for compatibility with a deprecated feature.&lt;br /&gt;
&lt;br /&gt;
==Effect definitions==&lt;br /&gt;
From a &#039;&#039;&#039;pickupeffect&#039;&#039;&#039;&#039;s &#039;&#039;&#039;effects&#039;&#039;&#039; field, one can add from many different types of item effect definitions:&lt;br /&gt;
&lt;br /&gt;
===Base definitions===&lt;br /&gt;
&lt;br /&gt;
====artifact====&lt;br /&gt;
An artifact is an item which, when collected, goes into the player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
 artifact &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  amount         &amp;lt;int&amp;gt; // amount gained with one pickup&lt;br /&gt;
  maxamount      &amp;lt;int&amp;gt; // max amount that can be carried in inventory&lt;br /&gt;
  interhubamount &amp;lt;int&amp;gt; // max amount carryable between levels in different hubs;&lt;br /&gt;
                       // -1 if this field should not apply at all&lt;br /&gt;
  sortorder      &amp;lt;int&amp;gt; // key used for sorting the player&#039;s inventory&lt;br /&gt;
  icon           &amp;lt;str&amp;gt; // name of icon graphic for invbar&lt;br /&gt;
  usesound       &amp;lt;str&amp;gt; // sound made when item is used&lt;br /&gt;
  useeffect      &amp;lt;str&amp;gt; // name of item effect to use for activation&lt;br /&gt;
  useaction      &amp;lt;action function&amp;gt; // codepointer and arguments called (e.g. A_GauntletAttack(1))&lt;br /&gt;
  &lt;br /&gt;
  [+-]undroppable      // if +, cannot be dropped from inventory&lt;br /&gt;
  [+-]invbar           // if +, appears in invbar; otherwise, invisible&lt;br /&gt;
  [+-]keepdepleted     // if +, will remain in inventory with amount of zero&lt;br /&gt;
  [+-]fullamountonly   // if +, cannot pickup unless full amount is needed&lt;br /&gt;
  [+-]noshareware      // if +, non-shareware&lt;br /&gt;
  &lt;br /&gt;
  // artifacttype determines what sort of artifact this is.  &lt;br /&gt;
  artifacttype   &amp;lt;str&amp;gt; // &amp;quot;Normal&amp;quot;, &amp;quot;Ammo&amp;quot;, &amp;quot;Key&amp;quot;, &amp;quot;Puzzle&amp;quot;, &amp;quot;Power&amp;quot;, &amp;quot;Weapon&amp;quot;,&lt;br /&gt;
                       // or &amp;quot;Quest&amp;quot;&lt;br /&gt;
                       &lt;br /&gt;
  // The following fields apply only to certain artifact types. They have no&lt;br /&gt;
  // effect if specified on other types.&lt;br /&gt;
  &lt;br /&gt;
  // Ammo&lt;br /&gt;
  ammo.backpackamount    &amp;lt;int&amp;gt; // amount of this ammo type given by a Backpack&lt;br /&gt;
  ammo.backpackmaxamount &amp;lt;int&amp;gt; // max amount after collecting a Backpack&lt;br /&gt;
 &lt;br /&gt;
  // Autouse health: this applies only for health-effect artifacts.&lt;br /&gt;
  // If enabled, game will automatically trigger when player is about to die,&lt;br /&gt;
  // to restore health and keep them alive.&lt;br /&gt;
 &lt;br /&gt;
  // &amp;quot;none&amp;quot; or &amp;quot;heretic&amp;quot;. If &amp;quot;heretic&amp;quot;, this is enabled and works like Heretic&lt;br /&gt;
  autouse.health.mode     &amp;lt;option&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  // Optional restrictions. If omitted, there is no game restriction. Otherwise,&lt;br /&gt;
  // it can be a &amp;quot;|&amp;quot;-joined combination of &amp;quot;baby&amp;quot; and &amp;quot;deathmatch&amp;quot;. Then the&lt;br /&gt;
  // autouse will happen IF ANY of the given conditions are met.&lt;br /&gt;
  autouse.health.restrict &amp;lt;flags&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====healtheffect====&lt;br /&gt;
A health effect gives the player health in one of many possible ways. &lt;br /&gt;
 healtheffect &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  amount     &amp;lt;int&amp;gt; // amount of health to give&lt;br /&gt;
  maxamount  &amp;lt;int&amp;gt; // max amount this item can health to.&lt;br /&gt;
  lowmessage &amp;lt;str&amp;gt; // alternate message to give instead of pickupfx message when&lt;br /&gt;
                   // health is less than amount; if starts with $, is a BEX mnemonic.&lt;br /&gt;
  &lt;br /&gt;
  [+-]alwayspickup  // if +, item is picked up even when unneeded (e.g. Health Bonus)&lt;br /&gt;
  [+-]sethealth     // if +, item SETS health rather than adding to it (e.g. Megasphere)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====armoreffect====&lt;br /&gt;
An armor effect defines the properties of player armor &lt;br /&gt;
 armoreffect &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  saveamount    &amp;lt;int&amp;gt; // amount of armor given&lt;br /&gt;
  savefactor    &amp;lt;int&amp;gt; // numerator of fraction determining save percentage&lt;br /&gt;
  savedivisor   &amp;lt;int&amp;gt; // denominator of fraction determining save percentage&lt;br /&gt;
  maxsaveamount &amp;lt;int&amp;gt; // max amount his item can give; if player has greater&lt;br /&gt;
                      // armor, the item cannot be picked up at all&lt;br /&gt;
                      &lt;br /&gt;
  [+-]alwayspickup    // item is picked up even when unneeded (e.g. Armor Bonus)&lt;br /&gt;
  [+-]additive        // if +, adds to the current amount of armor&lt;br /&gt;
  [+-]setabsorption   // if +, sets absorption values (savefactor &amp;amp; savedivisor)&lt;br /&gt;
 }&lt;br /&gt;
====ammoeffect====&lt;br /&gt;
Ammo givers give an Ammo type artifact to the player.&lt;br /&gt;
 ammoeffect &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  ammo       &amp;lt;str&amp;gt; // Name of an Ammo-type artifact definition&lt;br /&gt;
  amount     &amp;lt;int&amp;gt; // Amount to give for an ordinary pickup&lt;br /&gt;
  dropamount &amp;lt;int&amp;gt; // Amount to give if dropped by an enemy&lt;br /&gt;
  &lt;br /&gt;
  [+-]ignoreskill  // if +, does not double on skills that give double ammo  &lt;br /&gt;
 }&lt;br /&gt;
====powereffect====&lt;br /&gt;
Power givers buff the player with a temporary or level-permanent effect. They&#039;re typical of artifacts such as the radiation suit or the blur sphere.&lt;br /&gt;
 powereffect &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  duration   &amp;lt;int&amp;gt;  // Length of time to last in tics&lt;br /&gt;
  type       &amp;lt;str&amp;gt;  // Name of power to give&lt;br /&gt;
  &lt;br /&gt;
  [+-]additivetime  // if +, adds to current duration&lt;br /&gt;
  [+-]permanent     // if +, lasts forever  &lt;br /&gt;
  [+-]overridesself // if +, getting the power again while still under its influence is allowed&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039; can be any of the following:&lt;br /&gt;
*&#039;&#039;&#039;PowerAllmap&#039;&#039;&#039;: Doom computer area map, Heretic map scroll&lt;br /&gt;
*&#039;&#039;&#039;PowerFlight&#039;&#039;&#039;: Heretic wings of wrath&lt;br /&gt;
*&#039;&#039;&#039;PowerGhost&#039;&#039;&#039;: Heretic shadow sphere&lt;br /&gt;
*&#039;&#039;&#039;PowerInvulnerable&#039;&#039;&#039;: Doom invulnerability artifact, Heretic ring of invulnerability&lt;br /&gt;
*&#039;&#039;&#039;PowerIronFeet&#039;&#039;&#039;: Doom radiation shielding suit&lt;br /&gt;
*&#039;&#039;&#039;PowerLightAmp&#039;&#039;&#039;: Doom light amplification visor&lt;br /&gt;
*&#039;&#039;&#039;PowerPartialInvisibility&#039;&#039;&#039;: Doom blur artifact&lt;br /&gt;
*&#039;&#039;&#039;PowerSilent&#039;&#039;&#039;: Eternity silencer&lt;br /&gt;
*&#039;&#039;&#039;PowerStrength&#039;&#039;&#039;: Doom berserk pack&lt;br /&gt;
*&#039;&#039;&#039;PowerTorch&#039;&#039;&#039;: Heretic torch&lt;br /&gt;
*&#039;&#039;&#039;PowerTotalInvisibility&#039;&#039;&#039;: Eternity total invisibility&lt;br /&gt;
*&#039;&#039;&#039;PowerWeaponLevel2&#039;&#039;&#039;: Heretic tome of power&lt;br /&gt;
&lt;br /&gt;
====weapongiver====&lt;br /&gt;
Weapon givers give a Weapon type artifact to the player, and optionally any number of Ammo artifact types.&lt;br /&gt;
 weapongiver &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  weapon     &amp;lt;str&amp;gt; // Name of a weaponinfo to give to the player&lt;br /&gt;
  // Note that you can specify as many ammogiven properties as you want in a single weapongiver&lt;br /&gt;
  ammogiven  &amp;lt;ammo&amp;gt;, &amp;lt;amount&amp;gt; [, &amp;lt;dropamount&amp;gt; [, &amp;lt;dmamount&amp;gt; [, &amp;lt;coopweaponsstay&amp;gt;]]] // Ammo type artifact given, and the amounts&lt;br /&gt;
                                                                                      // given based on how it was picked up. If the&lt;br /&gt;
                                                                                      // last three are left blank, only &amp;quot;amount&amp;quot; is used.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Delta structures===&lt;br /&gt;
The following can be used to replace already defined effects. They can be cascaded (i.e. any number of loaded mods can change the previous definition and all its deltas). For each of them, the &#039;&#039;&#039;name&#039;&#039;&#039; field represents the name of the base to modify. They are the following:&lt;br /&gt;
 healthdelta&lt;br /&gt;
 {&lt;br /&gt;
  name &amp;lt;name&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 armordelta&lt;br /&gt;
 {&lt;br /&gt;
  name &amp;lt;name&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 ammodelta&lt;br /&gt;
 {&lt;br /&gt;
  name &amp;lt;name&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 powerdelta&lt;br /&gt;
 {&lt;br /&gt;
  name &amp;lt;name&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 weapongiverdelta&lt;br /&gt;
 {&lt;br /&gt;
  name &amp;lt;name&amp;gt;&lt;br /&gt;
  clearammogiven   // if added, removes the &amp;quot;given ammo&amp;quot; definitions&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 artifactdelta&lt;br /&gt;
 {&lt;br /&gt;
  name &amp;lt;name&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[[Category:EDF]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_puff_type_reference&amp;diff=6400</id>
		<title>EDF puff type reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_puff_type_reference&amp;diff=6400"/>
		<updated>2026-02-28T19:03:32Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Explanation of fields */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Puffs are special effects spawned at hitscan attack impact points. Hitscan attacks are those &#039;projectiles&#039; which travel instantly, which includes all gunshots from Doom and the elven wand and dragon claw from Heretic. The syntax is as follows:&lt;br /&gt;
 pufftype &amp;lt;name&amp;gt; [ : &amp;lt;base&amp;gt; ]&lt;br /&gt;
 {&lt;br /&gt;
   thingtype       &amp;lt;name&amp;gt;&lt;br /&gt;
   sound           &amp;lt;name&amp;gt;&lt;br /&gt;
   hitsound        &amp;lt;name&amp;gt;&lt;br /&gt;
   hitpufftype     &amp;lt;name&amp;gt;&lt;br /&gt;
   nobloodpufftype &amp;lt;name&amp;gt;&lt;br /&gt;
   upspeed         &amp;lt;floating-point value&amp;gt;&lt;br /&gt;
   zspread         &amp;lt;floating-point value&amp;gt;&lt;br /&gt;
   punchhack       &amp;lt;frame name&amp;gt;&lt;br /&gt;
   particles       &amp;lt;number&amp;gt;&lt;br /&gt;
   +|-PUFFONACTORS&lt;br /&gt;
   +|-BLOODLESS&lt;br /&gt;
   +|-LOCALTHRUST&lt;br /&gt;
   +|-RANDOMTICS&lt;br /&gt;
   +|-TARGETSHOOTER&lt;br /&gt;
 }&lt;br /&gt;
==Explanation of fields==&lt;br /&gt;
*&#039;&#039;&#039;base&#039;&#039;&#039;&lt;br /&gt;
:Optional ancestor puff type whose attributes to inherit. If you don&#039;t want inheritance, remove both &#039;:&#039; and the base name.&lt;br /&gt;
*&#039;&#039;&#039;thingtype&#039;&#039;&#039;&lt;br /&gt;
:[[Thingtype|Class of thing]] to spawn when puff is produced. Can be omitted if no visible thing is intended.&lt;br /&gt;
*&#039;&#039;&#039;sound&#039;&#039;&#039;&lt;br /&gt;
:Optional sound to play when puff is spawned. Only works if &#039;&#039;&#039;thingtype&#039;&#039;&#039; is set. Example: the Heretic staff puff has this.&lt;br /&gt;
*&#039;&#039;&#039;hitsound&#039;&#039;&#039;&lt;br /&gt;
:Alternate sound to play if the hitscan hits a shootable thing, and if the puff is not replaced by a blood splat. Example: the dragon claw hit puff has this.&lt;br /&gt;
*&#039;&#039;&#039;hitpufftype&#039;&#039;&#039;&lt;br /&gt;
:If this one is set and a shootable thing is hit, use this alternate puff type instead of the one defined here. Example: the dragon claw spark has this. Important: this is a pufftype, not a thingtype.&lt;br /&gt;
*&#039;&#039;&#039;nobloodpufftype&#039;&#039;&#039;&lt;br /&gt;
:Optional alternate puff type when hitting things with the &#039;&#039;&#039;NOBLOOD&#039;&#039;&#039; flag. Note that this has priority over &#039;&#039;&#039;hitpufftype&#039;&#039;&#039; but only against &#039;&#039;&#039;NOBLOOD&#039;&#039;&#039; targets. Important: this is a pufftype, not a thingtype.&lt;br /&gt;
*&#039;&#039;&#039;upspeed&#039;&#039;&#039;&lt;br /&gt;
:Default: 0&lt;br /&gt;
:Speed by which the puff thing moves up.&lt;br /&gt;
*&#039;&#039;&#039;zspread&#039;&#039;&#039;&lt;br /&gt;
:Default: 4&lt;br /&gt;
:Vertical spread by which spawned things are randomly created.&lt;br /&gt;
*&#039;&#039;&#039;punchhack&#039;&#039;&#039;&lt;br /&gt;
:Limited use special handler for DOOM fist puff&#039;s special behaviour of switching to a different frame (as given by this field) when using the fist attack codepointer. New mods should use dedicated puff types for custom melee attacks.&lt;br /&gt;
*&#039;&#039;&#039;particles&#039;&#039;&#039;&lt;br /&gt;
:Optional number of smoke particles to spawn when enabled in the settings. Does not spawn if &#039;&#039;&#039;punchhack&#039;&#039;&#039; is active and player uses fist.&lt;br /&gt;
===Flags===&lt;br /&gt;
Prefix these with + or - to add or remove them.&lt;br /&gt;
*&#039;&#039;&#039;PUFFONACTORS&#039;&#039;&#039;: make sure to spawn puff even when hitting a bleeding target. Common with Heretic hitscans.&lt;br /&gt;
*&#039;&#039;&#039;BLOODLESS&#039;&#039;&#039;: avoid showing blood when hitting a bleeding target.&lt;br /&gt;
*&#039;&#039;&#039;LOCALTHRUST&#039;&#039;&#039;: when hitting shootable things, make sure to thrust them from wherever the puff appears, not from attacker.&lt;br /&gt;
*&#039;&#039;&#039;RANDOMTICS&#039;&#039;&#039;: if set, the spawned thing will have its first frame duration randomized&lt;br /&gt;
*&#039;&#039;&#039;TARGETSHOOTER&#039;&#039;&#039;: sets puff thing&#039;s &amp;quot;target&amp;quot; (originator) to the shooter. In effect, it will act like a projectile explosion, and any codepointer such as [[DetonateEx]] or [[BFGSpray]] from the puff thing will use the shooter as an originator for damage purposes.&lt;br /&gt;
&lt;br /&gt;
==Delta structure==&lt;br /&gt;
You can use &amp;lt;code&amp;gt;puffdelta&amp;lt;/code&amp;gt; to modify an already defined &#039;&#039;&#039;pufftype&#039;&#039;&#039;. The syntax is:&lt;br /&gt;
 puffdelta&lt;br /&gt;
 {&lt;br /&gt;
   name &amp;lt;puff name&amp;gt;&lt;br /&gt;
   &amp;lt;fields&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
The &#039;&#039;fields&#039;&#039; are the same as those from &#039;&#039;&#039;pufftype&#039;&#039;&#039;, modifying anything already defined in a &amp;lt;code&amp;gt;pufftype &amp;lt;puff name&amp;gt;&amp;lt;/code&amp;gt; block.&lt;br /&gt;
==Tips==&lt;br /&gt;
*If you use the &#039;&#039;&#039;TARGETSHOOTER&#039;&#039;&#039; flag and intend to turn the puff into an explosion, beware that, as with all thing types, the explosion will fail if it&#039;s triggered from the very first spawn state. Make sure to use the second one onwards.&lt;br /&gt;
[[Category:EDF]]&lt;br /&gt;
[[Category:Editing]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Polyobj_MoveTo&amp;diff=6399</id>
		<title>Polyobj MoveTo</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Polyobj_MoveTo&amp;diff=6399"/>
		<updated>2026-02-28T18:16:40Z</updated>

		<summary type="html">&lt;p&gt;Printz: Created page with &amp;quot;{{template:LineSpecial|description=Moves a polyobject to given coordinates. |usage=&amp;#039;&amp;#039;&amp;#039;Polyobj_MoveTo(&amp;#039;&amp;#039;po&amp;#039;&amp;#039;, &amp;#039;&amp;#039;speed&amp;#039;&amp;#039;, &amp;#039;&amp;#039;x&amp;#039;&amp;#039;, &amp;#039;&amp;#039;y&amp;#039;&amp;#039;) |parameters= *&amp;#039;&amp;#039;po&amp;#039;&amp;#039;: polyobject ID to move *&amp;#039;&amp;#039;speed&amp;#039;&amp;#039;: movement speed in eighths of unit per tic *&amp;#039;&amp;#039;x&amp;#039;&amp;#039;, &amp;#039;&amp;#039;y&amp;#039;&amp;#039;: coordinates, in integer map units |examples= &amp;#039;&amp;#039;&amp;#039;Polyobj_MoveTo(1, 8, -1024, 4192) |notes=This linedef special moves the targeted polyobject to a given location in coordinates, instead of using a map spot thing. Be careful, if in...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{template:LineSpecial|description=Moves a polyobject to given coordinates.&lt;br /&gt;
|usage=&#039;&#039;&#039;Polyobj_MoveTo(&#039;&#039;po&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;)&lt;br /&gt;
|parameters=&lt;br /&gt;
*&#039;&#039;po&#039;&#039;: polyobject ID to move&lt;br /&gt;
*&#039;&#039;speed&#039;&#039;: movement speed in eighths of unit per tic&lt;br /&gt;
*&#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;: coordinates, in integer map units&lt;br /&gt;
|examples=&lt;br /&gt;
&#039;&#039;&#039;Polyobj_MoveTo(1, 8, -1024, 4192)&lt;br /&gt;
|notes=This linedef special moves the targeted polyobject to a given location in coordinates, instead of using a map spot thing. Be careful, if in ACS, not to use fixed-point numbers (which internally are multiples of 65536).&lt;br /&gt;
|udmf=88&lt;br /&gt;
|extradata=497&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=DeHackEd_/_BEX_Reference/Eternity_Extension:_SOUNDS_Block&amp;diff=6398</id>
		<title>DeHackEd / BEX Reference/Eternity Extension: SOUNDS Block</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=DeHackEd_/_BEX_Reference/Eternity_Extension:_SOUNDS_Block&amp;diff=6398"/>
		<updated>2026-02-19T06:32:00Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The SOUNDS block can change the name of any sound.&lt;br /&gt;
{{backto|DeHackEd / BEX Reference}}&lt;br /&gt;
==Syntax==&lt;br /&gt;
   [SOUNDS]&lt;br /&gt;
   &amp;lt;mnemonic&amp;gt; = &amp;lt;string&amp;gt;&lt;br /&gt;
The &amp;lt;mnemonic&amp;gt; to use is the EDF sound mnemonic defined for the sound you wish to replace. The string to provide is the new lump name for that sound. If you want to rename the sound that&#039;s normally named PISTOL, you use the mnemonic PISTOL. Changing the sound lump names will not change their corresponding mnemonics. &amp;lt;string&amp;gt; must be from 1 to 8 characters long, or the substitution will not occur.&lt;br /&gt;
[[category:dehacked]]&lt;br /&gt;
===DSDHacked extension===&lt;br /&gt;
If you have &amp;lt;code&amp;gt;Doom version = 2021&amp;lt;/code&amp;gt; in the DEHACKED patch header, you can also use this syntax:&lt;br /&gt;
   &amp;lt;number&amp;gt; = &amp;lt;lump_name&amp;gt;&lt;br /&gt;
where &amp;lt;number&amp;gt; is the Dehacked number of a possibly new sound entry (thus allowing you to declare new sounds), and &amp;lt;lump_name&amp;gt; is the name of the sound entry in the WAD.&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=DeHackEd_/_BEX_Reference/Thing_Block&amp;diff=6397</id>
		<title>DeHackEd / BEX Reference/Thing Block</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=DeHackEd_/_BEX_Reference/Thing_Block&amp;diff=6397"/>
		<updated>2026-02-19T05:47:24Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The DeHackEd Thing block allows you to edit the properties of DOOM&#039;s map object types. Map objects are what comprise anything you see with a sprite in DOOM, including enemies, powerups, missiles, decorations, and invisible control objects. &lt;br /&gt;
&lt;br /&gt;
Eternity provides several extensions to the DeHackEd thing block, some of which are considered part of the BEX standard specification. Extended fields will be noted as such in their descriptions.&lt;br /&gt;
{{backto|DeHackEd / BEX Reference}}&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
A brief explanation of the syntax description:&lt;br /&gt;
&lt;br /&gt;
Items in angle brackets (&amp;lt; &amp;gt;) are required.&lt;br /&gt;
&lt;br /&gt;
Items in square brackets ([ ]) are optional.&lt;br /&gt;
&lt;br /&gt;
All fields in the block are optional. If a field is not provided, that value of the thing being edited will not change.&lt;br /&gt;
&lt;br /&gt;
A || symbol means that the field can have one of the two listed types of values.&lt;br /&gt;
&lt;br /&gt;
   Thing &amp;lt;dehacked number&amp;gt; [(thing type name)]&lt;br /&gt;
   ID # = &amp;lt;number&amp;gt;&lt;br /&gt;
   Initial frame = &amp;lt;frame number&amp;gt;&lt;br /&gt;
   Hit points = &amp;lt;number&amp;gt;&lt;br /&gt;
   First moving frame = &amp;lt;frame number&amp;gt;&lt;br /&gt;
   Alert sound = &amp;lt;sound number&amp;gt;&lt;br /&gt;
   Reaction time = &amp;lt;number&amp;gt;&lt;br /&gt;
   Attack sound = &amp;lt;sound number&amp;gt;&lt;br /&gt;
   Injury frame = &amp;lt;frame number&amp;gt;&lt;br /&gt;
   Pain chance = &amp;lt;number&amp;gt;&lt;br /&gt;
   Pain sound = &amp;lt;sound number&amp;gt;&lt;br /&gt;
   Close attack frame = &amp;lt;frame number&amp;gt;&lt;br /&gt;
   Far attack frame = &amp;lt;frame number&amp;gt;&lt;br /&gt;
   Death frame = &amp;lt;frame number&amp;gt;&lt;br /&gt;
   Exploding frame = &amp;lt;frame number&amp;gt;&lt;br /&gt;
   Death sound = &amp;lt;sound number&amp;gt;&lt;br /&gt;
   Speed = &amp;lt;number&amp;gt;&lt;br /&gt;
   Width = &amp;lt;number&amp;gt;&lt;br /&gt;
   Height = &amp;lt;number&amp;gt;&lt;br /&gt;
   Mass = &amp;lt;number&amp;gt;&lt;br /&gt;
   Missile damage = &amp;lt;number&amp;gt;&lt;br /&gt;
   Action sound = &amp;lt;sound number&amp;gt;&lt;br /&gt;
   # The ability to provide flag lists is a BEX extension&lt;br /&gt;
   Bits = &amp;lt;number || flag list&amp;gt;&lt;br /&gt;
   Respawn frame = &amp;lt;frame number&amp;gt;      &lt;br /&gt;
   # The below fields are Eternity Engine extensions&lt;br /&gt;
   Bits2 = &amp;lt;number || flag list&amp;gt;&lt;br /&gt;
   Bits3 = &amp;lt;number || flag list&amp;gt;&lt;br /&gt;
   Translucency = &amp;lt;number&amp;gt;&lt;br /&gt;
   Blood color = &amp;lt;number&amp;gt;&lt;br /&gt;
   Dropped item = &amp;lt;&amp;gt;&lt;br /&gt;
   MBF21 Bits = &amp;lt;&amp;gt;&lt;br /&gt;
   Fast speed = &amp;lt;&amp;gt;&lt;br /&gt;
   Splash group = &amp;lt;&amp;gt;&lt;br /&gt;
   Projectile group = &amp;lt;&amp;gt;&lt;br /&gt;
   Infighting group = &amp;lt;&amp;gt;&lt;br /&gt;
   Melee range = &amp;lt;&amp;gt;&lt;br /&gt;
   Rip sound = &amp;lt;&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
Explanation of special information: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dehacked number&#039;&#039;&#039; is the DeHackEd number of the thing type that this block edits. The DeHackEd number for a thing type is given in its EDF thingtype definition.&lt;br /&gt;
&lt;br /&gt;
NOTE: for DSDHacked patches (annotated at the beginning with &amp;lt;code&amp;gt;Doom version = 2021&amp;lt;/code&amp;gt;), new thing types can be defined which do not exist in EDF, by having a new &#039;&#039;&#039;dehacked number&#039;&#039;&#039;, outside the normal range and missing from EDF thingtype definitions. Those new thing types will have EDF names in the form of &amp;lt;code&amp;gt;_AddDehThing###&amp;lt;/code&amp;gt;, where &amp;lt;code&amp;gt;###&amp;lt;/code&amp;gt; is this &#039;&#039;&#039;dehacked number&#039;&#039;&#039;. You can use such a name on the &#039;&#039;&#039;summon&#039;&#039;&#039; console command, for example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(thing type name)&#039;&#039;&#039; is an optional string which gives a descriptive name to this block. This field is NOT used by Eternity, and can be left off. Its only purpose is to serve as a comment letting you better know which thing type you are editing.&lt;br /&gt;
&lt;br /&gt;
==Fields==&lt;br /&gt;
&lt;br /&gt;
====ID # = &amp;lt;number&amp;gt;====&lt;br /&gt;
Sets the id, or &amp;quot;doomednum&amp;quot;, used to identify this thing type in maps. For example, when a map calls for a thing with id 2003, the game engine will find the thing type which has that number in this field. Every thing that will be spawned on maps must have a unique ID number. Things which are not spawned on maps, such as fireballs, can be given an ID of -1.&lt;br /&gt;
&lt;br /&gt;
====Initial frame = &amp;lt;frame number&amp;gt;====&lt;br /&gt;
Sets the frame which a thing starts in when it is spawned. Monsters generally use this frame to stand still and look for targets. &amp;lt;frame number&amp;gt; must be a valid frame DeHackEd number. &lt;br /&gt;
&lt;br /&gt;
====Hit points = &amp;lt;number&amp;gt;====&lt;br /&gt;
Sets a thing&#039;s maximum amount of life. It is only used for things which can be shot.&lt;br /&gt;
&lt;br /&gt;
====First moving frame = &amp;lt;frame number&amp;gt;====&lt;br /&gt;
Sets the frame which a monster will jump to when it sees or hears a target. Also called walking frames. &lt;br /&gt;
&lt;br /&gt;
====Alert sound = &amp;lt;sound number&amp;gt;====&lt;br /&gt;
Sets the sound that a monster will play when it awakens. This sound is also played by missiles when they are shot. &amp;lt;sound number&amp;gt; must be a valid sound number. See the sound number table for details. &lt;br /&gt;
&lt;br /&gt;
====Reaction time = &amp;lt;number&amp;gt;====&lt;br /&gt;
Sets an amount of time that a thing must wait under certain circumstances. Monsters use this value as a means to control their rate of attack. This value is also used as an internal field for varying purposes, but those uses are not editable.&lt;br /&gt;
&lt;br /&gt;
====Attack sound = &amp;lt;sound number&amp;gt;====&lt;br /&gt;
Sets a sound used by some monster attacks, including the Lost Soul&#039;s charge.&lt;br /&gt;
&lt;br /&gt;
====Injury frame = &amp;lt;frame number&amp;gt;====&lt;br /&gt;
Sets the frame a thing may randomly enter when it has been injured.&lt;br /&gt;
&lt;br /&gt;
====Pain chance = &amp;lt;number&amp;gt;====&lt;br /&gt;
Sets the chance out of 255 that this thing will enter its pain state when it is injured. A thing with 0 pain chance will never feel pain, whereas a thing with 255 pain chance will always feel pain. If a thing has a pain chance greater than zero, it should have a valid Injury frame, otherwise it will disappear forever. &lt;br /&gt;
&lt;br /&gt;
====Pain sound = &amp;lt;sound number&amp;gt;====&lt;br /&gt;
Sets the sound played by the Pain codepointer when this thing uses it. Monsters and the player always call Pain from their Injury frames.&lt;br /&gt;
&lt;br /&gt;
====Close attack frame = &amp;lt;frame number&amp;gt;====&lt;br /&gt;
If this frame is non-zero, monsters chasing a target will attempt to close to melee range quickly. When they determine they are within 64 units of their target, they may randomly enter this frame to perform a melee attack.&lt;br /&gt;
&lt;br /&gt;
====Far attack frame = &amp;lt;frame number&amp;gt;====&lt;br /&gt;
If this frame is non-zero, monsters chasing a target will randomly enter it to perform a missile attack.&lt;br /&gt;
&lt;br /&gt;
====Death frame = &amp;lt;frame number&amp;gt;====&lt;br /&gt;
When a thing dies normally, it will enter this state. If the state is zero, the thing will disappear forever.&lt;br /&gt;
&lt;br /&gt;
====Exploding frame = &amp;lt;frame number&amp;gt;====&lt;br /&gt;
If a thing dies by taking enough damage that its health is equal to its negated Hit points value, it will enter this frame instead of its Death frame. This is also known as gibbing, or extreme death. If this frame is zero, the thing will always die normally.&lt;br /&gt;
&lt;br /&gt;
====Death sound = &amp;lt;sound number&amp;gt;====&lt;br /&gt;
Sound played by the Scream codepointer. Used to play monster death sounds.&lt;br /&gt;
&lt;br /&gt;
====Speed = &amp;lt;number&amp;gt;====&lt;br /&gt;
Value used by monsters as a movement delta per walking frame. The monster will move by an amount relative to this value each time it uses the Chase codepointer. For missiles, this value is a fixed-point number (multiplied by 65536), and represents a constant speed by which the missile advances every game tic. Missile speed is not affected by the missile frame durations, whereas monster walking speed is.&lt;br /&gt;
&lt;br /&gt;
====Width = &amp;lt;number&amp;gt;====&lt;br /&gt;
Fixed-point value (multiplied by 65536) that represents the radius of this thing type. A thing can fit into corridors which are at least as wide as this value times two, plus one unit (ie a thing with radius 32 can fit into a 65-wide hallway). The maximum value this field *should* have is 2097152, which is equal to 32 units. However, the game breaks its own rule here, giving several monsters radii up to 128 units. These monsters, which include the mancubus, arachnotron, and spider demon, exhibit clipping errors which enable other things to walk into them, and which can cause some moving sectors to malfunction. Avoid giving things radii larger than this to remain absolutely safe.&lt;br /&gt;
&lt;br /&gt;
====Height = &amp;lt;number&amp;gt;====&lt;br /&gt;
Fixed-point value that represents the height of this thing type. A thing can fit into areas which are of this exact height or taller. Note that in DOOM, this value is only used to see where a monster can fit. For purposes of clipping, monsters are considered to be infinitely tall. However, Eternity&#039;s extended 3D object clipping enables this field to also be used to allow or disallow things to pass over, under, or stand on this thing.&lt;br /&gt;
&lt;br /&gt;
====Mass = &amp;lt;number&amp;gt;====&lt;br /&gt;
Normal integer value that serves as a mass factor for this object. Mass affects the amount of thrust an object is given when it is damaged, the amount of effect an archvile&#039;s attack can have on it, and for bouncing objects, the rate at which they fall.&lt;br /&gt;
&lt;br /&gt;
====Missile damage = &amp;lt;number&amp;gt;====&lt;br /&gt;
This number is used as a damage multiplier when a missile hits a thing. The damage formula used is: &lt;br /&gt;
        damage = ((rnd % 8) + 1) * missiledamage&lt;br /&gt;
     &lt;br /&gt;
This field is also used as a parameter by some new, parameterized codepointers, including BetaSkullAttack and Detonate.&lt;br /&gt;
&lt;br /&gt;
====Action sound = &amp;lt;sound number&amp;gt;====&lt;br /&gt;
Sets the sound used by a thing when it is wandering around. A thing is given a 3 out of 256 chance (1.17%) of making this sound every time it calls the Chase codepointer. There are some new Bits3 flags which can alter the behavior of this sound.&lt;br /&gt;
&lt;br /&gt;
====Bits = &amp;lt;number || flag list&amp;gt;====&lt;br /&gt;
This field controls a number of thing type properties using bit flags, where each bit in the field stands for some effect, and has the value of being either on or off. In old DeHackEd patches, this field is an integer number. BEX Extensions allow a human-readable string of flag values to be provided instead. See the flag field lists below for more information. &lt;br /&gt;
&lt;br /&gt;
====Bits2 = &amp;lt;number || flag list&amp;gt;====&lt;br /&gt;
Similar to Bits but takes a different set of values with different meanings. This field is an Eternity extension. See below for more information. &lt;br /&gt;
&lt;br /&gt;
====Bits3 = &amp;lt;number || flag list&amp;gt;====&lt;br /&gt;
Similar to Bits but takes a different set of values with different meanings. This field is an Eternity extension. See below for more information. &lt;br /&gt;
&lt;br /&gt;
====Respawn frame = &amp;lt;frame number&amp;gt;====&lt;br /&gt;
If this frame is non-zero, an Archvile can perform a resurrection on this creature. When this occurs, the creature will enter this frame.&lt;br /&gt;
&lt;br /&gt;
====Translucency = &amp;lt;number&amp;gt;====&lt;br /&gt;
This field is an Eternity extension which allows fine, customizable control over a thing&#039;s translucency. The value of this field may range from 0 to 65536, with 0 being completely invisible, and 65536 being normal. Consider the following example: &lt;br /&gt;
        Thing 2 (Trooper)&lt;br /&gt;
        Translucency = 32768&lt;br /&gt;
     &lt;br /&gt;
Trooper objects will be 50% translucent in this example, since 32768 is half of 65536. Note this effect is mutually exclusive of BOOM-style translucency. If this value is not 65536, and the BOOM translucency flag is turned on, the flag will be turned off at run-time, and this field will take precedence.&lt;br /&gt;
&lt;br /&gt;
====Blood color = &amp;lt;number&amp;gt;====&lt;br /&gt;
This field is an Eternity extension. Allows this thing type to have differently colored blood when particle blood effects are enabled (this does not currently have any effect on blood sprites). Currently available blood color values are as follows: &lt;br /&gt;
      Blood color       Number&lt;br /&gt;
     --------------------------&lt;br /&gt;
      Red (normal)        0&lt;br /&gt;
      Grey                1&lt;br /&gt;
      Green               2&lt;br /&gt;
      Blue                3&lt;br /&gt;
      Yellow              4&lt;br /&gt;
      Black               5&lt;br /&gt;
      Purple              6&lt;br /&gt;
      White               7&lt;br /&gt;
      Orange              8&lt;br /&gt;
     --------------------------&lt;br /&gt;
&lt;br /&gt;
====Dropped item = &amp;lt;number&amp;gt;====&lt;br /&gt;
Sets the dropped item to the thingtype identified by given dehacked number.&lt;br /&gt;
&lt;br /&gt;
====MBF21 Bits = &amp;lt;number or flag set&amp;gt;====&lt;br /&gt;
Applies the following bits from MBF21, possibly replacing existing Eternity flags. It can either be a sum of the numbers or |, &amp;quot;,&amp;quot;, + joined list of the following bits:&lt;br /&gt;
*LOGRAV (1): low gravity&lt;br /&gt;
*SHORTMRANGE (2): short missile range&lt;br /&gt;
*DMGIGNORED (4): other things ignore its attacks&lt;br /&gt;
*NORADIUSDMG (8): doesn&#039;t take splash damage&lt;br /&gt;
*FORCERADIUSDMG (16): causes splash damage even if target immune&lt;br /&gt;
*HIGHERMPROB (32): higher missile attack probability&lt;br /&gt;
*RANGEHALF (64): use half distance for missile attack probability&lt;br /&gt;
*NOTHRESHOLD (128): no targeting threshold&lt;br /&gt;
*LONGMELEE (256): revenant proximity shyness&lt;br /&gt;
*BOSS (512): full volume see / death sound + splash immunity&lt;br /&gt;
*MAP07BOSS1 (1024): tag 666 &amp;quot;boss&amp;quot; on DOOM 2 MAP07&lt;br /&gt;
*MAP07BOSS2 (2048): tag 667 &amp;quot;boss&amp;quot; on DOOM 2 MAP07&lt;br /&gt;
*E1M8BOSS (4096)&lt;br /&gt;
*E2M8BOSS (8192)&lt;br /&gt;
*E3M8BOSS (16384)&lt;br /&gt;
*E4M6BOSS (32768)&lt;br /&gt;
*E4M8BOSS (65536)&lt;br /&gt;
*RIP (131072): projectile rips through targets&lt;br /&gt;
*FULLVOLSOUND (262144): full volume see / death sound&lt;br /&gt;
&lt;br /&gt;
====Fast speed = &amp;lt;number&amp;gt;====&lt;br /&gt;
Sets a thing&#039;s fast speed, such as for Nightmare! mode projectiles.&lt;br /&gt;
&lt;br /&gt;
====Melee range = &amp;lt;number&amp;gt;====&lt;br /&gt;
Sets a thing&#039;s melee attack range.&lt;br /&gt;
&lt;br /&gt;
====Rip sound = &amp;lt;number&amp;gt;====&lt;br /&gt;
A projectile&#039;s sound as it rips through targets.&lt;br /&gt;
&lt;br /&gt;
====Splash group = &amp;lt;number&amp;gt;====&lt;br /&gt;
Adds this thing to a [[thinggroup]] identified by a unique number with flag &#039;&#039;&#039;NOSPLASHDAMAGE&#039;&#039;&#039;. Objects with this value will not take any radius (explosion) damage from any inflictor objects with the same value. For example: monsters and rockets.&lt;br /&gt;
&lt;br /&gt;
====Infighting group = &amp;lt;number&amp;gt;====&lt;br /&gt;
Adds this thing to a [[thinggroup]] identified by a unique number with flag &#039;&#039;&#039;DAMAGEIGNORE&#039;&#039;&#039;. In addition, it gets &#039;&#039;&#039;NOSPECIESINFIGHT&#039;&#039;&#039; thingtype flag. This makes this monster never enter infights with its own kind an none other species sharing this value.&lt;br /&gt;
&lt;br /&gt;
====Projectile group = &amp;lt;number&amp;gt;====&lt;br /&gt;
If &amp;lt;number&amp;gt; is 0 or positive: adds this thing to a [[thinggroup]] identified by a unique number with flag &#039;&#039;&#039;PROJECTILEALLIANCE&#039;&#039;&#039;. All monsters sharing this value will be immune to projectiles shot by any other monsters.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;number&amp;gt; is negative, then it gets the &#039;&#039;&#039;HARMSPECIESMISSILE&#039;&#039;&#039; flag, which means the monster gets affected by projectiles from same species.&lt;br /&gt;
&lt;br /&gt;
==BEX Extension: Thing Flag Lists==&lt;br /&gt;
This is actually something you can use to hack your DeHackEd file to be more understandable and modifiable. Note that once you do this you won&#039;t be able to bring it back into DeHackEd. &lt;br /&gt;
&lt;br /&gt;
If you&#039;ve altered a thing&#039;s bits at all, you&#039;ll see a line like: &lt;br /&gt;
  Bits = 205636102&lt;br /&gt;
That horrible number is why we are providing some mnemonics instead. All you need to do is to put the appropriate ones of the following mnemonics on the line where the big number is, and it&#039;ll be read in and converted to the number for you. Some valid example lines: &lt;br /&gt;
  Bits = SOLID+SHOOTABLE+NOBLOOD&lt;br /&gt;
  ...&lt;br /&gt;
  Bits = NOBLOCKMAP | NOGRAVITY&lt;br /&gt;
  ...&lt;br /&gt;
  Bits = SPECIAL, COUNTITEM&lt;br /&gt;
which converts to Bits = 524294 but you didn&#039;t have to figure that part out. Just use a plus, &#039;|&#039;, comma, or whitespace between the mnemonics. Below are mnemonic lists, along with a bit of explanation of each, and the phrase that&#039;s used in Dehacked to describe them. If there are any disagreements between the 2 definitions, ours wins.&lt;br /&gt;
&lt;br /&gt;
==Bits Mnemonics==&lt;br /&gt;
  Mnemonic      Bit mask     Meaning / Dehacked phrase&lt;br /&gt;
  ------------------------------------------------------------------&lt;br /&gt;
  SPECIAL       0x00000001 - Object is a collectable item.&lt;br /&gt;
                                  &amp;quot;Can be picked up&amp;quot;&lt;br /&gt;
  SOLID         0x00000002 - Blocks other objects.&lt;br /&gt;
                                  &amp;quot;Obstacle&amp;quot;&lt;br /&gt;
  SHOOTABLE     0x00000004 - Can be targetted and hit with bullets, missiles.&lt;br /&gt;
                                  &amp;quot;Shootable&amp;quot;&lt;br /&gt;
  NOSECTOR      0x00000008 - Invisible but still clipped -- see notes.&lt;br /&gt;
                                  &amp;quot;Total invisibility&amp;quot;&lt;br /&gt;
  NOBLOCKMAP    0x00000010 - Inert but displayable; can hit but cannot be hit.&lt;br /&gt;
                                  &amp;quot;Can&#039;t be hit&amp;quot;&lt;br /&gt;
  AMBUSH        0x00000020 - Deaf monster.&lt;br /&gt;
                                  &amp;quot;Semi-deaf&amp;quot;&lt;br /&gt;
  JUSTHIT       0x00000040 - Internal, monster will try to attack immediately; see notes.&lt;br /&gt;
                                  &amp;quot;In pain&amp;quot;&lt;br /&gt;
  JUSTATTACKED  0x00000080 - Internal, monster takes at least 1 step before attacking; see notes.&lt;br /&gt;
                                  &amp;quot;Steps before attack&amp;quot;&lt;br /&gt;
  SPAWNCEILING  0x00000100 - Thing spawns hanging from the ceiling of its sector.&lt;br /&gt;
                                  &amp;quot;Hangs from ceiling&amp;quot;&lt;br /&gt;
  NOGRAVITY     0x00000200 - Thing is not subject to gravity.&lt;br /&gt;
                                  &amp;quot;No Gravity&amp;quot;&lt;br /&gt;
  DROPOFF       0x00000400 - Thing can walk over tall dropoffs (&amp;gt; 24 units).&lt;br /&gt;
                                  &amp;quot;Travels over cliffs&amp;quot;&lt;br /&gt;
  PICKUP        0x00000800 - Thing can pick up items -- see notes.&lt;br /&gt;
                                  &amp;quot;Picks up items&amp;quot;&lt;br /&gt;
  NOCLIP        0x00001000 - Thing is not clipped, can walk through walls.&lt;br /&gt;
                                  &amp;quot;No clipping&amp;quot;&lt;br /&gt;
  SLIDE         0x00002000 - No effect -- see notes.&lt;br /&gt;
                                  &amp;quot;Slides along walls&amp;quot;&lt;br /&gt;
  FLOAT         0x00004000 - Monster may move to any height; is flying.&lt;br /&gt;
                                  &amp;quot;Floating&amp;quot;&lt;br /&gt;
  TELEPORT      0x00008000 - Don&#039;t cross lines or look at teleport heights.&lt;br /&gt;
                                  &amp;quot;Semi-no clipping&amp;quot;&lt;br /&gt;
  MISSILE       0x00010000 - Thing is a missile, explodes and inflicts damage when blocked.&lt;br /&gt;
                                  &amp;quot;Projectiles&amp;quot;&lt;br /&gt;
  DROPPED       0x00020000 - Internal, item was dropped by a creature and won&#039;t respawn.&lt;br /&gt;
                                  &amp;quot;Disappearing weapon&amp;quot;&lt;br /&gt;
  SHADOW        0x00040000 - Use fuzz draw effect like spectres, also causes aiming inaccuracy.&lt;br /&gt;
                                  &amp;quot;Partial invisibility&amp;quot;&lt;br /&gt;
  NOBLOOD       0x00080000 - Object puffs instead of bleeds when shot.&lt;br /&gt;
                                  &amp;quot;Puffs (vs. bleeds)&amp;quot;&lt;br /&gt;
  CORPSE        0x00100000 - Internal, object is dead and will slide down steps.&lt;br /&gt;
                                  &amp;quot;Sliding helpless&amp;quot;&lt;br /&gt;
  INFLOAT       0x00200000 - Internal, monster is floating but not to target height -- see notes.&lt;br /&gt;
                                  &amp;quot;No auto-leveling&amp;quot;&lt;br /&gt;
  COUNTKILL     0x00400000 - Can be targetted, adds 1 to kill percent when it dies -- see notes.&lt;br /&gt;
                                  &amp;quot;Affects Kill %&amp;quot;&lt;br /&gt;
  COUNTITEM     0x00800000 - Item adds 1 to item percent when collected.&lt;br /&gt;
                                  &amp;quot;Affects Item %&amp;quot;&lt;br /&gt;
  SKULLFLY      0x01000000 - Internal, special handling for flying skulls -- see notes.&lt;br /&gt;
                                  &amp;quot;Running&amp;quot;&lt;br /&gt;
  NOTDMATCH     0x02000000 - Thing will not be spawned at level start when in Deathmatch.&lt;br /&gt;
                                  &amp;quot;Not in deathmatch&amp;quot;&lt;br /&gt;
  TRANSLATION1  0x04000000 - Use translation table for color (players)&#039;.&lt;br /&gt;
  (aka TRANSLATION)               &amp;quot;Color 1 (gray/red)&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  TRANSLATION2  0x08000000 - Second bit for color translation;&lt;br /&gt;
  (aka UNUSED1)                   &amp;quot;Color 2 (brown/red)&amp;quot;&lt;br /&gt;
                                  &lt;br /&gt;
  TOUCHY        0x10000000 - Thing dies on contact with any solid object of another species;&lt;br /&gt;
  (aka UNUSED2)                    MBF Extension, see notes.&lt;br /&gt;
&lt;br /&gt;
  BOUNCES       0x20000000 - Thing may bounce off walls and ceilings;&lt;br /&gt;
  (aka UNUSED3)                    MBF Extension, see notes.&lt;br /&gt;
&lt;br /&gt;
  FRIEND        0x40000000 - All things of this type are allied with player;&lt;br /&gt;
  (aka UNUSED4)                    MBF Extension.&lt;br /&gt;
  &lt;br /&gt;
  TRANSLUCENT   0x80000000 - Apply BOOM-style translucency to sprite;&lt;br /&gt;
                                   BOOM Extension, see notes.&lt;br /&gt;
  ------------------------------------------------------------------                                   &lt;br /&gt;
Notes on Bits values: &lt;br /&gt;
&lt;br /&gt;
====NOSECTOR:====&lt;br /&gt;
This flag has some odd side effects. For a pure total invisibility effect, use the new DONTDRAW flag in the Bits2 field. &lt;br /&gt;
====JUSTHIT:====&lt;br /&gt;
This flag is for internal AI use, applying it to a thing will have more or less no effect. &lt;br /&gt;
==== JUSTATTACKED:====&lt;br /&gt;
As above. &lt;br /&gt;
==== PICKUP:====&lt;br /&gt;
Only the player should possess this flag. If monsters try to pick up items, results will be undefined. This may change in the future. &lt;br /&gt;
==== SLIDE:====&lt;br /&gt;
This flag has absolutely no effect and is never used anywhere. For compatibility, it must remain this way. A new flag, SLIDE, in the Bits3 field, DOES have this effect, however, and is used by the player object and Heretic pods, by default. &lt;br /&gt;
==== INFLOAT:====&lt;br /&gt;
This flag is for internal AI use only. &lt;br /&gt;
==== COUNTKILL:====&lt;br /&gt;
This flag actually has two effects. If a monster does not have the COUNTKILL flag, other monsters may ignore it, and some other engine features will not work properly for it. This is generally undesirable. A new Bits3 flag KILLABLE, used by the Lost Soul by default, allows monsters to behave normally even without having this flag. &lt;br /&gt;
==== SKULLFLY:====&lt;br /&gt;
This flag is for internal AI use only. &lt;br /&gt;
==== TOUCHY:====&lt;br /&gt;
This new MBF extension allows things to instantly die if any solid thing of a differing species touches it. Note that for purposes of this effect, Lost Souls and Pain Elementals are considered to be the same species. &lt;br /&gt;
==== BOUNCES:====&lt;br /&gt;
This flag declares that the thing is bouncy. The exact behavior of the thing can be modified by combining this with other flags in the following manners: &lt;br /&gt;
==== BOUNCES + MISSILE:====&lt;br /&gt;
Object bounces off of floors and ceilings only. &lt;br /&gt;
==== BOUNCES + NOGRAVITY:====&lt;br /&gt;
Object bounces off all surfaces without losing momentum, unless its also a missile. &lt;br /&gt;
==== BOUNCES + FLOAT:====&lt;br /&gt;
Without NOGRAVITY, allows monsters to jump to reach their target. &lt;br /&gt;
==== BOUNCES + FLOAT + DROPOFF:====&lt;br /&gt;
Allows even higher bouncing / jumping. &lt;br /&gt;
==== BOUNCES:====&lt;br /&gt;
When the flag is alone, without MISSILE, it allows the object to bounce off all surfaces, losing momentum at each contact. It can also roll up and down steps. This is highly realistic. &lt;br /&gt;
==== TRANSLUCENT:====&lt;br /&gt;
This thing will use the global BOOM translucency level for its sprite. If general translucency is off, it will draw normally. This effect is mutually exclusive with the new Eternity extension for translucency. If the latter is enabled, this flag will be turned off by the game at run-time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bits2 Mnemonics (Eternity extension)==&lt;br /&gt;
  Mnemonic      Bit mask     Meaning&lt;br /&gt;
  ------------------------------------------------------------------&lt;br /&gt;
  LOGRAV        0x00000001 - Thing experiences low gravity; see notes.&lt;br /&gt;
  &lt;br /&gt;
  NOSPLASH      0x00000002 - Thing cannot trigger TerrainTypes.&lt;br /&gt;
  &lt;br /&gt;
  NOSTRAFE      0x00000004 - Thing never uses advanced strafing logic.&lt;br /&gt;
  &lt;br /&gt;
  NORESPAWN     0x00000008 - Thing will not respawn in nightmare mode.&lt;br /&gt;
  &lt;br /&gt;
  ALWAYSRESPAWN 0x00000010 - Thing will respawn at any difficulty level.&lt;br /&gt;
  &lt;br /&gt;
  REMOVEDEAD    0x00000020 - Thing removes itself shortly after death; see notes.&lt;br /&gt;
  &lt;br /&gt;
  NOTHRUST      0x00000040 - Thing is unaffected by push/pull, wind, current, or conveyors.&lt;br /&gt;
  &lt;br /&gt;
  NOCROSS       0x00000080 - Thing cannot trigger crossable special lines.&lt;br /&gt;
  &lt;br /&gt;
  JUMPDOWN      0x00000100 - Thing, when friendly, can jump down to follow player.&lt;br /&gt;
  &lt;br /&gt;
  PUSHABLE      0x00000200 - Thing is pushable by other moving things.&lt;br /&gt;
  &lt;br /&gt;
  MAP07BOSS1    0x00000400 - Thing must be dead for MAP07 tag 666 special.&lt;br /&gt;
  &lt;br /&gt;
  MAP07BOSS2    0x00000800 - Thing must be dead for MAP07 tag 667 special.&lt;br /&gt;
  &lt;br /&gt;
  E1M8BOSS      0x00001000 - Thing must be dead for E1M8 tag 666 special.&lt;br /&gt;
  &lt;br /&gt;
  E2M8BOSS      0x00002000 - Thing must be dead for E2M8 end-level special.&lt;br /&gt;
  &lt;br /&gt;
  E3M8BOSS      0x00004000 - Thing must be dead for E3M8 end-level special.&lt;br /&gt;
  &lt;br /&gt;
  BOSS          0x00008000 - Thing is a boss; roars loud and is invincible to blast radii.&lt;br /&gt;
                                &lt;br /&gt;
  E4M6BOSS      0x00010000 - Thing must be dead for E4M6 tag 666 special.&lt;br /&gt;
  &lt;br /&gt;
  E4M8BOSS      0x00020000 - Thing must be dead for E4M8 tag 666 special.&lt;br /&gt;
  &lt;br /&gt;
  FOOTCLIP      0x00040000 - Thing lowers when on liquid terrain.&lt;br /&gt;
  &lt;br /&gt;
  FLOATBOB      0x00080000 - Thing floats up and down on z axis.&lt;br /&gt;
  &lt;br /&gt;
  DONTDRAW      0x00100000 - Thing is totally invisible; enemies cannot see player.&lt;br /&gt;
  &lt;br /&gt;
  SHORTMRANGE   0x00200000 - Thing has a shorter than normal missile range.&lt;br /&gt;
  &lt;br /&gt;
  LONGMELEE     0x00400000 - Thing has a longer than normal melee range.&lt;br /&gt;
  &lt;br /&gt;
  RANGEHALF     0x00800000 - Thing considers itself to be half as far from target.&lt;br /&gt;
  &lt;br /&gt;
  HIGHERMPROB   0x01000000 - Thing has a higher missile attack probability.&lt;br /&gt;
  &lt;br /&gt;
  CANTLEAVEFLOORPIC&lt;br /&gt;
                0x02000000 - Thing can only move into sectors with the same flat.&lt;br /&gt;
  &lt;br /&gt;
  SPAWNFLOAT    0x04000000 - Thing spawns with a randomized z coordinate.&lt;br /&gt;
  &lt;br /&gt;
  INVULNERABLE  0x08000000 - Thing is invulnerable to damage less than 10000 points.&lt;br /&gt;
  &lt;br /&gt;
  DORMANT       0x10000000 - Thing is invulnerable and inert until activated by script; see notes.&lt;br /&gt;
  &lt;br /&gt;
  SEEKERMISSILE 0x20000000 - Indicates that this thing may be used as a homing missile; see notes.&lt;br /&gt;
  &lt;br /&gt;
  DEFLECTIVE    0x40000000 - When paired with REFLECTIVE, thing will reflect at a wide angle.&lt;br /&gt;
  &lt;br /&gt;
  REFLECTIVE    0x80000000 - Thing reflects missile projectiles; see notes.&lt;br /&gt;
  ------------------------------------------------------------------                                   &lt;br /&gt;
Notes on Bits2 values: &lt;br /&gt;
&lt;br /&gt;
==== LOGRAV:====&lt;br /&gt;
Has no effect on BOUNCY things &lt;br /&gt;
==== REMOVEDEAD:====&lt;br /&gt;
Things with this flag also cannot respawn in Nightmare mode. Do not give the player this flag. &lt;br /&gt;
==== DORMANT:====&lt;br /&gt;
Does not function as expected unless a thing is spawned on the map at startup with the DORMANT mapthing flag set in the level itself. It cannot be switched on and off freely. &lt;br /&gt;
==== SEEKERMISSILE:====&lt;br /&gt;
This flag is used by reflection code to check if a missile is being used as a homing missile. When a homing missile with this flag is reflected, its tracer target will be set to the thing that fired it, so that it will properly home on its originator instead of its original target. &lt;br /&gt;
==== REFLECTIVE:====&lt;br /&gt;
Does not impart invulnerability, and unless paired with that flag, the object will take damage before bouncing the projectile back.&lt;br /&gt;
==Bits3 Mnemonics (Eternity extension)==&lt;br /&gt;
  Mnemonic      Bit mask     Meaning&lt;br /&gt;
  ------------------------------------------------------------------&lt;br /&gt;
  GHOST         0x00000001 - Thing is a Heretic-style ghost; enemies may not see player.&lt;br /&gt;
&lt;br /&gt;
  THRUGHOST     0x00000002 - Missiles with this flag pass through GHOST objects.&lt;br /&gt;
&lt;br /&gt;
  NODMGTHRUST   0x00000004 - Things aren&#039;t thrusted when damaged by this thing.&lt;br /&gt;
&lt;br /&gt;
  ACTSEESOUND   0x00000008 - Thing may make see sound instead of active sound; 50% chance.&lt;br /&gt;
&lt;br /&gt;
  LOUDACTIVE    0x00000010 - Thing makes its active sound at full volume.&lt;br /&gt;
&lt;br /&gt;
  E5M8BOSS      0x00000020 - Thing is a boss on Heretic level E5M8.&lt;br /&gt;
&lt;br /&gt;
  DMGIGNORED    0x00000040 - Other things will not fight this thing if damaged by it.&lt;br /&gt;
&lt;br /&gt;
  BOSSIGNORE    0x00000080 - Things won&#039;t fight other species with this flag.&lt;br /&gt;
&lt;br /&gt;
  SLIDE         0x00000100 - Thing can slide against walls; see notes.&lt;br /&gt;
&lt;br /&gt;
  TELESTOMP     0x00000200 - Thing can telefrag other things.&lt;br /&gt;
&lt;br /&gt;
  WINDTHRUST    0x00000400 - Thing is affected by Heretic-style wind sectors; see notes.&lt;br /&gt;
  &lt;br /&gt;
  FIREDAMAGE    0x00000800 - Reserved; currently has no effect.&lt;br /&gt;
  &lt;br /&gt;
  KILLABLE      0x00001000 - Thing doesn&#039;t count for kill %, but is still an enemy; see notes.&lt;br /&gt;
  &lt;br /&gt;
  DEADFLOAT     0x00002000 - Flying thing won&#039;t drop to the ground when killed.&lt;br /&gt;
  &lt;br /&gt;
  NOTHRESHOLD   0x00004000 - Thing has no threshold for acquiring a new target.&lt;br /&gt;
  &lt;br /&gt;
  FLOORMISSILE  0x00008000 - Missile can step up/down any height changes when on ground.&lt;br /&gt;
  &lt;br /&gt;
  SUPERITEM     0x00010000 - Item respawns only if the &amp;quot;super items respawn&amp;quot; DMFLAG is on.&lt;br /&gt;
  &lt;br /&gt;
  NOITEMRESP    0x00020000 - Item never respawns, and will not be crushed.&lt;br /&gt;
  &lt;br /&gt;
  SUPERFRIEND   0x00040000 - Thing never attacks other friends when friendly.&lt;br /&gt;
  &lt;br /&gt;
  INVULNCHARGE  0x00080000 - Thing is invulnerable when SKULLFLY flag is set.&lt;br /&gt;
  &lt;br /&gt;
  EXPLOCOUNT    0x00100000 - Missile will not explode if Counter 1 &amp;lt; Counter 2.&lt;br /&gt;
                             Counter 1 will be incremented at each explosion attempt.&lt;br /&gt;
                             &lt;br /&gt;
  CANNOTPUSH    0x00200000 - Thing cannot push things with the PUSHABLE flag.&lt;br /&gt;
  &lt;br /&gt;
  TLSTYLEADD    0x00400000 - Thing uses additive translucency style.&lt;br /&gt;
  &lt;br /&gt;
  SPACMONSTER   0x00800000 - Thing can activate parameterized line specials which bear&lt;br /&gt;
                             the MONSTER activation flag.&lt;br /&gt;
                             &lt;br /&gt;
  SPACMISSILE   0x01000000 - Thing can activate parameterized line specials which bear&lt;br /&gt;
                             the MISSILE activation flag.&lt;br /&gt;
  &lt;br /&gt;
  NOFRIENDDMG   0x02000000 - Thing will not be damaged by things with the FRIEND flag.&lt;br /&gt;
  &lt;br /&gt;
  3DDECORATION  0x04000000 - Thing is a decoration which, when 3D object clipping is&lt;br /&gt;
                             active, will NOT use its corrected height, even if one&lt;br /&gt;
                             is specified in its EDF thingtype definition.&lt;br /&gt;
&lt;br /&gt;
  ALWAYSFAST    0x08000000 - Thing has -fast/Nightmare mode attack speed behavior in&lt;br /&gt;
                             any difficulty level.&lt;br /&gt;
                             &lt;br /&gt;
  PASSMOBJ      0x10000000 - Thing is fully treated with respect to 3D object clipping.&lt;br /&gt;
                             All monsters and other moving solid things should have this&lt;br /&gt;
                             flag.&lt;br /&gt;
                             &lt;br /&gt;
  DONTOVERLAP   0x20000000 - This thing type prefers not to overlap with other things&lt;br /&gt;
                             vertically when possible.&lt;br /&gt;
  ------------------------------------------------------------------&lt;br /&gt;
Notes on Bits3 values: &lt;br /&gt;
&lt;br /&gt;
====SLIDE:====&lt;br /&gt;
As noted in the documentation for Bits flag SLIDE, it does nothing. This flag, however, actually works, and is used by the player and by Heretic pods. &lt;br /&gt;
==== WINDTHRUST:====&lt;br /&gt;
This controls only which things are affected by the new Heretic wind special, controlled by control linedef type 293. Any thing type with this flag will experience thrust relative to the angle and magnitude of the control linedef when it is anywhere within a tagged sector. &lt;br /&gt;
==== KILLABLE:====&lt;br /&gt;
As noted in the documentation for Bits flag COUNTKILL, enemies without that flag normally suffer severe side-effects. This new flag generalizes what was previously a special case for the Lost Soul, and allows enemies which don&#039;t count toward the kill percentage to be otherwise normal.&lt;br /&gt;
[[Category:dehacked]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=A_BulletAttack&amp;diff=6396</id>
		<title>A BulletAttack</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=A_BulletAttack&amp;diff=6396"/>
		<updated>2026-02-16T16:14:31Z</updated>

		<summary type="html">&lt;p&gt;Printz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{codepointer|description=Powerful codepointer which allows construction of custom monster bullet attacks. This pointer is capable of emulating any of the built-in player or monster bullet attacks, as well creating many completely new ones (including a super shotgun attack for monsters).|usage=&#039;&#039;&#039;BulletAttack&#039;&#039;&#039;(&#039;&#039;sound&#039;&#039;, &#039;&#039;accuracy&#039;&#039;, &#039;&#039;number&#039;&#039;, &#039;&#039;factor&#039;&#039;, &#039;&#039;modulus&#039;&#039;, &#039;&#039;pufftype&#039;&#039;)&lt;br /&gt;
|parameters=*sound = name or Dehacked number of sound to play (default of 0 = no sound) &lt;br /&gt;
*accuracy = Select accuracy (default of 0 = 1) &lt;br /&gt;
**1 or &#039;&#039;&#039;ba_always&#039;&#039;&#039; = Always accurate &lt;br /&gt;
**2 or &#039;&#039;&#039;ba_never&#039;&#039;&#039; = Never accurate (moderate horizontal spread with no vertical error) &lt;br /&gt;
**3 or &#039;&#039;&#039;ba_ssg&#039;&#039;&#039; = Super Shotgun accuracy (wide horizontal spread with moderate vertical error) &lt;br /&gt;
**4 or &#039;&#039;&#039;ba_monster&#039;&#039;&#039; = Monster accuracy (very wide horizontal spread) &lt;br /&gt;
*number = Number of bullet tracers to fire (default of 0 = 0) &lt;br /&gt;
*factor = Damage factor (Damage formula is: &amp;lt;code&amp;gt;factor * (rnd() % modulus + 1)&amp;lt;/code&amp;gt;)&lt;br /&gt;
*modulus = Damage modulus (Forced into range of 1 to 256) &lt;br /&gt;
*pufftype = name of EDF [[pufftype]] to use when hitting walls. Default type is the one designated for the game.&lt;br /&gt;
|notes=The accuracy parameter for this pointer differs slightly from the Args2 parameter to the [[FireCustomBullets]] player codepointer. The value which allows &amp;quot;first fire only&amp;quot; accuracy is not available for monsters.&lt;br /&gt;
&lt;br /&gt;
This codepointer is specific for Eternity. For the one from the MBF21 standard, see [[MonsterBulletAttack]].&lt;br /&gt;
|seealso=&lt;br /&gt;
*[[MissileAttack]]&lt;br /&gt;
*[[MonsterBulletAttack]]}}&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=A_BulletAttack&amp;diff=6395</id>
		<title>A BulletAttack</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=A_BulletAttack&amp;diff=6395"/>
		<updated>2026-02-16T16:14:05Z</updated>

		<summary type="html">&lt;p&gt;Printz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{codepointer|description=Powerful codepointer which allows construction of custom monster bullet attacks. This pointer is capable of emulating any of the built-in player or monster bullet attacks, as well creating many completely new ones (including a super shotgun attack for monsters).|usage=&#039;&#039;&#039;BulletAttack&#039;&#039;&#039;(&#039;&#039;sound&#039;&#039;, &#039;&#039;accuracy&#039;&#039;, &#039;&#039;number&#039;&#039;, &#039;&#039;factor&#039;&#039;, &#039;&#039;modulus&#039;&#039;, &#039;&#039;pufftype&#039;&#039;)&lt;br /&gt;
|parameters=*sound = name or Dehacked number of sound to play (default of 0 = no sound) &lt;br /&gt;
*accuracy = Select accuracy (default of 0 = 1) &lt;br /&gt;
**1 or &#039;&#039;&#039;ba_always&#039;&#039;&#039; = Always accurate &lt;br /&gt;
**2 or &#039;&#039;&#039;ba_never&#039;&#039;&#039; = Never accurate (moderate horizontal spread with no vertical error) &lt;br /&gt;
**3 or &#039;&#039;&#039;ba_ssg&#039;&#039;&#039; = Super Shotgun accuracy (wide horizontal spread with moderate vertical error) &lt;br /&gt;
**4 or &#039;&#039;&#039;ba_monster&#039;&#039;&#039; = Monster accuracy (very wide horizontal spread) &lt;br /&gt;
*number = Number of bullet tracers to fire (default of 0 = 0) &lt;br /&gt;
*factor = Damage factor (Damage formula is: &amp;lt;code&amp;gt;factor * (rnd() % modulus + 1)&amp;lt;/code&amp;gt;)&lt;br /&gt;
*modulus = Damage modulus (Forced into range of 1 to 256) &lt;br /&gt;
*pufftype = name of EDF [[pufftype]] to use when hitting walls. Default type is the one designated for the game.&lt;br /&gt;
|notes=The accuracy parameter for this pointer differs slightly from the Args2 parameter to the [[FireCustomBullets]] player codepointer. The value which allows &amp;quot;first fire only&amp;quot; accuracy is not available for monsters.&lt;br /&gt;
&lt;br /&gt;
This codepointer is specific for Eternity. For the one from the MBF21, see [[MonsterBulletAttack]].&lt;br /&gt;
|seealso=&lt;br /&gt;
*[[MissileAttack]]&lt;br /&gt;
*[[MonsterBulletAttack]]}}&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=MonsterBulletAttack&amp;diff=6394</id>
		<title>MonsterBulletAttack</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=MonsterBulletAttack&amp;diff=6394"/>
		<updated>2026-02-16T16:12:34Z</updated>

		<summary type="html">&lt;p&gt;Printz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{codepointer|&lt;br /&gt;
description=Generic monster bullet attack. This is from the MBF21 standard.&lt;br /&gt;
|usage=&#039;&#039;&#039;MonsterBulletAttack(&#039;&#039;horizontal_spread&#039;&#039;, &#039;&#039;vertical_spread&#039;&#039;, &#039;&#039;number_of_bullets&#039;&#039;, &#039;&#039;base_damage&#039;&#039;, &#039;&#039;random_multiplier&#039;&#039;)&lt;br /&gt;
|parameters=&lt;br /&gt;
*&#039;&#039;horizontal_spread&#039;&#039;: in degrees (accepts decimal point). Default: 0 (perfectly precise horizontally)&lt;br /&gt;
*&#039;&#039;vertical_spread&#039;&#039;: in degrees (accepts decimal point). Default: 0 (perfectly precise vertically)&lt;br /&gt;
*&#039;&#039;number_of_bullets&#039;&#039;: how many bullet tracers to fire. Default: 1&lt;br /&gt;
*&#039;&#039;base_damage&#039;&#039;: base damage of attack, which will be multiplied by 1 up to &#039;&#039;random_multiplier&#039;&#039; inclusive. Default: 3&lt;br /&gt;
*&#039;&#039;random_multiplier&#039;&#039;: maximum multiplier of &#039;&#039;base_damage&#039;&#039;. Default: 5. Must not be 0.&lt;br /&gt;
|notes=&lt;br /&gt;
The damage formula is &#039;&#039;base_damage&#039;&#039; * random(1, &#039;&#039;random_multiplier&#039;&#039;).&lt;br /&gt;
|seealso=&lt;br /&gt;
*[[BulletAttack]]}}&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=A_BulletAttack&amp;diff=6393</id>
		<title>A BulletAttack</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=A_BulletAttack&amp;diff=6393"/>
		<updated>2026-02-16T16:11:27Z</updated>

		<summary type="html">&lt;p&gt;Printz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{codepointer|description=Powerful codepointer which allows construction of custom monster bullet attacks. This pointer is capable of emulating any of the built-in player or monster bullet attacks, as well creating many completely new ones (including a super shotgun attack for monsters).|usage=&#039;&#039;&#039;BulletAttack&#039;&#039;&#039;(&#039;&#039;sound&#039;&#039;, &#039;&#039;accuracy&#039;&#039;, &#039;&#039;number&#039;&#039;, &#039;&#039;factor&#039;&#039;, &#039;&#039;modulus&#039;&#039;, &#039;&#039;pufftype&#039;&#039;)&lt;br /&gt;
|parameters=*sound = name or Dehacked number of sound to play (default of 0 = no sound) &lt;br /&gt;
*accuracy = Select accuracy (default of 0 = 1) &lt;br /&gt;
**1 or &#039;&#039;&#039;ba_always&#039;&#039;&#039; = Always accurate &lt;br /&gt;
**2 or &#039;&#039;&#039;ba_never&#039;&#039;&#039; = Never accurate (moderate horizontal spread with no vertical error) &lt;br /&gt;
**3 or &#039;&#039;&#039;ba_ssg&#039;&#039;&#039; = Super Shotgun accuracy (wide horizontal spread with moderate vertical error) &lt;br /&gt;
**4 or &#039;&#039;&#039;ba_monster&#039;&#039;&#039; = Monster accuracy (very wide horizontal spread) &lt;br /&gt;
*number = Number of bullet tracers to fire (default of 0 = 0) &lt;br /&gt;
*factor = Damage factor (Damage formula is: &amp;lt;code&amp;gt;factor * (rnd() % modulus + 1)&amp;lt;/code&amp;gt;)&lt;br /&gt;
*modulus = Damage modulus (Forced into range of 1 to 256) &lt;br /&gt;
*pufftype = name of EDF [[pufftype]] to use when hitting walls. Default type is the one designated for the game.&lt;br /&gt;
|notes=The accuracy parameter for this pointer differs slightly from the Args2 parameter to the [[FireCustomBullets]] player codepointer. The value which allows &amp;quot;first fire only&amp;quot; accuracy is not available for monsters.&lt;br /&gt;
|seealso=&lt;br /&gt;
*[[MonsterBulletAttack]]&lt;br /&gt;
*[[MissileAttack]]}}&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=UDMF&amp;diff=6392</id>
		<title>UDMF</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=UDMF&amp;diff=6392"/>
		<updated>2026-02-15T18:28:05Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Explanation of fields */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;UDMF is the extensible format that replaces the classic Doom format and [[ExtraData]]. Each level, instead of being defined by the classic lumps (THINGS, LINEDEFS, SIDEDEFS etc.) is defined by a human-readable lump named TEXTMAP, and can have associated lumps (e.g. ZNODES, BLOCKMAP, REJECT if needed) and other lumps, until a marker lump named ENDMAP.&lt;br /&gt;
&lt;br /&gt;
TEXTMAP has a well-defined language. Check the UDMF article at doomwiki.org. Each game and port has its own namespace(s), for example we have these namespaces: &amp;quot;doom&amp;quot;, &amp;quot;heretic&amp;quot;, &amp;quot;hexen&amp;quot;, &amp;quot;strife&amp;quot;, &amp;quot;zdoom&amp;quot; and others. Eternity has the &amp;quot;eternity&amp;quot; namespace.&lt;br /&gt;
&lt;br /&gt;
At its core, UDMF is made of many blocks, each titled &amp;quot;vertex&amp;quot;, &amp;quot;sector&amp;quot;, &amp;quot;sidedef&amp;quot;, &amp;quot;linedef&amp;quot;, &amp;quot;thing&amp;quot; and containing several properties, some mandatory, others optional. Each game or port namespace can define its own set, which is typically hard-coded, though it&#039;s also possible for the user to add their own fields (which have to be preceded by a safe prefix, to avoid conflicts with the standard).&lt;br /&gt;
&lt;br /&gt;
Maps designed in UDMF no longer need ExtraData.&lt;br /&gt;
&lt;br /&gt;
The standard was defined by James &amp;quot;Quasar&amp;quot; Haley and has also been successfully implemented in Vavoom, ZDoom and the ZDoom-derivative ports.&lt;br /&gt;
&lt;br /&gt;
* See also the [https://www.doomworld.com/eternity/engine/stuff/udmf11.txt base UDMF specifications]&lt;br /&gt;
&lt;br /&gt;
==Basics==&lt;br /&gt;
&lt;br /&gt;
Eternity supports the &amp;quot;doom&amp;quot; and &amp;quot;eternity&amp;quot; namespaces. In the rest of this article, we&#039;ll detail the &amp;quot;eternity&amp;quot; namespace. See the [https://www.doomworld.com/eternity/engine/stuff/udmf11.txt base UDMF specifications] for the options not detailed in this document.&lt;br /&gt;
&lt;br /&gt;
A TEXTMAP for Eternity must start with this:&lt;br /&gt;
 namespace = &amp;quot;eternity&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
===Eternity compatibility===&lt;br /&gt;
You can also add the following field in UDMF TEXTMAP:&lt;br /&gt;
 ee_compat = true;&lt;br /&gt;
which, no matter the namespace used (e.g. &amp;quot;zdoom&amp;quot;), assumes the map is going to work in Eternity. In other words, it is equivalent to setting namespace as &amp;quot;eternity&amp;quot;. Any fields not supported by Eternity, however, may make the mod fail.&lt;br /&gt;
&lt;br /&gt;
===Node format===&lt;br /&gt;
&lt;br /&gt;
Nodes for UDMF use the uncompressed GL-nodes format under the ZNODES name. Tools such as ZDBSP should build such a lump upon detecting a TEXTMAP lump.&lt;br /&gt;
&lt;br /&gt;
==Linedefs==&lt;br /&gt;
 linedef&lt;br /&gt;
 {&lt;br /&gt;
   blocklandmonsters = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   blockplayers = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   polycross = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   monstershoot = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   midtex3d = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   firstsideonly = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   blockeverything = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   zoneboundary = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   clipmidtex = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   midtex3dimpassible = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   lowerportal = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   upperportal = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   portal = &amp;lt;integer&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   alpha = &amp;lt;floating-point&amp;gt;;        // default 1.0&lt;br /&gt;
   renderstyle = &amp;lt;string&amp;gt;;&lt;br /&gt;
   tranmap = &amp;lt;string&amp;gt;;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
*&#039;&#039;&#039;blocklandmonsters&#039;&#039;&#039;&lt;br /&gt;
:If true, linedef blocks walking monsters but allows fliers to pass. Players can pass anyway.&lt;br /&gt;
*&#039;&#039;&#039;blockplayers&#039;&#039;&#039;&lt;br /&gt;
:If true, linedef blocks players but allows monsters and projectiles to pass.&lt;br /&gt;
*&#039;&#039;&#039;polycross&#039;&#039;&#039;&lt;br /&gt;
:If true, linedef is activated when a polyobject&#039;s center point crosses it.&lt;br /&gt;
*&#039;&#039;&#039;monstershoot&#039;&#039;&#039;&lt;br /&gt;
:If true, linedef is activated when a monster fires hitscan on it.&lt;br /&gt;
*&#039;&#039;&#039;midtex3d&#039;&#039;&#039;&lt;br /&gt;
:If true, this linedef&#039;s middle texture uses [[3DMidTex_tutorial|3dmidtex]] physics.&lt;br /&gt;
*&#039;&#039;&#039;firstsideonly&#039;&#039;&#039;&lt;br /&gt;
:Linedef can only be activated from front side.&lt;br /&gt;
*&#039;&#039;&#039;blockeverything&#039;&#039;&#039;&lt;br /&gt;
:Linedef blocks all objects, acting like an external solid wall&lt;br /&gt;
*&#039;&#039;&#039;zoneboundary&#039;&#039;&#039;&lt;br /&gt;
:Linedef acts like a boundary for [[EDF_sound_reference#Sound_environments|reverb]] effects.&lt;br /&gt;
*&#039;&#039;&#039;clipmidtex&#039;&#039;&#039;&lt;br /&gt;
:Middle texture is clipped against the floor or ceiling as if a light change took place.&lt;br /&gt;
*&#039;&#039;&#039;midtex3dimpassible&#039;&#039;&#039;&lt;br /&gt;
:Treat the 3dmidtex line as a classic impassable middle texture, with regards to projectiles (i.e. they will pass through, just like hitscans).&lt;br /&gt;
*&#039;&#039;&#039;lowerportal&#039;&#039;&#039;, &#039;&#039;&#039;upperportal&#039;&#039;&#039;&lt;br /&gt;
:Apply [[edge portals|edge portal]] on the lower or upper part of this linedef, copying back sector&#039;s floor or ceiling portal into it.&lt;br /&gt;
*&#039;&#039;&#039;portal&#039;&#039;&#039;&lt;br /&gt;
:The ID of the portal to apply on this linedef, as defined from [[Portal_Define]]&lt;br /&gt;
*&#039;&#039;&#039;alpha&#039;&#039;&#039; (default: 1.0)&lt;br /&gt;
:Opacity of this line.&lt;br /&gt;
*&#039;&#039;&#039;renderstyle&#039;&#039;&#039;&lt;br /&gt;
:Either &amp;quot;translucent&amp;quot; or &amp;quot;add&amp;quot;. Default is &amp;quot;&amp;quot;.&lt;br /&gt;
*&#039;&#039;&#039;tranmap&#039;&#039;&#039;&lt;br /&gt;
:Boom [[translucency map]]. Mutually exclusive with alpha and renderstyle.&lt;br /&gt;
&lt;br /&gt;
==Sidedefs==&lt;br /&gt;
 sidedef&lt;br /&gt;
 {&lt;br /&gt;
   offsetx = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   offsety = &amp;lt;floating-point&amp;gt;; &lt;br /&gt;
   offsetx_top = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   offsety_top = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   offsetx_mid = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   offsety_mid = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   offsetx_bottom = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   offsety_bottom = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   light = &amp;lt;integer&amp;gt;;&lt;br /&gt;
   lightabsolute = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   light_top = &amp;lt;integer&amp;gt;;&lt;br /&gt;
   lightabsolute_top = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   light_mid = &amp;lt;integer&amp;gt;;&lt;br /&gt;
   lightabsolute_mid = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   light_bottom = &amp;lt;integer&amp;gt;;&lt;br /&gt;
   lightabsolute_bottom = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   skew_top_type = &amp;lt;string&amp;gt;;&lt;br /&gt;
   skew_middle_type = &amp;lt;string&amp;gt;;&lt;br /&gt;
   skew_bottom_type = &amp;lt;string&amp;gt;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
*&#039;&#039;&#039;offsetx&#039;&#039;&#039;, &#039;&#039;&#039;offsety&#039;&#039;&#039;&lt;br /&gt;
:Overall horizontal and vertical offsets for the top, middle, and bottom textures of this sidedef.&lt;br /&gt;
*&#039;&#039;&#039;offsetx_top&#039;&#039;&#039;, &#039;&#039;&#039;offsety_top&#039;&#039;&#039;, &#039;&#039;&#039;offsetx_mid&#039;&#039;&#039;, &#039;&#039;&#039;offsety_mid&#039;&#039;&#039;, &#039;&#039;&#039;offsetx_bottom&#039;&#039;&#039;, &#039;&#039;&#039;offsety_bottom&#039;&#039;&#039;&lt;br /&gt;
:Horizontal and vertical offsets for the individual top, middle, and bottom portions of this sidedef.&lt;br /&gt;
*&#039;&#039;&#039;light&#039;&#039;&#039;, &#039;&#039;&#039;light_top&#039;&#039;&#039;, &#039;&#039;&#039;light_mid&#039;&#039;&#039;, &#039;&#039;&#039;light_bottom&#039;&#039;&#039;, &#039;&#039;&#039;lightabsolute&#039;&#039;&#039;, &#039;&#039;&#039;lightabsolute_top&#039;&#039;&#039;, &#039;&#039;&#039;lightabsolute_mid&#039;&#039;&#039;, &#039;&#039;&#039;lightabsolute_bottom&#039;&#039;&#039;&lt;br /&gt;
:Brightness for the whole, and the individual top, middle, and bottom portions of this sidedef. By default the values are additive to the inherited brightness. If the &amp;quot;absolute&amp;quot; properties are set to &amp;quot;true&amp;quot; the values are not additive anymore, but absolute.&lt;br /&gt;
*&#039;&#039;&#039;skew_top_type&#039;&#039;&#039;, &#039;&#039;&#039;skew_bottom_type&#039;&#039;&#039;, &#039;&#039;&#039;skew_middle_type&#039;&#039;&#039;&lt;br /&gt;
:The type of skewing that the a given texture of this sidedef has. This skew starts at the left side of the sidedef (if viewing the sidedef straight-on) and conforms to either the slope on the front or back side of the line the sidedef is on. Either the floor or ceiling slope can be picked as the slope for the skewing to conform to. Values are &amp;quot;none&amp;quot;, &amp;quot;front_floor&amp;quot;, &amp;quot;front_ceiling&amp;quot;, &amp;quot;back_floor&amp;quot;, and &amp;quot;back_ceiling&amp;quot;, with &amp;quot;none&amp;quot; being the default.&lt;br /&gt;
&lt;br /&gt;
==Vertices==&lt;br /&gt;
No change yet from the base &amp;quot;doom&amp;quot; namespace.&lt;br /&gt;
==Sectors==&lt;br /&gt;
 sector&lt;br /&gt;
 {&lt;br /&gt;
   heightfloor = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   heightceiling = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   xpanningfloor = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   ypanningfloor = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   xpanningceiling = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   ypanningceiling = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   xscalefloor = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   yscalefloor = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   xscaleceiling = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   yscaleceiling = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   rotationfloor = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   rotationceiling = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   secret = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   friction = &amp;lt;integer&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   leakiness = &amp;lt;integer&amp;gt;;&lt;br /&gt;
   damageamount = &amp;lt;integer&amp;gt;;&lt;br /&gt;
   damageinterval = &amp;lt;integer&amp;gt;;&lt;br /&gt;
   damage_endgodmode = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   damage_exitlevel = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   damageterraineffect = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   damagetype = &amp;lt;string&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   floorterrain = &amp;lt;string&amp;gt;;&lt;br /&gt;
   ceilingterrain = &amp;lt;string&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   lightfloor = &amp;lt;integer&amp;gt;;&lt;br /&gt;
   lightceiling = &amp;lt;integer&amp;gt;;&lt;br /&gt;
   lightfloorabsolute = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   lightceilingabsolute = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   phasedlight = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   lightsequence = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   lightseqalt = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   colormaptop = &amp;lt;string&amp;gt;;&lt;br /&gt;
   colormapmid = &amp;lt;string&amp;gt;;&lt;br /&gt;
   colormapbottom = &amp;lt;string&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   scroll_ceil_x = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   scroll_ceil_y = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   scroll_ceil_type = &amp;lt;string&amp;gt;;&lt;br /&gt;
   scroll_floor_x = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   scroll_floor_y = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   scroll_floor_type = &amp;lt;string&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   floorid = &amp;lt;integer&amp;gt;;&lt;br /&gt;
   ceilingid = &amp;lt;integer&amp;gt;;&lt;br /&gt;
   attachfloor = &amp;lt;integer&amp;gt;;&lt;br /&gt;
   attachceiling = &amp;lt;integer&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   soundsequence = &amp;lt;string&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   portalfloor = &amp;lt;integer&amp;gt;;&lt;br /&gt;
   portalceiling = &amp;lt;integer&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   portal_floor_disabled = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   portal_floor_norender = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   portal_floor_nopass = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   portal_floor_blocksound = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   portal_floor_useglobaltex = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   portal_floor_overlaytype = &amp;lt;string&amp;gt;;&lt;br /&gt;
   alphafloor = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   portal_floor_attached = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
   portal_ceil_disabled = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   portal_ceil_norender = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   portal_ceil_nopass = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   portal_ceil_blocksound = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   portal_ceil_useglobaltex = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
   portal_ceil_overlaytype = &amp;lt;string&amp;gt;;&lt;br /&gt;
   alphaceiling = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
   portal_ceil_attached = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Explanation of fields ===&lt;br /&gt;
*&#039;&#039;&#039;heightfloor&#039;&#039;&#039;, &#039;&#039;&#039;heightceiling&#039;&#039;&#039; (mandatory)&lt;br /&gt;
:Unlike the base field from the core specs, these ones allow floating-point values.&lt;br /&gt;
*&#039;&#039;&#039;xpanningfloor&#039;&#039;&#039;, &#039;&#039;&#039;ypanningfloor&#039;&#039;&#039;, &#039;&#039;&#039;xpanningceiling&#039;&#039;&#039;, &#039;&#039;&#039;ypanningceiling&#039;&#039;&#039;&lt;br /&gt;
:These properties control the panning of the floor or ceiling flat.&lt;br /&gt;
*&#039;&#039;&#039;xscalefloor&#039;&#039;&#039;, &#039;&#039;&#039;yscalefloor&#039;&#039;&#039;, &#039;&#039;&#039;xscaleceiling&#039;&#039;&#039;, &#039;&#039;&#039;yscaleceiling&#039;&#039;&#039; (default: 1.0)&lt;br /&gt;
:These properties control the scaling of the floor or ceiling flat. Greater values result in smaller textures.&lt;br /&gt;
*&#039;&#039;&#039;rotationfloor&#039;&#039;&#039;, &#039;&#039;&#039;rotationceiling&#039;&#039;&#039;&lt;br /&gt;
:These properties control the clockwise rotation of the floor or ceiling flat, in degrees.&lt;br /&gt;
*&#039;&#039;&#039;secret&#039;&#039;&#039;&lt;br /&gt;
:If true, the sector counts as a secret when visited by player.&lt;br /&gt;
*&#039;&#039;&#039;friction&#039;&#039;&#039; (default: -1)&lt;br /&gt;
:This one controls the friction of movement on the floor. The value of this field is equivalent to the length of a horizontal linedef with the classic Boom friction special. Default value: -1 (use usual Doom friction).&lt;br /&gt;
*&#039;&#039;&#039;leakiness&#039;&#039;&#039;&lt;br /&gt;
:This one controls the probability that, if this sector is also damaging, it will leak damage through the radiation suit. As reference, the classic Doom 20% sector has 5 leakiness. For damage which always goes through the suit, use 256.&lt;br /&gt;
*&#039;&#039;&#039;damageamount&#039;&#039;&#039;&lt;br /&gt;
:Damage per hit for players on the floor.&lt;br /&gt;
*&#039;&#039;&#039;damageinterval&#039;&#039;&#039;&lt;br /&gt;
:Time between hits. The classic Doom damaging floors use a 32 period.&lt;br /&gt;
*&#039;&#039;&#039;damage_endgodmode&#039;&#039;&#039;&lt;br /&gt;
:If true, it will cause the damaging floor to disable the godmode cheat.&lt;br /&gt;
*&#039;&#039;&#039;damage_exitlevel&#039;&#039;&#039;&lt;br /&gt;
:If true, it will cause the damaging floor to exit the level in victory if the player has too little health.&lt;br /&gt;
*&#039;&#039;&#039;damageterraineffect&#039;&#039;&#039;&lt;br /&gt;
:If true, then each damage hit will produce a splash, like the Heretic lava.&lt;br /&gt;
*&#039;&#039;&#039;damagetype&#039;&#039;&#039; (default: &amp;quot;Unknown&amp;quot;)&lt;br /&gt;
:The [[damagetype|damage type]] of the floor. For Doom damaging floors you can use &amp;quot;Slime&amp;quot;.&lt;br /&gt;
*&#039;&#039;&#039;floorterrain&#039;&#039;&#039; (default: &amp;quot;@flat&amp;quot;)&lt;br /&gt;
:The [[terrain]] effect of the floor.&lt;br /&gt;
*&#039;&#039;&#039;ceilingterrain&#039;&#039;&#039; (default: &amp;quot;@flat&amp;quot;)&lt;br /&gt;
:The [[terrain]] effect of the ceiling. Currently used for particle recolouring.&lt;br /&gt;
*&#039;&#039;&#039;lightfloor&#039;&#039;&#039;, &#039;&#039;&#039;lightceiling&#039;&#039;&#039;&lt;br /&gt;
:The light amount to add to the floor or ceiling, relative to the designated light level.&lt;br /&gt;
*&#039;&#039;&#039;lightfloorabsolute&#039;&#039;&#039;, &#039;&#039;&#039;lightceilingabsolute&#039;&#039;&#039;&lt;br /&gt;
:If true, then &#039;&#039;&#039;lightfloor&#039;&#039;&#039; or &#039;&#039;&#039;lightceiling&#039;&#039;&#039; just overrides the light.&lt;br /&gt;
* phasedlight = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
:Equivalent to ExtraData flag.&lt;br /&gt;
* lightsequence = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
:Equivalent to ExtraData flag.&lt;br /&gt;
* lightseqalt = &amp;lt;boolean&amp;gt;;&lt;br /&gt;
:Equivalent to ExtraData flag.&lt;br /&gt;
*&#039;&#039;&#039;colormaptop&#039;&#039;&#039;, &#039;&#039;&#039;colormapmid&#039;&#039;&#039;, &#039;&#039;&#039;colormapbottom&#039;&#039;&#039; (default: &amp;quot;@default&amp;quot;)&lt;br /&gt;
:The colormap to set for the top, normal or bottom part of a Boom sector with fake flats. Or for any normal part, if it&#039;s &#039;&#039;&#039;colormapmid&#039;&#039;&#039;. Use a lump from between &#039;&#039;&#039;C_START&#039;&#039;&#039; and &#039;&#039;&#039;C_END&#039;&#039;&#039;. &amp;quot;WATERMAP&amp;quot; and &amp;quot;LAVAMAP&amp;quot; are provided by Eternity.&lt;br /&gt;
*&#039;&#039;&#039;scroll_ceil_x&#039;&#039;&#039;, &#039;&#039;&#039;scroll_ceil_y&#039;&#039;&#039;, &#039;&#039;&#039;scroll_floor_x&#039;&#039;&#039;, &#039;&#039;&#039;scroll_floor_y&#039;&#039;&#039;&lt;br /&gt;
:These fields make the sector ceiling or floor scroll at startup. The values you input there are the equivalents of a Boom trigger linedef length divided by 10. So to emulate a linedef pointing east of length 64 having a scroll trigger, set value 6.4 on &#039;&#039;&#039;scroll_ceil_x&#039;&#039;&#039; or &#039;&#039;&#039;scroll_floor_x&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;scroll_ceil_type&#039;&#039;&#039;, &#039;&#039;&#039;scroll_floor_type&#039;&#039;&#039; (default: &amp;quot;none&amp;quot;)&lt;br /&gt;
:These fields control the kind of scrolling for each surface and can be: &amp;quot;none&amp;quot; (no scrolling enabled), &amp;quot;visual&amp;quot; (only scroll the texture), &amp;quot;physical&amp;quot; (only carry the things), &amp;quot;both&amp;quot; (both scroll and carry). For now, &#039;&#039;&#039;scroll_ceil_type&#039;&#039;&#039; only supports &amp;quot;none&amp;quot; or &amp;quot;visual&amp;quot;.&lt;br /&gt;
*&#039;&#039;&#039;floorid&#039;&#039;&#039;, &#039;&#039;&#039;ceilingid&#039;&#039;&#039;&lt;br /&gt;
:ID of the floor or ceiling of this sector to use for [[attached surfaces]]. Use this id in &#039;&#039;&#039;attachfloor&#039;&#039;&#039; and &#039;&#039;&#039;attachceiling&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;attachfloor&#039;&#039;&#039;, &#039;&#039;&#039;attachceiling&#039;&#039;&#039;&lt;br /&gt;
:Makes the floor or ceiling of this sector move whenever sectors with &#039;&#039;&#039;floorid&#039;&#039;&#039; or &#039;&#039;&#039;ceilingid&#039;&#039;&#039; with the same number move their respective surfaces. If you want this sector&#039;s floor or ceiling to move in opposite direction, use the negative value.&lt;br /&gt;
*&#039;&#039;&#039;soundsequence&#039;&#039;&#039;&lt;br /&gt;
:Name of the [[soundsequence]] to use for the movement of this sector. It will only work if said soundsequence has an &#039;&#039;&#039;id&#039;&#039;&#039;. It can also be a number (the sound sequence &#039;&#039;&#039;id&#039;&#039;&#039;) surrounded by quotes.&lt;br /&gt;
*&#039;&#039;&#039;portalfloor&#039;&#039;&#039;, &#039;&#039;&#039;portalceiling&#039;&#039;&#039;&lt;br /&gt;
:Portal ID to use on the floor or ceiling of this sector, using the same value as the one set in [[Portal_Define]]. For two-way portals, use the negative number for the opposite portal (i.e. one way uses portal &#039;&#039;n&#039;&#039;, and the other way uses -&#039;&#039;n&#039;&#039;).&lt;br /&gt;
*&#039;&#039;&#039;portal_floor_disabled&#039;&#039;&#039;, &#039;&#039;&#039;portal_ceil_disabled&#039;&#039;&#039;&lt;br /&gt;
:If true, the portal is disabled (has no effect).&lt;br /&gt;
*&#039;&#039;&#039;portal_floor_norender&#039;&#039;&#039;, &#039;&#039;&#039;portal_ceil_norended&#039;&#039;&#039;&lt;br /&gt;
:If true, the portal is not rendered but may have effects.&lt;br /&gt;
*&#039;&#039;&#039;portal_floor_nopass&#039;&#039;&#039;, &#039;&#039;&#039;portal_ceil_nopass&#039;&#039;&#039;&lt;br /&gt;
:If true, it disables any linked portals interaction.&lt;br /&gt;
*&#039;&#039;&#039;portal_floor_blocksound&#039;&#039;&#039;, &#039;&#039;&#039;portal_ceil_blocksound&#039;&#039;&#039;&lt;br /&gt;
:If true, it blocks sounds from monsters listening for alerts.&lt;br /&gt;
*&#039;&#039;&#039;portal_floor_useglobaltex&#039;&#039;&#039;, &#039;&#039;&#039;portal_ceil_useglobaltex&#039;&#039;&#039;&lt;br /&gt;
:Reserved.&lt;br /&gt;
*&#039;&#039;&#039;portal_floor_overlaytype&#039;&#039;&#039;, &#039;&#039;&#039;portal_ceil_overlaytype&#039;&#039;&#039; (default: &amp;quot;none&amp;quot;)&lt;br /&gt;
:Can be &amp;quot;none&amp;quot;, &amp;quot;translucent&amp;quot; or &amp;quot;additive&amp;quot;. Controls the rendering of portal overlays.&lt;br /&gt;
*&#039;&#039;&#039;alphafloor&#039;&#039;&#039;, &#039;&#039;&#039;alphaceiling&#039;&#039;&#039; (default: 1.0)&lt;br /&gt;
:Alpha of the portal overlay. 1.0 makes it fully visible, 0.0 is invisible.&lt;br /&gt;
*&#039;&#039;&#039;portal_floor_attached&#039;&#039;&#039;, &#039;&#039;&#039;portal_ceil_attached&#039;&#039;&#039;&lt;br /&gt;
:If true, and the sector has a linked portal on the floor or ceiling, the portal will move along with the floor or ceiling surface, instead of remaining at the same height as default. This is useful for easily moving platforms vertically.&lt;br /&gt;
&lt;br /&gt;
==Things==&lt;br /&gt;
 thing&lt;br /&gt;
 {&lt;br /&gt;
   health = &amp;lt;floating-point&amp;gt;;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
*&#039;&#039;&#039;health&#039;&#039;&#039;&lt;br /&gt;
:Health modifier. Works like in ZDoom: 0 means no change from [[EDF]], positive values multiply the initial spawn health, and negative values change the absolute spawn health.&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_player_reference&amp;diff=6391</id>
		<title>EDF player reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_player_reference&amp;diff=6391"/>
		<updated>2026-02-15T07:15:39Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Explanation of fields */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Player class ==&lt;br /&gt;
 playerclass &#039;&#039;name&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
     defaultskin &#039;&#039;name&#039;&#039;&lt;br /&gt;
     thingtype &#039;&#039;name&#039;&#039;&lt;br /&gt;
     altattackstate &#039;&#039;name&#039;&#039;&lt;br /&gt;
     initialhealth &#039;&#039;number&#039;&#039;  // default: 100&lt;br /&gt;
     maxhealth &#039;&#039;number&#039;&#039;&lt;br /&gt;
     superhealth &#039;&#039;number&#039;&#039;&lt;br /&gt;
     viewheight &#039;&#039;floating_point_number&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
     speedwalk &#039;&#039;number&#039;&#039;      // default: 25&lt;br /&gt;
     speedrun &#039;&#039;number&#039;&#039;       // default: 50&lt;br /&gt;
     speedstrafe &#039;&#039;number&#039;&#039;    // default: 24&lt;br /&gt;
     speedstraferun &#039;&#039;number&#039;&#039; // default: 40&lt;br /&gt;
     speedturn &#039;&#039;number&#039;&#039;      // default: 640&lt;br /&gt;
     speedturnfast &#039;&#039;number&#039;&#039;  // default: 1280&lt;br /&gt;
     speedturnslow &#039;&#039;number&#039;&#039;  // default: 320&lt;br /&gt;
     speedlookslow &#039;&#039;number&#039;&#039;  // default: 450&lt;br /&gt;
     speedlookfast &#039;&#039;number&#039;&#039;  // default: 512&lt;br /&gt;
     speedjump &#039;&#039;floating_point_number&#039;&#039;   // default: 8.0&lt;br /&gt;
 &lt;br /&gt;
     speedfactor &#039;&#039;floating_point_number&#039;&#039; // default: 1.0&lt;br /&gt;
 &lt;br /&gt;
     default &#039;&#039;boolean&#039;&#039;       // default: false&lt;br /&gt;
 &lt;br /&gt;
     clearrebornitems&lt;br /&gt;
 &lt;br /&gt;
     rebornitem &#039;&#039;name&#039;&#039;, &#039;&#039;amount&#039;&#039;&lt;br /&gt;
     ...&lt;br /&gt;
 &lt;br /&gt;
     +AlwaysJump&lt;br /&gt;
     +ChickenTwitch&lt;br /&gt;
     +NoBob&lt;br /&gt;
     +NoHealthAutoUse&lt;br /&gt;
 &lt;br /&gt;
     weaponslot 1 { clear }&lt;br /&gt;
     weaponslot 2 { weapons: Chainsaw, Fist }&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
By default, under the base folder, in the root player.edf, there are two classes defined: DoomMarine (only if game is Doom) and Corvus (only if game is Heretic). Any of these classes may be redefined in mods. So if you want to change the player speed and initial health, you can do so in mods by redefining game&#039;s default class.&lt;br /&gt;
&lt;br /&gt;
You can also define a new player class and make it the default by setting &#039;&#039;&#039;default true&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
*&#039;&#039;&#039;defaultskin&#039;&#039;&#039;&lt;br /&gt;
:Required. The default skin (sprite and sounds) associated with the player class. It works as a reskin on the &#039;&#039;&#039;thingtype&#039;&#039;&#039; specification. See the &#039;&#039;&#039;skin&#039;&#039;&#039; definition.&lt;br /&gt;
*&#039;&#039;&#039;thingtype&#039;&#039;&#039;&lt;br /&gt;
:Required. The avatar [[thingtype]] associated with the player class. It&#039;s usually the &amp;quot;player&amp;quot; thing of the game, with states supporting movement, attacks, pain and death.&lt;br /&gt;
*&#039;&#039;&#039;altattackstate&#039;&#039;&#039;&lt;br /&gt;
:Default: &#039;&#039;&#039;thingtype&#039;&#039;&#039;&#039;s &#039;&#039;&#039;missilestate&#039;&#039;&#039;. This is the state to go into when the weapon is in the flashing state, which is usually separate from &#039;&#039;&#039;thingtype&#039;&#039;&#039;&#039;s &#039;&#039;&#039;missilestate&#039;&#039;&#039;. By default it will use that state. Doom works based on this principle of a separate firing state to that of the missile state.&lt;br /&gt;
*&#039;&#039;&#039;initialhealth&#039;&#039;&#039;&lt;br /&gt;
:Default: 100. This is the health the player starts in this class. It doesn&#039;t need to be the same as the max health.&lt;br /&gt;
*&#039;&#039;&#039;maxhealth&#039;&#039;&#039;&lt;br /&gt;
:Default: 100. This is the maximum health to which this player can be healed by items with the &#039;&#039;&#039;@maxhealth&#039;&#039;&#039; placeholder and by actions such as [[HealThing]] and the powered Heretic gauntlets.&lt;br /&gt;
*&#039;&#039;&#039;superhealth&#039;&#039;&#039;&lt;br /&gt;
:Default: &#039;&#039;&#039;maxhealth&#039;&#039;&#039;. This is the bonus maximum health to which this player can be healed by items with the &#039;&#039;&#039;@superhealth&#039;&#039;&#039; placeholder and by [[HealThing]] when set to go past the normal maximum health. By default it&#039;s the same as &#039;&#039;&#039;maxhealth&#039;&#039;&#039; but it&#039;s common to want a higher value for it.&lt;br /&gt;
*&#039;&#039;&#039;viewheight&#039;&#039;&#039;&lt;br /&gt;
:Default: 41.0. This is the &amp;quot;camera&amp;quot; height relative to ground when playing as this class.&lt;br /&gt;
*&#039;&#039;&#039;speedwalk&#039;&#039;&#039;&lt;br /&gt;
:Default: 25. This is the walking forward/backward speed, when using the simple keyboard actions.&lt;br /&gt;
*&#039;&#039;&#039;speedrun&#039;&#039;&#039;&lt;br /&gt;
:Default: 50. This is the running forward/backward speed, when using the keyboard actions with the &amp;quot;run&amp;quot; modifier pressed. It also works as a mouse movement limiter.&lt;br /&gt;
*&#039;&#039;&#039;speedstrafe&#039;&#039;&#039;&lt;br /&gt;
:Default: 24. This is the walking sideways speed, when using the keyboard actions with the &amp;quot;strafe&amp;quot; modifier pressed.&lt;br /&gt;
*&#039;&#039;&#039;speedstraferun&#039;&#039;&#039;&lt;br /&gt;
:Default: 40. This is the running sideways speed, when using the keyboard actions with the &amp;quot;strafe&amp;quot; and &amp;quot;run&amp;quot; modifiers pressed.&lt;br /&gt;
*&#039;&#039;&#039;speedturn&#039;&#039;&#039;&lt;br /&gt;
:Default: 640. This is the normal turning speed with the keyboard.&lt;br /&gt;
*&#039;&#039;&#039;speedturnfast&#039;&#039;&#039;&lt;br /&gt;
:Default: 1280. This is the running turning speed with the keyboard.&lt;br /&gt;
*&#039;&#039;&#039;speedturnslow&#039;&#039;&#039;&lt;br /&gt;
:Default: 320. This is the turning speed during the first few tics of pressing the keyboard.&lt;br /&gt;
*&#039;&#039;&#039;speedlookslow&#039;&#039;&#039;&lt;br /&gt;
:Default: 450. This is the looking speed with the keyboard when not running.&lt;br /&gt;
*&#039;&#039;&#039;speedlook&#039;&#039;&#039;&lt;br /&gt;
:Default: 512. This is the looking speed with the keyboard when looking.&lt;br /&gt;
*&#039;&#039;&#039;speedjump&#039;&#039;&#039;&lt;br /&gt;
:Default: 8.0. This is the jumping speed. If you want the class to always be able to jump regardless of compatibility settings, make sure to also set &#039;&#039;&#039;+AlwaysJump&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;speedfactor&#039;&#039;&#039;&lt;br /&gt;
:Default: 1.0. This is a speed multiplier. This can be used for a more precise control, such as needed by the Heretic chicken morphed player.&lt;br /&gt;
*&#039;&#039;&#039;default&#039;&#039;&#039;&lt;br /&gt;
:Default: &#039;&#039;&#039;false&#039;&#039;&#039;. If &#039;&#039;&#039;true&#039;&#039;&#039;, causes this class to be the default you start in the new game.&lt;br /&gt;
*&#039;&#039;&#039;clearrebornitems&#039;&#039;&#039;&lt;br /&gt;
:Default: omitted. If present, this marker causes the class to remove any startup items from previous definitions. This is only useful in &#039;&#039;&#039;playerdelta&#039;&#039;&#039; sections.&lt;br /&gt;
*&#039;&#039;&#039;rebornitem&#039;&#039;&#039;&lt;br /&gt;
:This is a list of 0 or more items to start with in a fresh game. Each item is an [[EDF item effects and inventory|artifact]] followed optionally by a comma and a list of how many such items to give (if applicable).&lt;br /&gt;
*&#039;&#039;&#039;+AlwaysJump&#039;&#039;&#039;&lt;br /&gt;
:Default: omitted. If present, this flag allows the player to jump all the time. Use this for any class where jumping is expected. Currently the Doom marine and Heretic hero don&#039;t have it, even though they have &#039;&#039;&#039;jumpspeed&#039;&#039;&#039;. For them, you need to enable jumping in the compatibility settings. Future games like Hexen and Strife will have their base classes with &#039;&#039;&#039;+AlwaysJump&#039;&#039;&#039;. When using &#039;&#039;&#039;playerdelta&#039;&#039;&#039;, you can remove this flag by putting &#039;&#039;&#039;-AlwaysJump&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;+ChickenTwitch&#039;&#039;&#039;&lt;br /&gt;
:Default: omitted. If present, this flag causes the player to occasionally change view direction, jump and make the pain sound. Typical for Heretic chicken players.&lt;br /&gt;
*&#039;&#039;&#039;+NoBob&#039;&#039;&#039;&lt;br /&gt;
:Default: omitted. Disables player weapon and view bobbing.&lt;br /&gt;
*&#039;&#039;&#039;+NoHealthAutoUse&#039;&#039;&#039;&lt;br /&gt;
:Default: omitted. Disables Heretic inventory health item autousing.&lt;br /&gt;
*&#039;&#039;&#039;weaponslot&#039;&#039;&#039;&lt;br /&gt;
:This is a list of 1 or more weapon slots associated with each selection key. A weapon may appear on more than one slot. A slot can have multiple weapons, with the most superior first in the list. When using &#039;&#039;&#039;playerdelta&#039;&#039;&#039;, instead of &#039;&#039;&#039;weapons:&#039;&#039;&#039; &#039;&#039;list&#039;&#039; you can put &#039;&#039;&#039;clear&#039;&#039;&#039; to remove that slot.&lt;br /&gt;
:Important: add &amp;lt;code&amp;gt;setdialect(&amp;quot;ALFHEIM&amp;quot;)&amp;lt;/code&amp;gt; at the beginning of the EDFROOT lump or edf file to be able to use the &#039;&#039;&#039;weapons:&#039;&#039;&#039; syntax.&lt;br /&gt;
&lt;br /&gt;
===Player class delta structure===&lt;br /&gt;
You can use the &#039;&#039;&#039;playerdelta&#039;&#039;&#039; section to change an already defined player class. The syntax is as follows:&lt;br /&gt;
 playerdelta&lt;br /&gt;
 {&lt;br /&gt;
     name &#039;&#039;playerclass_name&#039;&#039;&lt;br /&gt;
     &#039;&#039;any_fields_from_playerclass&#039;&#039;&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;any_fields_from_playerclass&#039;&#039; means that you can list any of the settings from the base class here, with modified values, using the same syntax as in &#039;&#039;&#039;playerclass&#039;&#039;&#039;. See &#039;&#039;&#039;playerclass&#039;&#039;&#039; for explanations of the fields.&lt;br /&gt;
&lt;br /&gt;
== Player skin ==&lt;br /&gt;
 skin &#039;&#039;name&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
     sprite &#039;&#039;name&#039;&#039;      // default: PLAY&lt;br /&gt;
     faces &#039;&#039;prefix&#039;&#039;     // default: STF&lt;br /&gt;
     sounds&lt;br /&gt;
     {&lt;br /&gt;
         pain &#039;&#039;name&#039;&#039;    // default: plpain&lt;br /&gt;
         diehi &#039;&#039;name&#039;&#039;   // default: pdiehi&lt;br /&gt;
         oof &#039;&#039;name&#039;&#039;     // default: oof&lt;br /&gt;
         gib &#039;&#039;name&#039;&#039;     // default: slop&lt;br /&gt;
         punch &#039;&#039;name&#039;&#039;   // default: punch&lt;br /&gt;
         radio &#039;&#039;name&#039;&#039;   // default: radio&lt;br /&gt;
         die &#039;&#039;name&#039;&#039;     // default: pldeth&lt;br /&gt;
         fall &#039;&#039;name&#039;&#039;    // default: plfall&lt;br /&gt;
         feet &#039;&#039;name&#039;&#039;    // default: plfeet&lt;br /&gt;
         fallhit &#039;&#039;name&#039;&#039; // default: fallht&lt;br /&gt;
         plwdth &#039;&#039;name&#039;&#039;  // default: plwdth&lt;br /&gt;
         noway &#039;&#039;name&#039;&#039;   // default: noway&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Skins are options for the player to appear differently. Despite the &amp;quot;skin&amp;quot; name, it means changing both the graphics and sounds, just without changing the player class (behaviour).&lt;br /&gt;
&lt;br /&gt;
Any skin you define will appear in the menu in the &amp;quot;Player Setup&amp;quot; section as an option.&lt;br /&gt;
&lt;br /&gt;
The default skins are &amp;quot;marine&amp;quot; for Doom and &amp;quot;corvus&amp;quot; for Heretic. You can redefine your own &amp;quot;marine&amp;quot; or &amp;quot;corvus&amp;quot; skin in your mod&#039;s EDF and it will replace the default player skin. Do this if you want to change the sprite and sound of the protagonist.&lt;br /&gt;
&lt;br /&gt;
The fields are:&lt;br /&gt;
*&#039;&#039;&#039;sprite&#039;&#039;&#039;&lt;br /&gt;
:Sprite to replace the default player&#039;s with.&lt;br /&gt;
*&#039;&#039;&#039;faces&#039;&#039;&#039;&lt;br /&gt;
:DOOM status bar graphics lump prefix replacement.&lt;br /&gt;
*&#039;&#039;&#039;sounds&#039;&#039;&#039;&lt;br /&gt;
:Optional replacement sounds for common player sounds. Use EDF [[sound]] names.&lt;br /&gt;
===See also===&lt;br /&gt;
*[[S_SKIN]]: cross-port non-EDF alternative format&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_player_reference&amp;diff=6390</id>
		<title>EDF player reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_player_reference&amp;diff=6390"/>
		<updated>2026-02-15T07:15:00Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Explanation of fields */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Player class ==&lt;br /&gt;
 playerclass &#039;&#039;name&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
     defaultskin &#039;&#039;name&#039;&#039;&lt;br /&gt;
     thingtype &#039;&#039;name&#039;&#039;&lt;br /&gt;
     altattackstate &#039;&#039;name&#039;&#039;&lt;br /&gt;
     initialhealth &#039;&#039;number&#039;&#039;  // default: 100&lt;br /&gt;
     maxhealth &#039;&#039;number&#039;&#039;&lt;br /&gt;
     superhealth &#039;&#039;number&#039;&#039;&lt;br /&gt;
     viewheight &#039;&#039;floating_point_number&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
     speedwalk &#039;&#039;number&#039;&#039;      // default: 25&lt;br /&gt;
     speedrun &#039;&#039;number&#039;&#039;       // default: 50&lt;br /&gt;
     speedstrafe &#039;&#039;number&#039;&#039;    // default: 24&lt;br /&gt;
     speedstraferun &#039;&#039;number&#039;&#039; // default: 40&lt;br /&gt;
     speedturn &#039;&#039;number&#039;&#039;      // default: 640&lt;br /&gt;
     speedturnfast &#039;&#039;number&#039;&#039;  // default: 1280&lt;br /&gt;
     speedturnslow &#039;&#039;number&#039;&#039;  // default: 320&lt;br /&gt;
     speedlookslow &#039;&#039;number&#039;&#039;  // default: 450&lt;br /&gt;
     speedlookfast &#039;&#039;number&#039;&#039;  // default: 512&lt;br /&gt;
     speedjump &#039;&#039;floating_point_number&#039;&#039;   // default: 8.0&lt;br /&gt;
 &lt;br /&gt;
     speedfactor &#039;&#039;floating_point_number&#039;&#039; // default: 1.0&lt;br /&gt;
 &lt;br /&gt;
     default &#039;&#039;boolean&#039;&#039;       // default: false&lt;br /&gt;
 &lt;br /&gt;
     clearrebornitems&lt;br /&gt;
 &lt;br /&gt;
     rebornitem &#039;&#039;name&#039;&#039;, &#039;&#039;amount&#039;&#039;&lt;br /&gt;
     ...&lt;br /&gt;
 &lt;br /&gt;
     +AlwaysJump&lt;br /&gt;
     +ChickenTwitch&lt;br /&gt;
     +NoBob&lt;br /&gt;
     +NoHealthAutoUse&lt;br /&gt;
 &lt;br /&gt;
     weaponslot 1 { clear }&lt;br /&gt;
     weaponslot 2 { weapons: Chainsaw, Fist }&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
By default, under the base folder, in the root player.edf, there are two classes defined: DoomMarine (only if game is Doom) and Corvus (only if game is Heretic). Any of these classes may be redefined in mods. So if you want to change the player speed and initial health, you can do so in mods by redefining game&#039;s default class.&lt;br /&gt;
&lt;br /&gt;
You can also define a new player class and make it the default by setting &#039;&#039;&#039;default true&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
*&#039;&#039;&#039;defaultskin&#039;&#039;&#039;&lt;br /&gt;
:Required. The default skin (sprite and sounds) associated with the player class. It works as a reskin on the &#039;&#039;&#039;thingtype&#039;&#039;&#039; specification. See the &#039;&#039;&#039;skin&#039;&#039;&#039; definition.&lt;br /&gt;
*&#039;&#039;&#039;thingtype&#039;&#039;&#039;&lt;br /&gt;
:Required. The avatar [[thingtype]] associated with the player class. It&#039;s usually the &amp;quot;player&amp;quot; thing of the game, with states supporting movement, attacks, pain and death.&lt;br /&gt;
*&#039;&#039;&#039;altattackstate&#039;&#039;&#039;&lt;br /&gt;
:Default: &#039;&#039;&#039;thingtype&#039;&#039;&#039;&#039;s &#039;&#039;&#039;missilestate&#039;&#039;&#039;. This is the state to go into when the weapon is in the flashing state, which is usually separate from &#039;&#039;&#039;thingtype&#039;&#039;&#039;&#039;s &#039;&#039;&#039;missilestate&#039;&#039;&#039;. By default it will use that state. Doom works based on this principle of a separate firing state to that of the missile state.&lt;br /&gt;
*&#039;&#039;&#039;initialhealth&#039;&#039;&#039;&lt;br /&gt;
:Default: 100. This is the health the player starts in this class. It doesn&#039;t need to be the same as the max health.&lt;br /&gt;
*&#039;&#039;&#039;maxhealth&#039;&#039;&#039;&lt;br /&gt;
:Default: 100. This is the maximum health to which this player can be healed by items with the &#039;&#039;&#039;@maxhealth&#039;&#039;&#039; placeholder and by actions such as [[HealThing]] and the powered Heretic gauntlets.&lt;br /&gt;
*&#039;&#039;&#039;superhealth&#039;&#039;&#039;&lt;br /&gt;
:Default: &#039;&#039;&#039;maxhealth&#039;&#039;&#039;. This is the bonus maximum health to which this player can be healed by items with the &#039;&#039;&#039;@superhealth&#039;&#039;&#039; placeholder and by [[HealThing]] when set to go past the normal maximum health. By default it&#039;s the same as &#039;&#039;&#039;maxhealth&#039;&#039;&#039; but it&#039;s common to want a higher value for it.&lt;br /&gt;
*&#039;&#039;&#039;viewheight&#039;&#039;&#039;&lt;br /&gt;
:Default: 41.0. This is the &amp;quot;camera&amp;quot; height relative to ground when playing as this class.&lt;br /&gt;
*&#039;&#039;&#039;speedwalk&#039;&#039;&#039;&lt;br /&gt;
:Default: 25. This is the walking forward/backward speed, when using the simple keyboard actions.&lt;br /&gt;
*&#039;&#039;&#039;speedrun&#039;&#039;&#039;&lt;br /&gt;
:Default: 50. This is the running forward/backward speed, when using the keyboard actions with the &amp;quot;run&amp;quot; modifier pressed. It also works as a mouse movement limiter.&lt;br /&gt;
*&#039;&#039;&#039;speedstrafe&#039;&#039;&#039;&lt;br /&gt;
:Default: 24. This is the walking sideways speed, when using the keyboard actions with the &amp;quot;strafe&amp;quot; modifier pressed.&lt;br /&gt;
*&#039;&#039;&#039;speedstraferun&#039;&#039;&#039;&lt;br /&gt;
:Default: 40. This is the running sideways speed, when using the keyboard actions with the &amp;quot;strafe&amp;quot; and &amp;quot;run&amp;quot; modifiers pressed.&lt;br /&gt;
*&#039;&#039;&#039;speedturn&#039;&#039;&#039;&lt;br /&gt;
:Default: 640. This is the normal turning speed with the keyboard.&lt;br /&gt;
*&#039;&#039;&#039;speedturnfast&#039;&#039;&#039;&lt;br /&gt;
:Default: 1280. This is the running turning speed with the keyboard.&lt;br /&gt;
*&#039;&#039;&#039;speedturnslow&#039;&#039;&#039;&lt;br /&gt;
:Default: 320. This is the turning speed during the first few tics of pressing the keyboard.&lt;br /&gt;
*&#039;&#039;&#039;speedlookslow&#039;&#039;&#039;&lt;br /&gt;
:Default: 450. This is the looking speed with the keyboard when not running.&lt;br /&gt;
*&#039;&#039;&#039;speedlook&#039;&#039;&#039;&lt;br /&gt;
:Default: 512. This is the looking speed with the keyboard when looking.&lt;br /&gt;
*&#039;&#039;&#039;speedjump&#039;&#039;&#039;&lt;br /&gt;
:Default: 8.0. This is the jumping speed. If you want the class to always be able to jump regardless of compatibility settings, make sure to also set &#039;&#039;&#039;+AlwaysJump&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;speedfactor&#039;&#039;&#039;&lt;br /&gt;
:Default: 1.0. This is a speed multiplier. This can be used for a more precise control, such as needed by the Heretic chicken morphed player.&lt;br /&gt;
*&#039;&#039;&#039;default&#039;&#039;&#039;&lt;br /&gt;
:Default: &#039;&#039;&#039;false&#039;&#039;&#039;. If &#039;&#039;&#039;true&#039;&#039;&#039;, causes this class to be the default you start in the new game.&lt;br /&gt;
*&#039;&#039;&#039;clearrebornitems&#039;&#039;&#039;&lt;br /&gt;
:Default: omitted. If present, this marker causes the class to remove any startup items from previous definitions. This is only useful in &#039;&#039;&#039;playerdelta&#039;&#039;&#039; sections.&lt;br /&gt;
*&#039;&#039;&#039;rebornitem&#039;&#039;&#039;&lt;br /&gt;
:This is a list of 0 or more items to start with in a fresh game. Each item is an [[EDF item effects and inventory|artifact]] followed optionally by a comma and a list of how many such items to give (if applicable).&lt;br /&gt;
*&#039;&#039;&#039;+AlwaysJump&#039;&#039;&#039;&lt;br /&gt;
:Default: omitted. If present, this flag allows the player to jump all the time. Use this for any class where jumping is expected. Currently the Doom marine and Heretic hero don&#039;t have it, even though they have &#039;&#039;&#039;jumpspeed&#039;&#039;&#039;. For them, you need to enable jumping in the compatibility settings. Future games like Hexen and Strife will have their base classes with &#039;&#039;&#039;+AlwaysJump&#039;&#039;&#039;. When using &#039;&#039;&#039;playerdelta&#039;&#039;&#039;, you can remove this flag by putting &#039;&#039;&#039;-AlwaysJump&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;+ChickenTwitch&#039;&#039;&#039;&lt;br /&gt;
:Default: omitted. If present, this flag causes the player to occasionally change view direction, jump and make the pain sound. Typical for Heretic chicken players.&lt;br /&gt;
*&#039;&#039;&#039;+NoBob&#039;&#039;&#039;&lt;br /&gt;
:Default: omitted. Disables player weapon and view bobbing.&lt;br /&gt;
*&#039;&#039;&#039;+NoHealthAutoUse&#039;&#039;&#039;&lt;br /&gt;
:Default: omitted. Disables Heretic inventory health item autousing.&lt;br /&gt;
*&#039;&#039;&#039;weaponslot&#039;&#039;&#039;&lt;br /&gt;
:This is a list of 1 or more weapon slots associated with each selection key. A weapon may appear on more than one slot. A slot can have multiple weapons, with the most superior first in the list. When using &#039;&#039;&#039;playerdelta&#039;&#039;&#039;, instead of &#039;&#039;&#039;weapons:&#039;&#039;&#039; &#039;&#039;list&#039;&#039; you can put &#039;&#039;&#039;clear&#039;&#039;&#039; to remove that slot.&lt;br /&gt;
:Important: add &amp;lt;code&amp;gt;setdialect(&amp;quot;ALFHEIM&amp;quot;)&amp;lt;/code&amp;gt; at the beginning of the EDFROOT or edf file to be able to use the &#039;&#039;&#039;weapons:&#039;&#039;&#039; syntax.&lt;br /&gt;
&lt;br /&gt;
===Player class delta structure===&lt;br /&gt;
You can use the &#039;&#039;&#039;playerdelta&#039;&#039;&#039; section to change an already defined player class. The syntax is as follows:&lt;br /&gt;
 playerdelta&lt;br /&gt;
 {&lt;br /&gt;
     name &#039;&#039;playerclass_name&#039;&#039;&lt;br /&gt;
     &#039;&#039;any_fields_from_playerclass&#039;&#039;&lt;br /&gt;
 }&lt;br /&gt;
&#039;&#039;any_fields_from_playerclass&#039;&#039; means that you can list any of the settings from the base class here, with modified values, using the same syntax as in &#039;&#039;&#039;playerclass&#039;&#039;&#039;. See &#039;&#039;&#039;playerclass&#039;&#039;&#039; for explanations of the fields.&lt;br /&gt;
&lt;br /&gt;
== Player skin ==&lt;br /&gt;
 skin &#039;&#039;name&#039;&#039;&lt;br /&gt;
 {&lt;br /&gt;
     sprite &#039;&#039;name&#039;&#039;      // default: PLAY&lt;br /&gt;
     faces &#039;&#039;prefix&#039;&#039;     // default: STF&lt;br /&gt;
     sounds&lt;br /&gt;
     {&lt;br /&gt;
         pain &#039;&#039;name&#039;&#039;    // default: plpain&lt;br /&gt;
         diehi &#039;&#039;name&#039;&#039;   // default: pdiehi&lt;br /&gt;
         oof &#039;&#039;name&#039;&#039;     // default: oof&lt;br /&gt;
         gib &#039;&#039;name&#039;&#039;     // default: slop&lt;br /&gt;
         punch &#039;&#039;name&#039;&#039;   // default: punch&lt;br /&gt;
         radio &#039;&#039;name&#039;&#039;   // default: radio&lt;br /&gt;
         die &#039;&#039;name&#039;&#039;     // default: pldeth&lt;br /&gt;
         fall &#039;&#039;name&#039;&#039;    // default: plfall&lt;br /&gt;
         feet &#039;&#039;name&#039;&#039;    // default: plfeet&lt;br /&gt;
         fallhit &#039;&#039;name&#039;&#039; // default: fallht&lt;br /&gt;
         plwdth &#039;&#039;name&#039;&#039;  // default: plwdth&lt;br /&gt;
         noway &#039;&#039;name&#039;&#039;   // default: noway&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Skins are options for the player to appear differently. Despite the &amp;quot;skin&amp;quot; name, it means changing both the graphics and sounds, just without changing the player class (behaviour).&lt;br /&gt;
&lt;br /&gt;
Any skin you define will appear in the menu in the &amp;quot;Player Setup&amp;quot; section as an option.&lt;br /&gt;
&lt;br /&gt;
The default skins are &amp;quot;marine&amp;quot; for Doom and &amp;quot;corvus&amp;quot; for Heretic. You can redefine your own &amp;quot;marine&amp;quot; or &amp;quot;corvus&amp;quot; skin in your mod&#039;s EDF and it will replace the default player skin. Do this if you want to change the sprite and sound of the protagonist.&lt;br /&gt;
&lt;br /&gt;
The fields are:&lt;br /&gt;
*&#039;&#039;&#039;sprite&#039;&#039;&#039;&lt;br /&gt;
:Sprite to replace the default player&#039;s with.&lt;br /&gt;
*&#039;&#039;&#039;faces&#039;&#039;&#039;&lt;br /&gt;
:DOOM status bar graphics lump prefix replacement.&lt;br /&gt;
*&#039;&#039;&#039;sounds&#039;&#039;&#039;&lt;br /&gt;
:Optional replacement sounds for common player sounds. Use EDF [[sound]] names.&lt;br /&gt;
===See also===&lt;br /&gt;
*[[S_SKIN]]: cross-port non-EDF alternative format&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Parameterized_linedef_specials&amp;diff=6389</id>
		<title>Parameterized linedef specials</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Parameterized_linedef_specials&amp;diff=6389"/>
		<updated>2025-12-13T10:10:27Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Exits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The parameterized linedefs types are Hexen-like action specials with arguments, whose purpose is to be more customizable than the Boom generalized types. When mapping in UDMF, you have to use these parameterized specials instead of the classic parameter-less ones. They&#039;re also used in Hexen format maps (which is necessary when Hexen is going to be supported in Eternity), though Hexen format is not recommended or fully supported for other maps than vanilla Hexen in Eternity. To use parameterized specials in classic (Doom) format maps, provide an [[ExtraData]] lump by attaching it via [[MapInfo|EMAPINFO]] to the map. [[ACS]] scripts can also call parameterized specials. They&#039;re meant to be as compatible as possible with the ZDoom implementation, so minimal changes to zspecial.acs are needed, though Eternity may have extensions of its own. Most likely however the base zspecial.acs is going to be updated for Eternity. Parameters are only limited to 0-255 in the Hexen format (and some specials may have some legacy workarounds for that interval), but otherwise they&#039;re in the normal integer range for other environments (UDMF, ExtraData, ACS). Some specials have never been added to ExtraData, because of their mere purpose being to work under the limits of the Hexen map format.&lt;br /&gt;
&lt;br /&gt;
Each parameterized line special has a name and two associated numbers: one for UDMF, ACS and Hexen formats, and another one for ExtraData support, set this way to avoid conflicts with classic Boom specials (since it&#039;s possible to use their number in the editor instead of the 270 &amp;quot;ExtraData special&amp;quot;). If you only see one number mentioned in the documentation, then it&#039;s the UDMF number (for ExtraData it&#039;s preferred to use the names).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT&#039;&#039;&#039;: all &#039;&#039;reserved&#039;&#039; parameters must be set to 0. Failure to do so will result in your maps being broken in later Eternity versions! Also, for &amp;quot;flag&amp;quot; arguments, do not add or provide other values than in the intended range, for the same reason.&lt;br /&gt;
&lt;br /&gt;
{{Backto|Linedef types}}&lt;br /&gt;
==General info==&lt;br /&gt;
All sector tags, unless otherwise specified, have a special meaning if 0: that means to affect the sector behind the trigger linedef (like regular doors in vanilla Doom).&lt;br /&gt;
&lt;br /&gt;
Thing tags (TIDs) have special meaning for values 0 and negative: 0 means activator, and -1 to -4 mean to affect players 1 to 4 (if present). &#039;&#039;&#039;Consider other negative values reserved&#039;&#039;&#039; and do not use them in your maps.&lt;br /&gt;
==Specials==&lt;br /&gt;
===Doors===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! ExtraData #&lt;br /&gt;
! Name&lt;br /&gt;
! Args&lt;br /&gt;
! Summary&lt;br /&gt;
|-&lt;br /&gt;
|| 10 || 302 || [[Door_Close]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door.&lt;br /&gt;
|-&lt;br /&gt;
|| 11 || 301 || [[Door_Open]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door.&lt;br /&gt;
|-&lt;br /&gt;
|| 12 || 300 || [[Door_Raise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door temporarily.&lt;br /&gt;
|-&lt;br /&gt;
|| 13 || 429 || [[Door_LockedRaise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lock&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a locked door.&lt;br /&gt;
|-&lt;br /&gt;
|| 105 || 304 || [[Door_WaitRaise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;timeoffset&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door temporarily after a delay.&lt;br /&gt;
|-&lt;br /&gt;
|| 106 || 305 || [[Door_WaitClose]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;timeoffset&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door after a delay.&lt;br /&gt;
|-&lt;br /&gt;
|| 249 || 303 || [[Door_CloseWaitOpen]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay_octics&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door, waits a bit, then opens it back.&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;tag&#039;&#039;: Tag of sector to affect. If it&#039;s 0, then the sector behind the linedef will be activated, if applicable.&lt;br /&gt;
:&#039;&#039;speed&#039;&#039;: How fast, in eights of units per tic, the door should move. Doom normal doors are as fast as 16, and blazing doors are 64.&lt;br /&gt;
:&#039;&#039;delay&#039;&#039;: Time in tics (1/35 seconds) for the door before it returns to its opposite movement.&lt;br /&gt;
:&#039;&#039;delay_octics&#039;&#039;: Delay, but expressed in octics, which is eighths of second (i.e. 8 octics = 1 second).&lt;br /&gt;
:&#039;&#039;timeoffset&#039;&#039;: Time in tics before the door activates.&lt;br /&gt;
:&#039;&#039;light_tag&#039;&#039;: Sector tag to receive light changes to maximum or minimum neighbor depending on whether the door is closed or opened.&lt;br /&gt;
:&#039;&#039;lock&#039;&#039;: One of the [[lock identifiers]] to specify the key or set of keys.&lt;br /&gt;
&lt;br /&gt;
===Floor movement, earthquake===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! ExtraData #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|| 20 || 318 || [[Floor_LowerByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 21 || 309 || [[Floor_LowerToLowest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 22 || 311 || [[Floor_LowerToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 23 || 317 || [[Floor_RaiseByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 24 || 306 || [[Floor_RaiseToHighest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 25 || 310 || [[Floor_RaiseToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 28 || 451 || [[Floor_RaiseAndCrush]] || tag || speed || crush || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 35 || - || [[Floor_RaiseByValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 36 || - || [[Floor_LowerByValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 37 || 319 || [[Floor_MoveToValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;neg&#039;&#039; || &#039;&#039;change&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 46 || 452 || [[Floor_CrushStop]] || &#039;&#039;tag&#039;&#039; || || || || || Stops crushing floor movement.&lt;br /&gt;
|-&lt;br /&gt;
|| 66 || 321 || [[Floor_LowerInstant]] || &#039;&#039;tag&#039;&#039; || - || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || || Lowers floor instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 67 || 320 || [[Floor_RaiseInstant]] || &#039;&#039;tag&#039;&#039; || - || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || Raises floor instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 68 || - || [[Floor_MoveToValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;neg&#039;&#039; || &#039;&#039;change&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 120 || 375 || [[Radius_Quake]] || intensity || duration || damage radius || tremor radius || foci tid&lt;br /&gt;
|-&lt;br /&gt;
|| 138 || 397 || [[Floor_Waggle]] || tag || height || speed || offset || timer&lt;br /&gt;
|-&lt;br /&gt;
|| 200 || 464 || [[Generic_Floor]] || tag || speed || height || target || flags || Boom-like generalized floor.&lt;br /&gt;
|-&lt;br /&gt;
|| 228 || 475 || [[Plat_RaiseAndStayTx0]] || tag || speed || lock out || || || Variation of [[Floor_RaiseToNearest]].&lt;br /&gt;
|-&lt;br /&gt;
|| 230 || 476 || [[Plat_UpByValueStayTx]] || tag || speed || height || || || Variation of [[Floor_RaiseByValue]]&lt;br /&gt;
|-&lt;br /&gt;
|| 231 || 487 || [[Plat_ToggleCeiling]] || tag || || || || || Toggles floor between ceiling and initial position.&lt;br /&gt;
|-&lt;br /&gt;
|| 235 || 466 || [[Floor_TransferTrigger]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 236 || 467 || [[Floor_TransferNumeric]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 238 || 312 || [[Floor_RaiseToLowestCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 240 || 315 || [[Floor_RaiseByTexture]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 242 || 416 || [[Floor_LowerToHighest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;adjust&#039;&#039; || &#039;&#039;force_adjust&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 250 || 431 || [[Floor_Donut]] || pillar tag || pillar speed || pool speed || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 256 || 307 || [[Floor_LowerToHighestEE]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 257 || 308 || [[Floor_RaiseToLowest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || || || Instantly lower floor to lowest neighbour.&lt;br /&gt;
|-&lt;br /&gt;
|| 258 || 313 || [[Floor_LowerToLowestCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || || || Lower floor to lowest ceiling.&lt;br /&gt;
|-&lt;br /&gt;
|| 259 || 314 || [[Floor_RaiseToCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039; || Raise floor to ceiling.&lt;br /&gt;
|-&lt;br /&gt;
|| 260 || 322 || [[Floor_ToCeilingInstant]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039; || || Raise floor to ceiling instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 261 || 316 || [[Floor_LowerByTexture]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || || || Lower floor by shortest lower texture.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Floor_Waggle&#039;&#039;&#039; ( tag, height, speed, offset, timer )&lt;br /&gt;
:This special implements the sinusoidal floor motion from Hexen. Its tag and speed parameters bear similar properties to the other floor specials, but -&lt;br /&gt;
:*height - waggle amplitude in 1/8 units&lt;br /&gt;
:*offset - phase offset; how much to delay the waggle in relation to others (0 to 63, in byte angles)&lt;br /&gt;
:*timer - time in seconds the waggle lasts. Zero means permanent&lt;br /&gt;
*&#039;&#039;&#039;Radius_Quake&#039;&#039;&#039; (intensity, duration, damageradius, quakeradius, tid)&lt;br /&gt;
:This special implements the earthquake effect, centred on the map spot with the given &#039;&#039;tid&#039;&#039;, with user-selectable intensity, duration and separate thing damage radius and tremor radius (both being multiplied with 64).&lt;br /&gt;
*&#039;&#039;&#039;Floor_RaiseAndCrush&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;crush&#039;&#039;)&lt;br /&gt;
:This one is for Hexen compatibility. Please use &#039;&#039;&#039;Floor_RaiseToCeiling&#039;&#039;&#039; or &#039;&#039;&#039;Floor_RaiseToLowestCeiling&#039;&#039;&#039; instead.&lt;br /&gt;
====See also====&lt;br /&gt;
*[[Floor movement classic specials]]: for the Doom format variants.&lt;br /&gt;
&lt;br /&gt;
===Plats, lifts===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|| 60 || 410 || [[Plat_PerpetualRaise]] || tag || speed || delay || || || Perpetual lift with lip of 8&lt;br /&gt;
|-&lt;br /&gt;
|| 61 || 411 || [[Plat_Stop]] || tag || stop_mode || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 62 || 412 || [[Plat_DownWaitUpStay]] || tag || speed || delay || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 63 || 413 || [[Plat_DownByValue]] || tag || speed || delay || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 64 || 414 || [[Plat_UpWaitDownStay]] || tag || speed || delay || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 65 || 415 || [[Plat_UpByValue]] || tag || speed || delay || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 203 || 501 || [[Generic_Lift]] || tag || speed || delay || type || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 206 || 488 || [[Plat_DownWaitUpStayLip]] || tag || speed || delay || lip ||&lt;br /&gt;
|-&lt;br /&gt;
|| 207 || 489 || [[Plat_PerpetualRaiseLip]] || tag || speed || delay || lip ||&lt;br /&gt;
|}&lt;br /&gt;
*207 (489) &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lip&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039;, but lets you choose a &amp;quot;lip&amp;quot; (distance from lowest adjacent floor to move down to). If &#039;&#039;lip&#039;&#039; is 0, it will work like classic Doom perpetual plats.&lt;br /&gt;
*61 (411) &#039;&#039;&#039;Plat_Stop&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;stop_mode&#039;&#039;)&lt;br /&gt;
:Pauses or stops a perpetual platform from moving. The behavior depends on &#039;&#039;stop_mode&#039;&#039;:&lt;br /&gt;
:*1: the platform will be merely suspended. It will only be retriggerable by other &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039; or &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039; (or in Doom-format maps, by similar specials), continuing from the exact same state it stopped.&lt;br /&gt;
:*2: the platform movement will be stopped at the current position. It will be retriggerable by any other special. If restarted by &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039; or &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039; it may not remember the last state.&lt;br /&gt;
:*0 (default): will act based on compatibility with current game mode. On Doom/Heretic/Hexen, it will act like mode 1, while in Hexen it will act like mode 2.&lt;br /&gt;
*62 (412) &#039;&#039;&#039;Plat_DownWaitUpStay&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Lowers the plat as a lift to the lowest adjacent floor &#039;&#039;&#039;plus 8 units&#039;&#039;&#039;. Use &#039;&#039;&#039;Plat_DownWaitUpStayLip&#039;&#039;&#039; with 0 lip if you want classic Doom-like lifts.&lt;br /&gt;
*206 (488) &#039;&#039;&#039;Plat_DownWaitUpStayLip&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lip&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Plat_DownWaitUpStay&#039;&#039;&#039; but with settable &#039;&#039;lip&#039;&#039;.&lt;br /&gt;
*63 (413) &#039;&#039;&#039;Plat_DownByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;height&#039;&#039;)&lt;br /&gt;
:Lowers a lift by an absolute &#039;&#039;height&#039;&#039;, &#039;&#039;&#039;multiplied by 8&#039;&#039;&#039;. It will rise back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*64 (414) &#039;&#039;&#039;Plat_UpWaitDownStay&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Raises a lift to the highest neighbor floor. It will lower back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*65 (415) &#039;&#039;&#039;Plat_UpByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;height&#039;&#039;)&lt;br /&gt;
:Raises a lift by an absolute &#039;&#039;height&#039;&#039;, &#039;&#039;&#039;multiplied by 8&#039;&#039;&#039;. It will lower back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*231 (487) &#039;&#039;&#039;Plat_ToggleCeiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Toggles a floor between the default position and touching the ceiling. It will be left busy after that.&lt;br /&gt;
&lt;br /&gt;
===Elevators===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 95 || 453 || [[FloorAndCeiling_LowerByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 96 || 454 || [[FloorAndCeiling_RaiseByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 245 || 458 || [[Elevator_RaiseToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 246 || 460 || [[Elevator_MoveToFloor]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 247 || 459 || [[Elevator_LowerToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Ceiling movement===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 38 || 500 || [[Ceiling_Waggle]] || tag || height || speed || offset || timer&lt;br /&gt;
|-&lt;br /&gt;
|| 40 || 336 || [[Ceiling_LowerByValue]] || tag || speed || height || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 41 || 335 || [[Ceiling_RaiseByValue]] || tag || speed || height || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 42 || 432 || [[Ceiling_CrushAndRaise]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 43 || 435 || [[Ceiling_LowerAndCrush]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 44 || 433 || [[Ceiling_CrushStop]] || tag || stop mode || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 45 || 434 || [[Ceiling_CrushRaiseAndStay]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 47 || 337 || [[Ceiling_MoveToValue]] || tag || speed || height || negate || change&lt;br /&gt;
|-&lt;br /&gt;
|| 69 || - || [[Ceiling_MoveToValueTimes8]] || tag || speed || height || negate || change&lt;br /&gt;
|-&lt;br /&gt;
|| 97 || 436 || [[Ceiling_LowerAndCrushDist]] || tag || speed || crush || gap || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 104 || 441 || [[Ceiling_CrushAndRaiseSilentDist]] || tag || gap || speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 168 || 437 || [[Ceiling_CrushAndRaiseDist]] || tag || gap || speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 192 || 330 || [[Ceiling_LowerToHighestFloor]] || tag || speed || change || crush || gap to floor&lt;br /&gt;
|-&lt;br /&gt;
|| 193 || 339 || [[Ceiling_LowerInstant]] || tag || - || height * 8 || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 194 || 338 || [[Ceiling_RaiseInstant]] || tag || - || height * 8 || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 195 || 438 || [[Ceiling_CrushRaiseAndStayA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 196 || 439 || [[Ceiling_CrushAndRaiseA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 197 || 440 || [[Ceiling_CrushAndRaiseSilentA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 198 || - || [[Ceiling_RaiseByValueTimes8]] || tag || speed || height * 8 || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 199 || - || [[Ceiling_LowerByValueTimes8]] || tag || speed || height * 8 || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 201 || 465 || [[Generic_Ceiling]] || tag || speed || height || target || flags&lt;br /&gt;
|-&lt;br /&gt;
|| 205 || 443 || [[Generic_Crusher]] || tag || down speed || up speed || silent || damage&lt;br /&gt;
|-&lt;br /&gt;
|| 252 || 325 || [[Ceiling_RaiseToNearest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 253 || 328 || [[Ceiling_LowerToLowest]] || tag || speed || change || crush ||&lt;br /&gt;
|-&lt;br /&gt;
|| 254 || 332 || [[Ceiling_LowerToFloor]] || tag || speed || change || crush || gap&lt;br /&gt;
|-&lt;br /&gt;
|| 255 || 442 || [[Ceiling_CrushRaiseAndStaySilA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 262 || 323 || [[Ceiling_RaiseToHighest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 263 || 324 || [[Ceiling_ToHighestInstant]] || tag || change || crush || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 264 || 326 || [[Ceiling_LowerToNearest]] || tag || speed || change || crush ||&lt;br /&gt;
|-&lt;br /&gt;
|| 265 || 327 || [[Ceiling_RaiseToLowest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 266 || 329 || [[Ceiling_RaiseToHighestFloor]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 267 || 331 || [[Ceiling_ToFloorInstant]] || tag || change || crush || gap ||&lt;br /&gt;
|-&lt;br /&gt;
|| 268 || 333 || [[Ceiling_RaiseByTexture]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 269 || 334 || [[Ceiling_LowerByTexture]] || tag || speed || change || crush ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Ceiling_RaiseToHighest&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*Ceiling_ToHighestInstant&#039;&#039;&#039;    ( tag, change, crush                )&lt;br /&gt;
*Ceiling_RaiseToNearest&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerToNearest&#039;&#039;&#039;      ( tag, speed, change, crush         )&lt;br /&gt;
*Ceiling_RaiseToLowest&#039;&#039;&#039;       ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerToLowest&#039;&#039;&#039;       ( tag, speed, change, crush         )&lt;br /&gt;
*Ceiling_RaiseToHighestFloor&#039;&#039;&#039; ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerToHighestFloor&#039;&#039;&#039; ( tag, speed, change, crush, gap    )&lt;br /&gt;
*Ceiling_ToFloorInstant&#039;&#039;&#039;      ( tag, change, crush, gap           )&lt;br /&gt;
*Ceiling_LowerToFloor&#039;&#039;&#039;        ( tag, speed, change, crush, gap    )&lt;br /&gt;
*Ceiling_RaiseByTexture&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerByTexture&#039;&#039;&#039;      ( tag, speed, change, crush         )&lt;br /&gt;
*Ceiling_RaiseByValue&#039;&#039;&#039;        ( tag, speed, height, change        )&lt;br /&gt;
*Ceiling_LowerByValue&#039;&#039;&#039;        ( tag, speed, height, change, crush )&lt;br /&gt;
*Ceiling_MoveToValue&#039;&#039;&#039;         ( tag, speed, height, change, crush )&lt;br /&gt;
*Ceiling_RaiseInstant&#039;&#039;&#039;        ( tag, height, change               )&lt;br /&gt;
*Ceiling_LowerInstant&#039;&#039;&#039;        ( tag, height, change, crush        )&lt;br /&gt;
:Values for these specials:&lt;br /&gt;
:*tag: Tag of the sector(s) to affect. A tag of zero means to affect the sector on the second side of the line.&lt;br /&gt;
:*speed: Speed of ceiling in eighths of a unit per tic.&lt;br /&gt;
:*change: This parameter takes the following values:&lt;br /&gt;
::0 : No texture or type change.&lt;br /&gt;
::1 : Copy texture, zero type; trigger model.&lt;br /&gt;
::2 : Copy texture, zero type; numeric model.&lt;br /&gt;
::3 : Copy texture, preserve type; trigger model.&lt;br /&gt;
::4 : Copy texture, preserve type; numeric model.&lt;br /&gt;
::5 : Copy texture and type; trigger model.&lt;br /&gt;
::6 : Copy texture and type; numeric model.&lt;br /&gt;
:*crush: Amount of crushing damage ceiling inflicts at each crushing event (when gametic % 4 = 0). If this amount is less than or equal to zero, no crushing damage is done.&lt;br /&gt;
:*height: An integer number of units, either the amount to move the floor by or the exact z coordinate to move the floor toward. Negative numbers are valid for the latter case.&lt;br /&gt;
:*gap: Distance to keep from the destination. Useful if crush is nonzero&lt;br /&gt;
*Generic_Ceiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;height&#039;&#039;, &#039;&#039;target&#039;&#039;, &#039;&#039;flag&#039;&#039;)&lt;br /&gt;
:See &#039;&#039;&#039;Generic_Floor&#039;&#039;&#039; for an explanation of parameters.&lt;br /&gt;
&lt;br /&gt;
====Crushing ceilings====&lt;br /&gt;
There are some crushing ceilings available now. Some originate from Hexen while others are extensions from ZDoom. ZDoom compatibility is considered where relevant. For all specials where it applies, &#039;&#039;crushmode&#039;&#039; can take one of these values:&lt;br /&gt;
*0: compatibility. Act like it would do in ZDoom. This means that in Doom the crusher keeps pushing into the things it crushes, while in Hexen it stays on position while dealing damage. And if the game is Doom, the special has &amp;quot;Dist&amp;quot; in the name and the speed is set to 8, it will also slow down to speed 1 when crushing.&lt;br /&gt;
*1: Doom mode without slowdown. Same as classic Doom&#039;s fast crushers.&lt;br /&gt;
*2: Hexen mode. It will rest in position while crushing.&lt;br /&gt;
*3: Doom mode with slowdown. Same as classic Doom&#039;s slow crushers. Currently the crushing speed is hardcoded to 1.&lt;br /&gt;
The specials are the following. Take care that Ceiling_CrushAndRaise is mainly for Hexen compatibility: it will rise at half the speed it lowers. For Doom-like crushers use Ceiling_CrushAndRaiseA (all &amp;quot;A&amp;quot; crushers let you specify the rising speed) or Ceiling_CrushAndRaiseDist (all &amp;quot;Dist&amp;quot; crushers rise at the same speed as they lower, but instead let you specify the gap size to the ground). Finally, Generic_Crusher aims to act like the Boom crushers, having the following particularities: it will slow down when crushing if speed is less than 24, and it will be totally silent if specified in the parameter (won&#039;t even make clunk noises).&lt;br /&gt;
*Ceiling_CrushAndRaise(tag, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseSilentA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseDist(tag, ground_distance, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseSilentDist(tag, ground_distance, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseAndStay(tag, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseAndStayA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseAndStaySilA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_LowerAndCrush(tag, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_LowerAndCrushDist(tag, speed, damage, ground_distance, crushmode)&lt;br /&gt;
*Ceiling_CrushStop(tag, stop_mode)&lt;br /&gt;
:*stop_mode can be: 0 (compatibility), 1 (Doom: pause crusher), 2 (Hexen: remove crusher and release the ceiling)&lt;br /&gt;
*Generic_Crusher(tag, down_speed, up_speed, silent, damage)&lt;br /&gt;
&lt;br /&gt;
===Stair building===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 204 || 502 || [[Generic_Stairs]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;flags&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 217 || 340 || [[Stairs_BuildUpDoom]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;delay&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 270 || 341 || [[Stairs_BuildDownDoom]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;delay&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 271 || 342 || [[Stairs_BuildUpDoomSync]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;reset&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 272 || 343 || [[Stairs_BuildDownDoomSync]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;reset&#039;&#039; ||&lt;br /&gt;
|}&lt;br /&gt;
 ------------------------------------------------------------------------------ &lt;br /&gt;
 * Synchronized stairs have each step move at a different speed so that all the&lt;br /&gt;
   steps reach the destination height at the same time. This stair building&lt;br /&gt;
   style is only available with these parameterized line types. &lt;br /&gt;
 &lt;br /&gt;
 Values&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 tag       : Tag of first sector to raise or lower as a step.&lt;br /&gt;
             When the stair building method is DOOM, subsequent&lt;br /&gt;
             steps are found by searching across two-sided&lt;br /&gt;
             lines where the first side belongs to the current&lt;br /&gt;
             sector and the floor texture is the same. The&lt;br /&gt;
             Hexen stair building method is not yet supported.&lt;br /&gt;
 speed     : Speed of steps in eights of a unit per tic. If the&lt;br /&gt;
             build style is synchronized, only the first step&lt;br /&gt;
             moves at this speed. Other steps will move at a&lt;br /&gt;
             speed which allows them to reach their &lt;br /&gt;
             destination height at the same time.&lt;br /&gt;
 stepsize  : Step size in units.&lt;br /&gt;
 delay     : Delay time in tics between steps&lt;br /&gt;
 reset     : If greater than zero, the stairs will wait this&lt;br /&gt;
             amount of time in tics after completely building&lt;br /&gt;
             and will then reset by repeating the same stair&lt;br /&gt;
             building action but in the reverse direction. If&lt;br /&gt;
             zero, the stairs will never reset.&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
===Polyobjects===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 1 || 348 || [[Polyobj_StartLine]] || id || mirror id || sound sequence || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 2 || 356 || [[Polyobj_RotateLeft]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 3 || 354 || [[Polyobj_RotateRight]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 4 || 352 || [[Polyobj_Move]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 5 || 349 || [[Polyobj_ExplicitLine]] || id || line index || mirror id || sound sequence ||&lt;br /&gt;
|-&lt;br /&gt;
|| 6 || - || [[Polyobj_MoveTimes8]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 7 || 351 || [[Polyobj_DoorSwing]] || id || speed || rotation || delay ||&lt;br /&gt;
|-&lt;br /&gt;
|| 8 || 350 || [[Polyobj_DoorSlide]] || id || speed || angle || distance || delay&lt;br /&gt;
|-&lt;br /&gt;
|| 59 || 499 || [[Polyobj_OR_MoveToSpot]] || id || speed || [[TID]] || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 86 || 496 || [[Polyobj_MoveToSpot]] || id || speed || [[TID]] || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 87 || 474 || [[Polyobj_Stop]] || id || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 88 || 497 || [[Polyobj_MoveTo]] || id || speed || x || y ||&lt;br /&gt;
|-&lt;br /&gt;
|| 89 || 498 || [[Polyobj_OR_MoveTo]] || id || speed || x || y ||&lt;br /&gt;
|-&lt;br /&gt;
|| 90 || 357 || [[Polyobj_OR_RotateLeft]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 91 || 355 || [[Polyobj_OR_RotateRight]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 92 || 353 || [[Polyobj_OR_Move]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 93 || - || [[Polyobj_OR_MoveTimes8]] || id || speed || angle || distance ||&lt;br /&gt;
|}&lt;br /&gt;
*1 (348) &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;mirror_id&#039;&#039;, &#039;&#039;sequence_id&#039;&#039;)&lt;br /&gt;
*5 (349) &#039;&#039;&#039;Polyobj_ExplicitLine(&#039;&#039;id&#039;&#039;, &#039;&#039;linenum&#039;&#039;, &#039;&#039;mirror_id&#039;&#039;, &#039;&#039;sequence_id&#039;&#039;)&lt;br /&gt;
:There are two different methods of creating a polyobject. In the first, the &amp;quot;first&amp;quot; line is given the &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039; special, and subsequent lines are added to the PolyObject by following segs from vertex to vertex. To use this, all the lines around the polyobject must run in the same direction, and the last line must end at the same vertex which starts the first line (in other words, it must be closed).&lt;br /&gt;
&lt;br /&gt;
:With the second method, every line to be included must be given the &#039;&#039;&#039;Polyobj_ExplicitLine&#039;&#039;&#039; special and must be given a &#039;&#039;linenum&#039;&#039; param which is unique amongst all lines that will added to that polyobject. Polyobjects of this sort should also be closed for proper rendering, but the game engine cannot and will not verify that this is the case.&lt;br /&gt;
   &lt;br /&gt;
:Only polyobjects created with the &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039; method can have other line specials on the polyobject&#039;s lines themselves. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;Mirror_id&#039;&#039; is the ID number of a PolyObject that wants to mirror every action that this PolyObject makes. This number cannot refer to the self-same PolyObject, nor should PolyObjects attempt to mirror each other in a cycle since this will create problems with override actions. Angle of motion is always reversed when applying an action to a mirroring PolyObject. If a mirror is already in motion for a non-override action, the mirror will not be affected even if the main object was moved. Mirror polyobjects can themselves define a mirror, and an action will affect all mirroring polyobjects in the chain.&lt;br /&gt;
*4 (352) &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Slides a polyobject in the direction given in &#039;&#039;angle&#039;&#039; by &#039;&#039;distance&#039;&#039;.&lt;br /&gt;
*6 &#039;&#039;&#039;Polyobj_MoveTimes8&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039; but with &#039;&#039;distance&#039;&#039; multiplied by 8. Needed only for the Hexen format and supported for legacy reasons.&lt;br /&gt;
*2 (356) &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Rotates a polyobject counterclockwise by the &#039;&#039;distance&#039;&#039; [[byte angle]] difference. If &#039;&#039;distance&#039;&#039; is 0, it means 360 degrees. If &#039;&#039;distance&#039;&#039; is 255, it means perpetual spinning.&lt;br /&gt;
*3 (354) &#039;&#039;&#039;Polyobj_RotateRight&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Rotates a polyobject clockwise by the &#039;&#039;distance&#039;&#039; [[byte angle]] difference. If &#039;&#039;distance&#039;&#039; is 0, it means 360 degrees. If &#039;&#039;distance&#039;&#039; is 255, it means perpetual spinning.&lt;br /&gt;
*92 (353) &#039;&#039;&#039;Polyobj_OR_Move&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*93 &#039;&#039;&#039;Polyobj_OR_MoveTimes8&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_MoveTimes8&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*90 (357) &#039;&#039;&#039;Polyobj_OR_RotateLeft&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*91 (355) &#039;&#039;&#039;Polyobj_OR_RotateRight&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_RotateRight&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*8 (350) &#039;&#039;&#039;Polyobj_DoorSlide&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Slides a polyobject like a door which closes after a &#039;&#039;delay&#039;&#039; and deflects if it gets jammed.&lt;br /&gt;
*7 (351) &#039;&#039;&#039;Polyobj_DoorSwing&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Swings a polyobject like a door which closes after a &#039;&#039;delay&#039;&#039; and deflects if it gets jammed. There are no special behaviors for setting &#039;&#039;distance&#039;&#039; to 0 or 255, unlike &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039; and derivatives.&lt;br /&gt;
*87 (474) &#039;&#039;&#039;Polyobj_Stop&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;)&lt;br /&gt;
:Stops a polyobject from movement. It will then be free for other activations.&lt;br /&gt;
&lt;br /&gt;
===Pillar building===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 29 || 362 || [[Pillar_Build]] || tag || speed || height || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 30 || 364 || [[Pillar_Open]] || tag || speed || floor dist || ceil dist ||&lt;br /&gt;
|-&lt;br /&gt;
|| 94 || 363 || [[Pillar_BuildAndCrush]] || tag || speed || height || damage ||&lt;br /&gt;
|-&lt;br /&gt;
|| 251 || 468 || [[FloorAndCeiling_LowerRaise]] || tag || floor speed || ceiling speed || Boom emulation ||&lt;br /&gt;
|}&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 #    Function                            ExtraData Name&lt;br /&gt;
 &lt;br /&gt;
 362  Build pillar                        Pillar_Build&lt;br /&gt;
 363  Build pillar and crush              Pillar_BuildAndCrush&lt;br /&gt;
 364  Open pillar                         Pillar_Open &lt;br /&gt;
 &lt;br /&gt;
 Parameters&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 Pillar_Build                  tag, speed, height&lt;br /&gt;
 Pillar_BuildAndCrush          tag, speed, height, crush&lt;br /&gt;
 Pillar_Open                   tag, speed, fdist, cdist&lt;br /&gt;
 &lt;br /&gt;
 Values&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 tag       : Tag of sector to close or open as a pillar. For the&lt;br /&gt;
             action to succeed, neither surface may have an &lt;br /&gt;
             action running on it already. If the tag is zero,&lt;br /&gt;
             the sector on the backside of a 2S line with this&lt;br /&gt;
             special will be used.&lt;br /&gt;
 speed     : Speed of the surface with the greatest distance to&lt;br /&gt;
             move in eights of a unit per tic. The other surface&lt;br /&gt;
             will move at a speed which causes it to reach its&lt;br /&gt;
             destination at the same time.&lt;br /&gt;
 height    : For Build and BuildAndCrush types, this is the &lt;br /&gt;
             height relative to the floor where the floor and &lt;br /&gt;
             ceiling should meet. If this value is zero, the &lt;br /&gt;
             floor and ceiling will meet exactly half-way.&lt;br /&gt;
 crush     : For BuildAndCrush type only, this specifies the &lt;br /&gt;
             amount of damage to inflict per crush event.&lt;br /&gt;
 fdist     : For Open type only, this is the distance the floor&lt;br /&gt;
             should move down. If this value is zero, the floor&lt;br /&gt;
             will move to its lowest neighboring floor.&lt;br /&gt;
 cdist     : For Open type only, this is the distance the&lt;br /&gt;
             ceiling should move up. If this value is zero, the&lt;br /&gt;
             ceiling will move to its highest neighboring &lt;br /&gt;
             ceiling.          &lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
*[[FloorAndCeiling_LowerRaise]]&lt;br /&gt;
&lt;br /&gt;
===ACS Scripts===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 80 || 365 || [[ACS_Execute]] || script || map || arg1 || arg2 || arg3&lt;br /&gt;
|-&lt;br /&gt;
|| 81 || 366 || [[ACS_Suspend]] || script || map || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 82 || 367 || [[ACS_Terminate]] || script || map || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 83 || 430 || [[ACS_LockedExecute]] || script || map || arg1 || arg2 || lock id&lt;br /&gt;
|-&lt;br /&gt;
|| 84 || 420 || [[ACS_ExecuteWithResult]] || script || arg1 || arg2 || arg3 || arg4&lt;br /&gt;
|-&lt;br /&gt;
|| 85 || 490 || [[ACS_LockedExecuteDoor]] || script || map || arg1 || arg2 || lock id&lt;br /&gt;
|-&lt;br /&gt;
|| 226 || 477 || [[ACS_ExecuteAlways]] || script || map || arg1 || arg2 || arg3&lt;br /&gt;
|}&lt;br /&gt;
{{zdoomwiki}}&lt;br /&gt;
Eternity supports ACS script calling.&lt;br /&gt;
*365:&#039;&#039;&#039;ACS_Execute&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg0&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;)&lt;br /&gt;
:Executes the specified script. A map value of zero indicates that the script is on the current map. If the script is on a different map, then the execution of the script will be delayed until the player enters the map that contains it. Only one copy of a script can be running at a time when started with this special. &lt;br /&gt;
:If the specified script was previously executed but then suspended, then execution will begin at the point immediately after where it was suspended instead of starting over again at the beginning.&lt;br /&gt;
:The number of usable arguments is limited to 3.&lt;br /&gt;
*477:&#039;&#039;&#039;ACS_ExecuteAlways&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg0&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;)&lt;br /&gt;
:Same as ACS_Execute, but will not be blocked if an instance of &#039;&#039;scriptnum&#039;&#039; is already running.&lt;br /&gt;
*366:&#039;&#039;&#039;ACS_Suspend&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;)&lt;br /&gt;
:Suspends execution of a script until an ACS_Execute special resumes it.&lt;br /&gt;
*367:&#039;&#039;&#039;ACS_Terminate&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;)&lt;br /&gt;
:Terminates the script.&lt;br /&gt;
*430:&#039;&#039;&#039;ACS_LockedExecute&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;, &#039;&#039;lock&#039;&#039;) &#039;&#039;(since Feb 25 2016)&#039;&#039;&lt;br /&gt;
:This one executes a script that requires the player to have a key or more. See [[Lock identifiers]] for info on what to put for the &#039;&#039;lock&#039;&#039; argument.&lt;br /&gt;
&lt;br /&gt;
===Lights===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 110 || 368 || [[Light_RaiseByValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 111 || 369 || [[Light_LowerByValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 112 || 370 || [[Light_ChangeToValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 113 || 371 || [[Light_Fade]] || tag || dest value || tics || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 114 || 372 || [[Light_Glow]] || tag || max || min || tics ||&lt;br /&gt;
|-&lt;br /&gt;
|| 115 || 373 || [[Light_Flicker]] || tag || max || min || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 116 || 374 || [[Light_Strobe]] || tag || max value || min value || max time || min time&lt;br /&gt;
|-&lt;br /&gt;
|| 232 || 463 || [[Light_StrobeDoom]] || tag || max time || min time || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 233 || 473 || [[Light_MinNeighbor]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 234 || 461 || [[Light_MaxNeighbor]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
If &#039;&#039;tag&#039;&#039; is 0, any such parameterized special will affect the sector behind the linedef, if applicable.&lt;br /&gt;
* &#039;&#039;&#039;Light_MinNeighbor&#039;&#039;&#039; sets the lights in tagged sectors to their minimum neighbors&#039; values.&lt;br /&gt;
* &#039;&#039;&#039;Light_MaxNeighbor&#039;&#039;&#039; sets the lights in tagged sectors to their maximum neighbors&#039; values.&lt;br /&gt;
&lt;br /&gt;
Eternity supports the following light level controlling parameterized linedef specials. If &#039;&#039;tag&#039;&#039; is 0, any such parameterized special will affect the sector behind the linedef, if applicable.&lt;br /&gt;
*&#039;&#039;&#039;Light_RaiseByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Adds the &#039;&#039;lvl&#039;&#039; value to the light levels of tagged sectors, capping them to 255. &lt;br /&gt;
*&#039;&#039;&#039;Light_LowerByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Substracts the &#039;&#039;lvl&#039;&#039; value from the light levels of tagged sectors, limiting them to 0.&lt;br /&gt;
*&#039;&#039;&#039;Light_ChangeToValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Sets the &#039;&#039;lvl&#039;&#039; value for the light level of tagged sectors, and caps it between 0 and 255 inclusive.&lt;br /&gt;
*&#039;&#039;&#039;Light_Fade&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;destvalue&#039;&#039;, &#039;&#039;tics&#039;&#039;)&lt;br /&gt;
:Makes the light level of tagged sectors gradually go to &#039;&#039;destvalue&#039;&#039;, for the given amount of tics. &#039;&#039;tics&#039;&#039; must be greater than 0.&lt;br /&gt;
*&#039;&#039;&#039;Light_Glow&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;, &#039;&#039;tics&#039;&#039;)&lt;br /&gt;
:Enables periodic glowing light effect on tagged sectors. &#039;&#039;tics&#039;&#039; is the duration between the extreme light levels and must be positive. The sequence starts by fading down.&lt;br /&gt;
*&#039;&#039;&#039;Light_Flicker&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;)&lt;br /&gt;
:Enables flickering light effect on tagged sectors.&lt;br /&gt;
*&#039;&#039;&#039;Light_Strobe&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;, &#039;&#039;maxtime&#039;&#039;, &#039;&#039;mintime&#039;&#039;)&lt;br /&gt;
:Enables strobing light effect on tagged sectors. Light will periodically flash, staying at &#039;&#039;maxval&#039;&#039; level for &#039;&#039;maxtime&#039;&#039; tics and at &#039;&#039;minval&#039;&#039; level for &#039;&#039;mintime&#039;&#039; tics.&lt;br /&gt;
*&#039;&#039;&#039;Light_StrobeDoom&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxtime&#039;&#039;, &#039;&#039;mintime&#039;&#039;)&lt;br /&gt;
:Enables strobing light effect on tagged sectors, using Doom&#039;s logic of choosing the minimum and maximum light levels.&lt;br /&gt;
*&#039;&#039;&#039;Light_MinNeighbor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Sets the lights in tagged sectors to their minimum neighbors&#039; values&lt;br /&gt;
*&#039;&#039;&#039;Light_MaxNeighbor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Sets the lights in tagged sectors to their maximum neighbors&#039; values&lt;br /&gt;
&lt;br /&gt;
===Things===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 17 || 422 || [[Thing_Raise]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 19 || 423 || [[Thing_Stop]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 72 || 424 || [[ThrustThing]] || angle || speed || - || tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 73 || 426 || [[DamageThing]] || damage || mod || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 119 || 427 || [[Thing_Damage]] || tid || damage || mod || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 128 || 425 || [[ThrustThingZ]] || tid || speed || up or down || set or add ||&lt;br /&gt;
|-&lt;br /&gt;
|| 130 || 404 || [[Thing_Activate]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 131 || 405 || [[Thing_Deactivate]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 132 || 478 || [[Thing_Remove]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 133 || 428 || [[Thing_Destroy]] || tid || - || sector tag || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 134 || 402 || [[Thing_Projectile]] || tid || type || angle || speed || vertical speed&lt;br /&gt;
|-&lt;br /&gt;
|| 135 || 398 || [[Thing_Spawn]] || tid || type || angle || new_tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 136 || 403 || [[Thing_ProjectileGravity]] || tid || type || angle || speed || vertical speed&lt;br /&gt;
|-&lt;br /&gt;
|| 137 || 399 || [[Thing_SpawnNoFog]] || tid || type || angle || new_tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 176 || 421 || [[Thing_ChangeTID]] || oldtid || newtid || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 248 || 469 || [[HealThing]] || amount || max health || || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Thing_Projectile&#039;&#039;&#039;(tid, type, angle, speed, verticalspeed)&lt;br /&gt;
:Throws a projectile from a map spot. Can also be used to throw a flying monster. Like in Thing_Spawn, &#039;&#039;type&#039;&#039; is an &#039;&#039;&#039;acs_spawndata num&#039;&#039;&#039;. Note that &#039;&#039;speed&#039;&#039; and &#039;&#039;verticalspeed&#039;&#039; are in eighths (units per 8 tics). Up is positive for &#039;&#039;verticalspeed&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;Thing_ProjectileGravity&#039;&#039;&#039;(tid, type, angle, speed, verticalspeed)&lt;br /&gt;
:Same as above, but the thrown projectile or monster will be subject to gravity.&lt;br /&gt;
*&#039;&#039;&#039;Thing_ChangeTID&#039;&#039;&#039;(oldtid, newtid) &#039;&#039;(since Nov 14 2015)&#039;&#039;&lt;br /&gt;
:Sets the TID of all things which currently have &#039;&#039;oldtid&#039;&#039; to the value &#039;&#039;newtid&#039;&#039;. If &#039;&#039;oldtid&#039;&#039; is zero, it will change the TID of the activator.&lt;br /&gt;
*&#039;&#039;&#039;DamageThing&#039;&#039;&#039;(damage, mod) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Damages the activator. &#039;&#039;Mod&#039;&#039; is a means-of-death ([[damagetype]]), which can be used for custom obituaries and damage resistances. If &#039;&#039;damage&#039;&#039; is 0, it will actually do 10000 (gibbing) damage.&lt;br /&gt;
*&#039;&#039;&#039;Thing_Damage&#039;&#039;&#039;(tid, damage, mod) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Same as &#039;&#039;&#039;DamageThing&#039;&#039;&#039;, but with the possibility to select TID (where 0 will mean the activator). It&#039;s done this way for ZDoom compatibility. Unlike &#039;&#039;&#039;DamageThing&#039;&#039;&#039;, it will not cause 10000 damage if &#039;&#039;damage&#039;&#039; is 0.&lt;br /&gt;
*&#039;&#039;&#039;Thing_Destroy&#039;&#039;&#039;(tid, reserved, sectortag) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Causes 10000 damage to all things tagged &#039;&#039;tid&#039;&#039;. Beware that, in accordance to Hexen, &#039;&#039;tid&#039;&#039; 0 will NOT affect the activator; for that use &#039;&#039;&#039;DamageThing&#039;&#039;&#039;. &#039;&#039;Reserved&#039;&#039; must be set to 0. &#039;&#039;Sectortag&#039;&#039; can be used to only kill things inside sectors with given tag.&lt;br /&gt;
*&#039;&#039;&#039;Thing_Remove&#039;&#039;&#039;(tid)&lt;br /&gt;
:Directly removes objects tagged &#039;&#039;tid&#039;&#039; from the game.&lt;br /&gt;
*&#039;&#039;&#039;HealThing&#039;&#039;&#039;(amount, maxhealth)&lt;br /&gt;
:Heals the activator by &#039;&#039;amount&#039;&#039;. &#039;&#039;Maxhealth&#039;&#039; influences maximum health and only affects player activators. For monsters and other objects, the maximum health is always the spawn health. On players, &#039;&#039;maxhealth&#039;&#039; has the following meanings:&lt;br /&gt;
:*If 0, it will heal the player up to the initial health (such as the maximum medikit health in default Doom).&lt;br /&gt;
:*If 1, it will heal the player up to the soulsphere maximum health (in default Doom) or the initial health + 100 (if no soulsphere is defined in current game mode)&lt;br /&gt;
:*Otherwise, it will heal the player up to &#039;&#039;maxhealth&#039;&#039;.&lt;br /&gt;
*227 (480) &#039;&#039;&#039;PointPush_SetForce&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;tid&#039;&#039;, &#039;&#039;amount&#039;&#039;, &#039;&#039;use_line&#039;&#039;)&lt;br /&gt;
:Enables and sets wind for Boom push/pull source things. If &#039;&#039;tag&#039;&#039; is non-zero, it looks for such things inside a tagged sector. Only one push/pull thing will be used for each tagged sector. If &#039;&#039;tag&#039;&#039; is zero, it will enable pushing for things tagged &#039;&#039;tid&#039;&#039;. &#039;&#039;Amount&#039;&#039; is the force, and depending on thing type, it will be attractive or repulsive. If &#039;&#039;use_line&#039;&#039; is 1, it will use the linedef length as amount, not the &#039;&#039;amount&#039;&#039; argument. Either the tagged sector (if &#039;&#039;tag&#039;&#039; is non-zero) or the sectors containing the &#039;&#039;tid&#039;&#039; things must have the Boom generalized wind special.&lt;br /&gt;
&lt;br /&gt;
===Sectors===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Static&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 48 || 482 || yes || [[Sector_Attach3dMidtex]] || line id || optional sector tag || use ceiling || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 54 || 503 || || [[Sector_ChangeFlags]] || tag || setflags || clearflags || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 140 || 495 || || [[Sector_ChangeSound]] || tag || sequence id || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 185 || 470 || || [[Sector_SetRotation]] || tag || floor angle || ceiling angle || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 186 || 472 || || [[Sector_SetCeilingPanning]] || tag || x integer || x fractional || y integer || y fractional&lt;br /&gt;
|-&lt;br /&gt;
|| 187 || 471 || || [[Sector_SetFloorPanning]] || tag || x integer || x fractional || y integer || y fractional&lt;br /&gt;
|-&lt;br /&gt;
|| 190 || 481 || yes || [[Static_Init (sky transfer)]] || tag || 255 || flip sky || ||&lt;br /&gt;
|}&lt;br /&gt;
*470:&#039;&#039;&#039;Sector_SetRotation&#039;&#039;&#039;(tag, floor_angle, ceiling_angle)&lt;br /&gt;
:Sets the floor and ceiling texture rotation of tagged sectors to the given values in degrees (0-360).&lt;br /&gt;
*471:&#039;&#039;&#039;Sector_SetFloorPanning&#039;&#039;&#039;(tag, x_int, x_frac, y_int, y_frac)&lt;br /&gt;
:Sets the floor texture panning of tagged sectors to given X and Y values. A value is calculated as x_int + 0.01 * x_frac.&lt;br /&gt;
*472:&#039;&#039;&#039;Sector_SetCeilingPanning&#039;&#039;&#039;(tag, x_int, x_frac, y_int, y_frac)&lt;br /&gt;
:Same as Sector_SetFloorPanning, but for the ceiling texture.&lt;br /&gt;
*&#039;&#039;&#039;Sector_SetFriction&#039;&#039;&#039;(tag, amount)&lt;br /&gt;
:Sets friction in the target sectors. Those sectors must have the Boom generalized friction special enabled to work. &#039;&#039;Amount&#039;&#039; is an optional argument. If 0, it will use the length of the linedef to specify friction. Otherwise, the friction will be settable by &#039;&#039;amount&#039;&#039;. As a rule, smaller values than 100 mean sludge (high friction) and greater than 100 mean slippery surface (low friction).&lt;br /&gt;
*218 (457) &#039;&#039;&#039;Sector_SetWind&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;strength&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;flags&#039;&#039;)&lt;br /&gt;
:Creates wind in the tagged sectors, which, if Boom-style, must have the wind generalized special set. &#039;&#039;Flags&#039;&#039; can be the sum of the following values:&lt;br /&gt;
:*1: if added, it will cause the wind to be defined by the linedef&#039;s length and direction, instead of the &#039;&#039;strength&#039;&#039; and &#039;&#039;angle&#039;&#039; ([[byte angle]]) parameters;&lt;br /&gt;
:*2: if added, it will use Heretic-style winds, which have a slightly different behavior and scale, and will not require the Boom wind sector special to be set.&lt;br /&gt;
*220 (479) &#039;&#039;&#039;Sector_SetCurrent&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;strength&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;flags&#039;&#039;)&lt;br /&gt;
:Similar to &#039;&#039;&#039;Sector_SetWind&#039;&#039;&#039;, but meant for water flow setup, not air wind.&lt;br /&gt;
&lt;br /&gt;
===Slopes===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 118 || 493 || [[Plane_Copy]] || front floor tag || front ceiling tag || back floor tag || back ceiling tag || share slope&lt;br /&gt;
|-&lt;br /&gt;
|| 181 || 455 || [[Plane_Align]] || floor || ceiling || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Teleportation===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 70 || 444 || [[Teleport]] || tid || sector tag || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 71 || 445 || [[Teleport_NoFog]] || tid || use angle || sector tag || keep height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 215 || 446 || [[Teleport_Line]] || - || dest_id || flip || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Teleport&#039;&#039;&#039;(tid, sector_tag, reserved)&lt;br /&gt;
:Teleports the activator. Depending on whether &#039;&#039;tid&#039;&#039; or &#039;&#039;sector_tag&#039;&#039; is nonzero, the behavior will be Hexen or Doom compatible. If &#039;&#039;tid&#039;&#039; is zero, then it will teleport like in Doom, into the first teleport destination found on sectors tagged &#039;&#039;sector_tag&#039;&#039;.&lt;br /&gt;
:If &#039;&#039;tid&#039;&#039; is non-zero, it will teleport to one random target thing (doesn&#039;t matter the type) among the ones tagged &#039;&#039;tid&#039;&#039;. If in this case &#039;&#039;sector_tag&#039;&#039; is also non-zero, it will only seek a destination thing located in these tagged sectors. This behavior is based on the Hexen teleporters.&lt;br /&gt;
*&#039;&#039;&#039;Teleport_NoFog&#039;&#039;&#039;(tid, use_angle, sector_tag, keep_height)&lt;br /&gt;
:Teleports the activator silently, without fog and without holding it. &#039;&#039;Tid&#039;&#039; and &#039;&#039;sector_tag&#039;&#039; are used the same as in &#039;&#039;&#039;Teleport&#039;&#039;&#039;.&lt;br /&gt;
:&#039;&#039;Use_angle&#039;&#039; sets how the activator angle should be set after teleportation, and can take one of the following values:&lt;br /&gt;
:*0: default Hexen behavior. The thing won&#039;t change its angle at all during teleportation.&lt;br /&gt;
:*1: set thing&#039;s angle to the same angle as the one of the destination spot&lt;br /&gt;
:*2: use Boom&#039;s original, buggy behavior: shift angle &#039;&#039;opposite&#039;&#039; to that of the difference between destination spot&#039;s angle and the line normal&#039;s angle&lt;br /&gt;
:*3: use Boom&#039;s supposedly intended behavior: shift angle by the difference between destination spot&#039;s angle and line normal&#039;s angle.&lt;br /&gt;
:If &#039;&#039;use_angle&#039;&#039; is 2 or 3 and the special is not triggered from a linedef, then it will work like mode 1.&lt;br /&gt;
:&#039;&#039;Keep_height&#039;&#039;: setting this to 1 will make the thing preserve its distance to the floor after teleporting. If it&#039;s 0, the thing will be teleported on the floor, like in Hexen.&lt;br /&gt;
*&#039;&#039;&#039;Teleport_Line&#039;&#039;&#039;(reserved, dest_id, flip)&lt;br /&gt;
:Encapsulates the Boom line-teleporting functions. &#039;&#039;Dest_id&#039;&#039; is the tag of the target line. &#039;&#039;Flip&#039;&#039; will cause the user to rotate 180 degrees after teleporting.&lt;br /&gt;
&lt;br /&gt;
===Portals===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 9 || 450 || [[Line_Horizon]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 300 || 492 || [[Portal_Define]] || portal id || type || anchor line id || z parameter || flipped anchor&lt;br /&gt;
|-&lt;br /&gt;
|| 301 || 491 || [[Line_QuickPortal]] || visual-only || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Line_Horizon&#039;&#039;&#039;&lt;br /&gt;
:Simple linedef specials which converts the middle part with a horizon portal which uses front sector&#039;s floor and ceiling.&lt;br /&gt;
*&#039;&#039;&#039;Portal_Define&#039;&#039;&#039;&lt;br /&gt;
:See the [[Portal_Define|linked article]] for its description.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Line_QuickPortal&#039;&#039;&#039;(&#039;&#039;non-interactive&#039;&#039;)&lt;br /&gt;
:Convenience linedef special to quickly create a portal between two areas, through a linedef&#039;s middle part. The two lines must be of equal length, and of opposite angles (if linked/interactive) or any angle if not linked. They must have the same, unique tag and the same &#039;&#039;non-interactive&#039;&#039; value, which is 0 for linked portals and 1 for two-way non-linked portals.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sector_SetPortal&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;type&#039;&#039;, &#039;&#039;plane&#039;&#039;, &#039;&#039;misc&#039;&#039;)&lt;br /&gt;
:&#039;&#039;&#039;Only needed for easily converting old maps with portals&#039;&#039;&#039;. You can skip this part if you&#039;re designing a new UDMF map.&lt;br /&gt;
:Only activates on map starts, this one sets a sector portal on floor and/or ceiling on the &#039;&#039;tag&#039;&#039;ged sectors. See [[Portal]] for visual examples.&lt;br /&gt;
:&#039;&#039;Plane&#039;&#039; can be 0 (display portal on floor), 1 (display portal on ceiling), 2 (display portal on both);&lt;br /&gt;
:&#039;&#039;Type&#039;&#039; can be:&lt;br /&gt;
:*0: anchored portal. This line must correspond to another line named &amp;quot;anchor&amp;quot;, whose first 3 parameters are the same with this one, except that &#039;&#039;misc&#039;&#039; is 0 for the anchor, while the source line has &#039;&#039;misc&#039;&#039; 1.&lt;br /&gt;
:*2: skybox portal. Uses the skybox camera object as a source, and displays the skybox (view of this camera) in tagged sectors.&lt;br /&gt;
:*3: plane portal. Renders the ceiling texture of line&#039;s front sector at a fixed camera distance.&lt;br /&gt;
:*4: horizon portal. Renders the floor and ceiling textures of line&#039;s front sector at relative camera distance, useful for infinite horizontal planes such as seas.&lt;br /&gt;
:*6: linked portal. Interactive anchored portals (through which gameplay passes seamlessly). Has the same rule as anchored portals with regard to anchor lines. Requires consistent offsets if there are multiple linked portals in the map, otherwise linked portals are disabled.&lt;br /&gt;
:&#039;&#039;Type&#039;&#039; can also be used for copying already placed portals:&lt;br /&gt;
:*1: copy the portal from a sector tagged with &#039;&#039;misc&#039;&#039; into the tagged sectors if &#039;&#039;tag&#039;&#039; is nonzero, or to the front sector if &#039;&#039;tag&#039;&#039; is 0.&lt;br /&gt;
:*5: copy the portal from a sector tagged with &#039;&#039;misc&#039;&#039; into the tagged lines if &#039;&#039;tag&#039;&#039; is nonzero, or to the current line if &#039;&#039;tag&#039;&#039; is 0.&lt;br /&gt;
:&#039;&#039;Misc&#039;&#039; has values depending on the &#039;&#039;type&#039;&#039; chosen. It makes sense for anchored and linked portals (with 0 meaning source line, and 1 meaning anchor line) and it also has a meaning for the copy types (1 and 5) where it specifies the tag of the sector with portals to copy.&lt;br /&gt;
&lt;br /&gt;
===Binary format specific===&lt;br /&gt;
*378:&#039;&#039;&#039;Line_SetIdentification&#039;&#039;&#039;(id)&lt;br /&gt;
:Sets the linedef identification number (separate from tag) to &#039;&#039;id&#039;&#039;. Useful for various specials that use the line id. Do not use in UDMF.&lt;br /&gt;
&lt;br /&gt;
===Property transfer===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Static&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 209 || 242 || yes || [[Transfer_Heights]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 210 || 213 || yes || [[Transfer_FloorLight]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 211 || 261 || yes || [[Transfer_CeilingLight]] || tag || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Transfer_FloorLight&#039;&#039;&#039;(tag)&lt;br /&gt;
*&#039;&#039;&#039;Transfer_CeilingLight&#039;&#039;&#039;(tag)&lt;br /&gt;
:These two are the same as the Boom special, but applicable in parameterized namespaces.&lt;br /&gt;
*&#039;&#039;&#039;Transfer_Heights&#039;&#039;&#039;(tag, reserved)&lt;br /&gt;
:This also acts like the Boom special 242. Argument &#039;&#039;reserved&#039;&#039; must be 0.&lt;br /&gt;
*190 (481) &#039;&#039;&#039;Static_Init&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;type&#039;&#039;, &#039;&#039;flip_or_ceiling&#039;&#039;, &#039;&#039;move_type&#039;&#039;)&lt;br /&gt;
:This is a multi-purpose special encapsulating several static specials from MBF and Boom. &#039;&#039;Tag&#039;&#039; is the tag of the target sector(s). &#039;&#039;Type&#039;&#039; can be 255 for MBF sky transfers. If &#039;&#039;flip_or_ceiling&#039;&#039; is 1, the sky will be flipped horizontally. If &#039;&#039;type&#039;&#039; is 255, &#039;&#039;move_type&#039;&#039; must be 0.&lt;br /&gt;
&lt;br /&gt;
===Scrollers===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 100 || 406 || [[Scroll_Texture_Left]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 101 || 407 || [[Scroll_Texture_Right]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 102 || 408 || [[Scroll_Texture_Up]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 103 || 409 || [[Scroll_Texture_Down]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 222 || 485 || [[Scroll_Texture_Model]] || line id || kind || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 223 || 484 || [[Scroll_Floor]] || tag || kind || move things || x || y&lt;br /&gt;
|- &lt;br /&gt;
|| 224 || 483 || [[Scroll_Ceiling]] || tag || kind || - || x || y&lt;br /&gt;
|-&lt;br /&gt;
|| 225 || ExtraData only || [[Scroll_Texture_Offsets]]&lt;br /&gt;
|}&lt;br /&gt;
*223 (484) &#039;&#039;&#039;Scroll_Floor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;kind&#039;&#039;, &#039;&#039;scroll_things&#039;&#039;, &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;)&lt;br /&gt;
*224 (483) &#039;&#039;&#039;Scroll_Ceiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;kind&#039;&#039;, &#039;&#039;unused&#039;&#039;, &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;)&lt;br /&gt;
*222 (485) &#039;&#039;&#039;Scroll_Texture_Model&#039;&#039;&#039;(&#039;&#039;line_id&#039;&#039;, &#039;&#039;kind&#039;&#039;)&lt;br /&gt;
:These specials do standard Boom scrolling. &#039;&#039;Kind&#039;&#039; specifies if it&#039;s a static scroller (0), displacement scroller (1) or accelerative scroller (2), and 4 can be added to it to discard arguments &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; and instead use the linedef&#039;s vertex coordinates do determine the scrolling vector. &#039;&#039;Scroll_things&#039;&#039; only apples for &#039;&#039;&#039;Scroll_Floor&#039;&#039;&#039; and means simple visual scrolling (0), thing movement with static floor (1) or thing movement with floor (2). &#039;&#039;X&#039;&#039; and &#039;&#039;y&#039;&#039; are the velocity components with which to scroll, if &#039;&#039;kind&#039;&#039; is less than 4 (otherwise the line&#039;s size is used).&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Scroll_Texture_Model&#039;&#039;&#039; does wall texture scrolling according to line&#039;s vector relative to the target lines.&lt;br /&gt;
&lt;br /&gt;
===Pushers===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 218 || 457 || [[Sector_SetWind]] || tag || force || angle || flags ||&lt;br /&gt;
|-&lt;br /&gt;
|| 219 || 223 || [[Sector_SetFriction]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 220 || 479 || [[Sector_SetCurrent]] || tag || force || angle || flags || &lt;br /&gt;
|-&lt;br /&gt;
|| 227 || 480 || [[PointPush_SetForce]] || tag || tid || force || use line ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Exits===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 74 || 449 || [[Teleport_NewMap]] || level number || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 75 || 400 || [[Teleport_EndGame]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 179 || 462 || [[ChangeSkill]] || skill || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 243 || 447 || [[Exit_Normal]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 244 || 448 || [[Exit_Secret]] || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Teleport_EndGame&#039;&#039;&#039;&lt;br /&gt;
:Ends the entire game in victory. This triggers the current game&#039;s assigned ending cutscene and the player can only choose to start a new game.&lt;br /&gt;
*&#039;&#039;&#039;Exit_Normal&#039;&#039;&#039;(reserved)&lt;br /&gt;
:Exits to a normal destination level. The argument is reserved and must be 0.&lt;br /&gt;
*&#039;&#039;&#039;Exit_Secret&#039;&#039;&#039;(reserved)&lt;br /&gt;
:Exits to the secret destination level.  The argument is reserved and must be 0.&lt;br /&gt;
*&#039;&#039;&#039;Teleport_NewMap&#039;&#039;&#039;(level_number, reserved, reserved)&lt;br /&gt;
:Exits to the given map.  The last two arguments are reserved and must be 0.&lt;br /&gt;
*&#039;&#039;&#039;ChangeSkill&#039;&#039;&#039;(&#039;&#039;skill&#039;&#039;)&lt;br /&gt;
:Changes the current difficulty level, where &#039;&#039;skill&#039;&#039; is from 0 (I&#039;m too young to die) to 4 inclusive (Nightmare!).&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[ACS functions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Editing]]&lt;br /&gt;
[[Category:Editing reference]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Parameterized_linedef_specials&amp;diff=6388</id>
		<title>Parameterized linedef specials</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Parameterized_linedef_specials&amp;diff=6388"/>
		<updated>2025-12-13T10:07:08Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Teleportation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The parameterized linedefs types are Hexen-like action specials with arguments, whose purpose is to be more customizable than the Boom generalized types. When mapping in UDMF, you have to use these parameterized specials instead of the classic parameter-less ones. They&#039;re also used in Hexen format maps (which is necessary when Hexen is going to be supported in Eternity), though Hexen format is not recommended or fully supported for other maps than vanilla Hexen in Eternity. To use parameterized specials in classic (Doom) format maps, provide an [[ExtraData]] lump by attaching it via [[MapInfo|EMAPINFO]] to the map. [[ACS]] scripts can also call parameterized specials. They&#039;re meant to be as compatible as possible with the ZDoom implementation, so minimal changes to zspecial.acs are needed, though Eternity may have extensions of its own. Most likely however the base zspecial.acs is going to be updated for Eternity. Parameters are only limited to 0-255 in the Hexen format (and some specials may have some legacy workarounds for that interval), but otherwise they&#039;re in the normal integer range for other environments (UDMF, ExtraData, ACS). Some specials have never been added to ExtraData, because of their mere purpose being to work under the limits of the Hexen map format.&lt;br /&gt;
&lt;br /&gt;
Each parameterized line special has a name and two associated numbers: one for UDMF, ACS and Hexen formats, and another one for ExtraData support, set this way to avoid conflicts with classic Boom specials (since it&#039;s possible to use their number in the editor instead of the 270 &amp;quot;ExtraData special&amp;quot;). If you only see one number mentioned in the documentation, then it&#039;s the UDMF number (for ExtraData it&#039;s preferred to use the names).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT&#039;&#039;&#039;: all &#039;&#039;reserved&#039;&#039; parameters must be set to 0. Failure to do so will result in your maps being broken in later Eternity versions! Also, for &amp;quot;flag&amp;quot; arguments, do not add or provide other values than in the intended range, for the same reason.&lt;br /&gt;
&lt;br /&gt;
{{Backto|Linedef types}}&lt;br /&gt;
==General info==&lt;br /&gt;
All sector tags, unless otherwise specified, have a special meaning if 0: that means to affect the sector behind the trigger linedef (like regular doors in vanilla Doom).&lt;br /&gt;
&lt;br /&gt;
Thing tags (TIDs) have special meaning for values 0 and negative: 0 means activator, and -1 to -4 mean to affect players 1 to 4 (if present). &#039;&#039;&#039;Consider other negative values reserved&#039;&#039;&#039; and do not use them in your maps.&lt;br /&gt;
==Specials==&lt;br /&gt;
===Doors===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! ExtraData #&lt;br /&gt;
! Name&lt;br /&gt;
! Args&lt;br /&gt;
! Summary&lt;br /&gt;
|-&lt;br /&gt;
|| 10 || 302 || [[Door_Close]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door.&lt;br /&gt;
|-&lt;br /&gt;
|| 11 || 301 || [[Door_Open]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door.&lt;br /&gt;
|-&lt;br /&gt;
|| 12 || 300 || [[Door_Raise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door temporarily.&lt;br /&gt;
|-&lt;br /&gt;
|| 13 || 429 || [[Door_LockedRaise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lock&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a locked door.&lt;br /&gt;
|-&lt;br /&gt;
|| 105 || 304 || [[Door_WaitRaise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;timeoffset&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door temporarily after a delay.&lt;br /&gt;
|-&lt;br /&gt;
|| 106 || 305 || [[Door_WaitClose]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;timeoffset&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door after a delay.&lt;br /&gt;
|-&lt;br /&gt;
|| 249 || 303 || [[Door_CloseWaitOpen]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay_octics&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door, waits a bit, then opens it back.&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;tag&#039;&#039;: Tag of sector to affect. If it&#039;s 0, then the sector behind the linedef will be activated, if applicable.&lt;br /&gt;
:&#039;&#039;speed&#039;&#039;: How fast, in eights of units per tic, the door should move. Doom normal doors are as fast as 16, and blazing doors are 64.&lt;br /&gt;
:&#039;&#039;delay&#039;&#039;: Time in tics (1/35 seconds) for the door before it returns to its opposite movement.&lt;br /&gt;
:&#039;&#039;delay_octics&#039;&#039;: Delay, but expressed in octics, which is eighths of second (i.e. 8 octics = 1 second).&lt;br /&gt;
:&#039;&#039;timeoffset&#039;&#039;: Time in tics before the door activates.&lt;br /&gt;
:&#039;&#039;light_tag&#039;&#039;: Sector tag to receive light changes to maximum or minimum neighbor depending on whether the door is closed or opened.&lt;br /&gt;
:&#039;&#039;lock&#039;&#039;: One of the [[lock identifiers]] to specify the key or set of keys.&lt;br /&gt;
&lt;br /&gt;
===Floor movement, earthquake===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! ExtraData #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|| 20 || 318 || [[Floor_LowerByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 21 || 309 || [[Floor_LowerToLowest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 22 || 311 || [[Floor_LowerToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 23 || 317 || [[Floor_RaiseByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 24 || 306 || [[Floor_RaiseToHighest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 25 || 310 || [[Floor_RaiseToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 28 || 451 || [[Floor_RaiseAndCrush]] || tag || speed || crush || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 35 || - || [[Floor_RaiseByValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 36 || - || [[Floor_LowerByValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 37 || 319 || [[Floor_MoveToValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;neg&#039;&#039; || &#039;&#039;change&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 46 || 452 || [[Floor_CrushStop]] || &#039;&#039;tag&#039;&#039; || || || || || Stops crushing floor movement.&lt;br /&gt;
|-&lt;br /&gt;
|| 66 || 321 || [[Floor_LowerInstant]] || &#039;&#039;tag&#039;&#039; || - || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || || Lowers floor instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 67 || 320 || [[Floor_RaiseInstant]] || &#039;&#039;tag&#039;&#039; || - || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || Raises floor instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 68 || - || [[Floor_MoveToValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;neg&#039;&#039; || &#039;&#039;change&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 120 || 375 || [[Radius_Quake]] || intensity || duration || damage radius || tremor radius || foci tid&lt;br /&gt;
|-&lt;br /&gt;
|| 138 || 397 || [[Floor_Waggle]] || tag || height || speed || offset || timer&lt;br /&gt;
|-&lt;br /&gt;
|| 200 || 464 || [[Generic_Floor]] || tag || speed || height || target || flags || Boom-like generalized floor.&lt;br /&gt;
|-&lt;br /&gt;
|| 228 || 475 || [[Plat_RaiseAndStayTx0]] || tag || speed || lock out || || || Variation of [[Floor_RaiseToNearest]].&lt;br /&gt;
|-&lt;br /&gt;
|| 230 || 476 || [[Plat_UpByValueStayTx]] || tag || speed || height || || || Variation of [[Floor_RaiseByValue]]&lt;br /&gt;
|-&lt;br /&gt;
|| 231 || 487 || [[Plat_ToggleCeiling]] || tag || || || || || Toggles floor between ceiling and initial position.&lt;br /&gt;
|-&lt;br /&gt;
|| 235 || 466 || [[Floor_TransferTrigger]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 236 || 467 || [[Floor_TransferNumeric]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 238 || 312 || [[Floor_RaiseToLowestCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 240 || 315 || [[Floor_RaiseByTexture]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 242 || 416 || [[Floor_LowerToHighest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;adjust&#039;&#039; || &#039;&#039;force_adjust&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 250 || 431 || [[Floor_Donut]] || pillar tag || pillar speed || pool speed || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 256 || 307 || [[Floor_LowerToHighestEE]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 257 || 308 || [[Floor_RaiseToLowest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || || || Instantly lower floor to lowest neighbour.&lt;br /&gt;
|-&lt;br /&gt;
|| 258 || 313 || [[Floor_LowerToLowestCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || || || Lower floor to lowest ceiling.&lt;br /&gt;
|-&lt;br /&gt;
|| 259 || 314 || [[Floor_RaiseToCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039; || Raise floor to ceiling.&lt;br /&gt;
|-&lt;br /&gt;
|| 260 || 322 || [[Floor_ToCeilingInstant]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039; || || Raise floor to ceiling instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 261 || 316 || [[Floor_LowerByTexture]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || || || Lower floor by shortest lower texture.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Floor_Waggle&#039;&#039;&#039; ( tag, height, speed, offset, timer )&lt;br /&gt;
:This special implements the sinusoidal floor motion from Hexen. Its tag and speed parameters bear similar properties to the other floor specials, but -&lt;br /&gt;
:*height - waggle amplitude in 1/8 units&lt;br /&gt;
:*offset - phase offset; how much to delay the waggle in relation to others (0 to 63, in byte angles)&lt;br /&gt;
:*timer - time in seconds the waggle lasts. Zero means permanent&lt;br /&gt;
*&#039;&#039;&#039;Radius_Quake&#039;&#039;&#039; (intensity, duration, damageradius, quakeradius, tid)&lt;br /&gt;
:This special implements the earthquake effect, centred on the map spot with the given &#039;&#039;tid&#039;&#039;, with user-selectable intensity, duration and separate thing damage radius and tremor radius (both being multiplied with 64).&lt;br /&gt;
*&#039;&#039;&#039;Floor_RaiseAndCrush&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;crush&#039;&#039;)&lt;br /&gt;
:This one is for Hexen compatibility. Please use &#039;&#039;&#039;Floor_RaiseToCeiling&#039;&#039;&#039; or &#039;&#039;&#039;Floor_RaiseToLowestCeiling&#039;&#039;&#039; instead.&lt;br /&gt;
====See also====&lt;br /&gt;
*[[Floor movement classic specials]]: for the Doom format variants.&lt;br /&gt;
&lt;br /&gt;
===Plats, lifts===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|| 60 || 410 || [[Plat_PerpetualRaise]] || tag || speed || delay || || || Perpetual lift with lip of 8&lt;br /&gt;
|-&lt;br /&gt;
|| 61 || 411 || [[Plat_Stop]] || tag || stop_mode || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 62 || 412 || [[Plat_DownWaitUpStay]] || tag || speed || delay || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 63 || 413 || [[Plat_DownByValue]] || tag || speed || delay || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 64 || 414 || [[Plat_UpWaitDownStay]] || tag || speed || delay || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 65 || 415 || [[Plat_UpByValue]] || tag || speed || delay || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 203 || 501 || [[Generic_Lift]] || tag || speed || delay || type || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 206 || 488 || [[Plat_DownWaitUpStayLip]] || tag || speed || delay || lip ||&lt;br /&gt;
|-&lt;br /&gt;
|| 207 || 489 || [[Plat_PerpetualRaiseLip]] || tag || speed || delay || lip ||&lt;br /&gt;
|}&lt;br /&gt;
*207 (489) &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lip&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039;, but lets you choose a &amp;quot;lip&amp;quot; (distance from lowest adjacent floor to move down to). If &#039;&#039;lip&#039;&#039; is 0, it will work like classic Doom perpetual plats.&lt;br /&gt;
*61 (411) &#039;&#039;&#039;Plat_Stop&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;stop_mode&#039;&#039;)&lt;br /&gt;
:Pauses or stops a perpetual platform from moving. The behavior depends on &#039;&#039;stop_mode&#039;&#039;:&lt;br /&gt;
:*1: the platform will be merely suspended. It will only be retriggerable by other &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039; or &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039; (or in Doom-format maps, by similar specials), continuing from the exact same state it stopped.&lt;br /&gt;
:*2: the platform movement will be stopped at the current position. It will be retriggerable by any other special. If restarted by &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039; or &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039; it may not remember the last state.&lt;br /&gt;
:*0 (default): will act based on compatibility with current game mode. On Doom/Heretic/Hexen, it will act like mode 1, while in Hexen it will act like mode 2.&lt;br /&gt;
*62 (412) &#039;&#039;&#039;Plat_DownWaitUpStay&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Lowers the plat as a lift to the lowest adjacent floor &#039;&#039;&#039;plus 8 units&#039;&#039;&#039;. Use &#039;&#039;&#039;Plat_DownWaitUpStayLip&#039;&#039;&#039; with 0 lip if you want classic Doom-like lifts.&lt;br /&gt;
*206 (488) &#039;&#039;&#039;Plat_DownWaitUpStayLip&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lip&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Plat_DownWaitUpStay&#039;&#039;&#039; but with settable &#039;&#039;lip&#039;&#039;.&lt;br /&gt;
*63 (413) &#039;&#039;&#039;Plat_DownByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;height&#039;&#039;)&lt;br /&gt;
:Lowers a lift by an absolute &#039;&#039;height&#039;&#039;, &#039;&#039;&#039;multiplied by 8&#039;&#039;&#039;. It will rise back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*64 (414) &#039;&#039;&#039;Plat_UpWaitDownStay&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Raises a lift to the highest neighbor floor. It will lower back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*65 (415) &#039;&#039;&#039;Plat_UpByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;height&#039;&#039;)&lt;br /&gt;
:Raises a lift by an absolute &#039;&#039;height&#039;&#039;, &#039;&#039;&#039;multiplied by 8&#039;&#039;&#039;. It will lower back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*231 (487) &#039;&#039;&#039;Plat_ToggleCeiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Toggles a floor between the default position and touching the ceiling. It will be left busy after that.&lt;br /&gt;
&lt;br /&gt;
===Elevators===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 95 || 453 || [[FloorAndCeiling_LowerByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 96 || 454 || [[FloorAndCeiling_RaiseByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 245 || 458 || [[Elevator_RaiseToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 246 || 460 || [[Elevator_MoveToFloor]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 247 || 459 || [[Elevator_LowerToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Ceiling movement===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 38 || 500 || [[Ceiling_Waggle]] || tag || height || speed || offset || timer&lt;br /&gt;
|-&lt;br /&gt;
|| 40 || 336 || [[Ceiling_LowerByValue]] || tag || speed || height || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 41 || 335 || [[Ceiling_RaiseByValue]] || tag || speed || height || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 42 || 432 || [[Ceiling_CrushAndRaise]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 43 || 435 || [[Ceiling_LowerAndCrush]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 44 || 433 || [[Ceiling_CrushStop]] || tag || stop mode || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 45 || 434 || [[Ceiling_CrushRaiseAndStay]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 47 || 337 || [[Ceiling_MoveToValue]] || tag || speed || height || negate || change&lt;br /&gt;
|-&lt;br /&gt;
|| 69 || - || [[Ceiling_MoveToValueTimes8]] || tag || speed || height || negate || change&lt;br /&gt;
|-&lt;br /&gt;
|| 97 || 436 || [[Ceiling_LowerAndCrushDist]] || tag || speed || crush || gap || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 104 || 441 || [[Ceiling_CrushAndRaiseSilentDist]] || tag || gap || speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 168 || 437 || [[Ceiling_CrushAndRaiseDist]] || tag || gap || speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 192 || 330 || [[Ceiling_LowerToHighestFloor]] || tag || speed || change || crush || gap to floor&lt;br /&gt;
|-&lt;br /&gt;
|| 193 || 339 || [[Ceiling_LowerInstant]] || tag || - || height * 8 || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 194 || 338 || [[Ceiling_RaiseInstant]] || tag || - || height * 8 || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 195 || 438 || [[Ceiling_CrushRaiseAndStayA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 196 || 439 || [[Ceiling_CrushAndRaiseA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 197 || 440 || [[Ceiling_CrushAndRaiseSilentA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 198 || - || [[Ceiling_RaiseByValueTimes8]] || tag || speed || height * 8 || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 199 || - || [[Ceiling_LowerByValueTimes8]] || tag || speed || height * 8 || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 201 || 465 || [[Generic_Ceiling]] || tag || speed || height || target || flags&lt;br /&gt;
|-&lt;br /&gt;
|| 205 || 443 || [[Generic_Crusher]] || tag || down speed || up speed || silent || damage&lt;br /&gt;
|-&lt;br /&gt;
|| 252 || 325 || [[Ceiling_RaiseToNearest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 253 || 328 || [[Ceiling_LowerToLowest]] || tag || speed || change || crush ||&lt;br /&gt;
|-&lt;br /&gt;
|| 254 || 332 || [[Ceiling_LowerToFloor]] || tag || speed || change || crush || gap&lt;br /&gt;
|-&lt;br /&gt;
|| 255 || 442 || [[Ceiling_CrushRaiseAndStaySilA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 262 || 323 || [[Ceiling_RaiseToHighest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 263 || 324 || [[Ceiling_ToHighestInstant]] || tag || change || crush || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 264 || 326 || [[Ceiling_LowerToNearest]] || tag || speed || change || crush ||&lt;br /&gt;
|-&lt;br /&gt;
|| 265 || 327 || [[Ceiling_RaiseToLowest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 266 || 329 || [[Ceiling_RaiseToHighestFloor]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 267 || 331 || [[Ceiling_ToFloorInstant]] || tag || change || crush || gap ||&lt;br /&gt;
|-&lt;br /&gt;
|| 268 || 333 || [[Ceiling_RaiseByTexture]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 269 || 334 || [[Ceiling_LowerByTexture]] || tag || speed || change || crush ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Ceiling_RaiseToHighest&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*Ceiling_ToHighestInstant&#039;&#039;&#039;    ( tag, change, crush                )&lt;br /&gt;
*Ceiling_RaiseToNearest&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerToNearest&#039;&#039;&#039;      ( tag, speed, change, crush         )&lt;br /&gt;
*Ceiling_RaiseToLowest&#039;&#039;&#039;       ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerToLowest&#039;&#039;&#039;       ( tag, speed, change, crush         )&lt;br /&gt;
*Ceiling_RaiseToHighestFloor&#039;&#039;&#039; ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerToHighestFloor&#039;&#039;&#039; ( tag, speed, change, crush, gap    )&lt;br /&gt;
*Ceiling_ToFloorInstant&#039;&#039;&#039;      ( tag, change, crush, gap           )&lt;br /&gt;
*Ceiling_LowerToFloor&#039;&#039;&#039;        ( tag, speed, change, crush, gap    )&lt;br /&gt;
*Ceiling_RaiseByTexture&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerByTexture&#039;&#039;&#039;      ( tag, speed, change, crush         )&lt;br /&gt;
*Ceiling_RaiseByValue&#039;&#039;&#039;        ( tag, speed, height, change        )&lt;br /&gt;
*Ceiling_LowerByValue&#039;&#039;&#039;        ( tag, speed, height, change, crush )&lt;br /&gt;
*Ceiling_MoveToValue&#039;&#039;&#039;         ( tag, speed, height, change, crush )&lt;br /&gt;
*Ceiling_RaiseInstant&#039;&#039;&#039;        ( tag, height, change               )&lt;br /&gt;
*Ceiling_LowerInstant&#039;&#039;&#039;        ( tag, height, change, crush        )&lt;br /&gt;
:Values for these specials:&lt;br /&gt;
:*tag: Tag of the sector(s) to affect. A tag of zero means to affect the sector on the second side of the line.&lt;br /&gt;
:*speed: Speed of ceiling in eighths of a unit per tic.&lt;br /&gt;
:*change: This parameter takes the following values:&lt;br /&gt;
::0 : No texture or type change.&lt;br /&gt;
::1 : Copy texture, zero type; trigger model.&lt;br /&gt;
::2 : Copy texture, zero type; numeric model.&lt;br /&gt;
::3 : Copy texture, preserve type; trigger model.&lt;br /&gt;
::4 : Copy texture, preserve type; numeric model.&lt;br /&gt;
::5 : Copy texture and type; trigger model.&lt;br /&gt;
::6 : Copy texture and type; numeric model.&lt;br /&gt;
:*crush: Amount of crushing damage ceiling inflicts at each crushing event (when gametic % 4 = 0). If this amount is less than or equal to zero, no crushing damage is done.&lt;br /&gt;
:*height: An integer number of units, either the amount to move the floor by or the exact z coordinate to move the floor toward. Negative numbers are valid for the latter case.&lt;br /&gt;
:*gap: Distance to keep from the destination. Useful if crush is nonzero&lt;br /&gt;
*Generic_Ceiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;height&#039;&#039;, &#039;&#039;target&#039;&#039;, &#039;&#039;flag&#039;&#039;)&lt;br /&gt;
:See &#039;&#039;&#039;Generic_Floor&#039;&#039;&#039; for an explanation of parameters.&lt;br /&gt;
&lt;br /&gt;
====Crushing ceilings====&lt;br /&gt;
There are some crushing ceilings available now. Some originate from Hexen while others are extensions from ZDoom. ZDoom compatibility is considered where relevant. For all specials where it applies, &#039;&#039;crushmode&#039;&#039; can take one of these values:&lt;br /&gt;
*0: compatibility. Act like it would do in ZDoom. This means that in Doom the crusher keeps pushing into the things it crushes, while in Hexen it stays on position while dealing damage. And if the game is Doom, the special has &amp;quot;Dist&amp;quot; in the name and the speed is set to 8, it will also slow down to speed 1 when crushing.&lt;br /&gt;
*1: Doom mode without slowdown. Same as classic Doom&#039;s fast crushers.&lt;br /&gt;
*2: Hexen mode. It will rest in position while crushing.&lt;br /&gt;
*3: Doom mode with slowdown. Same as classic Doom&#039;s slow crushers. Currently the crushing speed is hardcoded to 1.&lt;br /&gt;
The specials are the following. Take care that Ceiling_CrushAndRaise is mainly for Hexen compatibility: it will rise at half the speed it lowers. For Doom-like crushers use Ceiling_CrushAndRaiseA (all &amp;quot;A&amp;quot; crushers let you specify the rising speed) or Ceiling_CrushAndRaiseDist (all &amp;quot;Dist&amp;quot; crushers rise at the same speed as they lower, but instead let you specify the gap size to the ground). Finally, Generic_Crusher aims to act like the Boom crushers, having the following particularities: it will slow down when crushing if speed is less than 24, and it will be totally silent if specified in the parameter (won&#039;t even make clunk noises).&lt;br /&gt;
*Ceiling_CrushAndRaise(tag, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseSilentA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseDist(tag, ground_distance, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseSilentDist(tag, ground_distance, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseAndStay(tag, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseAndStayA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseAndStaySilA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_LowerAndCrush(tag, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_LowerAndCrushDist(tag, speed, damage, ground_distance, crushmode)&lt;br /&gt;
*Ceiling_CrushStop(tag, stop_mode)&lt;br /&gt;
:*stop_mode can be: 0 (compatibility), 1 (Doom: pause crusher), 2 (Hexen: remove crusher and release the ceiling)&lt;br /&gt;
*Generic_Crusher(tag, down_speed, up_speed, silent, damage)&lt;br /&gt;
&lt;br /&gt;
===Stair building===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 204 || 502 || [[Generic_Stairs]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;flags&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 217 || 340 || [[Stairs_BuildUpDoom]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;delay&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 270 || 341 || [[Stairs_BuildDownDoom]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;delay&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 271 || 342 || [[Stairs_BuildUpDoomSync]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;reset&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 272 || 343 || [[Stairs_BuildDownDoomSync]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;reset&#039;&#039; ||&lt;br /&gt;
|}&lt;br /&gt;
 ------------------------------------------------------------------------------ &lt;br /&gt;
 * Synchronized stairs have each step move at a different speed so that all the&lt;br /&gt;
   steps reach the destination height at the same time. This stair building&lt;br /&gt;
   style is only available with these parameterized line types. &lt;br /&gt;
 &lt;br /&gt;
 Values&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 tag       : Tag of first sector to raise or lower as a step.&lt;br /&gt;
             When the stair building method is DOOM, subsequent&lt;br /&gt;
             steps are found by searching across two-sided&lt;br /&gt;
             lines where the first side belongs to the current&lt;br /&gt;
             sector and the floor texture is the same. The&lt;br /&gt;
             Hexen stair building method is not yet supported.&lt;br /&gt;
 speed     : Speed of steps in eights of a unit per tic. If the&lt;br /&gt;
             build style is synchronized, only the first step&lt;br /&gt;
             moves at this speed. Other steps will move at a&lt;br /&gt;
             speed which allows them to reach their &lt;br /&gt;
             destination height at the same time.&lt;br /&gt;
 stepsize  : Step size in units.&lt;br /&gt;
 delay     : Delay time in tics between steps&lt;br /&gt;
 reset     : If greater than zero, the stairs will wait this&lt;br /&gt;
             amount of time in tics after completely building&lt;br /&gt;
             and will then reset by repeating the same stair&lt;br /&gt;
             building action but in the reverse direction. If&lt;br /&gt;
             zero, the stairs will never reset.&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
===Polyobjects===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 1 || 348 || [[Polyobj_StartLine]] || id || mirror id || sound sequence || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 2 || 356 || [[Polyobj_RotateLeft]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 3 || 354 || [[Polyobj_RotateRight]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 4 || 352 || [[Polyobj_Move]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 5 || 349 || [[Polyobj_ExplicitLine]] || id || line index || mirror id || sound sequence ||&lt;br /&gt;
|-&lt;br /&gt;
|| 6 || - || [[Polyobj_MoveTimes8]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 7 || 351 || [[Polyobj_DoorSwing]] || id || speed || rotation || delay ||&lt;br /&gt;
|-&lt;br /&gt;
|| 8 || 350 || [[Polyobj_DoorSlide]] || id || speed || angle || distance || delay&lt;br /&gt;
|-&lt;br /&gt;
|| 59 || 499 || [[Polyobj_OR_MoveToSpot]] || id || speed || [[TID]] || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 86 || 496 || [[Polyobj_MoveToSpot]] || id || speed || [[TID]] || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 87 || 474 || [[Polyobj_Stop]] || id || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 88 || 497 || [[Polyobj_MoveTo]] || id || speed || x || y ||&lt;br /&gt;
|-&lt;br /&gt;
|| 89 || 498 || [[Polyobj_OR_MoveTo]] || id || speed || x || y ||&lt;br /&gt;
|-&lt;br /&gt;
|| 90 || 357 || [[Polyobj_OR_RotateLeft]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 91 || 355 || [[Polyobj_OR_RotateRight]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 92 || 353 || [[Polyobj_OR_Move]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 93 || - || [[Polyobj_OR_MoveTimes8]] || id || speed || angle || distance ||&lt;br /&gt;
|}&lt;br /&gt;
*1 (348) &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;mirror_id&#039;&#039;, &#039;&#039;sequence_id&#039;&#039;)&lt;br /&gt;
*5 (349) &#039;&#039;&#039;Polyobj_ExplicitLine(&#039;&#039;id&#039;&#039;, &#039;&#039;linenum&#039;&#039;, &#039;&#039;mirror_id&#039;&#039;, &#039;&#039;sequence_id&#039;&#039;)&lt;br /&gt;
:There are two different methods of creating a polyobject. In the first, the &amp;quot;first&amp;quot; line is given the &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039; special, and subsequent lines are added to the PolyObject by following segs from vertex to vertex. To use this, all the lines around the polyobject must run in the same direction, and the last line must end at the same vertex which starts the first line (in other words, it must be closed).&lt;br /&gt;
&lt;br /&gt;
:With the second method, every line to be included must be given the &#039;&#039;&#039;Polyobj_ExplicitLine&#039;&#039;&#039; special and must be given a &#039;&#039;linenum&#039;&#039; param which is unique amongst all lines that will added to that polyobject. Polyobjects of this sort should also be closed for proper rendering, but the game engine cannot and will not verify that this is the case.&lt;br /&gt;
   &lt;br /&gt;
:Only polyobjects created with the &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039; method can have other line specials on the polyobject&#039;s lines themselves. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;Mirror_id&#039;&#039; is the ID number of a PolyObject that wants to mirror every action that this PolyObject makes. This number cannot refer to the self-same PolyObject, nor should PolyObjects attempt to mirror each other in a cycle since this will create problems with override actions. Angle of motion is always reversed when applying an action to a mirroring PolyObject. If a mirror is already in motion for a non-override action, the mirror will not be affected even if the main object was moved. Mirror polyobjects can themselves define a mirror, and an action will affect all mirroring polyobjects in the chain.&lt;br /&gt;
*4 (352) &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Slides a polyobject in the direction given in &#039;&#039;angle&#039;&#039; by &#039;&#039;distance&#039;&#039;.&lt;br /&gt;
*6 &#039;&#039;&#039;Polyobj_MoveTimes8&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039; but with &#039;&#039;distance&#039;&#039; multiplied by 8. Needed only for the Hexen format and supported for legacy reasons.&lt;br /&gt;
*2 (356) &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Rotates a polyobject counterclockwise by the &#039;&#039;distance&#039;&#039; [[byte angle]] difference. If &#039;&#039;distance&#039;&#039; is 0, it means 360 degrees. If &#039;&#039;distance&#039;&#039; is 255, it means perpetual spinning.&lt;br /&gt;
*3 (354) &#039;&#039;&#039;Polyobj_RotateRight&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Rotates a polyobject clockwise by the &#039;&#039;distance&#039;&#039; [[byte angle]] difference. If &#039;&#039;distance&#039;&#039; is 0, it means 360 degrees. If &#039;&#039;distance&#039;&#039; is 255, it means perpetual spinning.&lt;br /&gt;
*92 (353) &#039;&#039;&#039;Polyobj_OR_Move&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*93 &#039;&#039;&#039;Polyobj_OR_MoveTimes8&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_MoveTimes8&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*90 (357) &#039;&#039;&#039;Polyobj_OR_RotateLeft&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*91 (355) &#039;&#039;&#039;Polyobj_OR_RotateRight&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_RotateRight&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*8 (350) &#039;&#039;&#039;Polyobj_DoorSlide&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Slides a polyobject like a door which closes after a &#039;&#039;delay&#039;&#039; and deflects if it gets jammed.&lt;br /&gt;
*7 (351) &#039;&#039;&#039;Polyobj_DoorSwing&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Swings a polyobject like a door which closes after a &#039;&#039;delay&#039;&#039; and deflects if it gets jammed. There are no special behaviors for setting &#039;&#039;distance&#039;&#039; to 0 or 255, unlike &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039; and derivatives.&lt;br /&gt;
*87 (474) &#039;&#039;&#039;Polyobj_Stop&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;)&lt;br /&gt;
:Stops a polyobject from movement. It will then be free for other activations.&lt;br /&gt;
&lt;br /&gt;
===Pillar building===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 29 || 362 || [[Pillar_Build]] || tag || speed || height || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 30 || 364 || [[Pillar_Open]] || tag || speed || floor dist || ceil dist ||&lt;br /&gt;
|-&lt;br /&gt;
|| 94 || 363 || [[Pillar_BuildAndCrush]] || tag || speed || height || damage ||&lt;br /&gt;
|-&lt;br /&gt;
|| 251 || 468 || [[FloorAndCeiling_LowerRaise]] || tag || floor speed || ceiling speed || Boom emulation ||&lt;br /&gt;
|}&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 #    Function                            ExtraData Name&lt;br /&gt;
 &lt;br /&gt;
 362  Build pillar                        Pillar_Build&lt;br /&gt;
 363  Build pillar and crush              Pillar_BuildAndCrush&lt;br /&gt;
 364  Open pillar                         Pillar_Open &lt;br /&gt;
 &lt;br /&gt;
 Parameters&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 Pillar_Build                  tag, speed, height&lt;br /&gt;
 Pillar_BuildAndCrush          tag, speed, height, crush&lt;br /&gt;
 Pillar_Open                   tag, speed, fdist, cdist&lt;br /&gt;
 &lt;br /&gt;
 Values&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 tag       : Tag of sector to close or open as a pillar. For the&lt;br /&gt;
             action to succeed, neither surface may have an &lt;br /&gt;
             action running on it already. If the tag is zero,&lt;br /&gt;
             the sector on the backside of a 2S line with this&lt;br /&gt;
             special will be used.&lt;br /&gt;
 speed     : Speed of the surface with the greatest distance to&lt;br /&gt;
             move in eights of a unit per tic. The other surface&lt;br /&gt;
             will move at a speed which causes it to reach its&lt;br /&gt;
             destination at the same time.&lt;br /&gt;
 height    : For Build and BuildAndCrush types, this is the &lt;br /&gt;
             height relative to the floor where the floor and &lt;br /&gt;
             ceiling should meet. If this value is zero, the &lt;br /&gt;
             floor and ceiling will meet exactly half-way.&lt;br /&gt;
 crush     : For BuildAndCrush type only, this specifies the &lt;br /&gt;
             amount of damage to inflict per crush event.&lt;br /&gt;
 fdist     : For Open type only, this is the distance the floor&lt;br /&gt;
             should move down. If this value is zero, the floor&lt;br /&gt;
             will move to its lowest neighboring floor.&lt;br /&gt;
 cdist     : For Open type only, this is the distance the&lt;br /&gt;
             ceiling should move up. If this value is zero, the&lt;br /&gt;
             ceiling will move to its highest neighboring &lt;br /&gt;
             ceiling.          &lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
*[[FloorAndCeiling_LowerRaise]]&lt;br /&gt;
&lt;br /&gt;
===ACS Scripts===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 80 || 365 || [[ACS_Execute]] || script || map || arg1 || arg2 || arg3&lt;br /&gt;
|-&lt;br /&gt;
|| 81 || 366 || [[ACS_Suspend]] || script || map || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 82 || 367 || [[ACS_Terminate]] || script || map || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 83 || 430 || [[ACS_LockedExecute]] || script || map || arg1 || arg2 || lock id&lt;br /&gt;
|-&lt;br /&gt;
|| 84 || 420 || [[ACS_ExecuteWithResult]] || script || arg1 || arg2 || arg3 || arg4&lt;br /&gt;
|-&lt;br /&gt;
|| 85 || 490 || [[ACS_LockedExecuteDoor]] || script || map || arg1 || arg2 || lock id&lt;br /&gt;
|-&lt;br /&gt;
|| 226 || 477 || [[ACS_ExecuteAlways]] || script || map || arg1 || arg2 || arg3&lt;br /&gt;
|}&lt;br /&gt;
{{zdoomwiki}}&lt;br /&gt;
Eternity supports ACS script calling.&lt;br /&gt;
*365:&#039;&#039;&#039;ACS_Execute&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg0&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;)&lt;br /&gt;
:Executes the specified script. A map value of zero indicates that the script is on the current map. If the script is on a different map, then the execution of the script will be delayed until the player enters the map that contains it. Only one copy of a script can be running at a time when started with this special. &lt;br /&gt;
:If the specified script was previously executed but then suspended, then execution will begin at the point immediately after where it was suspended instead of starting over again at the beginning.&lt;br /&gt;
:The number of usable arguments is limited to 3.&lt;br /&gt;
*477:&#039;&#039;&#039;ACS_ExecuteAlways&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg0&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;)&lt;br /&gt;
:Same as ACS_Execute, but will not be blocked if an instance of &#039;&#039;scriptnum&#039;&#039; is already running.&lt;br /&gt;
*366:&#039;&#039;&#039;ACS_Suspend&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;)&lt;br /&gt;
:Suspends execution of a script until an ACS_Execute special resumes it.&lt;br /&gt;
*367:&#039;&#039;&#039;ACS_Terminate&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;)&lt;br /&gt;
:Terminates the script.&lt;br /&gt;
*430:&#039;&#039;&#039;ACS_LockedExecute&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;, &#039;&#039;lock&#039;&#039;) &#039;&#039;(since Feb 25 2016)&#039;&#039;&lt;br /&gt;
:This one executes a script that requires the player to have a key or more. See [[Lock identifiers]] for info on what to put for the &#039;&#039;lock&#039;&#039; argument.&lt;br /&gt;
&lt;br /&gt;
===Lights===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 110 || 368 || [[Light_RaiseByValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 111 || 369 || [[Light_LowerByValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 112 || 370 || [[Light_ChangeToValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 113 || 371 || [[Light_Fade]] || tag || dest value || tics || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 114 || 372 || [[Light_Glow]] || tag || max || min || tics ||&lt;br /&gt;
|-&lt;br /&gt;
|| 115 || 373 || [[Light_Flicker]] || tag || max || min || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 116 || 374 || [[Light_Strobe]] || tag || max value || min value || max time || min time&lt;br /&gt;
|-&lt;br /&gt;
|| 232 || 463 || [[Light_StrobeDoom]] || tag || max time || min time || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 233 || 473 || [[Light_MinNeighbor]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 234 || 461 || [[Light_MaxNeighbor]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
If &#039;&#039;tag&#039;&#039; is 0, any such parameterized special will affect the sector behind the linedef, if applicable.&lt;br /&gt;
* &#039;&#039;&#039;Light_MinNeighbor&#039;&#039;&#039; sets the lights in tagged sectors to their minimum neighbors&#039; values.&lt;br /&gt;
* &#039;&#039;&#039;Light_MaxNeighbor&#039;&#039;&#039; sets the lights in tagged sectors to their maximum neighbors&#039; values.&lt;br /&gt;
&lt;br /&gt;
Eternity supports the following light level controlling parameterized linedef specials. If &#039;&#039;tag&#039;&#039; is 0, any such parameterized special will affect the sector behind the linedef, if applicable.&lt;br /&gt;
*&#039;&#039;&#039;Light_RaiseByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Adds the &#039;&#039;lvl&#039;&#039; value to the light levels of tagged sectors, capping them to 255. &lt;br /&gt;
*&#039;&#039;&#039;Light_LowerByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Substracts the &#039;&#039;lvl&#039;&#039; value from the light levels of tagged sectors, limiting them to 0.&lt;br /&gt;
*&#039;&#039;&#039;Light_ChangeToValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Sets the &#039;&#039;lvl&#039;&#039; value for the light level of tagged sectors, and caps it between 0 and 255 inclusive.&lt;br /&gt;
*&#039;&#039;&#039;Light_Fade&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;destvalue&#039;&#039;, &#039;&#039;tics&#039;&#039;)&lt;br /&gt;
:Makes the light level of tagged sectors gradually go to &#039;&#039;destvalue&#039;&#039;, for the given amount of tics. &#039;&#039;tics&#039;&#039; must be greater than 0.&lt;br /&gt;
*&#039;&#039;&#039;Light_Glow&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;, &#039;&#039;tics&#039;&#039;)&lt;br /&gt;
:Enables periodic glowing light effect on tagged sectors. &#039;&#039;tics&#039;&#039; is the duration between the extreme light levels and must be positive. The sequence starts by fading down.&lt;br /&gt;
*&#039;&#039;&#039;Light_Flicker&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;)&lt;br /&gt;
:Enables flickering light effect on tagged sectors.&lt;br /&gt;
*&#039;&#039;&#039;Light_Strobe&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;, &#039;&#039;maxtime&#039;&#039;, &#039;&#039;mintime&#039;&#039;)&lt;br /&gt;
:Enables strobing light effect on tagged sectors. Light will periodically flash, staying at &#039;&#039;maxval&#039;&#039; level for &#039;&#039;maxtime&#039;&#039; tics and at &#039;&#039;minval&#039;&#039; level for &#039;&#039;mintime&#039;&#039; tics.&lt;br /&gt;
*&#039;&#039;&#039;Light_StrobeDoom&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxtime&#039;&#039;, &#039;&#039;mintime&#039;&#039;)&lt;br /&gt;
:Enables strobing light effect on tagged sectors, using Doom&#039;s logic of choosing the minimum and maximum light levels.&lt;br /&gt;
*&#039;&#039;&#039;Light_MinNeighbor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Sets the lights in tagged sectors to their minimum neighbors&#039; values&lt;br /&gt;
*&#039;&#039;&#039;Light_MaxNeighbor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Sets the lights in tagged sectors to their maximum neighbors&#039; values&lt;br /&gt;
&lt;br /&gt;
===Things===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 17 || 422 || [[Thing_Raise]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 19 || 423 || [[Thing_Stop]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 72 || 424 || [[ThrustThing]] || angle || speed || - || tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 73 || 426 || [[DamageThing]] || damage || mod || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 119 || 427 || [[Thing_Damage]] || tid || damage || mod || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 128 || 425 || [[ThrustThingZ]] || tid || speed || up or down || set or add ||&lt;br /&gt;
|-&lt;br /&gt;
|| 130 || 404 || [[Thing_Activate]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 131 || 405 || [[Thing_Deactivate]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 132 || 478 || [[Thing_Remove]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 133 || 428 || [[Thing_Destroy]] || tid || - || sector tag || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 134 || 402 || [[Thing_Projectile]] || tid || type || angle || speed || vertical speed&lt;br /&gt;
|-&lt;br /&gt;
|| 135 || 398 || [[Thing_Spawn]] || tid || type || angle || new_tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 136 || 403 || [[Thing_ProjectileGravity]] || tid || type || angle || speed || vertical speed&lt;br /&gt;
|-&lt;br /&gt;
|| 137 || 399 || [[Thing_SpawnNoFog]] || tid || type || angle || new_tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 176 || 421 || [[Thing_ChangeTID]] || oldtid || newtid || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 248 || 469 || [[HealThing]] || amount || max health || || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Thing_Projectile&#039;&#039;&#039;(tid, type, angle, speed, verticalspeed)&lt;br /&gt;
:Throws a projectile from a map spot. Can also be used to throw a flying monster. Like in Thing_Spawn, &#039;&#039;type&#039;&#039; is an &#039;&#039;&#039;acs_spawndata num&#039;&#039;&#039;. Note that &#039;&#039;speed&#039;&#039; and &#039;&#039;verticalspeed&#039;&#039; are in eighths (units per 8 tics). Up is positive for &#039;&#039;verticalspeed&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;Thing_ProjectileGravity&#039;&#039;&#039;(tid, type, angle, speed, verticalspeed)&lt;br /&gt;
:Same as above, but the thrown projectile or monster will be subject to gravity.&lt;br /&gt;
*&#039;&#039;&#039;Thing_ChangeTID&#039;&#039;&#039;(oldtid, newtid) &#039;&#039;(since Nov 14 2015)&#039;&#039;&lt;br /&gt;
:Sets the TID of all things which currently have &#039;&#039;oldtid&#039;&#039; to the value &#039;&#039;newtid&#039;&#039;. If &#039;&#039;oldtid&#039;&#039; is zero, it will change the TID of the activator.&lt;br /&gt;
*&#039;&#039;&#039;DamageThing&#039;&#039;&#039;(damage, mod) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Damages the activator. &#039;&#039;Mod&#039;&#039; is a means-of-death ([[damagetype]]), which can be used for custom obituaries and damage resistances. If &#039;&#039;damage&#039;&#039; is 0, it will actually do 10000 (gibbing) damage.&lt;br /&gt;
*&#039;&#039;&#039;Thing_Damage&#039;&#039;&#039;(tid, damage, mod) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Same as &#039;&#039;&#039;DamageThing&#039;&#039;&#039;, but with the possibility to select TID (where 0 will mean the activator). It&#039;s done this way for ZDoom compatibility. Unlike &#039;&#039;&#039;DamageThing&#039;&#039;&#039;, it will not cause 10000 damage if &#039;&#039;damage&#039;&#039; is 0.&lt;br /&gt;
*&#039;&#039;&#039;Thing_Destroy&#039;&#039;&#039;(tid, reserved, sectortag) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Causes 10000 damage to all things tagged &#039;&#039;tid&#039;&#039;. Beware that, in accordance to Hexen, &#039;&#039;tid&#039;&#039; 0 will NOT affect the activator; for that use &#039;&#039;&#039;DamageThing&#039;&#039;&#039;. &#039;&#039;Reserved&#039;&#039; must be set to 0. &#039;&#039;Sectortag&#039;&#039; can be used to only kill things inside sectors with given tag.&lt;br /&gt;
*&#039;&#039;&#039;Thing_Remove&#039;&#039;&#039;(tid)&lt;br /&gt;
:Directly removes objects tagged &#039;&#039;tid&#039;&#039; from the game.&lt;br /&gt;
*&#039;&#039;&#039;HealThing&#039;&#039;&#039;(amount, maxhealth)&lt;br /&gt;
:Heals the activator by &#039;&#039;amount&#039;&#039;. &#039;&#039;Maxhealth&#039;&#039; influences maximum health and only affects player activators. For monsters and other objects, the maximum health is always the spawn health. On players, &#039;&#039;maxhealth&#039;&#039; has the following meanings:&lt;br /&gt;
:*If 0, it will heal the player up to the initial health (such as the maximum medikit health in default Doom).&lt;br /&gt;
:*If 1, it will heal the player up to the soulsphere maximum health (in default Doom) or the initial health + 100 (if no soulsphere is defined in current game mode)&lt;br /&gt;
:*Otherwise, it will heal the player up to &#039;&#039;maxhealth&#039;&#039;.&lt;br /&gt;
*227 (480) &#039;&#039;&#039;PointPush_SetForce&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;tid&#039;&#039;, &#039;&#039;amount&#039;&#039;, &#039;&#039;use_line&#039;&#039;)&lt;br /&gt;
:Enables and sets wind for Boom push/pull source things. If &#039;&#039;tag&#039;&#039; is non-zero, it looks for such things inside a tagged sector. Only one push/pull thing will be used for each tagged sector. If &#039;&#039;tag&#039;&#039; is zero, it will enable pushing for things tagged &#039;&#039;tid&#039;&#039;. &#039;&#039;Amount&#039;&#039; is the force, and depending on thing type, it will be attractive or repulsive. If &#039;&#039;use_line&#039;&#039; is 1, it will use the linedef length as amount, not the &#039;&#039;amount&#039;&#039; argument. Either the tagged sector (if &#039;&#039;tag&#039;&#039; is non-zero) or the sectors containing the &#039;&#039;tid&#039;&#039; things must have the Boom generalized wind special.&lt;br /&gt;
&lt;br /&gt;
===Sectors===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Static&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 48 || 482 || yes || [[Sector_Attach3dMidtex]] || line id || optional sector tag || use ceiling || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 54 || 503 || || [[Sector_ChangeFlags]] || tag || setflags || clearflags || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 140 || 495 || || [[Sector_ChangeSound]] || tag || sequence id || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 185 || 470 || || [[Sector_SetRotation]] || tag || floor angle || ceiling angle || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 186 || 472 || || [[Sector_SetCeilingPanning]] || tag || x integer || x fractional || y integer || y fractional&lt;br /&gt;
|-&lt;br /&gt;
|| 187 || 471 || || [[Sector_SetFloorPanning]] || tag || x integer || x fractional || y integer || y fractional&lt;br /&gt;
|-&lt;br /&gt;
|| 190 || 481 || yes || [[Static_Init (sky transfer)]] || tag || 255 || flip sky || ||&lt;br /&gt;
|}&lt;br /&gt;
*470:&#039;&#039;&#039;Sector_SetRotation&#039;&#039;&#039;(tag, floor_angle, ceiling_angle)&lt;br /&gt;
:Sets the floor and ceiling texture rotation of tagged sectors to the given values in degrees (0-360).&lt;br /&gt;
*471:&#039;&#039;&#039;Sector_SetFloorPanning&#039;&#039;&#039;(tag, x_int, x_frac, y_int, y_frac)&lt;br /&gt;
:Sets the floor texture panning of tagged sectors to given X and Y values. A value is calculated as x_int + 0.01 * x_frac.&lt;br /&gt;
*472:&#039;&#039;&#039;Sector_SetCeilingPanning&#039;&#039;&#039;(tag, x_int, x_frac, y_int, y_frac)&lt;br /&gt;
:Same as Sector_SetFloorPanning, but for the ceiling texture.&lt;br /&gt;
*&#039;&#039;&#039;Sector_SetFriction&#039;&#039;&#039;(tag, amount)&lt;br /&gt;
:Sets friction in the target sectors. Those sectors must have the Boom generalized friction special enabled to work. &#039;&#039;Amount&#039;&#039; is an optional argument. If 0, it will use the length of the linedef to specify friction. Otherwise, the friction will be settable by &#039;&#039;amount&#039;&#039;. As a rule, smaller values than 100 mean sludge (high friction) and greater than 100 mean slippery surface (low friction).&lt;br /&gt;
*218 (457) &#039;&#039;&#039;Sector_SetWind&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;strength&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;flags&#039;&#039;)&lt;br /&gt;
:Creates wind in the tagged sectors, which, if Boom-style, must have the wind generalized special set. &#039;&#039;Flags&#039;&#039; can be the sum of the following values:&lt;br /&gt;
:*1: if added, it will cause the wind to be defined by the linedef&#039;s length and direction, instead of the &#039;&#039;strength&#039;&#039; and &#039;&#039;angle&#039;&#039; ([[byte angle]]) parameters;&lt;br /&gt;
:*2: if added, it will use Heretic-style winds, which have a slightly different behavior and scale, and will not require the Boom wind sector special to be set.&lt;br /&gt;
*220 (479) &#039;&#039;&#039;Sector_SetCurrent&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;strength&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;flags&#039;&#039;)&lt;br /&gt;
:Similar to &#039;&#039;&#039;Sector_SetWind&#039;&#039;&#039;, but meant for water flow setup, not air wind.&lt;br /&gt;
&lt;br /&gt;
===Slopes===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 118 || 493 || [[Plane_Copy]] || front floor tag || front ceiling tag || back floor tag || back ceiling tag || share slope&lt;br /&gt;
|-&lt;br /&gt;
|| 181 || 455 || [[Plane_Align]] || floor || ceiling || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Teleportation===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 70 || 444 || [[Teleport]] || tid || sector tag || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 71 || 445 || [[Teleport_NoFog]] || tid || use angle || sector tag || keep height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 215 || 446 || [[Teleport_Line]] || - || dest_id || flip || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Teleport&#039;&#039;&#039;(tid, sector_tag, reserved)&lt;br /&gt;
:Teleports the activator. Depending on whether &#039;&#039;tid&#039;&#039; or &#039;&#039;sector_tag&#039;&#039; is nonzero, the behavior will be Hexen or Doom compatible. If &#039;&#039;tid&#039;&#039; is zero, then it will teleport like in Doom, into the first teleport destination found on sectors tagged &#039;&#039;sector_tag&#039;&#039;.&lt;br /&gt;
:If &#039;&#039;tid&#039;&#039; is non-zero, it will teleport to one random target thing (doesn&#039;t matter the type) among the ones tagged &#039;&#039;tid&#039;&#039;. If in this case &#039;&#039;sector_tag&#039;&#039; is also non-zero, it will only seek a destination thing located in these tagged sectors. This behavior is based on the Hexen teleporters.&lt;br /&gt;
*&#039;&#039;&#039;Teleport_NoFog&#039;&#039;&#039;(tid, use_angle, sector_tag, keep_height)&lt;br /&gt;
:Teleports the activator silently, without fog and without holding it. &#039;&#039;Tid&#039;&#039; and &#039;&#039;sector_tag&#039;&#039; are used the same as in &#039;&#039;&#039;Teleport&#039;&#039;&#039;.&lt;br /&gt;
:&#039;&#039;Use_angle&#039;&#039; sets how the activator angle should be set after teleportation, and can take one of the following values:&lt;br /&gt;
:*0: default Hexen behavior. The thing won&#039;t change its angle at all during teleportation.&lt;br /&gt;
:*1: set thing&#039;s angle to the same angle as the one of the destination spot&lt;br /&gt;
:*2: use Boom&#039;s original, buggy behavior: shift angle &#039;&#039;opposite&#039;&#039; to that of the difference between destination spot&#039;s angle and the line normal&#039;s angle&lt;br /&gt;
:*3: use Boom&#039;s supposedly intended behavior: shift angle by the difference between destination spot&#039;s angle and line normal&#039;s angle.&lt;br /&gt;
:If &#039;&#039;use_angle&#039;&#039; is 2 or 3 and the special is not triggered from a linedef, then it will work like mode 1.&lt;br /&gt;
:&#039;&#039;Keep_height&#039;&#039;: setting this to 1 will make the thing preserve its distance to the floor after teleporting. If it&#039;s 0, the thing will be teleported on the floor, like in Hexen.&lt;br /&gt;
*&#039;&#039;&#039;Teleport_Line&#039;&#039;&#039;(reserved, dest_id, flip)&lt;br /&gt;
:Encapsulates the Boom line-teleporting functions. &#039;&#039;Dest_id&#039;&#039; is the tag of the target line. &#039;&#039;Flip&#039;&#039; will cause the user to rotate 180 degrees after teleporting.&lt;br /&gt;
&lt;br /&gt;
===Portals===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 9 || 450 || [[Line_Horizon]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 300 || 492 || [[Portal_Define]] || portal id || type || anchor line id || z parameter || flipped anchor&lt;br /&gt;
|-&lt;br /&gt;
|| 301 || 491 || [[Line_QuickPortal]] || visual-only || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Line_Horizon&#039;&#039;&#039;&lt;br /&gt;
:Simple linedef specials which converts the middle part with a horizon portal which uses front sector&#039;s floor and ceiling.&lt;br /&gt;
*&#039;&#039;&#039;Portal_Define&#039;&#039;&#039;&lt;br /&gt;
:See the [[Portal_Define|linked article]] for its description.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Line_QuickPortal&#039;&#039;&#039;(&#039;&#039;non-interactive&#039;&#039;)&lt;br /&gt;
:Convenience linedef special to quickly create a portal between two areas, through a linedef&#039;s middle part. The two lines must be of equal length, and of opposite angles (if linked/interactive) or any angle if not linked. They must have the same, unique tag and the same &#039;&#039;non-interactive&#039;&#039; value, which is 0 for linked portals and 1 for two-way non-linked portals.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sector_SetPortal&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;type&#039;&#039;, &#039;&#039;plane&#039;&#039;, &#039;&#039;misc&#039;&#039;)&lt;br /&gt;
:&#039;&#039;&#039;Only needed for easily converting old maps with portals&#039;&#039;&#039;. You can skip this part if you&#039;re designing a new UDMF map.&lt;br /&gt;
:Only activates on map starts, this one sets a sector portal on floor and/or ceiling on the &#039;&#039;tag&#039;&#039;ged sectors. See [[Portal]] for visual examples.&lt;br /&gt;
:&#039;&#039;Plane&#039;&#039; can be 0 (display portal on floor), 1 (display portal on ceiling), 2 (display portal on both);&lt;br /&gt;
:&#039;&#039;Type&#039;&#039; can be:&lt;br /&gt;
:*0: anchored portal. This line must correspond to another line named &amp;quot;anchor&amp;quot;, whose first 3 parameters are the same with this one, except that &#039;&#039;misc&#039;&#039; is 0 for the anchor, while the source line has &#039;&#039;misc&#039;&#039; 1.&lt;br /&gt;
:*2: skybox portal. Uses the skybox camera object as a source, and displays the skybox (view of this camera) in tagged sectors.&lt;br /&gt;
:*3: plane portal. Renders the ceiling texture of line&#039;s front sector at a fixed camera distance.&lt;br /&gt;
:*4: horizon portal. Renders the floor and ceiling textures of line&#039;s front sector at relative camera distance, useful for infinite horizontal planes such as seas.&lt;br /&gt;
:*6: linked portal. Interactive anchored portals (through which gameplay passes seamlessly). Has the same rule as anchored portals with regard to anchor lines. Requires consistent offsets if there are multiple linked portals in the map, otherwise linked portals are disabled.&lt;br /&gt;
:&#039;&#039;Type&#039;&#039; can also be used for copying already placed portals:&lt;br /&gt;
:*1: copy the portal from a sector tagged with &#039;&#039;misc&#039;&#039; into the tagged sectors if &#039;&#039;tag&#039;&#039; is nonzero, or to the front sector if &#039;&#039;tag&#039;&#039; is 0.&lt;br /&gt;
:*5: copy the portal from a sector tagged with &#039;&#039;misc&#039;&#039; into the tagged lines if &#039;&#039;tag&#039;&#039; is nonzero, or to the current line if &#039;&#039;tag&#039;&#039; is 0.&lt;br /&gt;
:&#039;&#039;Misc&#039;&#039; has values depending on the &#039;&#039;type&#039;&#039; chosen. It makes sense for anchored and linked portals (with 0 meaning source line, and 1 meaning anchor line) and it also has a meaning for the copy types (1 and 5) where it specifies the tag of the sector with portals to copy.&lt;br /&gt;
&lt;br /&gt;
===Binary format specific===&lt;br /&gt;
*378:&#039;&#039;&#039;Line_SetIdentification&#039;&#039;&#039;(id)&lt;br /&gt;
:Sets the linedef identification number (separate from tag) to &#039;&#039;id&#039;&#039;. Useful for various specials that use the line id. Do not use in UDMF.&lt;br /&gt;
&lt;br /&gt;
===Property transfer===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Static&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 209 || 242 || yes || [[Transfer_Heights]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 210 || 213 || yes || [[Transfer_FloorLight]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 211 || 261 || yes || [[Transfer_CeilingLight]] || tag || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Transfer_FloorLight&#039;&#039;&#039;(tag)&lt;br /&gt;
*&#039;&#039;&#039;Transfer_CeilingLight&#039;&#039;&#039;(tag)&lt;br /&gt;
:These two are the same as the Boom special, but applicable in parameterized namespaces.&lt;br /&gt;
*&#039;&#039;&#039;Transfer_Heights&#039;&#039;&#039;(tag, reserved)&lt;br /&gt;
:This also acts like the Boom special 242. Argument &#039;&#039;reserved&#039;&#039; must be 0.&lt;br /&gt;
*190 (481) &#039;&#039;&#039;Static_Init&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;type&#039;&#039;, &#039;&#039;flip_or_ceiling&#039;&#039;, &#039;&#039;move_type&#039;&#039;)&lt;br /&gt;
:This is a multi-purpose special encapsulating several static specials from MBF and Boom. &#039;&#039;Tag&#039;&#039; is the tag of the target sector(s). &#039;&#039;Type&#039;&#039; can be 255 for MBF sky transfers. If &#039;&#039;flip_or_ceiling&#039;&#039; is 1, the sky will be flipped horizontally. If &#039;&#039;type&#039;&#039; is 255, &#039;&#039;move_type&#039;&#039; must be 0.&lt;br /&gt;
&lt;br /&gt;
===Scrollers===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 100 || 406 || [[Scroll_Texture_Left]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 101 || 407 || [[Scroll_Texture_Right]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 102 || 408 || [[Scroll_Texture_Up]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 103 || 409 || [[Scroll_Texture_Down]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 222 || 485 || [[Scroll_Texture_Model]] || line id || kind || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 223 || 484 || [[Scroll_Floor]] || tag || kind || move things || x || y&lt;br /&gt;
|- &lt;br /&gt;
|| 224 || 483 || [[Scroll_Ceiling]] || tag || kind || - || x || y&lt;br /&gt;
|-&lt;br /&gt;
|| 225 || ExtraData only || [[Scroll_Texture_Offsets]]&lt;br /&gt;
|}&lt;br /&gt;
*223 (484) &#039;&#039;&#039;Scroll_Floor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;kind&#039;&#039;, &#039;&#039;scroll_things&#039;&#039;, &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;)&lt;br /&gt;
*224 (483) &#039;&#039;&#039;Scroll_Ceiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;kind&#039;&#039;, &#039;&#039;unused&#039;&#039;, &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;)&lt;br /&gt;
*222 (485) &#039;&#039;&#039;Scroll_Texture_Model&#039;&#039;&#039;(&#039;&#039;line_id&#039;&#039;, &#039;&#039;kind&#039;&#039;)&lt;br /&gt;
:These specials do standard Boom scrolling. &#039;&#039;Kind&#039;&#039; specifies if it&#039;s a static scroller (0), displacement scroller (1) or accelerative scroller (2), and 4 can be added to it to discard arguments &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; and instead use the linedef&#039;s vertex coordinates do determine the scrolling vector. &#039;&#039;Scroll_things&#039;&#039; only apples for &#039;&#039;&#039;Scroll_Floor&#039;&#039;&#039; and means simple visual scrolling (0), thing movement with static floor (1) or thing movement with floor (2). &#039;&#039;X&#039;&#039; and &#039;&#039;y&#039;&#039; are the velocity components with which to scroll, if &#039;&#039;kind&#039;&#039; is less than 4 (otherwise the line&#039;s size is used).&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Scroll_Texture_Model&#039;&#039;&#039; does wall texture scrolling according to line&#039;s vector relative to the target lines.&lt;br /&gt;
&lt;br /&gt;
===Pushers===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 218 || 457 || [[Sector_SetWind]] || tag || force || angle || flags ||&lt;br /&gt;
|-&lt;br /&gt;
|| 219 || 223 || [[Sector_SetFriction]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 220 || 479 || [[Sector_SetCurrent]] || tag || force || angle || flags || &lt;br /&gt;
|-&lt;br /&gt;
|| 227 || 480 || [[PointPush_SetForce]] || tag || tid || force || use line ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Exits===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 74 || 449 || [[Teleport_NewMap]] || level number || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 75 || 400 || [[Teleport_EndGame]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 179 || 462 || [[ChangeSkill]] || skill || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 243 || 447 || [[Exit_Normal]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 244 || 448 || [[Exit_Secret]] || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*400:&#039;&#039;&#039;Teleport_EndGame&#039;&#039;&#039;&lt;br /&gt;
:Ends the entire game in victory. This triggers the current game&#039;s assigned ending cutscene and the player can only choose to start a new game.&lt;br /&gt;
*447:&#039;&#039;&#039;Exit_Normal&#039;&#039;&#039;(reserved)&lt;br /&gt;
:Exits to a normal destination level. The argument is reserved and must be 0.&lt;br /&gt;
*448:&#039;&#039;&#039;Exit_Secret&#039;&#039;&#039;(reserved)&lt;br /&gt;
:Exits to the secret destination level.  The argument is reserved and must be 0.&lt;br /&gt;
*449:&#039;&#039;&#039;Teleport_NewMap&#039;&#039;&#039;(level_number, reserved, reserved)&lt;br /&gt;
:Exits to the given map.  The last two arguments are reserved and must be 0.&lt;br /&gt;
*462:&#039;&#039;&#039;ChangeSkill&#039;&#039;&#039;(&#039;&#039;skill&#039;&#039;)&lt;br /&gt;
:Changes the current difficulty level, where &#039;&#039;skill&#039;&#039; is from 0 (I&#039;m too young to die) to 4 inclusive (Nightmare!).&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[ACS functions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Editing]]&lt;br /&gt;
[[Category:Editing reference]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Parameterized_linedef_specials&amp;diff=6387</id>
		<title>Parameterized linedef specials</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Parameterized_linedef_specials&amp;diff=6387"/>
		<updated>2025-12-13T10:05:43Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Things */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The parameterized linedefs types are Hexen-like action specials with arguments, whose purpose is to be more customizable than the Boom generalized types. When mapping in UDMF, you have to use these parameterized specials instead of the classic parameter-less ones. They&#039;re also used in Hexen format maps (which is necessary when Hexen is going to be supported in Eternity), though Hexen format is not recommended or fully supported for other maps than vanilla Hexen in Eternity. To use parameterized specials in classic (Doom) format maps, provide an [[ExtraData]] lump by attaching it via [[MapInfo|EMAPINFO]] to the map. [[ACS]] scripts can also call parameterized specials. They&#039;re meant to be as compatible as possible with the ZDoom implementation, so minimal changes to zspecial.acs are needed, though Eternity may have extensions of its own. Most likely however the base zspecial.acs is going to be updated for Eternity. Parameters are only limited to 0-255 in the Hexen format (and some specials may have some legacy workarounds for that interval), but otherwise they&#039;re in the normal integer range for other environments (UDMF, ExtraData, ACS). Some specials have never been added to ExtraData, because of their mere purpose being to work under the limits of the Hexen map format.&lt;br /&gt;
&lt;br /&gt;
Each parameterized line special has a name and two associated numbers: one for UDMF, ACS and Hexen formats, and another one for ExtraData support, set this way to avoid conflicts with classic Boom specials (since it&#039;s possible to use their number in the editor instead of the 270 &amp;quot;ExtraData special&amp;quot;). If you only see one number mentioned in the documentation, then it&#039;s the UDMF number (for ExtraData it&#039;s preferred to use the names).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT&#039;&#039;&#039;: all &#039;&#039;reserved&#039;&#039; parameters must be set to 0. Failure to do so will result in your maps being broken in later Eternity versions! Also, for &amp;quot;flag&amp;quot; arguments, do not add or provide other values than in the intended range, for the same reason.&lt;br /&gt;
&lt;br /&gt;
{{Backto|Linedef types}}&lt;br /&gt;
==General info==&lt;br /&gt;
All sector tags, unless otherwise specified, have a special meaning if 0: that means to affect the sector behind the trigger linedef (like regular doors in vanilla Doom).&lt;br /&gt;
&lt;br /&gt;
Thing tags (TIDs) have special meaning for values 0 and negative: 0 means activator, and -1 to -4 mean to affect players 1 to 4 (if present). &#039;&#039;&#039;Consider other negative values reserved&#039;&#039;&#039; and do not use them in your maps.&lt;br /&gt;
==Specials==&lt;br /&gt;
===Doors===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! ExtraData #&lt;br /&gt;
! Name&lt;br /&gt;
! Args&lt;br /&gt;
! Summary&lt;br /&gt;
|-&lt;br /&gt;
|| 10 || 302 || [[Door_Close]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door.&lt;br /&gt;
|-&lt;br /&gt;
|| 11 || 301 || [[Door_Open]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door.&lt;br /&gt;
|-&lt;br /&gt;
|| 12 || 300 || [[Door_Raise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door temporarily.&lt;br /&gt;
|-&lt;br /&gt;
|| 13 || 429 || [[Door_LockedRaise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lock&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a locked door.&lt;br /&gt;
|-&lt;br /&gt;
|| 105 || 304 || [[Door_WaitRaise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;timeoffset&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door temporarily after a delay.&lt;br /&gt;
|-&lt;br /&gt;
|| 106 || 305 || [[Door_WaitClose]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;timeoffset&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door after a delay.&lt;br /&gt;
|-&lt;br /&gt;
|| 249 || 303 || [[Door_CloseWaitOpen]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay_octics&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door, waits a bit, then opens it back.&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;tag&#039;&#039;: Tag of sector to affect. If it&#039;s 0, then the sector behind the linedef will be activated, if applicable.&lt;br /&gt;
:&#039;&#039;speed&#039;&#039;: How fast, in eights of units per tic, the door should move. Doom normal doors are as fast as 16, and blazing doors are 64.&lt;br /&gt;
:&#039;&#039;delay&#039;&#039;: Time in tics (1/35 seconds) for the door before it returns to its opposite movement.&lt;br /&gt;
:&#039;&#039;delay_octics&#039;&#039;: Delay, but expressed in octics, which is eighths of second (i.e. 8 octics = 1 second).&lt;br /&gt;
:&#039;&#039;timeoffset&#039;&#039;: Time in tics before the door activates.&lt;br /&gt;
:&#039;&#039;light_tag&#039;&#039;: Sector tag to receive light changes to maximum or minimum neighbor depending on whether the door is closed or opened.&lt;br /&gt;
:&#039;&#039;lock&#039;&#039;: One of the [[lock identifiers]] to specify the key or set of keys.&lt;br /&gt;
&lt;br /&gt;
===Floor movement, earthquake===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! ExtraData #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|| 20 || 318 || [[Floor_LowerByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 21 || 309 || [[Floor_LowerToLowest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 22 || 311 || [[Floor_LowerToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 23 || 317 || [[Floor_RaiseByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 24 || 306 || [[Floor_RaiseToHighest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 25 || 310 || [[Floor_RaiseToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 28 || 451 || [[Floor_RaiseAndCrush]] || tag || speed || crush || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 35 || - || [[Floor_RaiseByValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 36 || - || [[Floor_LowerByValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 37 || 319 || [[Floor_MoveToValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;neg&#039;&#039; || &#039;&#039;change&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 46 || 452 || [[Floor_CrushStop]] || &#039;&#039;tag&#039;&#039; || || || || || Stops crushing floor movement.&lt;br /&gt;
|-&lt;br /&gt;
|| 66 || 321 || [[Floor_LowerInstant]] || &#039;&#039;tag&#039;&#039; || - || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || || Lowers floor instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 67 || 320 || [[Floor_RaiseInstant]] || &#039;&#039;tag&#039;&#039; || - || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || Raises floor instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 68 || - || [[Floor_MoveToValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;neg&#039;&#039; || &#039;&#039;change&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 120 || 375 || [[Radius_Quake]] || intensity || duration || damage radius || tremor radius || foci tid&lt;br /&gt;
|-&lt;br /&gt;
|| 138 || 397 || [[Floor_Waggle]] || tag || height || speed || offset || timer&lt;br /&gt;
|-&lt;br /&gt;
|| 200 || 464 || [[Generic_Floor]] || tag || speed || height || target || flags || Boom-like generalized floor.&lt;br /&gt;
|-&lt;br /&gt;
|| 228 || 475 || [[Plat_RaiseAndStayTx0]] || tag || speed || lock out || || || Variation of [[Floor_RaiseToNearest]].&lt;br /&gt;
|-&lt;br /&gt;
|| 230 || 476 || [[Plat_UpByValueStayTx]] || tag || speed || height || || || Variation of [[Floor_RaiseByValue]]&lt;br /&gt;
|-&lt;br /&gt;
|| 231 || 487 || [[Plat_ToggleCeiling]] || tag || || || || || Toggles floor between ceiling and initial position.&lt;br /&gt;
|-&lt;br /&gt;
|| 235 || 466 || [[Floor_TransferTrigger]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 236 || 467 || [[Floor_TransferNumeric]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 238 || 312 || [[Floor_RaiseToLowestCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 240 || 315 || [[Floor_RaiseByTexture]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 242 || 416 || [[Floor_LowerToHighest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;adjust&#039;&#039; || &#039;&#039;force_adjust&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 250 || 431 || [[Floor_Donut]] || pillar tag || pillar speed || pool speed || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 256 || 307 || [[Floor_LowerToHighestEE]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 257 || 308 || [[Floor_RaiseToLowest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || || || Instantly lower floor to lowest neighbour.&lt;br /&gt;
|-&lt;br /&gt;
|| 258 || 313 || [[Floor_LowerToLowestCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || || || Lower floor to lowest ceiling.&lt;br /&gt;
|-&lt;br /&gt;
|| 259 || 314 || [[Floor_RaiseToCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039; || Raise floor to ceiling.&lt;br /&gt;
|-&lt;br /&gt;
|| 260 || 322 || [[Floor_ToCeilingInstant]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039; || || Raise floor to ceiling instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 261 || 316 || [[Floor_LowerByTexture]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || || || Lower floor by shortest lower texture.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Floor_Waggle&#039;&#039;&#039; ( tag, height, speed, offset, timer )&lt;br /&gt;
:This special implements the sinusoidal floor motion from Hexen. Its tag and speed parameters bear similar properties to the other floor specials, but -&lt;br /&gt;
:*height - waggle amplitude in 1/8 units&lt;br /&gt;
:*offset - phase offset; how much to delay the waggle in relation to others (0 to 63, in byte angles)&lt;br /&gt;
:*timer - time in seconds the waggle lasts. Zero means permanent&lt;br /&gt;
*&#039;&#039;&#039;Radius_Quake&#039;&#039;&#039; (intensity, duration, damageradius, quakeradius, tid)&lt;br /&gt;
:This special implements the earthquake effect, centred on the map spot with the given &#039;&#039;tid&#039;&#039;, with user-selectable intensity, duration and separate thing damage radius and tremor radius (both being multiplied with 64).&lt;br /&gt;
*&#039;&#039;&#039;Floor_RaiseAndCrush&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;crush&#039;&#039;)&lt;br /&gt;
:This one is for Hexen compatibility. Please use &#039;&#039;&#039;Floor_RaiseToCeiling&#039;&#039;&#039; or &#039;&#039;&#039;Floor_RaiseToLowestCeiling&#039;&#039;&#039; instead.&lt;br /&gt;
====See also====&lt;br /&gt;
*[[Floor movement classic specials]]: for the Doom format variants.&lt;br /&gt;
&lt;br /&gt;
===Plats, lifts===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|| 60 || 410 || [[Plat_PerpetualRaise]] || tag || speed || delay || || || Perpetual lift with lip of 8&lt;br /&gt;
|-&lt;br /&gt;
|| 61 || 411 || [[Plat_Stop]] || tag || stop_mode || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 62 || 412 || [[Plat_DownWaitUpStay]] || tag || speed || delay || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 63 || 413 || [[Plat_DownByValue]] || tag || speed || delay || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 64 || 414 || [[Plat_UpWaitDownStay]] || tag || speed || delay || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 65 || 415 || [[Plat_UpByValue]] || tag || speed || delay || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 203 || 501 || [[Generic_Lift]] || tag || speed || delay || type || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 206 || 488 || [[Plat_DownWaitUpStayLip]] || tag || speed || delay || lip ||&lt;br /&gt;
|-&lt;br /&gt;
|| 207 || 489 || [[Plat_PerpetualRaiseLip]] || tag || speed || delay || lip ||&lt;br /&gt;
|}&lt;br /&gt;
*207 (489) &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lip&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039;, but lets you choose a &amp;quot;lip&amp;quot; (distance from lowest adjacent floor to move down to). If &#039;&#039;lip&#039;&#039; is 0, it will work like classic Doom perpetual plats.&lt;br /&gt;
*61 (411) &#039;&#039;&#039;Plat_Stop&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;stop_mode&#039;&#039;)&lt;br /&gt;
:Pauses or stops a perpetual platform from moving. The behavior depends on &#039;&#039;stop_mode&#039;&#039;:&lt;br /&gt;
:*1: the platform will be merely suspended. It will only be retriggerable by other &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039; or &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039; (or in Doom-format maps, by similar specials), continuing from the exact same state it stopped.&lt;br /&gt;
:*2: the platform movement will be stopped at the current position. It will be retriggerable by any other special. If restarted by &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039; or &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039; it may not remember the last state.&lt;br /&gt;
:*0 (default): will act based on compatibility with current game mode. On Doom/Heretic/Hexen, it will act like mode 1, while in Hexen it will act like mode 2.&lt;br /&gt;
*62 (412) &#039;&#039;&#039;Plat_DownWaitUpStay&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Lowers the plat as a lift to the lowest adjacent floor &#039;&#039;&#039;plus 8 units&#039;&#039;&#039;. Use &#039;&#039;&#039;Plat_DownWaitUpStayLip&#039;&#039;&#039; with 0 lip if you want classic Doom-like lifts.&lt;br /&gt;
*206 (488) &#039;&#039;&#039;Plat_DownWaitUpStayLip&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lip&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Plat_DownWaitUpStay&#039;&#039;&#039; but with settable &#039;&#039;lip&#039;&#039;.&lt;br /&gt;
*63 (413) &#039;&#039;&#039;Plat_DownByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;height&#039;&#039;)&lt;br /&gt;
:Lowers a lift by an absolute &#039;&#039;height&#039;&#039;, &#039;&#039;&#039;multiplied by 8&#039;&#039;&#039;. It will rise back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*64 (414) &#039;&#039;&#039;Plat_UpWaitDownStay&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Raises a lift to the highest neighbor floor. It will lower back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*65 (415) &#039;&#039;&#039;Plat_UpByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;height&#039;&#039;)&lt;br /&gt;
:Raises a lift by an absolute &#039;&#039;height&#039;&#039;, &#039;&#039;&#039;multiplied by 8&#039;&#039;&#039;. It will lower back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*231 (487) &#039;&#039;&#039;Plat_ToggleCeiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Toggles a floor between the default position and touching the ceiling. It will be left busy after that.&lt;br /&gt;
&lt;br /&gt;
===Elevators===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 95 || 453 || [[FloorAndCeiling_LowerByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 96 || 454 || [[FloorAndCeiling_RaiseByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 245 || 458 || [[Elevator_RaiseToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 246 || 460 || [[Elevator_MoveToFloor]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 247 || 459 || [[Elevator_LowerToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Ceiling movement===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 38 || 500 || [[Ceiling_Waggle]] || tag || height || speed || offset || timer&lt;br /&gt;
|-&lt;br /&gt;
|| 40 || 336 || [[Ceiling_LowerByValue]] || tag || speed || height || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 41 || 335 || [[Ceiling_RaiseByValue]] || tag || speed || height || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 42 || 432 || [[Ceiling_CrushAndRaise]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 43 || 435 || [[Ceiling_LowerAndCrush]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 44 || 433 || [[Ceiling_CrushStop]] || tag || stop mode || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 45 || 434 || [[Ceiling_CrushRaiseAndStay]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 47 || 337 || [[Ceiling_MoveToValue]] || tag || speed || height || negate || change&lt;br /&gt;
|-&lt;br /&gt;
|| 69 || - || [[Ceiling_MoveToValueTimes8]] || tag || speed || height || negate || change&lt;br /&gt;
|-&lt;br /&gt;
|| 97 || 436 || [[Ceiling_LowerAndCrushDist]] || tag || speed || crush || gap || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 104 || 441 || [[Ceiling_CrushAndRaiseSilentDist]] || tag || gap || speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 168 || 437 || [[Ceiling_CrushAndRaiseDist]] || tag || gap || speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 192 || 330 || [[Ceiling_LowerToHighestFloor]] || tag || speed || change || crush || gap to floor&lt;br /&gt;
|-&lt;br /&gt;
|| 193 || 339 || [[Ceiling_LowerInstant]] || tag || - || height * 8 || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 194 || 338 || [[Ceiling_RaiseInstant]] || tag || - || height * 8 || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 195 || 438 || [[Ceiling_CrushRaiseAndStayA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 196 || 439 || [[Ceiling_CrushAndRaiseA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 197 || 440 || [[Ceiling_CrushAndRaiseSilentA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 198 || - || [[Ceiling_RaiseByValueTimes8]] || tag || speed || height * 8 || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 199 || - || [[Ceiling_LowerByValueTimes8]] || tag || speed || height * 8 || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 201 || 465 || [[Generic_Ceiling]] || tag || speed || height || target || flags&lt;br /&gt;
|-&lt;br /&gt;
|| 205 || 443 || [[Generic_Crusher]] || tag || down speed || up speed || silent || damage&lt;br /&gt;
|-&lt;br /&gt;
|| 252 || 325 || [[Ceiling_RaiseToNearest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 253 || 328 || [[Ceiling_LowerToLowest]] || tag || speed || change || crush ||&lt;br /&gt;
|-&lt;br /&gt;
|| 254 || 332 || [[Ceiling_LowerToFloor]] || tag || speed || change || crush || gap&lt;br /&gt;
|-&lt;br /&gt;
|| 255 || 442 || [[Ceiling_CrushRaiseAndStaySilA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 262 || 323 || [[Ceiling_RaiseToHighest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 263 || 324 || [[Ceiling_ToHighestInstant]] || tag || change || crush || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 264 || 326 || [[Ceiling_LowerToNearest]] || tag || speed || change || crush ||&lt;br /&gt;
|-&lt;br /&gt;
|| 265 || 327 || [[Ceiling_RaiseToLowest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 266 || 329 || [[Ceiling_RaiseToHighestFloor]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 267 || 331 || [[Ceiling_ToFloorInstant]] || tag || change || crush || gap ||&lt;br /&gt;
|-&lt;br /&gt;
|| 268 || 333 || [[Ceiling_RaiseByTexture]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 269 || 334 || [[Ceiling_LowerByTexture]] || tag || speed || change || crush ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Ceiling_RaiseToHighest&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*Ceiling_ToHighestInstant&#039;&#039;&#039;    ( tag, change, crush                )&lt;br /&gt;
*Ceiling_RaiseToNearest&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerToNearest&#039;&#039;&#039;      ( tag, speed, change, crush         )&lt;br /&gt;
*Ceiling_RaiseToLowest&#039;&#039;&#039;       ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerToLowest&#039;&#039;&#039;       ( tag, speed, change, crush         )&lt;br /&gt;
*Ceiling_RaiseToHighestFloor&#039;&#039;&#039; ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerToHighestFloor&#039;&#039;&#039; ( tag, speed, change, crush, gap    )&lt;br /&gt;
*Ceiling_ToFloorInstant&#039;&#039;&#039;      ( tag, change, crush, gap           )&lt;br /&gt;
*Ceiling_LowerToFloor&#039;&#039;&#039;        ( tag, speed, change, crush, gap    )&lt;br /&gt;
*Ceiling_RaiseByTexture&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerByTexture&#039;&#039;&#039;      ( tag, speed, change, crush         )&lt;br /&gt;
*Ceiling_RaiseByValue&#039;&#039;&#039;        ( tag, speed, height, change        )&lt;br /&gt;
*Ceiling_LowerByValue&#039;&#039;&#039;        ( tag, speed, height, change, crush )&lt;br /&gt;
*Ceiling_MoveToValue&#039;&#039;&#039;         ( tag, speed, height, change, crush )&lt;br /&gt;
*Ceiling_RaiseInstant&#039;&#039;&#039;        ( tag, height, change               )&lt;br /&gt;
*Ceiling_LowerInstant&#039;&#039;&#039;        ( tag, height, change, crush        )&lt;br /&gt;
:Values for these specials:&lt;br /&gt;
:*tag: Tag of the sector(s) to affect. A tag of zero means to affect the sector on the second side of the line.&lt;br /&gt;
:*speed: Speed of ceiling in eighths of a unit per tic.&lt;br /&gt;
:*change: This parameter takes the following values:&lt;br /&gt;
::0 : No texture or type change.&lt;br /&gt;
::1 : Copy texture, zero type; trigger model.&lt;br /&gt;
::2 : Copy texture, zero type; numeric model.&lt;br /&gt;
::3 : Copy texture, preserve type; trigger model.&lt;br /&gt;
::4 : Copy texture, preserve type; numeric model.&lt;br /&gt;
::5 : Copy texture and type; trigger model.&lt;br /&gt;
::6 : Copy texture and type; numeric model.&lt;br /&gt;
:*crush: Amount of crushing damage ceiling inflicts at each crushing event (when gametic % 4 = 0). If this amount is less than or equal to zero, no crushing damage is done.&lt;br /&gt;
:*height: An integer number of units, either the amount to move the floor by or the exact z coordinate to move the floor toward. Negative numbers are valid for the latter case.&lt;br /&gt;
:*gap: Distance to keep from the destination. Useful if crush is nonzero&lt;br /&gt;
*Generic_Ceiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;height&#039;&#039;, &#039;&#039;target&#039;&#039;, &#039;&#039;flag&#039;&#039;)&lt;br /&gt;
:See &#039;&#039;&#039;Generic_Floor&#039;&#039;&#039; for an explanation of parameters.&lt;br /&gt;
&lt;br /&gt;
====Crushing ceilings====&lt;br /&gt;
There are some crushing ceilings available now. Some originate from Hexen while others are extensions from ZDoom. ZDoom compatibility is considered where relevant. For all specials where it applies, &#039;&#039;crushmode&#039;&#039; can take one of these values:&lt;br /&gt;
*0: compatibility. Act like it would do in ZDoom. This means that in Doom the crusher keeps pushing into the things it crushes, while in Hexen it stays on position while dealing damage. And if the game is Doom, the special has &amp;quot;Dist&amp;quot; in the name and the speed is set to 8, it will also slow down to speed 1 when crushing.&lt;br /&gt;
*1: Doom mode without slowdown. Same as classic Doom&#039;s fast crushers.&lt;br /&gt;
*2: Hexen mode. It will rest in position while crushing.&lt;br /&gt;
*3: Doom mode with slowdown. Same as classic Doom&#039;s slow crushers. Currently the crushing speed is hardcoded to 1.&lt;br /&gt;
The specials are the following. Take care that Ceiling_CrushAndRaise is mainly for Hexen compatibility: it will rise at half the speed it lowers. For Doom-like crushers use Ceiling_CrushAndRaiseA (all &amp;quot;A&amp;quot; crushers let you specify the rising speed) or Ceiling_CrushAndRaiseDist (all &amp;quot;Dist&amp;quot; crushers rise at the same speed as they lower, but instead let you specify the gap size to the ground). Finally, Generic_Crusher aims to act like the Boom crushers, having the following particularities: it will slow down when crushing if speed is less than 24, and it will be totally silent if specified in the parameter (won&#039;t even make clunk noises).&lt;br /&gt;
*Ceiling_CrushAndRaise(tag, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseSilentA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseDist(tag, ground_distance, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseSilentDist(tag, ground_distance, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseAndStay(tag, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseAndStayA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseAndStaySilA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_LowerAndCrush(tag, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_LowerAndCrushDist(tag, speed, damage, ground_distance, crushmode)&lt;br /&gt;
*Ceiling_CrushStop(tag, stop_mode)&lt;br /&gt;
:*stop_mode can be: 0 (compatibility), 1 (Doom: pause crusher), 2 (Hexen: remove crusher and release the ceiling)&lt;br /&gt;
*Generic_Crusher(tag, down_speed, up_speed, silent, damage)&lt;br /&gt;
&lt;br /&gt;
===Stair building===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 204 || 502 || [[Generic_Stairs]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;flags&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 217 || 340 || [[Stairs_BuildUpDoom]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;delay&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 270 || 341 || [[Stairs_BuildDownDoom]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;delay&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 271 || 342 || [[Stairs_BuildUpDoomSync]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;reset&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 272 || 343 || [[Stairs_BuildDownDoomSync]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;reset&#039;&#039; ||&lt;br /&gt;
|}&lt;br /&gt;
 ------------------------------------------------------------------------------ &lt;br /&gt;
 * Synchronized stairs have each step move at a different speed so that all the&lt;br /&gt;
   steps reach the destination height at the same time. This stair building&lt;br /&gt;
   style is only available with these parameterized line types. &lt;br /&gt;
 &lt;br /&gt;
 Values&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 tag       : Tag of first sector to raise or lower as a step.&lt;br /&gt;
             When the stair building method is DOOM, subsequent&lt;br /&gt;
             steps are found by searching across two-sided&lt;br /&gt;
             lines where the first side belongs to the current&lt;br /&gt;
             sector and the floor texture is the same. The&lt;br /&gt;
             Hexen stair building method is not yet supported.&lt;br /&gt;
 speed     : Speed of steps in eights of a unit per tic. If the&lt;br /&gt;
             build style is synchronized, only the first step&lt;br /&gt;
             moves at this speed. Other steps will move at a&lt;br /&gt;
             speed which allows them to reach their &lt;br /&gt;
             destination height at the same time.&lt;br /&gt;
 stepsize  : Step size in units.&lt;br /&gt;
 delay     : Delay time in tics between steps&lt;br /&gt;
 reset     : If greater than zero, the stairs will wait this&lt;br /&gt;
             amount of time in tics after completely building&lt;br /&gt;
             and will then reset by repeating the same stair&lt;br /&gt;
             building action but in the reverse direction. If&lt;br /&gt;
             zero, the stairs will never reset.&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
===Polyobjects===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 1 || 348 || [[Polyobj_StartLine]] || id || mirror id || sound sequence || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 2 || 356 || [[Polyobj_RotateLeft]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 3 || 354 || [[Polyobj_RotateRight]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 4 || 352 || [[Polyobj_Move]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 5 || 349 || [[Polyobj_ExplicitLine]] || id || line index || mirror id || sound sequence ||&lt;br /&gt;
|-&lt;br /&gt;
|| 6 || - || [[Polyobj_MoveTimes8]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 7 || 351 || [[Polyobj_DoorSwing]] || id || speed || rotation || delay ||&lt;br /&gt;
|-&lt;br /&gt;
|| 8 || 350 || [[Polyobj_DoorSlide]] || id || speed || angle || distance || delay&lt;br /&gt;
|-&lt;br /&gt;
|| 59 || 499 || [[Polyobj_OR_MoveToSpot]] || id || speed || [[TID]] || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 86 || 496 || [[Polyobj_MoveToSpot]] || id || speed || [[TID]] || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 87 || 474 || [[Polyobj_Stop]] || id || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 88 || 497 || [[Polyobj_MoveTo]] || id || speed || x || y ||&lt;br /&gt;
|-&lt;br /&gt;
|| 89 || 498 || [[Polyobj_OR_MoveTo]] || id || speed || x || y ||&lt;br /&gt;
|-&lt;br /&gt;
|| 90 || 357 || [[Polyobj_OR_RotateLeft]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 91 || 355 || [[Polyobj_OR_RotateRight]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 92 || 353 || [[Polyobj_OR_Move]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 93 || - || [[Polyobj_OR_MoveTimes8]] || id || speed || angle || distance ||&lt;br /&gt;
|}&lt;br /&gt;
*1 (348) &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;mirror_id&#039;&#039;, &#039;&#039;sequence_id&#039;&#039;)&lt;br /&gt;
*5 (349) &#039;&#039;&#039;Polyobj_ExplicitLine(&#039;&#039;id&#039;&#039;, &#039;&#039;linenum&#039;&#039;, &#039;&#039;mirror_id&#039;&#039;, &#039;&#039;sequence_id&#039;&#039;)&lt;br /&gt;
:There are two different methods of creating a polyobject. In the first, the &amp;quot;first&amp;quot; line is given the &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039; special, and subsequent lines are added to the PolyObject by following segs from vertex to vertex. To use this, all the lines around the polyobject must run in the same direction, and the last line must end at the same vertex which starts the first line (in other words, it must be closed).&lt;br /&gt;
&lt;br /&gt;
:With the second method, every line to be included must be given the &#039;&#039;&#039;Polyobj_ExplicitLine&#039;&#039;&#039; special and must be given a &#039;&#039;linenum&#039;&#039; param which is unique amongst all lines that will added to that polyobject. Polyobjects of this sort should also be closed for proper rendering, but the game engine cannot and will not verify that this is the case.&lt;br /&gt;
   &lt;br /&gt;
:Only polyobjects created with the &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039; method can have other line specials on the polyobject&#039;s lines themselves. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;Mirror_id&#039;&#039; is the ID number of a PolyObject that wants to mirror every action that this PolyObject makes. This number cannot refer to the self-same PolyObject, nor should PolyObjects attempt to mirror each other in a cycle since this will create problems with override actions. Angle of motion is always reversed when applying an action to a mirroring PolyObject. If a mirror is already in motion for a non-override action, the mirror will not be affected even if the main object was moved. Mirror polyobjects can themselves define a mirror, and an action will affect all mirroring polyobjects in the chain.&lt;br /&gt;
*4 (352) &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Slides a polyobject in the direction given in &#039;&#039;angle&#039;&#039; by &#039;&#039;distance&#039;&#039;.&lt;br /&gt;
*6 &#039;&#039;&#039;Polyobj_MoveTimes8&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039; but with &#039;&#039;distance&#039;&#039; multiplied by 8. Needed only for the Hexen format and supported for legacy reasons.&lt;br /&gt;
*2 (356) &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Rotates a polyobject counterclockwise by the &#039;&#039;distance&#039;&#039; [[byte angle]] difference. If &#039;&#039;distance&#039;&#039; is 0, it means 360 degrees. If &#039;&#039;distance&#039;&#039; is 255, it means perpetual spinning.&lt;br /&gt;
*3 (354) &#039;&#039;&#039;Polyobj_RotateRight&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Rotates a polyobject clockwise by the &#039;&#039;distance&#039;&#039; [[byte angle]] difference. If &#039;&#039;distance&#039;&#039; is 0, it means 360 degrees. If &#039;&#039;distance&#039;&#039; is 255, it means perpetual spinning.&lt;br /&gt;
*92 (353) &#039;&#039;&#039;Polyobj_OR_Move&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*93 &#039;&#039;&#039;Polyobj_OR_MoveTimes8&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_MoveTimes8&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*90 (357) &#039;&#039;&#039;Polyobj_OR_RotateLeft&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*91 (355) &#039;&#039;&#039;Polyobj_OR_RotateRight&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_RotateRight&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*8 (350) &#039;&#039;&#039;Polyobj_DoorSlide&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Slides a polyobject like a door which closes after a &#039;&#039;delay&#039;&#039; and deflects if it gets jammed.&lt;br /&gt;
*7 (351) &#039;&#039;&#039;Polyobj_DoorSwing&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Swings a polyobject like a door which closes after a &#039;&#039;delay&#039;&#039; and deflects if it gets jammed. There are no special behaviors for setting &#039;&#039;distance&#039;&#039; to 0 or 255, unlike &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039; and derivatives.&lt;br /&gt;
*87 (474) &#039;&#039;&#039;Polyobj_Stop&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;)&lt;br /&gt;
:Stops a polyobject from movement. It will then be free for other activations.&lt;br /&gt;
&lt;br /&gt;
===Pillar building===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 29 || 362 || [[Pillar_Build]] || tag || speed || height || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 30 || 364 || [[Pillar_Open]] || tag || speed || floor dist || ceil dist ||&lt;br /&gt;
|-&lt;br /&gt;
|| 94 || 363 || [[Pillar_BuildAndCrush]] || tag || speed || height || damage ||&lt;br /&gt;
|-&lt;br /&gt;
|| 251 || 468 || [[FloorAndCeiling_LowerRaise]] || tag || floor speed || ceiling speed || Boom emulation ||&lt;br /&gt;
|}&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 #    Function                            ExtraData Name&lt;br /&gt;
 &lt;br /&gt;
 362  Build pillar                        Pillar_Build&lt;br /&gt;
 363  Build pillar and crush              Pillar_BuildAndCrush&lt;br /&gt;
 364  Open pillar                         Pillar_Open &lt;br /&gt;
 &lt;br /&gt;
 Parameters&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 Pillar_Build                  tag, speed, height&lt;br /&gt;
 Pillar_BuildAndCrush          tag, speed, height, crush&lt;br /&gt;
 Pillar_Open                   tag, speed, fdist, cdist&lt;br /&gt;
 &lt;br /&gt;
 Values&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 tag       : Tag of sector to close or open as a pillar. For the&lt;br /&gt;
             action to succeed, neither surface may have an &lt;br /&gt;
             action running on it already. If the tag is zero,&lt;br /&gt;
             the sector on the backside of a 2S line with this&lt;br /&gt;
             special will be used.&lt;br /&gt;
 speed     : Speed of the surface with the greatest distance to&lt;br /&gt;
             move in eights of a unit per tic. The other surface&lt;br /&gt;
             will move at a speed which causes it to reach its&lt;br /&gt;
             destination at the same time.&lt;br /&gt;
 height    : For Build and BuildAndCrush types, this is the &lt;br /&gt;
             height relative to the floor where the floor and &lt;br /&gt;
             ceiling should meet. If this value is zero, the &lt;br /&gt;
             floor and ceiling will meet exactly half-way.&lt;br /&gt;
 crush     : For BuildAndCrush type only, this specifies the &lt;br /&gt;
             amount of damage to inflict per crush event.&lt;br /&gt;
 fdist     : For Open type only, this is the distance the floor&lt;br /&gt;
             should move down. If this value is zero, the floor&lt;br /&gt;
             will move to its lowest neighboring floor.&lt;br /&gt;
 cdist     : For Open type only, this is the distance the&lt;br /&gt;
             ceiling should move up. If this value is zero, the&lt;br /&gt;
             ceiling will move to its highest neighboring &lt;br /&gt;
             ceiling.          &lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
*[[FloorAndCeiling_LowerRaise]]&lt;br /&gt;
&lt;br /&gt;
===ACS Scripts===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 80 || 365 || [[ACS_Execute]] || script || map || arg1 || arg2 || arg3&lt;br /&gt;
|-&lt;br /&gt;
|| 81 || 366 || [[ACS_Suspend]] || script || map || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 82 || 367 || [[ACS_Terminate]] || script || map || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 83 || 430 || [[ACS_LockedExecute]] || script || map || arg1 || arg2 || lock id&lt;br /&gt;
|-&lt;br /&gt;
|| 84 || 420 || [[ACS_ExecuteWithResult]] || script || arg1 || arg2 || arg3 || arg4&lt;br /&gt;
|-&lt;br /&gt;
|| 85 || 490 || [[ACS_LockedExecuteDoor]] || script || map || arg1 || arg2 || lock id&lt;br /&gt;
|-&lt;br /&gt;
|| 226 || 477 || [[ACS_ExecuteAlways]] || script || map || arg1 || arg2 || arg3&lt;br /&gt;
|}&lt;br /&gt;
{{zdoomwiki}}&lt;br /&gt;
Eternity supports ACS script calling.&lt;br /&gt;
*365:&#039;&#039;&#039;ACS_Execute&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg0&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;)&lt;br /&gt;
:Executes the specified script. A map value of zero indicates that the script is on the current map. If the script is on a different map, then the execution of the script will be delayed until the player enters the map that contains it. Only one copy of a script can be running at a time when started with this special. &lt;br /&gt;
:If the specified script was previously executed but then suspended, then execution will begin at the point immediately after where it was suspended instead of starting over again at the beginning.&lt;br /&gt;
:The number of usable arguments is limited to 3.&lt;br /&gt;
*477:&#039;&#039;&#039;ACS_ExecuteAlways&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg0&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;)&lt;br /&gt;
:Same as ACS_Execute, but will not be blocked if an instance of &#039;&#039;scriptnum&#039;&#039; is already running.&lt;br /&gt;
*366:&#039;&#039;&#039;ACS_Suspend&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;)&lt;br /&gt;
:Suspends execution of a script until an ACS_Execute special resumes it.&lt;br /&gt;
*367:&#039;&#039;&#039;ACS_Terminate&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;)&lt;br /&gt;
:Terminates the script.&lt;br /&gt;
*430:&#039;&#039;&#039;ACS_LockedExecute&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;, &#039;&#039;lock&#039;&#039;) &#039;&#039;(since Feb 25 2016)&#039;&#039;&lt;br /&gt;
:This one executes a script that requires the player to have a key or more. See [[Lock identifiers]] for info on what to put for the &#039;&#039;lock&#039;&#039; argument.&lt;br /&gt;
&lt;br /&gt;
===Lights===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 110 || 368 || [[Light_RaiseByValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 111 || 369 || [[Light_LowerByValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 112 || 370 || [[Light_ChangeToValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 113 || 371 || [[Light_Fade]] || tag || dest value || tics || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 114 || 372 || [[Light_Glow]] || tag || max || min || tics ||&lt;br /&gt;
|-&lt;br /&gt;
|| 115 || 373 || [[Light_Flicker]] || tag || max || min || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 116 || 374 || [[Light_Strobe]] || tag || max value || min value || max time || min time&lt;br /&gt;
|-&lt;br /&gt;
|| 232 || 463 || [[Light_StrobeDoom]] || tag || max time || min time || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 233 || 473 || [[Light_MinNeighbor]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 234 || 461 || [[Light_MaxNeighbor]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
If &#039;&#039;tag&#039;&#039; is 0, any such parameterized special will affect the sector behind the linedef, if applicable.&lt;br /&gt;
* &#039;&#039;&#039;Light_MinNeighbor&#039;&#039;&#039; sets the lights in tagged sectors to their minimum neighbors&#039; values.&lt;br /&gt;
* &#039;&#039;&#039;Light_MaxNeighbor&#039;&#039;&#039; sets the lights in tagged sectors to their maximum neighbors&#039; values.&lt;br /&gt;
&lt;br /&gt;
Eternity supports the following light level controlling parameterized linedef specials. If &#039;&#039;tag&#039;&#039; is 0, any such parameterized special will affect the sector behind the linedef, if applicable.&lt;br /&gt;
*&#039;&#039;&#039;Light_RaiseByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Adds the &#039;&#039;lvl&#039;&#039; value to the light levels of tagged sectors, capping them to 255. &lt;br /&gt;
*&#039;&#039;&#039;Light_LowerByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Substracts the &#039;&#039;lvl&#039;&#039; value from the light levels of tagged sectors, limiting them to 0.&lt;br /&gt;
*&#039;&#039;&#039;Light_ChangeToValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Sets the &#039;&#039;lvl&#039;&#039; value for the light level of tagged sectors, and caps it between 0 and 255 inclusive.&lt;br /&gt;
*&#039;&#039;&#039;Light_Fade&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;destvalue&#039;&#039;, &#039;&#039;tics&#039;&#039;)&lt;br /&gt;
:Makes the light level of tagged sectors gradually go to &#039;&#039;destvalue&#039;&#039;, for the given amount of tics. &#039;&#039;tics&#039;&#039; must be greater than 0.&lt;br /&gt;
*&#039;&#039;&#039;Light_Glow&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;, &#039;&#039;tics&#039;&#039;)&lt;br /&gt;
:Enables periodic glowing light effect on tagged sectors. &#039;&#039;tics&#039;&#039; is the duration between the extreme light levels and must be positive. The sequence starts by fading down.&lt;br /&gt;
*&#039;&#039;&#039;Light_Flicker&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;)&lt;br /&gt;
:Enables flickering light effect on tagged sectors.&lt;br /&gt;
*&#039;&#039;&#039;Light_Strobe&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;, &#039;&#039;maxtime&#039;&#039;, &#039;&#039;mintime&#039;&#039;)&lt;br /&gt;
:Enables strobing light effect on tagged sectors. Light will periodically flash, staying at &#039;&#039;maxval&#039;&#039; level for &#039;&#039;maxtime&#039;&#039; tics and at &#039;&#039;minval&#039;&#039; level for &#039;&#039;mintime&#039;&#039; tics.&lt;br /&gt;
*&#039;&#039;&#039;Light_StrobeDoom&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxtime&#039;&#039;, &#039;&#039;mintime&#039;&#039;)&lt;br /&gt;
:Enables strobing light effect on tagged sectors, using Doom&#039;s logic of choosing the minimum and maximum light levels.&lt;br /&gt;
*&#039;&#039;&#039;Light_MinNeighbor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Sets the lights in tagged sectors to their minimum neighbors&#039; values&lt;br /&gt;
*&#039;&#039;&#039;Light_MaxNeighbor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Sets the lights in tagged sectors to their maximum neighbors&#039; values&lt;br /&gt;
&lt;br /&gt;
===Things===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 17 || 422 || [[Thing_Raise]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 19 || 423 || [[Thing_Stop]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 72 || 424 || [[ThrustThing]] || angle || speed || - || tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 73 || 426 || [[DamageThing]] || damage || mod || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 119 || 427 || [[Thing_Damage]] || tid || damage || mod || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 128 || 425 || [[ThrustThingZ]] || tid || speed || up or down || set or add ||&lt;br /&gt;
|-&lt;br /&gt;
|| 130 || 404 || [[Thing_Activate]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 131 || 405 || [[Thing_Deactivate]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 132 || 478 || [[Thing_Remove]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 133 || 428 || [[Thing_Destroy]] || tid || - || sector tag || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 134 || 402 || [[Thing_Projectile]] || tid || type || angle || speed || vertical speed&lt;br /&gt;
|-&lt;br /&gt;
|| 135 || 398 || [[Thing_Spawn]] || tid || type || angle || new_tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 136 || 403 || [[Thing_ProjectileGravity]] || tid || type || angle || speed || vertical speed&lt;br /&gt;
|-&lt;br /&gt;
|| 137 || 399 || [[Thing_SpawnNoFog]] || tid || type || angle || new_tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 176 || 421 || [[Thing_ChangeTID]] || oldtid || newtid || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 248 || 469 || [[HealThing]] || amount || max health || || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Thing_Projectile&#039;&#039;&#039;(tid, type, angle, speed, verticalspeed)&lt;br /&gt;
:Throws a projectile from a map spot. Can also be used to throw a flying monster. Like in Thing_Spawn, &#039;&#039;type&#039;&#039; is an &#039;&#039;&#039;acs_spawndata num&#039;&#039;&#039;. Note that &#039;&#039;speed&#039;&#039; and &#039;&#039;verticalspeed&#039;&#039; are in eighths (units per 8 tics). Up is positive for &#039;&#039;verticalspeed&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;Thing_ProjectileGravity&#039;&#039;&#039;(tid, type, angle, speed, verticalspeed)&lt;br /&gt;
:Same as above, but the thrown projectile or monster will be subject to gravity.&lt;br /&gt;
*&#039;&#039;&#039;Thing_ChangeTID&#039;&#039;&#039;(oldtid, newtid) &#039;&#039;(since Nov 14 2015)&#039;&#039;&lt;br /&gt;
:Sets the TID of all things which currently have &#039;&#039;oldtid&#039;&#039; to the value &#039;&#039;newtid&#039;&#039;. If &#039;&#039;oldtid&#039;&#039; is zero, it will change the TID of the activator.&lt;br /&gt;
*&#039;&#039;&#039;DamageThing&#039;&#039;&#039;(damage, mod) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Damages the activator. &#039;&#039;Mod&#039;&#039; is a means-of-death ([[damagetype]]), which can be used for custom obituaries and damage resistances. If &#039;&#039;damage&#039;&#039; is 0, it will actually do 10000 (gibbing) damage.&lt;br /&gt;
*&#039;&#039;&#039;Thing_Damage&#039;&#039;&#039;(tid, damage, mod) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Same as &#039;&#039;&#039;DamageThing&#039;&#039;&#039;, but with the possibility to select TID (where 0 will mean the activator). It&#039;s done this way for ZDoom compatibility. Unlike &#039;&#039;&#039;DamageThing&#039;&#039;&#039;, it will not cause 10000 damage if &#039;&#039;damage&#039;&#039; is 0.&lt;br /&gt;
*&#039;&#039;&#039;Thing_Destroy&#039;&#039;&#039;(tid, reserved, sectortag) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Causes 10000 damage to all things tagged &#039;&#039;tid&#039;&#039;. Beware that, in accordance to Hexen, &#039;&#039;tid&#039;&#039; 0 will NOT affect the activator; for that use &#039;&#039;&#039;DamageThing&#039;&#039;&#039;. &#039;&#039;Reserved&#039;&#039; must be set to 0. &#039;&#039;Sectortag&#039;&#039; can be used to only kill things inside sectors with given tag.&lt;br /&gt;
*&#039;&#039;&#039;Thing_Remove&#039;&#039;&#039;(tid)&lt;br /&gt;
:Directly removes objects tagged &#039;&#039;tid&#039;&#039; from the game.&lt;br /&gt;
*&#039;&#039;&#039;HealThing&#039;&#039;&#039;(amount, maxhealth)&lt;br /&gt;
:Heals the activator by &#039;&#039;amount&#039;&#039;. &#039;&#039;Maxhealth&#039;&#039; influences maximum health and only affects player activators. For monsters and other objects, the maximum health is always the spawn health. On players, &#039;&#039;maxhealth&#039;&#039; has the following meanings:&lt;br /&gt;
:*If 0, it will heal the player up to the initial health (such as the maximum medikit health in default Doom).&lt;br /&gt;
:*If 1, it will heal the player up to the soulsphere maximum health (in default Doom) or the initial health + 100 (if no soulsphere is defined in current game mode)&lt;br /&gt;
:*Otherwise, it will heal the player up to &#039;&#039;maxhealth&#039;&#039;.&lt;br /&gt;
*227 (480) &#039;&#039;&#039;PointPush_SetForce&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;tid&#039;&#039;, &#039;&#039;amount&#039;&#039;, &#039;&#039;use_line&#039;&#039;)&lt;br /&gt;
:Enables and sets wind for Boom push/pull source things. If &#039;&#039;tag&#039;&#039; is non-zero, it looks for such things inside a tagged sector. Only one push/pull thing will be used for each tagged sector. If &#039;&#039;tag&#039;&#039; is zero, it will enable pushing for things tagged &#039;&#039;tid&#039;&#039;. &#039;&#039;Amount&#039;&#039; is the force, and depending on thing type, it will be attractive or repulsive. If &#039;&#039;use_line&#039;&#039; is 1, it will use the linedef length as amount, not the &#039;&#039;amount&#039;&#039; argument. Either the tagged sector (if &#039;&#039;tag&#039;&#039; is non-zero) or the sectors containing the &#039;&#039;tid&#039;&#039; things must have the Boom generalized wind special.&lt;br /&gt;
&lt;br /&gt;
===Sectors===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Static&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 48 || 482 || yes || [[Sector_Attach3dMidtex]] || line id || optional sector tag || use ceiling || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 54 || 503 || || [[Sector_ChangeFlags]] || tag || setflags || clearflags || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 140 || 495 || || [[Sector_ChangeSound]] || tag || sequence id || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 185 || 470 || || [[Sector_SetRotation]] || tag || floor angle || ceiling angle || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 186 || 472 || || [[Sector_SetCeilingPanning]] || tag || x integer || x fractional || y integer || y fractional&lt;br /&gt;
|-&lt;br /&gt;
|| 187 || 471 || || [[Sector_SetFloorPanning]] || tag || x integer || x fractional || y integer || y fractional&lt;br /&gt;
|-&lt;br /&gt;
|| 190 || 481 || yes || [[Static_Init (sky transfer)]] || tag || 255 || flip sky || ||&lt;br /&gt;
|}&lt;br /&gt;
*470:&#039;&#039;&#039;Sector_SetRotation&#039;&#039;&#039;(tag, floor_angle, ceiling_angle)&lt;br /&gt;
:Sets the floor and ceiling texture rotation of tagged sectors to the given values in degrees (0-360).&lt;br /&gt;
*471:&#039;&#039;&#039;Sector_SetFloorPanning&#039;&#039;&#039;(tag, x_int, x_frac, y_int, y_frac)&lt;br /&gt;
:Sets the floor texture panning of tagged sectors to given X and Y values. A value is calculated as x_int + 0.01 * x_frac.&lt;br /&gt;
*472:&#039;&#039;&#039;Sector_SetCeilingPanning&#039;&#039;&#039;(tag, x_int, x_frac, y_int, y_frac)&lt;br /&gt;
:Same as Sector_SetFloorPanning, but for the ceiling texture.&lt;br /&gt;
*&#039;&#039;&#039;Sector_SetFriction&#039;&#039;&#039;(tag, amount)&lt;br /&gt;
:Sets friction in the target sectors. Those sectors must have the Boom generalized friction special enabled to work. &#039;&#039;Amount&#039;&#039; is an optional argument. If 0, it will use the length of the linedef to specify friction. Otherwise, the friction will be settable by &#039;&#039;amount&#039;&#039;. As a rule, smaller values than 100 mean sludge (high friction) and greater than 100 mean slippery surface (low friction).&lt;br /&gt;
*218 (457) &#039;&#039;&#039;Sector_SetWind&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;strength&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;flags&#039;&#039;)&lt;br /&gt;
:Creates wind in the tagged sectors, which, if Boom-style, must have the wind generalized special set. &#039;&#039;Flags&#039;&#039; can be the sum of the following values:&lt;br /&gt;
:*1: if added, it will cause the wind to be defined by the linedef&#039;s length and direction, instead of the &#039;&#039;strength&#039;&#039; and &#039;&#039;angle&#039;&#039; ([[byte angle]]) parameters;&lt;br /&gt;
:*2: if added, it will use Heretic-style winds, which have a slightly different behavior and scale, and will not require the Boom wind sector special to be set.&lt;br /&gt;
*220 (479) &#039;&#039;&#039;Sector_SetCurrent&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;strength&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;flags&#039;&#039;)&lt;br /&gt;
:Similar to &#039;&#039;&#039;Sector_SetWind&#039;&#039;&#039;, but meant for water flow setup, not air wind.&lt;br /&gt;
&lt;br /&gt;
===Slopes===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 118 || 493 || [[Plane_Copy]] || front floor tag || front ceiling tag || back floor tag || back ceiling tag || share slope&lt;br /&gt;
|-&lt;br /&gt;
|| 181 || 455 || [[Plane_Align]] || floor || ceiling || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Teleportation===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 70 || 444 || [[Teleport]] || tid || sector tag || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 71 || 445 || [[Teleport_NoFog]] || tid || use angle || sector tag || keep height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 215 || 446 || [[Teleport_Line]] || - || dest_id || flip || ||&lt;br /&gt;
|}&lt;br /&gt;
*444:&#039;&#039;&#039;Teleport&#039;&#039;&#039;(tid, sector_tag, reserved)&lt;br /&gt;
:Teleports the activator. Depending on whether &#039;&#039;tid&#039;&#039; or &#039;&#039;sector_tag&#039;&#039; is nonzero, the behavior will be Hexen or Doom compatible. If &#039;&#039;tid&#039;&#039; is zero, then it will teleport like in Doom, into the first teleport destination found on sectors tagged &#039;&#039;sector_tag&#039;&#039;.&lt;br /&gt;
:If &#039;&#039;tid&#039;&#039; is non-zero, it will teleport to one random target thing (doesn&#039;t matter the type) among the ones tagged &#039;&#039;tid&#039;&#039;. If in this case &#039;&#039;sector_tag&#039;&#039; is also non-zero, it will only seek a destination thing located in these tagged sectors. This behavior is based on the Hexen teleporters.&lt;br /&gt;
*445:&#039;&#039;&#039;Teleport_NoFog&#039;&#039;&#039;(tid, use_angle, sector_tag, keep_height)&lt;br /&gt;
:Teleports the activator silently, without fog and without holding it. &#039;&#039;Tid&#039;&#039; and &#039;&#039;sector_tag&#039;&#039; are used the same as in &#039;&#039;&#039;Teleport&#039;&#039;&#039;.&lt;br /&gt;
:&#039;&#039;Use_angle&#039;&#039; sets how the activator angle should be set after teleportation, and can take one of the following values:&lt;br /&gt;
:*0: default Hexen behavior. The thing won&#039;t change its angle at all during teleportation.&lt;br /&gt;
:*1: set thing&#039;s angle to the same angle as the one of the destination spot&lt;br /&gt;
:*2: use Boom&#039;s original, buggy behavior: shift angle &#039;&#039;opposite&#039;&#039; to that of the difference between destination spot&#039;s angle and the line normal&#039;s angle&lt;br /&gt;
:*3: use Boom&#039;s supposedly intended behavior: shift angle by the difference between destination spot&#039;s angle and line normal&#039;s angle.&lt;br /&gt;
:If &#039;&#039;use_angle&#039;&#039; is 2 or 3 and the special is not triggered from a linedef, then it will work like mode 1.&lt;br /&gt;
:&#039;&#039;Keep_height&#039;&#039;: setting this to 1 will make the thing preserve its distance to the floor after teleporting. If it&#039;s 0, the thing will be teleported on the floor, like in Hexen.&lt;br /&gt;
*446:&#039;&#039;&#039;Teleport_Line&#039;&#039;&#039;(reserved, dest_id, flip)&lt;br /&gt;
:Encapsulates the Boom line-teleporting functions. &#039;&#039;Dest_id&#039;&#039; is the tag of the target line. &#039;&#039;Flip&#039;&#039; will cause the user to rotate 180 degrees after teleporting.&lt;br /&gt;
&lt;br /&gt;
===Portals===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 9 || 450 || [[Line_Horizon]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 300 || 492 || [[Portal_Define]] || portal id || type || anchor line id || z parameter || flipped anchor&lt;br /&gt;
|-&lt;br /&gt;
|| 301 || 491 || [[Line_QuickPortal]] || visual-only || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Line_Horizon&#039;&#039;&#039;&lt;br /&gt;
:Simple linedef specials which converts the middle part with a horizon portal which uses front sector&#039;s floor and ceiling.&lt;br /&gt;
*&#039;&#039;&#039;Portal_Define&#039;&#039;&#039;&lt;br /&gt;
:See the [[Portal_Define|linked article]] for its description.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Line_QuickPortal&#039;&#039;&#039;(&#039;&#039;non-interactive&#039;&#039;)&lt;br /&gt;
:Convenience linedef special to quickly create a portal between two areas, through a linedef&#039;s middle part. The two lines must be of equal length, and of opposite angles (if linked/interactive) or any angle if not linked. They must have the same, unique tag and the same &#039;&#039;non-interactive&#039;&#039; value, which is 0 for linked portals and 1 for two-way non-linked portals.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sector_SetPortal&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;type&#039;&#039;, &#039;&#039;plane&#039;&#039;, &#039;&#039;misc&#039;&#039;)&lt;br /&gt;
:&#039;&#039;&#039;Only needed for easily converting old maps with portals&#039;&#039;&#039;. You can skip this part if you&#039;re designing a new UDMF map.&lt;br /&gt;
:Only activates on map starts, this one sets a sector portal on floor and/or ceiling on the &#039;&#039;tag&#039;&#039;ged sectors. See [[Portal]] for visual examples.&lt;br /&gt;
:&#039;&#039;Plane&#039;&#039; can be 0 (display portal on floor), 1 (display portal on ceiling), 2 (display portal on both);&lt;br /&gt;
:&#039;&#039;Type&#039;&#039; can be:&lt;br /&gt;
:*0: anchored portal. This line must correspond to another line named &amp;quot;anchor&amp;quot;, whose first 3 parameters are the same with this one, except that &#039;&#039;misc&#039;&#039; is 0 for the anchor, while the source line has &#039;&#039;misc&#039;&#039; 1.&lt;br /&gt;
:*2: skybox portal. Uses the skybox camera object as a source, and displays the skybox (view of this camera) in tagged sectors.&lt;br /&gt;
:*3: plane portal. Renders the ceiling texture of line&#039;s front sector at a fixed camera distance.&lt;br /&gt;
:*4: horizon portal. Renders the floor and ceiling textures of line&#039;s front sector at relative camera distance, useful for infinite horizontal planes such as seas.&lt;br /&gt;
:*6: linked portal. Interactive anchored portals (through which gameplay passes seamlessly). Has the same rule as anchored portals with regard to anchor lines. Requires consistent offsets if there are multiple linked portals in the map, otherwise linked portals are disabled.&lt;br /&gt;
:&#039;&#039;Type&#039;&#039; can also be used for copying already placed portals:&lt;br /&gt;
:*1: copy the portal from a sector tagged with &#039;&#039;misc&#039;&#039; into the tagged sectors if &#039;&#039;tag&#039;&#039; is nonzero, or to the front sector if &#039;&#039;tag&#039;&#039; is 0.&lt;br /&gt;
:*5: copy the portal from a sector tagged with &#039;&#039;misc&#039;&#039; into the tagged lines if &#039;&#039;tag&#039;&#039; is nonzero, or to the current line if &#039;&#039;tag&#039;&#039; is 0.&lt;br /&gt;
:&#039;&#039;Misc&#039;&#039; has values depending on the &#039;&#039;type&#039;&#039; chosen. It makes sense for anchored and linked portals (with 0 meaning source line, and 1 meaning anchor line) and it also has a meaning for the copy types (1 and 5) where it specifies the tag of the sector with portals to copy.&lt;br /&gt;
&lt;br /&gt;
===Binary format specific===&lt;br /&gt;
*378:&#039;&#039;&#039;Line_SetIdentification&#039;&#039;&#039;(id)&lt;br /&gt;
:Sets the linedef identification number (separate from tag) to &#039;&#039;id&#039;&#039;. Useful for various specials that use the line id. Do not use in UDMF.&lt;br /&gt;
&lt;br /&gt;
===Property transfer===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Static&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 209 || 242 || yes || [[Transfer_Heights]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 210 || 213 || yes || [[Transfer_FloorLight]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 211 || 261 || yes || [[Transfer_CeilingLight]] || tag || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Transfer_FloorLight&#039;&#039;&#039;(tag)&lt;br /&gt;
*&#039;&#039;&#039;Transfer_CeilingLight&#039;&#039;&#039;(tag)&lt;br /&gt;
:These two are the same as the Boom special, but applicable in parameterized namespaces.&lt;br /&gt;
*&#039;&#039;&#039;Transfer_Heights&#039;&#039;&#039;(tag, reserved)&lt;br /&gt;
:This also acts like the Boom special 242. Argument &#039;&#039;reserved&#039;&#039; must be 0.&lt;br /&gt;
*190 (481) &#039;&#039;&#039;Static_Init&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;type&#039;&#039;, &#039;&#039;flip_or_ceiling&#039;&#039;, &#039;&#039;move_type&#039;&#039;)&lt;br /&gt;
:This is a multi-purpose special encapsulating several static specials from MBF and Boom. &#039;&#039;Tag&#039;&#039; is the tag of the target sector(s). &#039;&#039;Type&#039;&#039; can be 255 for MBF sky transfers. If &#039;&#039;flip_or_ceiling&#039;&#039; is 1, the sky will be flipped horizontally. If &#039;&#039;type&#039;&#039; is 255, &#039;&#039;move_type&#039;&#039; must be 0.&lt;br /&gt;
&lt;br /&gt;
===Scrollers===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 100 || 406 || [[Scroll_Texture_Left]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 101 || 407 || [[Scroll_Texture_Right]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 102 || 408 || [[Scroll_Texture_Up]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 103 || 409 || [[Scroll_Texture_Down]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 222 || 485 || [[Scroll_Texture_Model]] || line id || kind || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 223 || 484 || [[Scroll_Floor]] || tag || kind || move things || x || y&lt;br /&gt;
|- &lt;br /&gt;
|| 224 || 483 || [[Scroll_Ceiling]] || tag || kind || - || x || y&lt;br /&gt;
|-&lt;br /&gt;
|| 225 || ExtraData only || [[Scroll_Texture_Offsets]]&lt;br /&gt;
|}&lt;br /&gt;
*223 (484) &#039;&#039;&#039;Scroll_Floor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;kind&#039;&#039;, &#039;&#039;scroll_things&#039;&#039;, &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;)&lt;br /&gt;
*224 (483) &#039;&#039;&#039;Scroll_Ceiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;kind&#039;&#039;, &#039;&#039;unused&#039;&#039;, &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;)&lt;br /&gt;
*222 (485) &#039;&#039;&#039;Scroll_Texture_Model&#039;&#039;&#039;(&#039;&#039;line_id&#039;&#039;, &#039;&#039;kind&#039;&#039;)&lt;br /&gt;
:These specials do standard Boom scrolling. &#039;&#039;Kind&#039;&#039; specifies if it&#039;s a static scroller (0), displacement scroller (1) or accelerative scroller (2), and 4 can be added to it to discard arguments &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; and instead use the linedef&#039;s vertex coordinates do determine the scrolling vector. &#039;&#039;Scroll_things&#039;&#039; only apples for &#039;&#039;&#039;Scroll_Floor&#039;&#039;&#039; and means simple visual scrolling (0), thing movement with static floor (1) or thing movement with floor (2). &#039;&#039;X&#039;&#039; and &#039;&#039;y&#039;&#039; are the velocity components with which to scroll, if &#039;&#039;kind&#039;&#039; is less than 4 (otherwise the line&#039;s size is used).&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Scroll_Texture_Model&#039;&#039;&#039; does wall texture scrolling according to line&#039;s vector relative to the target lines.&lt;br /&gt;
&lt;br /&gt;
===Pushers===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 218 || 457 || [[Sector_SetWind]] || tag || force || angle || flags ||&lt;br /&gt;
|-&lt;br /&gt;
|| 219 || 223 || [[Sector_SetFriction]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 220 || 479 || [[Sector_SetCurrent]] || tag || force || angle || flags || &lt;br /&gt;
|-&lt;br /&gt;
|| 227 || 480 || [[PointPush_SetForce]] || tag || tid || force || use line ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Exits===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 74 || 449 || [[Teleport_NewMap]] || level number || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 75 || 400 || [[Teleport_EndGame]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 179 || 462 || [[ChangeSkill]] || skill || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 243 || 447 || [[Exit_Normal]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 244 || 448 || [[Exit_Secret]] || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*400:&#039;&#039;&#039;Teleport_EndGame&#039;&#039;&#039;&lt;br /&gt;
:Ends the entire game in victory. This triggers the current game&#039;s assigned ending cutscene and the player can only choose to start a new game.&lt;br /&gt;
*447:&#039;&#039;&#039;Exit_Normal&#039;&#039;&#039;(reserved)&lt;br /&gt;
:Exits to a normal destination level. The argument is reserved and must be 0.&lt;br /&gt;
*448:&#039;&#039;&#039;Exit_Secret&#039;&#039;&#039;(reserved)&lt;br /&gt;
:Exits to the secret destination level.  The argument is reserved and must be 0.&lt;br /&gt;
*449:&#039;&#039;&#039;Teleport_NewMap&#039;&#039;&#039;(level_number, reserved, reserved)&lt;br /&gt;
:Exits to the given map.  The last two arguments are reserved and must be 0.&lt;br /&gt;
*462:&#039;&#039;&#039;ChangeSkill&#039;&#039;&#039;(&#039;&#039;skill&#039;&#039;)&lt;br /&gt;
:Changes the current difficulty level, where &#039;&#039;skill&#039;&#039; is from 0 (I&#039;m too young to die) to 4 inclusive (Nightmare!).&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[ACS functions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Editing]]&lt;br /&gt;
[[Category:Editing reference]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Parameterized_linedef_specials&amp;diff=6386</id>
		<title>Parameterized linedef specials</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Parameterized_linedef_specials&amp;diff=6386"/>
		<updated>2025-12-13T10:04:54Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Lights */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The parameterized linedefs types are Hexen-like action specials with arguments, whose purpose is to be more customizable than the Boom generalized types. When mapping in UDMF, you have to use these parameterized specials instead of the classic parameter-less ones. They&#039;re also used in Hexen format maps (which is necessary when Hexen is going to be supported in Eternity), though Hexen format is not recommended or fully supported for other maps than vanilla Hexen in Eternity. To use parameterized specials in classic (Doom) format maps, provide an [[ExtraData]] lump by attaching it via [[MapInfo|EMAPINFO]] to the map. [[ACS]] scripts can also call parameterized specials. They&#039;re meant to be as compatible as possible with the ZDoom implementation, so minimal changes to zspecial.acs are needed, though Eternity may have extensions of its own. Most likely however the base zspecial.acs is going to be updated for Eternity. Parameters are only limited to 0-255 in the Hexen format (and some specials may have some legacy workarounds for that interval), but otherwise they&#039;re in the normal integer range for other environments (UDMF, ExtraData, ACS). Some specials have never been added to ExtraData, because of their mere purpose being to work under the limits of the Hexen map format.&lt;br /&gt;
&lt;br /&gt;
Each parameterized line special has a name and two associated numbers: one for UDMF, ACS and Hexen formats, and another one for ExtraData support, set this way to avoid conflicts with classic Boom specials (since it&#039;s possible to use their number in the editor instead of the 270 &amp;quot;ExtraData special&amp;quot;). If you only see one number mentioned in the documentation, then it&#039;s the UDMF number (for ExtraData it&#039;s preferred to use the names).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT&#039;&#039;&#039;: all &#039;&#039;reserved&#039;&#039; parameters must be set to 0. Failure to do so will result in your maps being broken in later Eternity versions! Also, for &amp;quot;flag&amp;quot; arguments, do not add or provide other values than in the intended range, for the same reason.&lt;br /&gt;
&lt;br /&gt;
{{Backto|Linedef types}}&lt;br /&gt;
==General info==&lt;br /&gt;
All sector tags, unless otherwise specified, have a special meaning if 0: that means to affect the sector behind the trigger linedef (like regular doors in vanilla Doom).&lt;br /&gt;
&lt;br /&gt;
Thing tags (TIDs) have special meaning for values 0 and negative: 0 means activator, and -1 to -4 mean to affect players 1 to 4 (if present). &#039;&#039;&#039;Consider other negative values reserved&#039;&#039;&#039; and do not use them in your maps.&lt;br /&gt;
==Specials==&lt;br /&gt;
===Doors===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! ExtraData #&lt;br /&gt;
! Name&lt;br /&gt;
! Args&lt;br /&gt;
! Summary&lt;br /&gt;
|-&lt;br /&gt;
|| 10 || 302 || [[Door_Close]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door.&lt;br /&gt;
|-&lt;br /&gt;
|| 11 || 301 || [[Door_Open]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door.&lt;br /&gt;
|-&lt;br /&gt;
|| 12 || 300 || [[Door_Raise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door temporarily.&lt;br /&gt;
|-&lt;br /&gt;
|| 13 || 429 || [[Door_LockedRaise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lock&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a locked door.&lt;br /&gt;
|-&lt;br /&gt;
|| 105 || 304 || [[Door_WaitRaise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;timeoffset&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door temporarily after a delay.&lt;br /&gt;
|-&lt;br /&gt;
|| 106 || 305 || [[Door_WaitClose]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;timeoffset&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door after a delay.&lt;br /&gt;
|-&lt;br /&gt;
|| 249 || 303 || [[Door_CloseWaitOpen]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay_octics&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door, waits a bit, then opens it back.&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;tag&#039;&#039;: Tag of sector to affect. If it&#039;s 0, then the sector behind the linedef will be activated, if applicable.&lt;br /&gt;
:&#039;&#039;speed&#039;&#039;: How fast, in eights of units per tic, the door should move. Doom normal doors are as fast as 16, and blazing doors are 64.&lt;br /&gt;
:&#039;&#039;delay&#039;&#039;: Time in tics (1/35 seconds) for the door before it returns to its opposite movement.&lt;br /&gt;
:&#039;&#039;delay_octics&#039;&#039;: Delay, but expressed in octics, which is eighths of second (i.e. 8 octics = 1 second).&lt;br /&gt;
:&#039;&#039;timeoffset&#039;&#039;: Time in tics before the door activates.&lt;br /&gt;
:&#039;&#039;light_tag&#039;&#039;: Sector tag to receive light changes to maximum or minimum neighbor depending on whether the door is closed or opened.&lt;br /&gt;
:&#039;&#039;lock&#039;&#039;: One of the [[lock identifiers]] to specify the key or set of keys.&lt;br /&gt;
&lt;br /&gt;
===Floor movement, earthquake===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! ExtraData #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|| 20 || 318 || [[Floor_LowerByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 21 || 309 || [[Floor_LowerToLowest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 22 || 311 || [[Floor_LowerToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 23 || 317 || [[Floor_RaiseByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 24 || 306 || [[Floor_RaiseToHighest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 25 || 310 || [[Floor_RaiseToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 28 || 451 || [[Floor_RaiseAndCrush]] || tag || speed || crush || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 35 || - || [[Floor_RaiseByValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 36 || - || [[Floor_LowerByValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 37 || 319 || [[Floor_MoveToValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;neg&#039;&#039; || &#039;&#039;change&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 46 || 452 || [[Floor_CrushStop]] || &#039;&#039;tag&#039;&#039; || || || || || Stops crushing floor movement.&lt;br /&gt;
|-&lt;br /&gt;
|| 66 || 321 || [[Floor_LowerInstant]] || &#039;&#039;tag&#039;&#039; || - || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || || Lowers floor instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 67 || 320 || [[Floor_RaiseInstant]] || &#039;&#039;tag&#039;&#039; || - || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || Raises floor instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 68 || - || [[Floor_MoveToValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;neg&#039;&#039; || &#039;&#039;change&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 120 || 375 || [[Radius_Quake]] || intensity || duration || damage radius || tremor radius || foci tid&lt;br /&gt;
|-&lt;br /&gt;
|| 138 || 397 || [[Floor_Waggle]] || tag || height || speed || offset || timer&lt;br /&gt;
|-&lt;br /&gt;
|| 200 || 464 || [[Generic_Floor]] || tag || speed || height || target || flags || Boom-like generalized floor.&lt;br /&gt;
|-&lt;br /&gt;
|| 228 || 475 || [[Plat_RaiseAndStayTx0]] || tag || speed || lock out || || || Variation of [[Floor_RaiseToNearest]].&lt;br /&gt;
|-&lt;br /&gt;
|| 230 || 476 || [[Plat_UpByValueStayTx]] || tag || speed || height || || || Variation of [[Floor_RaiseByValue]]&lt;br /&gt;
|-&lt;br /&gt;
|| 231 || 487 || [[Plat_ToggleCeiling]] || tag || || || || || Toggles floor between ceiling and initial position.&lt;br /&gt;
|-&lt;br /&gt;
|| 235 || 466 || [[Floor_TransferTrigger]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 236 || 467 || [[Floor_TransferNumeric]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 238 || 312 || [[Floor_RaiseToLowestCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 240 || 315 || [[Floor_RaiseByTexture]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 242 || 416 || [[Floor_LowerToHighest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;adjust&#039;&#039; || &#039;&#039;force_adjust&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 250 || 431 || [[Floor_Donut]] || pillar tag || pillar speed || pool speed || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 256 || 307 || [[Floor_LowerToHighestEE]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 257 || 308 || [[Floor_RaiseToLowest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || || || Instantly lower floor to lowest neighbour.&lt;br /&gt;
|-&lt;br /&gt;
|| 258 || 313 || [[Floor_LowerToLowestCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || || || Lower floor to lowest ceiling.&lt;br /&gt;
|-&lt;br /&gt;
|| 259 || 314 || [[Floor_RaiseToCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039; || Raise floor to ceiling.&lt;br /&gt;
|-&lt;br /&gt;
|| 260 || 322 || [[Floor_ToCeilingInstant]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039; || || Raise floor to ceiling instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 261 || 316 || [[Floor_LowerByTexture]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || || || Lower floor by shortest lower texture.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Floor_Waggle&#039;&#039;&#039; ( tag, height, speed, offset, timer )&lt;br /&gt;
:This special implements the sinusoidal floor motion from Hexen. Its tag and speed parameters bear similar properties to the other floor specials, but -&lt;br /&gt;
:*height - waggle amplitude in 1/8 units&lt;br /&gt;
:*offset - phase offset; how much to delay the waggle in relation to others (0 to 63, in byte angles)&lt;br /&gt;
:*timer - time in seconds the waggle lasts. Zero means permanent&lt;br /&gt;
*&#039;&#039;&#039;Radius_Quake&#039;&#039;&#039; (intensity, duration, damageradius, quakeradius, tid)&lt;br /&gt;
:This special implements the earthquake effect, centred on the map spot with the given &#039;&#039;tid&#039;&#039;, with user-selectable intensity, duration and separate thing damage radius and tremor radius (both being multiplied with 64).&lt;br /&gt;
*&#039;&#039;&#039;Floor_RaiseAndCrush&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;crush&#039;&#039;)&lt;br /&gt;
:This one is for Hexen compatibility. Please use &#039;&#039;&#039;Floor_RaiseToCeiling&#039;&#039;&#039; or &#039;&#039;&#039;Floor_RaiseToLowestCeiling&#039;&#039;&#039; instead.&lt;br /&gt;
====See also====&lt;br /&gt;
*[[Floor movement classic specials]]: for the Doom format variants.&lt;br /&gt;
&lt;br /&gt;
===Plats, lifts===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|| 60 || 410 || [[Plat_PerpetualRaise]] || tag || speed || delay || || || Perpetual lift with lip of 8&lt;br /&gt;
|-&lt;br /&gt;
|| 61 || 411 || [[Plat_Stop]] || tag || stop_mode || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 62 || 412 || [[Plat_DownWaitUpStay]] || tag || speed || delay || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 63 || 413 || [[Plat_DownByValue]] || tag || speed || delay || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 64 || 414 || [[Plat_UpWaitDownStay]] || tag || speed || delay || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 65 || 415 || [[Plat_UpByValue]] || tag || speed || delay || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 203 || 501 || [[Generic_Lift]] || tag || speed || delay || type || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 206 || 488 || [[Plat_DownWaitUpStayLip]] || tag || speed || delay || lip ||&lt;br /&gt;
|-&lt;br /&gt;
|| 207 || 489 || [[Plat_PerpetualRaiseLip]] || tag || speed || delay || lip ||&lt;br /&gt;
|}&lt;br /&gt;
*207 (489) &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lip&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039;, but lets you choose a &amp;quot;lip&amp;quot; (distance from lowest adjacent floor to move down to). If &#039;&#039;lip&#039;&#039; is 0, it will work like classic Doom perpetual plats.&lt;br /&gt;
*61 (411) &#039;&#039;&#039;Plat_Stop&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;stop_mode&#039;&#039;)&lt;br /&gt;
:Pauses or stops a perpetual platform from moving. The behavior depends on &#039;&#039;stop_mode&#039;&#039;:&lt;br /&gt;
:*1: the platform will be merely suspended. It will only be retriggerable by other &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039; or &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039; (or in Doom-format maps, by similar specials), continuing from the exact same state it stopped.&lt;br /&gt;
:*2: the platform movement will be stopped at the current position. It will be retriggerable by any other special. If restarted by &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039; or &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039; it may not remember the last state.&lt;br /&gt;
:*0 (default): will act based on compatibility with current game mode. On Doom/Heretic/Hexen, it will act like mode 1, while in Hexen it will act like mode 2.&lt;br /&gt;
*62 (412) &#039;&#039;&#039;Plat_DownWaitUpStay&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Lowers the plat as a lift to the lowest adjacent floor &#039;&#039;&#039;plus 8 units&#039;&#039;&#039;. Use &#039;&#039;&#039;Plat_DownWaitUpStayLip&#039;&#039;&#039; with 0 lip if you want classic Doom-like lifts.&lt;br /&gt;
*206 (488) &#039;&#039;&#039;Plat_DownWaitUpStayLip&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lip&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Plat_DownWaitUpStay&#039;&#039;&#039; but with settable &#039;&#039;lip&#039;&#039;.&lt;br /&gt;
*63 (413) &#039;&#039;&#039;Plat_DownByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;height&#039;&#039;)&lt;br /&gt;
:Lowers a lift by an absolute &#039;&#039;height&#039;&#039;, &#039;&#039;&#039;multiplied by 8&#039;&#039;&#039;. It will rise back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*64 (414) &#039;&#039;&#039;Plat_UpWaitDownStay&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Raises a lift to the highest neighbor floor. It will lower back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*65 (415) &#039;&#039;&#039;Plat_UpByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;height&#039;&#039;)&lt;br /&gt;
:Raises a lift by an absolute &#039;&#039;height&#039;&#039;, &#039;&#039;&#039;multiplied by 8&#039;&#039;&#039;. It will lower back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*231 (487) &#039;&#039;&#039;Plat_ToggleCeiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Toggles a floor between the default position and touching the ceiling. It will be left busy after that.&lt;br /&gt;
&lt;br /&gt;
===Elevators===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 95 || 453 || [[FloorAndCeiling_LowerByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 96 || 454 || [[FloorAndCeiling_RaiseByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 245 || 458 || [[Elevator_RaiseToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 246 || 460 || [[Elevator_MoveToFloor]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 247 || 459 || [[Elevator_LowerToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Ceiling movement===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 38 || 500 || [[Ceiling_Waggle]] || tag || height || speed || offset || timer&lt;br /&gt;
|-&lt;br /&gt;
|| 40 || 336 || [[Ceiling_LowerByValue]] || tag || speed || height || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 41 || 335 || [[Ceiling_RaiseByValue]] || tag || speed || height || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 42 || 432 || [[Ceiling_CrushAndRaise]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 43 || 435 || [[Ceiling_LowerAndCrush]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 44 || 433 || [[Ceiling_CrushStop]] || tag || stop mode || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 45 || 434 || [[Ceiling_CrushRaiseAndStay]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 47 || 337 || [[Ceiling_MoveToValue]] || tag || speed || height || negate || change&lt;br /&gt;
|-&lt;br /&gt;
|| 69 || - || [[Ceiling_MoveToValueTimes8]] || tag || speed || height || negate || change&lt;br /&gt;
|-&lt;br /&gt;
|| 97 || 436 || [[Ceiling_LowerAndCrushDist]] || tag || speed || crush || gap || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 104 || 441 || [[Ceiling_CrushAndRaiseSilentDist]] || tag || gap || speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 168 || 437 || [[Ceiling_CrushAndRaiseDist]] || tag || gap || speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 192 || 330 || [[Ceiling_LowerToHighestFloor]] || tag || speed || change || crush || gap to floor&lt;br /&gt;
|-&lt;br /&gt;
|| 193 || 339 || [[Ceiling_LowerInstant]] || tag || - || height * 8 || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 194 || 338 || [[Ceiling_RaiseInstant]] || tag || - || height * 8 || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 195 || 438 || [[Ceiling_CrushRaiseAndStayA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 196 || 439 || [[Ceiling_CrushAndRaiseA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 197 || 440 || [[Ceiling_CrushAndRaiseSilentA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 198 || - || [[Ceiling_RaiseByValueTimes8]] || tag || speed || height * 8 || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 199 || - || [[Ceiling_LowerByValueTimes8]] || tag || speed || height * 8 || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 201 || 465 || [[Generic_Ceiling]] || tag || speed || height || target || flags&lt;br /&gt;
|-&lt;br /&gt;
|| 205 || 443 || [[Generic_Crusher]] || tag || down speed || up speed || silent || damage&lt;br /&gt;
|-&lt;br /&gt;
|| 252 || 325 || [[Ceiling_RaiseToNearest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 253 || 328 || [[Ceiling_LowerToLowest]] || tag || speed || change || crush ||&lt;br /&gt;
|-&lt;br /&gt;
|| 254 || 332 || [[Ceiling_LowerToFloor]] || tag || speed || change || crush || gap&lt;br /&gt;
|-&lt;br /&gt;
|| 255 || 442 || [[Ceiling_CrushRaiseAndStaySilA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 262 || 323 || [[Ceiling_RaiseToHighest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 263 || 324 || [[Ceiling_ToHighestInstant]] || tag || change || crush || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 264 || 326 || [[Ceiling_LowerToNearest]] || tag || speed || change || crush ||&lt;br /&gt;
|-&lt;br /&gt;
|| 265 || 327 || [[Ceiling_RaiseToLowest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 266 || 329 || [[Ceiling_RaiseToHighestFloor]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 267 || 331 || [[Ceiling_ToFloorInstant]] || tag || change || crush || gap ||&lt;br /&gt;
|-&lt;br /&gt;
|| 268 || 333 || [[Ceiling_RaiseByTexture]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 269 || 334 || [[Ceiling_LowerByTexture]] || tag || speed || change || crush ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Ceiling_RaiseToHighest&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*Ceiling_ToHighestInstant&#039;&#039;&#039;    ( tag, change, crush                )&lt;br /&gt;
*Ceiling_RaiseToNearest&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerToNearest&#039;&#039;&#039;      ( tag, speed, change, crush         )&lt;br /&gt;
*Ceiling_RaiseToLowest&#039;&#039;&#039;       ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerToLowest&#039;&#039;&#039;       ( tag, speed, change, crush         )&lt;br /&gt;
*Ceiling_RaiseToHighestFloor&#039;&#039;&#039; ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerToHighestFloor&#039;&#039;&#039; ( tag, speed, change, crush, gap    )&lt;br /&gt;
*Ceiling_ToFloorInstant&#039;&#039;&#039;      ( tag, change, crush, gap           )&lt;br /&gt;
*Ceiling_LowerToFloor&#039;&#039;&#039;        ( tag, speed, change, crush, gap    )&lt;br /&gt;
*Ceiling_RaiseByTexture&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerByTexture&#039;&#039;&#039;      ( tag, speed, change, crush         )&lt;br /&gt;
*Ceiling_RaiseByValue&#039;&#039;&#039;        ( tag, speed, height, change        )&lt;br /&gt;
*Ceiling_LowerByValue&#039;&#039;&#039;        ( tag, speed, height, change, crush )&lt;br /&gt;
*Ceiling_MoveToValue&#039;&#039;&#039;         ( tag, speed, height, change, crush )&lt;br /&gt;
*Ceiling_RaiseInstant&#039;&#039;&#039;        ( tag, height, change               )&lt;br /&gt;
*Ceiling_LowerInstant&#039;&#039;&#039;        ( tag, height, change, crush        )&lt;br /&gt;
:Values for these specials:&lt;br /&gt;
:*tag: Tag of the sector(s) to affect. A tag of zero means to affect the sector on the second side of the line.&lt;br /&gt;
:*speed: Speed of ceiling in eighths of a unit per tic.&lt;br /&gt;
:*change: This parameter takes the following values:&lt;br /&gt;
::0 : No texture or type change.&lt;br /&gt;
::1 : Copy texture, zero type; trigger model.&lt;br /&gt;
::2 : Copy texture, zero type; numeric model.&lt;br /&gt;
::3 : Copy texture, preserve type; trigger model.&lt;br /&gt;
::4 : Copy texture, preserve type; numeric model.&lt;br /&gt;
::5 : Copy texture and type; trigger model.&lt;br /&gt;
::6 : Copy texture and type; numeric model.&lt;br /&gt;
:*crush: Amount of crushing damage ceiling inflicts at each crushing event (when gametic % 4 = 0). If this amount is less than or equal to zero, no crushing damage is done.&lt;br /&gt;
:*height: An integer number of units, either the amount to move the floor by or the exact z coordinate to move the floor toward. Negative numbers are valid for the latter case.&lt;br /&gt;
:*gap: Distance to keep from the destination. Useful if crush is nonzero&lt;br /&gt;
*Generic_Ceiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;height&#039;&#039;, &#039;&#039;target&#039;&#039;, &#039;&#039;flag&#039;&#039;)&lt;br /&gt;
:See &#039;&#039;&#039;Generic_Floor&#039;&#039;&#039; for an explanation of parameters.&lt;br /&gt;
&lt;br /&gt;
====Crushing ceilings====&lt;br /&gt;
There are some crushing ceilings available now. Some originate from Hexen while others are extensions from ZDoom. ZDoom compatibility is considered where relevant. For all specials where it applies, &#039;&#039;crushmode&#039;&#039; can take one of these values:&lt;br /&gt;
*0: compatibility. Act like it would do in ZDoom. This means that in Doom the crusher keeps pushing into the things it crushes, while in Hexen it stays on position while dealing damage. And if the game is Doom, the special has &amp;quot;Dist&amp;quot; in the name and the speed is set to 8, it will also slow down to speed 1 when crushing.&lt;br /&gt;
*1: Doom mode without slowdown. Same as classic Doom&#039;s fast crushers.&lt;br /&gt;
*2: Hexen mode. It will rest in position while crushing.&lt;br /&gt;
*3: Doom mode with slowdown. Same as classic Doom&#039;s slow crushers. Currently the crushing speed is hardcoded to 1.&lt;br /&gt;
The specials are the following. Take care that Ceiling_CrushAndRaise is mainly for Hexen compatibility: it will rise at half the speed it lowers. For Doom-like crushers use Ceiling_CrushAndRaiseA (all &amp;quot;A&amp;quot; crushers let you specify the rising speed) or Ceiling_CrushAndRaiseDist (all &amp;quot;Dist&amp;quot; crushers rise at the same speed as they lower, but instead let you specify the gap size to the ground). Finally, Generic_Crusher aims to act like the Boom crushers, having the following particularities: it will slow down when crushing if speed is less than 24, and it will be totally silent if specified in the parameter (won&#039;t even make clunk noises).&lt;br /&gt;
*Ceiling_CrushAndRaise(tag, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseSilentA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseDist(tag, ground_distance, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseSilentDist(tag, ground_distance, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseAndStay(tag, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseAndStayA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseAndStaySilA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_LowerAndCrush(tag, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_LowerAndCrushDist(tag, speed, damage, ground_distance, crushmode)&lt;br /&gt;
*Ceiling_CrushStop(tag, stop_mode)&lt;br /&gt;
:*stop_mode can be: 0 (compatibility), 1 (Doom: pause crusher), 2 (Hexen: remove crusher and release the ceiling)&lt;br /&gt;
*Generic_Crusher(tag, down_speed, up_speed, silent, damage)&lt;br /&gt;
&lt;br /&gt;
===Stair building===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 204 || 502 || [[Generic_Stairs]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;flags&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 217 || 340 || [[Stairs_BuildUpDoom]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;delay&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 270 || 341 || [[Stairs_BuildDownDoom]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;delay&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 271 || 342 || [[Stairs_BuildUpDoomSync]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;reset&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 272 || 343 || [[Stairs_BuildDownDoomSync]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;reset&#039;&#039; ||&lt;br /&gt;
|}&lt;br /&gt;
 ------------------------------------------------------------------------------ &lt;br /&gt;
 * Synchronized stairs have each step move at a different speed so that all the&lt;br /&gt;
   steps reach the destination height at the same time. This stair building&lt;br /&gt;
   style is only available with these parameterized line types. &lt;br /&gt;
 &lt;br /&gt;
 Values&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 tag       : Tag of first sector to raise or lower as a step.&lt;br /&gt;
             When the stair building method is DOOM, subsequent&lt;br /&gt;
             steps are found by searching across two-sided&lt;br /&gt;
             lines where the first side belongs to the current&lt;br /&gt;
             sector and the floor texture is the same. The&lt;br /&gt;
             Hexen stair building method is not yet supported.&lt;br /&gt;
 speed     : Speed of steps in eights of a unit per tic. If the&lt;br /&gt;
             build style is synchronized, only the first step&lt;br /&gt;
             moves at this speed. Other steps will move at a&lt;br /&gt;
             speed which allows them to reach their &lt;br /&gt;
             destination height at the same time.&lt;br /&gt;
 stepsize  : Step size in units.&lt;br /&gt;
 delay     : Delay time in tics between steps&lt;br /&gt;
 reset     : If greater than zero, the stairs will wait this&lt;br /&gt;
             amount of time in tics after completely building&lt;br /&gt;
             and will then reset by repeating the same stair&lt;br /&gt;
             building action but in the reverse direction. If&lt;br /&gt;
             zero, the stairs will never reset.&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
===Polyobjects===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 1 || 348 || [[Polyobj_StartLine]] || id || mirror id || sound sequence || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 2 || 356 || [[Polyobj_RotateLeft]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 3 || 354 || [[Polyobj_RotateRight]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 4 || 352 || [[Polyobj_Move]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 5 || 349 || [[Polyobj_ExplicitLine]] || id || line index || mirror id || sound sequence ||&lt;br /&gt;
|-&lt;br /&gt;
|| 6 || - || [[Polyobj_MoveTimes8]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 7 || 351 || [[Polyobj_DoorSwing]] || id || speed || rotation || delay ||&lt;br /&gt;
|-&lt;br /&gt;
|| 8 || 350 || [[Polyobj_DoorSlide]] || id || speed || angle || distance || delay&lt;br /&gt;
|-&lt;br /&gt;
|| 59 || 499 || [[Polyobj_OR_MoveToSpot]] || id || speed || [[TID]] || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 86 || 496 || [[Polyobj_MoveToSpot]] || id || speed || [[TID]] || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 87 || 474 || [[Polyobj_Stop]] || id || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 88 || 497 || [[Polyobj_MoveTo]] || id || speed || x || y ||&lt;br /&gt;
|-&lt;br /&gt;
|| 89 || 498 || [[Polyobj_OR_MoveTo]] || id || speed || x || y ||&lt;br /&gt;
|-&lt;br /&gt;
|| 90 || 357 || [[Polyobj_OR_RotateLeft]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 91 || 355 || [[Polyobj_OR_RotateRight]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 92 || 353 || [[Polyobj_OR_Move]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 93 || - || [[Polyobj_OR_MoveTimes8]] || id || speed || angle || distance ||&lt;br /&gt;
|}&lt;br /&gt;
*1 (348) &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;mirror_id&#039;&#039;, &#039;&#039;sequence_id&#039;&#039;)&lt;br /&gt;
*5 (349) &#039;&#039;&#039;Polyobj_ExplicitLine(&#039;&#039;id&#039;&#039;, &#039;&#039;linenum&#039;&#039;, &#039;&#039;mirror_id&#039;&#039;, &#039;&#039;sequence_id&#039;&#039;)&lt;br /&gt;
:There are two different methods of creating a polyobject. In the first, the &amp;quot;first&amp;quot; line is given the &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039; special, and subsequent lines are added to the PolyObject by following segs from vertex to vertex. To use this, all the lines around the polyobject must run in the same direction, and the last line must end at the same vertex which starts the first line (in other words, it must be closed).&lt;br /&gt;
&lt;br /&gt;
:With the second method, every line to be included must be given the &#039;&#039;&#039;Polyobj_ExplicitLine&#039;&#039;&#039; special and must be given a &#039;&#039;linenum&#039;&#039; param which is unique amongst all lines that will added to that polyobject. Polyobjects of this sort should also be closed for proper rendering, but the game engine cannot and will not verify that this is the case.&lt;br /&gt;
   &lt;br /&gt;
:Only polyobjects created with the &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039; method can have other line specials on the polyobject&#039;s lines themselves. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;Mirror_id&#039;&#039; is the ID number of a PolyObject that wants to mirror every action that this PolyObject makes. This number cannot refer to the self-same PolyObject, nor should PolyObjects attempt to mirror each other in a cycle since this will create problems with override actions. Angle of motion is always reversed when applying an action to a mirroring PolyObject. If a mirror is already in motion for a non-override action, the mirror will not be affected even if the main object was moved. Mirror polyobjects can themselves define a mirror, and an action will affect all mirroring polyobjects in the chain.&lt;br /&gt;
*4 (352) &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Slides a polyobject in the direction given in &#039;&#039;angle&#039;&#039; by &#039;&#039;distance&#039;&#039;.&lt;br /&gt;
*6 &#039;&#039;&#039;Polyobj_MoveTimes8&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039; but with &#039;&#039;distance&#039;&#039; multiplied by 8. Needed only for the Hexen format and supported for legacy reasons.&lt;br /&gt;
*2 (356) &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Rotates a polyobject counterclockwise by the &#039;&#039;distance&#039;&#039; [[byte angle]] difference. If &#039;&#039;distance&#039;&#039; is 0, it means 360 degrees. If &#039;&#039;distance&#039;&#039; is 255, it means perpetual spinning.&lt;br /&gt;
*3 (354) &#039;&#039;&#039;Polyobj_RotateRight&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Rotates a polyobject clockwise by the &#039;&#039;distance&#039;&#039; [[byte angle]] difference. If &#039;&#039;distance&#039;&#039; is 0, it means 360 degrees. If &#039;&#039;distance&#039;&#039; is 255, it means perpetual spinning.&lt;br /&gt;
*92 (353) &#039;&#039;&#039;Polyobj_OR_Move&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*93 &#039;&#039;&#039;Polyobj_OR_MoveTimes8&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_MoveTimes8&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*90 (357) &#039;&#039;&#039;Polyobj_OR_RotateLeft&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*91 (355) &#039;&#039;&#039;Polyobj_OR_RotateRight&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_RotateRight&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*8 (350) &#039;&#039;&#039;Polyobj_DoorSlide&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Slides a polyobject like a door which closes after a &#039;&#039;delay&#039;&#039; and deflects if it gets jammed.&lt;br /&gt;
*7 (351) &#039;&#039;&#039;Polyobj_DoorSwing&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Swings a polyobject like a door which closes after a &#039;&#039;delay&#039;&#039; and deflects if it gets jammed. There are no special behaviors for setting &#039;&#039;distance&#039;&#039; to 0 or 255, unlike &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039; and derivatives.&lt;br /&gt;
*87 (474) &#039;&#039;&#039;Polyobj_Stop&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;)&lt;br /&gt;
:Stops a polyobject from movement. It will then be free for other activations.&lt;br /&gt;
&lt;br /&gt;
===Pillar building===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 29 || 362 || [[Pillar_Build]] || tag || speed || height || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 30 || 364 || [[Pillar_Open]] || tag || speed || floor dist || ceil dist ||&lt;br /&gt;
|-&lt;br /&gt;
|| 94 || 363 || [[Pillar_BuildAndCrush]] || tag || speed || height || damage ||&lt;br /&gt;
|-&lt;br /&gt;
|| 251 || 468 || [[FloorAndCeiling_LowerRaise]] || tag || floor speed || ceiling speed || Boom emulation ||&lt;br /&gt;
|}&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 #    Function                            ExtraData Name&lt;br /&gt;
 &lt;br /&gt;
 362  Build pillar                        Pillar_Build&lt;br /&gt;
 363  Build pillar and crush              Pillar_BuildAndCrush&lt;br /&gt;
 364  Open pillar                         Pillar_Open &lt;br /&gt;
 &lt;br /&gt;
 Parameters&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 Pillar_Build                  tag, speed, height&lt;br /&gt;
 Pillar_BuildAndCrush          tag, speed, height, crush&lt;br /&gt;
 Pillar_Open                   tag, speed, fdist, cdist&lt;br /&gt;
 &lt;br /&gt;
 Values&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 tag       : Tag of sector to close or open as a pillar. For the&lt;br /&gt;
             action to succeed, neither surface may have an &lt;br /&gt;
             action running on it already. If the tag is zero,&lt;br /&gt;
             the sector on the backside of a 2S line with this&lt;br /&gt;
             special will be used.&lt;br /&gt;
 speed     : Speed of the surface with the greatest distance to&lt;br /&gt;
             move in eights of a unit per tic. The other surface&lt;br /&gt;
             will move at a speed which causes it to reach its&lt;br /&gt;
             destination at the same time.&lt;br /&gt;
 height    : For Build and BuildAndCrush types, this is the &lt;br /&gt;
             height relative to the floor where the floor and &lt;br /&gt;
             ceiling should meet. If this value is zero, the &lt;br /&gt;
             floor and ceiling will meet exactly half-way.&lt;br /&gt;
 crush     : For BuildAndCrush type only, this specifies the &lt;br /&gt;
             amount of damage to inflict per crush event.&lt;br /&gt;
 fdist     : For Open type only, this is the distance the floor&lt;br /&gt;
             should move down. If this value is zero, the floor&lt;br /&gt;
             will move to its lowest neighboring floor.&lt;br /&gt;
 cdist     : For Open type only, this is the distance the&lt;br /&gt;
             ceiling should move up. If this value is zero, the&lt;br /&gt;
             ceiling will move to its highest neighboring &lt;br /&gt;
             ceiling.          &lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
*[[FloorAndCeiling_LowerRaise]]&lt;br /&gt;
&lt;br /&gt;
===ACS Scripts===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 80 || 365 || [[ACS_Execute]] || script || map || arg1 || arg2 || arg3&lt;br /&gt;
|-&lt;br /&gt;
|| 81 || 366 || [[ACS_Suspend]] || script || map || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 82 || 367 || [[ACS_Terminate]] || script || map || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 83 || 430 || [[ACS_LockedExecute]] || script || map || arg1 || arg2 || lock id&lt;br /&gt;
|-&lt;br /&gt;
|| 84 || 420 || [[ACS_ExecuteWithResult]] || script || arg1 || arg2 || arg3 || arg4&lt;br /&gt;
|-&lt;br /&gt;
|| 85 || 490 || [[ACS_LockedExecuteDoor]] || script || map || arg1 || arg2 || lock id&lt;br /&gt;
|-&lt;br /&gt;
|| 226 || 477 || [[ACS_ExecuteAlways]] || script || map || arg1 || arg2 || arg3&lt;br /&gt;
|}&lt;br /&gt;
{{zdoomwiki}}&lt;br /&gt;
Eternity supports ACS script calling.&lt;br /&gt;
*365:&#039;&#039;&#039;ACS_Execute&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg0&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;)&lt;br /&gt;
:Executes the specified script. A map value of zero indicates that the script is on the current map. If the script is on a different map, then the execution of the script will be delayed until the player enters the map that contains it. Only one copy of a script can be running at a time when started with this special. &lt;br /&gt;
:If the specified script was previously executed but then suspended, then execution will begin at the point immediately after where it was suspended instead of starting over again at the beginning.&lt;br /&gt;
:The number of usable arguments is limited to 3.&lt;br /&gt;
*477:&#039;&#039;&#039;ACS_ExecuteAlways&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg0&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;)&lt;br /&gt;
:Same as ACS_Execute, but will not be blocked if an instance of &#039;&#039;scriptnum&#039;&#039; is already running.&lt;br /&gt;
*366:&#039;&#039;&#039;ACS_Suspend&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;)&lt;br /&gt;
:Suspends execution of a script until an ACS_Execute special resumes it.&lt;br /&gt;
*367:&#039;&#039;&#039;ACS_Terminate&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;)&lt;br /&gt;
:Terminates the script.&lt;br /&gt;
*430:&#039;&#039;&#039;ACS_LockedExecute&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;, &#039;&#039;lock&#039;&#039;) &#039;&#039;(since Feb 25 2016)&#039;&#039;&lt;br /&gt;
:This one executes a script that requires the player to have a key or more. See [[Lock identifiers]] for info on what to put for the &#039;&#039;lock&#039;&#039; argument.&lt;br /&gt;
&lt;br /&gt;
===Lights===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 110 || 368 || [[Light_RaiseByValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 111 || 369 || [[Light_LowerByValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 112 || 370 || [[Light_ChangeToValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 113 || 371 || [[Light_Fade]] || tag || dest value || tics || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 114 || 372 || [[Light_Glow]] || tag || max || min || tics ||&lt;br /&gt;
|-&lt;br /&gt;
|| 115 || 373 || [[Light_Flicker]] || tag || max || min || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 116 || 374 || [[Light_Strobe]] || tag || max value || min value || max time || min time&lt;br /&gt;
|-&lt;br /&gt;
|| 232 || 463 || [[Light_StrobeDoom]] || tag || max time || min time || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 233 || 473 || [[Light_MinNeighbor]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 234 || 461 || [[Light_MaxNeighbor]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
If &#039;&#039;tag&#039;&#039; is 0, any such parameterized special will affect the sector behind the linedef, if applicable.&lt;br /&gt;
* &#039;&#039;&#039;Light_MinNeighbor&#039;&#039;&#039; sets the lights in tagged sectors to their minimum neighbors&#039; values.&lt;br /&gt;
* &#039;&#039;&#039;Light_MaxNeighbor&#039;&#039;&#039; sets the lights in tagged sectors to their maximum neighbors&#039; values.&lt;br /&gt;
&lt;br /&gt;
Eternity supports the following light level controlling parameterized linedef specials. If &#039;&#039;tag&#039;&#039; is 0, any such parameterized special will affect the sector behind the linedef, if applicable.&lt;br /&gt;
*&#039;&#039;&#039;Light_RaiseByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Adds the &#039;&#039;lvl&#039;&#039; value to the light levels of tagged sectors, capping them to 255. &lt;br /&gt;
*&#039;&#039;&#039;Light_LowerByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Substracts the &#039;&#039;lvl&#039;&#039; value from the light levels of tagged sectors, limiting them to 0.&lt;br /&gt;
*&#039;&#039;&#039;Light_ChangeToValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Sets the &#039;&#039;lvl&#039;&#039; value for the light level of tagged sectors, and caps it between 0 and 255 inclusive.&lt;br /&gt;
*&#039;&#039;&#039;Light_Fade&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;destvalue&#039;&#039;, &#039;&#039;tics&#039;&#039;)&lt;br /&gt;
:Makes the light level of tagged sectors gradually go to &#039;&#039;destvalue&#039;&#039;, for the given amount of tics. &#039;&#039;tics&#039;&#039; must be greater than 0.&lt;br /&gt;
*&#039;&#039;&#039;Light_Glow&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;, &#039;&#039;tics&#039;&#039;)&lt;br /&gt;
:Enables periodic glowing light effect on tagged sectors. &#039;&#039;tics&#039;&#039; is the duration between the extreme light levels and must be positive. The sequence starts by fading down.&lt;br /&gt;
*&#039;&#039;&#039;Light_Flicker&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;)&lt;br /&gt;
:Enables flickering light effect on tagged sectors.&lt;br /&gt;
*&#039;&#039;&#039;Light_Strobe&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;, &#039;&#039;maxtime&#039;&#039;, &#039;&#039;mintime&#039;&#039;)&lt;br /&gt;
:Enables strobing light effect on tagged sectors. Light will periodically flash, staying at &#039;&#039;maxval&#039;&#039; level for &#039;&#039;maxtime&#039;&#039; tics and at &#039;&#039;minval&#039;&#039; level for &#039;&#039;mintime&#039;&#039; tics.&lt;br /&gt;
*&#039;&#039;&#039;Light_StrobeDoom&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxtime&#039;&#039;, &#039;&#039;mintime&#039;&#039;)&lt;br /&gt;
:Enables strobing light effect on tagged sectors, using Doom&#039;s logic of choosing the minimum and maximum light levels.&lt;br /&gt;
*&#039;&#039;&#039;Light_MinNeighbor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Sets the lights in tagged sectors to their minimum neighbors&#039; values&lt;br /&gt;
*&#039;&#039;&#039;Light_MaxNeighbor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Sets the lights in tagged sectors to their maximum neighbors&#039; values&lt;br /&gt;
&lt;br /&gt;
===Things===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 17 || 422 || [[Thing_Raise]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 19 || 423 || [[Thing_Stop]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 72 || 424 || [[ThrustThing]] || angle || speed || - || tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 73 || 426 || [[DamageThing]] || damage || mod || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 119 || 427 || [[Thing_Damage]] || tid || damage || mod || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 128 || 425 || [[ThrustThingZ]] || tid || speed || up or down || set or add ||&lt;br /&gt;
|-&lt;br /&gt;
|| 130 || 404 || [[Thing_Activate]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 131 || 405 || [[Thing_Deactivate]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 132 || 478 || [[Thing_Remove]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 133 || 428 || [[Thing_Destroy]] || tid || - || sector tag || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 134 || 402 || [[Thing_Projectile]] || tid || type || angle || speed || vertical speed&lt;br /&gt;
|-&lt;br /&gt;
|| 135 || 398 || [[Thing_Spawn]] || tid || type || angle || new_tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 136 || 403 || [[Thing_ProjectileGravity]] || tid || type || angle || speed || vertical speed&lt;br /&gt;
|-&lt;br /&gt;
|| 137 || 399 || [[Thing_SpawnNoFog]] || tid || type || angle || new_tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 176 || 421 || [[Thing_ChangeTID]] || oldtid || newtid || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 248 || 469 || [[HealThing]] || amount || max health || || ||&lt;br /&gt;
|}&lt;br /&gt;
*402:&#039;&#039;&#039;Thing_Projectile&#039;&#039;&#039;(tid, type, angle, speed, verticalspeed)&lt;br /&gt;
:Throws a projectile from a map spot. Can also be used to throw a flying monster. Like in Thing_Spawn, &#039;&#039;type&#039;&#039; is an &#039;&#039;&#039;acs_spawndata num&#039;&#039;&#039;. Note that &#039;&#039;speed&#039;&#039; and &#039;&#039;verticalspeed&#039;&#039; are in eighths (units per 8 tics). Up is positive for &#039;&#039;verticalspeed&#039;&#039;.&lt;br /&gt;
*403:&#039;&#039;&#039;Thing_ProjectileGravity&#039;&#039;&#039;(tid, type, angle, speed, verticalspeed)&lt;br /&gt;
:Same as above, but the thrown projectile or monster will be subject to gravity.&lt;br /&gt;
*421:&#039;&#039;&#039;Thing_ChangeTID&#039;&#039;&#039;(oldtid, newtid) &#039;&#039;(since Nov 14 2015)&#039;&#039;&lt;br /&gt;
:Sets the TID of all things which currently have &#039;&#039;oldtid&#039;&#039; to the value &#039;&#039;newtid&#039;&#039;. If &#039;&#039;oldtid&#039;&#039; is zero, it will change the TID of the activator.&lt;br /&gt;
*426:&#039;&#039;&#039;DamageThing&#039;&#039;&#039;(damage, mod) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Damages the activator. &#039;&#039;Mod&#039;&#039; is a means-of-death ([[damagetype]]), which can be used for custom obituaries and damage resistances. If &#039;&#039;damage&#039;&#039; is 0, it will actually do 10000 (gibbing) damage.&lt;br /&gt;
*427:&#039;&#039;&#039;Thing_Damage&#039;&#039;&#039;(tid, damage, mod) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Same as &#039;&#039;&#039;DamageThing&#039;&#039;&#039;, but with the possibility to select TID (where 0 will mean the activator). It&#039;s done this way for ZDoom compatibility. Unlike &#039;&#039;&#039;DamageThing&#039;&#039;&#039;, it will not cause 10000 damage if &#039;&#039;damage&#039;&#039; is 0.&lt;br /&gt;
*428:&#039;&#039;&#039;Thing_Destroy&#039;&#039;&#039;(tid, reserved, sectortag) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Causes 10000 damage to all things tagged &#039;&#039;tid&#039;&#039;. Beware that, in accordance to Hexen, &#039;&#039;tid&#039;&#039; 0 will NOT affect the activator; for that use &#039;&#039;&#039;DamageThing&#039;&#039;&#039;. &#039;&#039;Reserved&#039;&#039; must be set to 0. &#039;&#039;Sectortag&#039;&#039; can be used to only kill things inside sectors with given tag.&lt;br /&gt;
*478:&#039;&#039;&#039;Thing_Remove&#039;&#039;&#039;(tid)&lt;br /&gt;
:Directly removes objects tagged &#039;&#039;tid&#039;&#039; from the game.&lt;br /&gt;
*469:&#039;&#039;&#039;HealThing&#039;&#039;&#039;(amount, maxhealth)&lt;br /&gt;
:Heals the activator by &#039;&#039;amount&#039;&#039;. &#039;&#039;Maxhealth&#039;&#039; influences maximum health and only affects player activators. For monsters and other objects, the maximum health is always the spawn health. On players, &#039;&#039;maxhealth&#039;&#039; has the following meanings:&lt;br /&gt;
:*If 0, it will heal the player up to the initial health (such as the maximum medikit health in default Doom).&lt;br /&gt;
:*If 1, it will heal the player up to the soulsphere maximum health (in default Doom) or the initial health + 100 (if no soulsphere is defined in current game mode)&lt;br /&gt;
:*Otherwise, it will heal the player up to &#039;&#039;maxhealth&#039;&#039;.&lt;br /&gt;
*227 (480) &#039;&#039;&#039;PointPush_SetForce&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;tid&#039;&#039;, &#039;&#039;amount&#039;&#039;, &#039;&#039;use_line&#039;&#039;)&lt;br /&gt;
:Enables and sets wind for Boom push/pull source things. If &#039;&#039;tag&#039;&#039; is non-zero, it looks for such things inside a tagged sector. Only one push/pull thing will be used for each tagged sector. If &#039;&#039;tag&#039;&#039; is zero, it will enable pushing for things tagged &#039;&#039;tid&#039;&#039;. &#039;&#039;Amount&#039;&#039; is the force, and depending on thing type, it will be attractive or repulsive. If &#039;&#039;use_line&#039;&#039; is 1, it will use the linedef length as amount, not the &#039;&#039;amount&#039;&#039; argument. Either the tagged sector (if &#039;&#039;tag&#039;&#039; is non-zero) or the sectors containing the &#039;&#039;tid&#039;&#039; things must have the Boom generalized wind special.&lt;br /&gt;
&lt;br /&gt;
===Sectors===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Static&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 48 || 482 || yes || [[Sector_Attach3dMidtex]] || line id || optional sector tag || use ceiling || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 54 || 503 || || [[Sector_ChangeFlags]] || tag || setflags || clearflags || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 140 || 495 || || [[Sector_ChangeSound]] || tag || sequence id || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 185 || 470 || || [[Sector_SetRotation]] || tag || floor angle || ceiling angle || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 186 || 472 || || [[Sector_SetCeilingPanning]] || tag || x integer || x fractional || y integer || y fractional&lt;br /&gt;
|-&lt;br /&gt;
|| 187 || 471 || || [[Sector_SetFloorPanning]] || tag || x integer || x fractional || y integer || y fractional&lt;br /&gt;
|-&lt;br /&gt;
|| 190 || 481 || yes || [[Static_Init (sky transfer)]] || tag || 255 || flip sky || ||&lt;br /&gt;
|}&lt;br /&gt;
*470:&#039;&#039;&#039;Sector_SetRotation&#039;&#039;&#039;(tag, floor_angle, ceiling_angle)&lt;br /&gt;
:Sets the floor and ceiling texture rotation of tagged sectors to the given values in degrees (0-360).&lt;br /&gt;
*471:&#039;&#039;&#039;Sector_SetFloorPanning&#039;&#039;&#039;(tag, x_int, x_frac, y_int, y_frac)&lt;br /&gt;
:Sets the floor texture panning of tagged sectors to given X and Y values. A value is calculated as x_int + 0.01 * x_frac.&lt;br /&gt;
*472:&#039;&#039;&#039;Sector_SetCeilingPanning&#039;&#039;&#039;(tag, x_int, x_frac, y_int, y_frac)&lt;br /&gt;
:Same as Sector_SetFloorPanning, but for the ceiling texture.&lt;br /&gt;
*&#039;&#039;&#039;Sector_SetFriction&#039;&#039;&#039;(tag, amount)&lt;br /&gt;
:Sets friction in the target sectors. Those sectors must have the Boom generalized friction special enabled to work. &#039;&#039;Amount&#039;&#039; is an optional argument. If 0, it will use the length of the linedef to specify friction. Otherwise, the friction will be settable by &#039;&#039;amount&#039;&#039;. As a rule, smaller values than 100 mean sludge (high friction) and greater than 100 mean slippery surface (low friction).&lt;br /&gt;
*218 (457) &#039;&#039;&#039;Sector_SetWind&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;strength&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;flags&#039;&#039;)&lt;br /&gt;
:Creates wind in the tagged sectors, which, if Boom-style, must have the wind generalized special set. &#039;&#039;Flags&#039;&#039; can be the sum of the following values:&lt;br /&gt;
:*1: if added, it will cause the wind to be defined by the linedef&#039;s length and direction, instead of the &#039;&#039;strength&#039;&#039; and &#039;&#039;angle&#039;&#039; ([[byte angle]]) parameters;&lt;br /&gt;
:*2: if added, it will use Heretic-style winds, which have a slightly different behavior and scale, and will not require the Boom wind sector special to be set.&lt;br /&gt;
*220 (479) &#039;&#039;&#039;Sector_SetCurrent&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;strength&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;flags&#039;&#039;)&lt;br /&gt;
:Similar to &#039;&#039;&#039;Sector_SetWind&#039;&#039;&#039;, but meant for water flow setup, not air wind.&lt;br /&gt;
&lt;br /&gt;
===Slopes===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 118 || 493 || [[Plane_Copy]] || front floor tag || front ceiling tag || back floor tag || back ceiling tag || share slope&lt;br /&gt;
|-&lt;br /&gt;
|| 181 || 455 || [[Plane_Align]] || floor || ceiling || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Teleportation===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 70 || 444 || [[Teleport]] || tid || sector tag || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 71 || 445 || [[Teleport_NoFog]] || tid || use angle || sector tag || keep height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 215 || 446 || [[Teleport_Line]] || - || dest_id || flip || ||&lt;br /&gt;
|}&lt;br /&gt;
*444:&#039;&#039;&#039;Teleport&#039;&#039;&#039;(tid, sector_tag, reserved)&lt;br /&gt;
:Teleports the activator. Depending on whether &#039;&#039;tid&#039;&#039; or &#039;&#039;sector_tag&#039;&#039; is nonzero, the behavior will be Hexen or Doom compatible. If &#039;&#039;tid&#039;&#039; is zero, then it will teleport like in Doom, into the first teleport destination found on sectors tagged &#039;&#039;sector_tag&#039;&#039;.&lt;br /&gt;
:If &#039;&#039;tid&#039;&#039; is non-zero, it will teleport to one random target thing (doesn&#039;t matter the type) among the ones tagged &#039;&#039;tid&#039;&#039;. If in this case &#039;&#039;sector_tag&#039;&#039; is also non-zero, it will only seek a destination thing located in these tagged sectors. This behavior is based on the Hexen teleporters.&lt;br /&gt;
*445:&#039;&#039;&#039;Teleport_NoFog&#039;&#039;&#039;(tid, use_angle, sector_tag, keep_height)&lt;br /&gt;
:Teleports the activator silently, without fog and without holding it. &#039;&#039;Tid&#039;&#039; and &#039;&#039;sector_tag&#039;&#039; are used the same as in &#039;&#039;&#039;Teleport&#039;&#039;&#039;.&lt;br /&gt;
:&#039;&#039;Use_angle&#039;&#039; sets how the activator angle should be set after teleportation, and can take one of the following values:&lt;br /&gt;
:*0: default Hexen behavior. The thing won&#039;t change its angle at all during teleportation.&lt;br /&gt;
:*1: set thing&#039;s angle to the same angle as the one of the destination spot&lt;br /&gt;
:*2: use Boom&#039;s original, buggy behavior: shift angle &#039;&#039;opposite&#039;&#039; to that of the difference between destination spot&#039;s angle and the line normal&#039;s angle&lt;br /&gt;
:*3: use Boom&#039;s supposedly intended behavior: shift angle by the difference between destination spot&#039;s angle and line normal&#039;s angle.&lt;br /&gt;
:If &#039;&#039;use_angle&#039;&#039; is 2 or 3 and the special is not triggered from a linedef, then it will work like mode 1.&lt;br /&gt;
:&#039;&#039;Keep_height&#039;&#039;: setting this to 1 will make the thing preserve its distance to the floor after teleporting. If it&#039;s 0, the thing will be teleported on the floor, like in Hexen.&lt;br /&gt;
*446:&#039;&#039;&#039;Teleport_Line&#039;&#039;&#039;(reserved, dest_id, flip)&lt;br /&gt;
:Encapsulates the Boom line-teleporting functions. &#039;&#039;Dest_id&#039;&#039; is the tag of the target line. &#039;&#039;Flip&#039;&#039; will cause the user to rotate 180 degrees after teleporting.&lt;br /&gt;
&lt;br /&gt;
===Portals===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 9 || 450 || [[Line_Horizon]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 300 || 492 || [[Portal_Define]] || portal id || type || anchor line id || z parameter || flipped anchor&lt;br /&gt;
|-&lt;br /&gt;
|| 301 || 491 || [[Line_QuickPortal]] || visual-only || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Line_Horizon&#039;&#039;&#039;&lt;br /&gt;
:Simple linedef specials which converts the middle part with a horizon portal which uses front sector&#039;s floor and ceiling.&lt;br /&gt;
*&#039;&#039;&#039;Portal_Define&#039;&#039;&#039;&lt;br /&gt;
:See the [[Portal_Define|linked article]] for its description.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Line_QuickPortal&#039;&#039;&#039;(&#039;&#039;non-interactive&#039;&#039;)&lt;br /&gt;
:Convenience linedef special to quickly create a portal between two areas, through a linedef&#039;s middle part. The two lines must be of equal length, and of opposite angles (if linked/interactive) or any angle if not linked. They must have the same, unique tag and the same &#039;&#039;non-interactive&#039;&#039; value, which is 0 for linked portals and 1 for two-way non-linked portals.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sector_SetPortal&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;type&#039;&#039;, &#039;&#039;plane&#039;&#039;, &#039;&#039;misc&#039;&#039;)&lt;br /&gt;
:&#039;&#039;&#039;Only needed for easily converting old maps with portals&#039;&#039;&#039;. You can skip this part if you&#039;re designing a new UDMF map.&lt;br /&gt;
:Only activates on map starts, this one sets a sector portal on floor and/or ceiling on the &#039;&#039;tag&#039;&#039;ged sectors. See [[Portal]] for visual examples.&lt;br /&gt;
:&#039;&#039;Plane&#039;&#039; can be 0 (display portal on floor), 1 (display portal on ceiling), 2 (display portal on both);&lt;br /&gt;
:&#039;&#039;Type&#039;&#039; can be:&lt;br /&gt;
:*0: anchored portal. This line must correspond to another line named &amp;quot;anchor&amp;quot;, whose first 3 parameters are the same with this one, except that &#039;&#039;misc&#039;&#039; is 0 for the anchor, while the source line has &#039;&#039;misc&#039;&#039; 1.&lt;br /&gt;
:*2: skybox portal. Uses the skybox camera object as a source, and displays the skybox (view of this camera) in tagged sectors.&lt;br /&gt;
:*3: plane portal. Renders the ceiling texture of line&#039;s front sector at a fixed camera distance.&lt;br /&gt;
:*4: horizon portal. Renders the floor and ceiling textures of line&#039;s front sector at relative camera distance, useful for infinite horizontal planes such as seas.&lt;br /&gt;
:*6: linked portal. Interactive anchored portals (through which gameplay passes seamlessly). Has the same rule as anchored portals with regard to anchor lines. Requires consistent offsets if there are multiple linked portals in the map, otherwise linked portals are disabled.&lt;br /&gt;
:&#039;&#039;Type&#039;&#039; can also be used for copying already placed portals:&lt;br /&gt;
:*1: copy the portal from a sector tagged with &#039;&#039;misc&#039;&#039; into the tagged sectors if &#039;&#039;tag&#039;&#039; is nonzero, or to the front sector if &#039;&#039;tag&#039;&#039; is 0.&lt;br /&gt;
:*5: copy the portal from a sector tagged with &#039;&#039;misc&#039;&#039; into the tagged lines if &#039;&#039;tag&#039;&#039; is nonzero, or to the current line if &#039;&#039;tag&#039;&#039; is 0.&lt;br /&gt;
:&#039;&#039;Misc&#039;&#039; has values depending on the &#039;&#039;type&#039;&#039; chosen. It makes sense for anchored and linked portals (with 0 meaning source line, and 1 meaning anchor line) and it also has a meaning for the copy types (1 and 5) where it specifies the tag of the sector with portals to copy.&lt;br /&gt;
&lt;br /&gt;
===Binary format specific===&lt;br /&gt;
*378:&#039;&#039;&#039;Line_SetIdentification&#039;&#039;&#039;(id)&lt;br /&gt;
:Sets the linedef identification number (separate from tag) to &#039;&#039;id&#039;&#039;. Useful for various specials that use the line id. Do not use in UDMF.&lt;br /&gt;
&lt;br /&gt;
===Property transfer===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Static&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 209 || 242 || yes || [[Transfer_Heights]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 210 || 213 || yes || [[Transfer_FloorLight]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 211 || 261 || yes || [[Transfer_CeilingLight]] || tag || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Transfer_FloorLight&#039;&#039;&#039;(tag)&lt;br /&gt;
*&#039;&#039;&#039;Transfer_CeilingLight&#039;&#039;&#039;(tag)&lt;br /&gt;
:These two are the same as the Boom special, but applicable in parameterized namespaces.&lt;br /&gt;
*&#039;&#039;&#039;Transfer_Heights&#039;&#039;&#039;(tag, reserved)&lt;br /&gt;
:This also acts like the Boom special 242. Argument &#039;&#039;reserved&#039;&#039; must be 0.&lt;br /&gt;
*190 (481) &#039;&#039;&#039;Static_Init&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;type&#039;&#039;, &#039;&#039;flip_or_ceiling&#039;&#039;, &#039;&#039;move_type&#039;&#039;)&lt;br /&gt;
:This is a multi-purpose special encapsulating several static specials from MBF and Boom. &#039;&#039;Tag&#039;&#039; is the tag of the target sector(s). &#039;&#039;Type&#039;&#039; can be 255 for MBF sky transfers. If &#039;&#039;flip_or_ceiling&#039;&#039; is 1, the sky will be flipped horizontally. If &#039;&#039;type&#039;&#039; is 255, &#039;&#039;move_type&#039;&#039; must be 0.&lt;br /&gt;
&lt;br /&gt;
===Scrollers===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 100 || 406 || [[Scroll_Texture_Left]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 101 || 407 || [[Scroll_Texture_Right]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 102 || 408 || [[Scroll_Texture_Up]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 103 || 409 || [[Scroll_Texture_Down]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 222 || 485 || [[Scroll_Texture_Model]] || line id || kind || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 223 || 484 || [[Scroll_Floor]] || tag || kind || move things || x || y&lt;br /&gt;
|- &lt;br /&gt;
|| 224 || 483 || [[Scroll_Ceiling]] || tag || kind || - || x || y&lt;br /&gt;
|-&lt;br /&gt;
|| 225 || ExtraData only || [[Scroll_Texture_Offsets]]&lt;br /&gt;
|}&lt;br /&gt;
*223 (484) &#039;&#039;&#039;Scroll_Floor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;kind&#039;&#039;, &#039;&#039;scroll_things&#039;&#039;, &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;)&lt;br /&gt;
*224 (483) &#039;&#039;&#039;Scroll_Ceiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;kind&#039;&#039;, &#039;&#039;unused&#039;&#039;, &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;)&lt;br /&gt;
*222 (485) &#039;&#039;&#039;Scroll_Texture_Model&#039;&#039;&#039;(&#039;&#039;line_id&#039;&#039;, &#039;&#039;kind&#039;&#039;)&lt;br /&gt;
:These specials do standard Boom scrolling. &#039;&#039;Kind&#039;&#039; specifies if it&#039;s a static scroller (0), displacement scroller (1) or accelerative scroller (2), and 4 can be added to it to discard arguments &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; and instead use the linedef&#039;s vertex coordinates do determine the scrolling vector. &#039;&#039;Scroll_things&#039;&#039; only apples for &#039;&#039;&#039;Scroll_Floor&#039;&#039;&#039; and means simple visual scrolling (0), thing movement with static floor (1) or thing movement with floor (2). &#039;&#039;X&#039;&#039; and &#039;&#039;y&#039;&#039; are the velocity components with which to scroll, if &#039;&#039;kind&#039;&#039; is less than 4 (otherwise the line&#039;s size is used).&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Scroll_Texture_Model&#039;&#039;&#039; does wall texture scrolling according to line&#039;s vector relative to the target lines.&lt;br /&gt;
&lt;br /&gt;
===Pushers===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 218 || 457 || [[Sector_SetWind]] || tag || force || angle || flags ||&lt;br /&gt;
|-&lt;br /&gt;
|| 219 || 223 || [[Sector_SetFriction]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 220 || 479 || [[Sector_SetCurrent]] || tag || force || angle || flags || &lt;br /&gt;
|-&lt;br /&gt;
|| 227 || 480 || [[PointPush_SetForce]] || tag || tid || force || use line ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Exits===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 74 || 449 || [[Teleport_NewMap]] || level number || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 75 || 400 || [[Teleport_EndGame]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 179 || 462 || [[ChangeSkill]] || skill || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 243 || 447 || [[Exit_Normal]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 244 || 448 || [[Exit_Secret]] || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*400:&#039;&#039;&#039;Teleport_EndGame&#039;&#039;&#039;&lt;br /&gt;
:Ends the entire game in victory. This triggers the current game&#039;s assigned ending cutscene and the player can only choose to start a new game.&lt;br /&gt;
*447:&#039;&#039;&#039;Exit_Normal&#039;&#039;&#039;(reserved)&lt;br /&gt;
:Exits to a normal destination level. The argument is reserved and must be 0.&lt;br /&gt;
*448:&#039;&#039;&#039;Exit_Secret&#039;&#039;&#039;(reserved)&lt;br /&gt;
:Exits to the secret destination level.  The argument is reserved and must be 0.&lt;br /&gt;
*449:&#039;&#039;&#039;Teleport_NewMap&#039;&#039;&#039;(level_number, reserved, reserved)&lt;br /&gt;
:Exits to the given map.  The last two arguments are reserved and must be 0.&lt;br /&gt;
*462:&#039;&#039;&#039;ChangeSkill&#039;&#039;&#039;(&#039;&#039;skill&#039;&#039;)&lt;br /&gt;
:Changes the current difficulty level, where &#039;&#039;skill&#039;&#039; is from 0 (I&#039;m too young to die) to 4 inclusive (Nightmare!).&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[ACS functions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Editing]]&lt;br /&gt;
[[Category:Editing reference]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Parameterized_linedef_specials&amp;diff=6385</id>
		<title>Parameterized linedef specials</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Parameterized_linedef_specials&amp;diff=6385"/>
		<updated>2025-12-13T10:00:50Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Ceiling movement */ More misleading useless number removal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The parameterized linedefs types are Hexen-like action specials with arguments, whose purpose is to be more customizable than the Boom generalized types. When mapping in UDMF, you have to use these parameterized specials instead of the classic parameter-less ones. They&#039;re also used in Hexen format maps (which is necessary when Hexen is going to be supported in Eternity), though Hexen format is not recommended or fully supported for other maps than vanilla Hexen in Eternity. To use parameterized specials in classic (Doom) format maps, provide an [[ExtraData]] lump by attaching it via [[MapInfo|EMAPINFO]] to the map. [[ACS]] scripts can also call parameterized specials. They&#039;re meant to be as compatible as possible with the ZDoom implementation, so minimal changes to zspecial.acs are needed, though Eternity may have extensions of its own. Most likely however the base zspecial.acs is going to be updated for Eternity. Parameters are only limited to 0-255 in the Hexen format (and some specials may have some legacy workarounds for that interval), but otherwise they&#039;re in the normal integer range for other environments (UDMF, ExtraData, ACS). Some specials have never been added to ExtraData, because of their mere purpose being to work under the limits of the Hexen map format.&lt;br /&gt;
&lt;br /&gt;
Each parameterized line special has a name and two associated numbers: one for UDMF, ACS and Hexen formats, and another one for ExtraData support, set this way to avoid conflicts with classic Boom specials (since it&#039;s possible to use their number in the editor instead of the 270 &amp;quot;ExtraData special&amp;quot;). If you only see one number mentioned in the documentation, then it&#039;s the UDMF number (for ExtraData it&#039;s preferred to use the names).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT&#039;&#039;&#039;: all &#039;&#039;reserved&#039;&#039; parameters must be set to 0. Failure to do so will result in your maps being broken in later Eternity versions! Also, for &amp;quot;flag&amp;quot; arguments, do not add or provide other values than in the intended range, for the same reason.&lt;br /&gt;
&lt;br /&gt;
{{Backto|Linedef types}}&lt;br /&gt;
==General info==&lt;br /&gt;
All sector tags, unless otherwise specified, have a special meaning if 0: that means to affect the sector behind the trigger linedef (like regular doors in vanilla Doom).&lt;br /&gt;
&lt;br /&gt;
Thing tags (TIDs) have special meaning for values 0 and negative: 0 means activator, and -1 to -4 mean to affect players 1 to 4 (if present). &#039;&#039;&#039;Consider other negative values reserved&#039;&#039;&#039; and do not use them in your maps.&lt;br /&gt;
==Specials==&lt;br /&gt;
===Doors===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! ExtraData #&lt;br /&gt;
! Name&lt;br /&gt;
! Args&lt;br /&gt;
! Summary&lt;br /&gt;
|-&lt;br /&gt;
|| 10 || 302 || [[Door_Close]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door.&lt;br /&gt;
|-&lt;br /&gt;
|| 11 || 301 || [[Door_Open]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door.&lt;br /&gt;
|-&lt;br /&gt;
|| 12 || 300 || [[Door_Raise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door temporarily.&lt;br /&gt;
|-&lt;br /&gt;
|| 13 || 429 || [[Door_LockedRaise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lock&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a locked door.&lt;br /&gt;
|-&lt;br /&gt;
|| 105 || 304 || [[Door_WaitRaise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;timeoffset&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door temporarily after a delay.&lt;br /&gt;
|-&lt;br /&gt;
|| 106 || 305 || [[Door_WaitClose]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;timeoffset&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door after a delay.&lt;br /&gt;
|-&lt;br /&gt;
|| 249 || 303 || [[Door_CloseWaitOpen]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay_octics&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door, waits a bit, then opens it back.&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;tag&#039;&#039;: Tag of sector to affect. If it&#039;s 0, then the sector behind the linedef will be activated, if applicable.&lt;br /&gt;
:&#039;&#039;speed&#039;&#039;: How fast, in eights of units per tic, the door should move. Doom normal doors are as fast as 16, and blazing doors are 64.&lt;br /&gt;
:&#039;&#039;delay&#039;&#039;: Time in tics (1/35 seconds) for the door before it returns to its opposite movement.&lt;br /&gt;
:&#039;&#039;delay_octics&#039;&#039;: Delay, but expressed in octics, which is eighths of second (i.e. 8 octics = 1 second).&lt;br /&gt;
:&#039;&#039;timeoffset&#039;&#039;: Time in tics before the door activates.&lt;br /&gt;
:&#039;&#039;light_tag&#039;&#039;: Sector tag to receive light changes to maximum or minimum neighbor depending on whether the door is closed or opened.&lt;br /&gt;
:&#039;&#039;lock&#039;&#039;: One of the [[lock identifiers]] to specify the key or set of keys.&lt;br /&gt;
&lt;br /&gt;
===Floor movement, earthquake===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! ExtraData #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|| 20 || 318 || [[Floor_LowerByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 21 || 309 || [[Floor_LowerToLowest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 22 || 311 || [[Floor_LowerToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 23 || 317 || [[Floor_RaiseByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 24 || 306 || [[Floor_RaiseToHighest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 25 || 310 || [[Floor_RaiseToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 28 || 451 || [[Floor_RaiseAndCrush]] || tag || speed || crush || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 35 || - || [[Floor_RaiseByValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 36 || - || [[Floor_LowerByValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 37 || 319 || [[Floor_MoveToValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;neg&#039;&#039; || &#039;&#039;change&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 46 || 452 || [[Floor_CrushStop]] || &#039;&#039;tag&#039;&#039; || || || || || Stops crushing floor movement.&lt;br /&gt;
|-&lt;br /&gt;
|| 66 || 321 || [[Floor_LowerInstant]] || &#039;&#039;tag&#039;&#039; || - || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || || Lowers floor instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 67 || 320 || [[Floor_RaiseInstant]] || &#039;&#039;tag&#039;&#039; || - || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || Raises floor instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 68 || - || [[Floor_MoveToValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;neg&#039;&#039; || &#039;&#039;change&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 120 || 375 || [[Radius_Quake]] || intensity || duration || damage radius || tremor radius || foci tid&lt;br /&gt;
|-&lt;br /&gt;
|| 138 || 397 || [[Floor_Waggle]] || tag || height || speed || offset || timer&lt;br /&gt;
|-&lt;br /&gt;
|| 200 || 464 || [[Generic_Floor]] || tag || speed || height || target || flags || Boom-like generalized floor.&lt;br /&gt;
|-&lt;br /&gt;
|| 228 || 475 || [[Plat_RaiseAndStayTx0]] || tag || speed || lock out || || || Variation of [[Floor_RaiseToNearest]].&lt;br /&gt;
|-&lt;br /&gt;
|| 230 || 476 || [[Plat_UpByValueStayTx]] || tag || speed || height || || || Variation of [[Floor_RaiseByValue]]&lt;br /&gt;
|-&lt;br /&gt;
|| 231 || 487 || [[Plat_ToggleCeiling]] || tag || || || || || Toggles floor between ceiling and initial position.&lt;br /&gt;
|-&lt;br /&gt;
|| 235 || 466 || [[Floor_TransferTrigger]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 236 || 467 || [[Floor_TransferNumeric]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 238 || 312 || [[Floor_RaiseToLowestCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 240 || 315 || [[Floor_RaiseByTexture]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 242 || 416 || [[Floor_LowerToHighest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;adjust&#039;&#039; || &#039;&#039;force_adjust&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 250 || 431 || [[Floor_Donut]] || pillar tag || pillar speed || pool speed || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 256 || 307 || [[Floor_LowerToHighestEE]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 257 || 308 || [[Floor_RaiseToLowest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || || || Instantly lower floor to lowest neighbour.&lt;br /&gt;
|-&lt;br /&gt;
|| 258 || 313 || [[Floor_LowerToLowestCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || || || Lower floor to lowest ceiling.&lt;br /&gt;
|-&lt;br /&gt;
|| 259 || 314 || [[Floor_RaiseToCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039; || Raise floor to ceiling.&lt;br /&gt;
|-&lt;br /&gt;
|| 260 || 322 || [[Floor_ToCeilingInstant]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039; || || Raise floor to ceiling instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 261 || 316 || [[Floor_LowerByTexture]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || || || Lower floor by shortest lower texture.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Floor_Waggle&#039;&#039;&#039; ( tag, height, speed, offset, timer )&lt;br /&gt;
:This special implements the sinusoidal floor motion from Hexen. Its tag and speed parameters bear similar properties to the other floor specials, but -&lt;br /&gt;
:*height - waggle amplitude in 1/8 units&lt;br /&gt;
:*offset - phase offset; how much to delay the waggle in relation to others (0 to 63, in byte angles)&lt;br /&gt;
:*timer - time in seconds the waggle lasts. Zero means permanent&lt;br /&gt;
*&#039;&#039;&#039;Radius_Quake&#039;&#039;&#039; (intensity, duration, damageradius, quakeradius, tid)&lt;br /&gt;
:This special implements the earthquake effect, centred on the map spot with the given &#039;&#039;tid&#039;&#039;, with user-selectable intensity, duration and separate thing damage radius and tremor radius (both being multiplied with 64).&lt;br /&gt;
*&#039;&#039;&#039;Floor_RaiseAndCrush&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;crush&#039;&#039;)&lt;br /&gt;
:This one is for Hexen compatibility. Please use &#039;&#039;&#039;Floor_RaiseToCeiling&#039;&#039;&#039; or &#039;&#039;&#039;Floor_RaiseToLowestCeiling&#039;&#039;&#039; instead.&lt;br /&gt;
====See also====&lt;br /&gt;
*[[Floor movement classic specials]]: for the Doom format variants.&lt;br /&gt;
&lt;br /&gt;
===Plats, lifts===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|| 60 || 410 || [[Plat_PerpetualRaise]] || tag || speed || delay || || || Perpetual lift with lip of 8&lt;br /&gt;
|-&lt;br /&gt;
|| 61 || 411 || [[Plat_Stop]] || tag || stop_mode || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 62 || 412 || [[Plat_DownWaitUpStay]] || tag || speed || delay || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 63 || 413 || [[Plat_DownByValue]] || tag || speed || delay || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 64 || 414 || [[Plat_UpWaitDownStay]] || tag || speed || delay || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 65 || 415 || [[Plat_UpByValue]] || tag || speed || delay || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 203 || 501 || [[Generic_Lift]] || tag || speed || delay || type || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 206 || 488 || [[Plat_DownWaitUpStayLip]] || tag || speed || delay || lip ||&lt;br /&gt;
|-&lt;br /&gt;
|| 207 || 489 || [[Plat_PerpetualRaiseLip]] || tag || speed || delay || lip ||&lt;br /&gt;
|}&lt;br /&gt;
*207 (489) &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lip&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039;, but lets you choose a &amp;quot;lip&amp;quot; (distance from lowest adjacent floor to move down to). If &#039;&#039;lip&#039;&#039; is 0, it will work like classic Doom perpetual plats.&lt;br /&gt;
*61 (411) &#039;&#039;&#039;Plat_Stop&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;stop_mode&#039;&#039;)&lt;br /&gt;
:Pauses or stops a perpetual platform from moving. The behavior depends on &#039;&#039;stop_mode&#039;&#039;:&lt;br /&gt;
:*1: the platform will be merely suspended. It will only be retriggerable by other &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039; or &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039; (or in Doom-format maps, by similar specials), continuing from the exact same state it stopped.&lt;br /&gt;
:*2: the platform movement will be stopped at the current position. It will be retriggerable by any other special. If restarted by &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039; or &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039; it may not remember the last state.&lt;br /&gt;
:*0 (default): will act based on compatibility with current game mode. On Doom/Heretic/Hexen, it will act like mode 1, while in Hexen it will act like mode 2.&lt;br /&gt;
*62 (412) &#039;&#039;&#039;Plat_DownWaitUpStay&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Lowers the plat as a lift to the lowest adjacent floor &#039;&#039;&#039;plus 8 units&#039;&#039;&#039;. Use &#039;&#039;&#039;Plat_DownWaitUpStayLip&#039;&#039;&#039; with 0 lip if you want classic Doom-like lifts.&lt;br /&gt;
*206 (488) &#039;&#039;&#039;Plat_DownWaitUpStayLip&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lip&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Plat_DownWaitUpStay&#039;&#039;&#039; but with settable &#039;&#039;lip&#039;&#039;.&lt;br /&gt;
*63 (413) &#039;&#039;&#039;Plat_DownByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;height&#039;&#039;)&lt;br /&gt;
:Lowers a lift by an absolute &#039;&#039;height&#039;&#039;, &#039;&#039;&#039;multiplied by 8&#039;&#039;&#039;. It will rise back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*64 (414) &#039;&#039;&#039;Plat_UpWaitDownStay&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Raises a lift to the highest neighbor floor. It will lower back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*65 (415) &#039;&#039;&#039;Plat_UpByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;height&#039;&#039;)&lt;br /&gt;
:Raises a lift by an absolute &#039;&#039;height&#039;&#039;, &#039;&#039;&#039;multiplied by 8&#039;&#039;&#039;. It will lower back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*231 (487) &#039;&#039;&#039;Plat_ToggleCeiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Toggles a floor between the default position and touching the ceiling. It will be left busy after that.&lt;br /&gt;
&lt;br /&gt;
===Elevators===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 95 || 453 || [[FloorAndCeiling_LowerByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 96 || 454 || [[FloorAndCeiling_RaiseByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 245 || 458 || [[Elevator_RaiseToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 246 || 460 || [[Elevator_MoveToFloor]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 247 || 459 || [[Elevator_LowerToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Ceiling movement===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 38 || 500 || [[Ceiling_Waggle]] || tag || height || speed || offset || timer&lt;br /&gt;
|-&lt;br /&gt;
|| 40 || 336 || [[Ceiling_LowerByValue]] || tag || speed || height || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 41 || 335 || [[Ceiling_RaiseByValue]] || tag || speed || height || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 42 || 432 || [[Ceiling_CrushAndRaise]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 43 || 435 || [[Ceiling_LowerAndCrush]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 44 || 433 || [[Ceiling_CrushStop]] || tag || stop mode || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 45 || 434 || [[Ceiling_CrushRaiseAndStay]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 47 || 337 || [[Ceiling_MoveToValue]] || tag || speed || height || negate || change&lt;br /&gt;
|-&lt;br /&gt;
|| 69 || - || [[Ceiling_MoveToValueTimes8]] || tag || speed || height || negate || change&lt;br /&gt;
|-&lt;br /&gt;
|| 97 || 436 || [[Ceiling_LowerAndCrushDist]] || tag || speed || crush || gap || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 104 || 441 || [[Ceiling_CrushAndRaiseSilentDist]] || tag || gap || speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 168 || 437 || [[Ceiling_CrushAndRaiseDist]] || tag || gap || speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 192 || 330 || [[Ceiling_LowerToHighestFloor]] || tag || speed || change || crush || gap to floor&lt;br /&gt;
|-&lt;br /&gt;
|| 193 || 339 || [[Ceiling_LowerInstant]] || tag || - || height * 8 || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 194 || 338 || [[Ceiling_RaiseInstant]] || tag || - || height * 8 || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 195 || 438 || [[Ceiling_CrushRaiseAndStayA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 196 || 439 || [[Ceiling_CrushAndRaiseA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 197 || 440 || [[Ceiling_CrushAndRaiseSilentA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 198 || - || [[Ceiling_RaiseByValueTimes8]] || tag || speed || height * 8 || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 199 || - || [[Ceiling_LowerByValueTimes8]] || tag || speed || height * 8 || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 201 || 465 || [[Generic_Ceiling]] || tag || speed || height || target || flags&lt;br /&gt;
|-&lt;br /&gt;
|| 205 || 443 || [[Generic_Crusher]] || tag || down speed || up speed || silent || damage&lt;br /&gt;
|-&lt;br /&gt;
|| 252 || 325 || [[Ceiling_RaiseToNearest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 253 || 328 || [[Ceiling_LowerToLowest]] || tag || speed || change || crush ||&lt;br /&gt;
|-&lt;br /&gt;
|| 254 || 332 || [[Ceiling_LowerToFloor]] || tag || speed || change || crush || gap&lt;br /&gt;
|-&lt;br /&gt;
|| 255 || 442 || [[Ceiling_CrushRaiseAndStaySilA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 262 || 323 || [[Ceiling_RaiseToHighest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 263 || 324 || [[Ceiling_ToHighestInstant]] || tag || change || crush || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 264 || 326 || [[Ceiling_LowerToNearest]] || tag || speed || change || crush ||&lt;br /&gt;
|-&lt;br /&gt;
|| 265 || 327 || [[Ceiling_RaiseToLowest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 266 || 329 || [[Ceiling_RaiseToHighestFloor]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 267 || 331 || [[Ceiling_ToFloorInstant]] || tag || change || crush || gap ||&lt;br /&gt;
|-&lt;br /&gt;
|| 268 || 333 || [[Ceiling_RaiseByTexture]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 269 || 334 || [[Ceiling_LowerByTexture]] || tag || speed || change || crush ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Ceiling_RaiseToHighest&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*Ceiling_ToHighestInstant&#039;&#039;&#039;    ( tag, change, crush                )&lt;br /&gt;
*Ceiling_RaiseToNearest&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerToNearest&#039;&#039;&#039;      ( tag, speed, change, crush         )&lt;br /&gt;
*Ceiling_RaiseToLowest&#039;&#039;&#039;       ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerToLowest&#039;&#039;&#039;       ( tag, speed, change, crush         )&lt;br /&gt;
*Ceiling_RaiseToHighestFloor&#039;&#039;&#039; ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerToHighestFloor&#039;&#039;&#039; ( tag, speed, change, crush, gap    )&lt;br /&gt;
*Ceiling_ToFloorInstant&#039;&#039;&#039;      ( tag, change, crush, gap           )&lt;br /&gt;
*Ceiling_LowerToFloor&#039;&#039;&#039;        ( tag, speed, change, crush, gap    )&lt;br /&gt;
*Ceiling_RaiseByTexture&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*Ceiling_LowerByTexture&#039;&#039;&#039;      ( tag, speed, change, crush         )&lt;br /&gt;
*Ceiling_RaiseByValue&#039;&#039;&#039;        ( tag, speed, height, change        )&lt;br /&gt;
*Ceiling_LowerByValue&#039;&#039;&#039;        ( tag, speed, height, change, crush )&lt;br /&gt;
*Ceiling_MoveToValue&#039;&#039;&#039;         ( tag, speed, height, change, crush )&lt;br /&gt;
*Ceiling_RaiseInstant&#039;&#039;&#039;        ( tag, height, change               )&lt;br /&gt;
*Ceiling_LowerInstant&#039;&#039;&#039;        ( tag, height, change, crush        )&lt;br /&gt;
:Values for these specials:&lt;br /&gt;
:*tag: Tag of the sector(s) to affect. A tag of zero means to affect the sector on the second side of the line.&lt;br /&gt;
:*speed: Speed of ceiling in eighths of a unit per tic.&lt;br /&gt;
:*change: This parameter takes the following values:&lt;br /&gt;
::0 : No texture or type change.&lt;br /&gt;
::1 : Copy texture, zero type; trigger model.&lt;br /&gt;
::2 : Copy texture, zero type; numeric model.&lt;br /&gt;
::3 : Copy texture, preserve type; trigger model.&lt;br /&gt;
::4 : Copy texture, preserve type; numeric model.&lt;br /&gt;
::5 : Copy texture and type; trigger model.&lt;br /&gt;
::6 : Copy texture and type; numeric model.&lt;br /&gt;
:*crush: Amount of crushing damage ceiling inflicts at each crushing event (when gametic % 4 = 0). If this amount is less than or equal to zero, no crushing damage is done.&lt;br /&gt;
:*height: An integer number of units, either the amount to move the floor by or the exact z coordinate to move the floor toward. Negative numbers are valid for the latter case.&lt;br /&gt;
:*gap: Distance to keep from the destination. Useful if crush is nonzero&lt;br /&gt;
*Generic_Ceiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;height&#039;&#039;, &#039;&#039;target&#039;&#039;, &#039;&#039;flag&#039;&#039;)&lt;br /&gt;
:See &#039;&#039;&#039;Generic_Floor&#039;&#039;&#039; for an explanation of parameters.&lt;br /&gt;
&lt;br /&gt;
====Crushing ceilings====&lt;br /&gt;
There are some crushing ceilings available now. Some originate from Hexen while others are extensions from ZDoom. ZDoom compatibility is considered where relevant. For all specials where it applies, &#039;&#039;crushmode&#039;&#039; can take one of these values:&lt;br /&gt;
*0: compatibility. Act like it would do in ZDoom. This means that in Doom the crusher keeps pushing into the things it crushes, while in Hexen it stays on position while dealing damage. And if the game is Doom, the special has &amp;quot;Dist&amp;quot; in the name and the speed is set to 8, it will also slow down to speed 1 when crushing.&lt;br /&gt;
*1: Doom mode without slowdown. Same as classic Doom&#039;s fast crushers.&lt;br /&gt;
*2: Hexen mode. It will rest in position while crushing.&lt;br /&gt;
*3: Doom mode with slowdown. Same as classic Doom&#039;s slow crushers. Currently the crushing speed is hardcoded to 1.&lt;br /&gt;
The specials are the following. Take care that Ceiling_CrushAndRaise is mainly for Hexen compatibility: it will rise at half the speed it lowers. For Doom-like crushers use Ceiling_CrushAndRaiseA (all &amp;quot;A&amp;quot; crushers let you specify the rising speed) or Ceiling_CrushAndRaiseDist (all &amp;quot;Dist&amp;quot; crushers rise at the same speed as they lower, but instead let you specify the gap size to the ground). Finally, Generic_Crusher aims to act like the Boom crushers, having the following particularities: it will slow down when crushing if speed is less than 24, and it will be totally silent if specified in the parameter (won&#039;t even make clunk noises).&lt;br /&gt;
*Ceiling_CrushAndRaise(tag, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseSilentA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseDist(tag, ground_distance, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseSilentDist(tag, ground_distance, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseAndStay(tag, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseAndStayA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_CrushAndRaiseAndStaySilA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*Ceiling_LowerAndCrush(tag, speed, damage, crushmode)&lt;br /&gt;
*Ceiling_LowerAndCrushDist(tag, speed, damage, ground_distance, crushmode)&lt;br /&gt;
*Ceiling_CrushStop(tag, stop_mode)&lt;br /&gt;
:*stop_mode can be: 0 (compatibility), 1 (Doom: pause crusher), 2 (Hexen: remove crusher and release the ceiling)&lt;br /&gt;
*Generic_Crusher(tag, down_speed, up_speed, silent, damage)&lt;br /&gt;
&lt;br /&gt;
===Stair building===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 204 || 502 || [[Generic_Stairs]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;flags&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 217 || 340 || [[Stairs_BuildUpDoom]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;delay&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 270 || 341 || [[Stairs_BuildDownDoom]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;delay&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 271 || 342 || [[Stairs_BuildUpDoomSync]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;reset&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 272 || 343 || [[Stairs_BuildDownDoomSync]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;reset&#039;&#039; ||&lt;br /&gt;
|}&lt;br /&gt;
 ------------------------------------------------------------------------------ &lt;br /&gt;
 * Synchronized stairs have each step move at a different speed so that all the&lt;br /&gt;
   steps reach the destination height at the same time. This stair building&lt;br /&gt;
   style is only available with these parameterized line types. &lt;br /&gt;
 &lt;br /&gt;
 Values&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 tag       : Tag of first sector to raise or lower as a step.&lt;br /&gt;
             When the stair building method is DOOM, subsequent&lt;br /&gt;
             steps are found by searching across two-sided&lt;br /&gt;
             lines where the first side belongs to the current&lt;br /&gt;
             sector and the floor texture is the same. The&lt;br /&gt;
             Hexen stair building method is not yet supported.&lt;br /&gt;
 speed     : Speed of steps in eights of a unit per tic. If the&lt;br /&gt;
             build style is synchronized, only the first step&lt;br /&gt;
             moves at this speed. Other steps will move at a&lt;br /&gt;
             speed which allows them to reach their &lt;br /&gt;
             destination height at the same time.&lt;br /&gt;
 stepsize  : Step size in units.&lt;br /&gt;
 delay     : Delay time in tics between steps&lt;br /&gt;
 reset     : If greater than zero, the stairs will wait this&lt;br /&gt;
             amount of time in tics after completely building&lt;br /&gt;
             and will then reset by repeating the same stair&lt;br /&gt;
             building action but in the reverse direction. If&lt;br /&gt;
             zero, the stairs will never reset.&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
===Polyobjects===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 1 || 348 || [[Polyobj_StartLine]] || id || mirror id || sound sequence || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 2 || 356 || [[Polyobj_RotateLeft]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 3 || 354 || [[Polyobj_RotateRight]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 4 || 352 || [[Polyobj_Move]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 5 || 349 || [[Polyobj_ExplicitLine]] || id || line index || mirror id || sound sequence ||&lt;br /&gt;
|-&lt;br /&gt;
|| 6 || - || [[Polyobj_MoveTimes8]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 7 || 351 || [[Polyobj_DoorSwing]] || id || speed || rotation || delay ||&lt;br /&gt;
|-&lt;br /&gt;
|| 8 || 350 || [[Polyobj_DoorSlide]] || id || speed || angle || distance || delay&lt;br /&gt;
|-&lt;br /&gt;
|| 59 || 499 || [[Polyobj_OR_MoveToSpot]] || id || speed || [[TID]] || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 86 || 496 || [[Polyobj_MoveToSpot]] || id || speed || [[TID]] || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 87 || 474 || [[Polyobj_Stop]] || id || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 88 || 497 || [[Polyobj_MoveTo]] || id || speed || x || y ||&lt;br /&gt;
|-&lt;br /&gt;
|| 89 || 498 || [[Polyobj_OR_MoveTo]] || id || speed || x || y ||&lt;br /&gt;
|-&lt;br /&gt;
|| 90 || 357 || [[Polyobj_OR_RotateLeft]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 91 || 355 || [[Polyobj_OR_RotateRight]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 92 || 353 || [[Polyobj_OR_Move]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 93 || - || [[Polyobj_OR_MoveTimes8]] || id || speed || angle || distance ||&lt;br /&gt;
|}&lt;br /&gt;
*1 (348) &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;mirror_id&#039;&#039;, &#039;&#039;sequence_id&#039;&#039;)&lt;br /&gt;
*5 (349) &#039;&#039;&#039;Polyobj_ExplicitLine(&#039;&#039;id&#039;&#039;, &#039;&#039;linenum&#039;&#039;, &#039;&#039;mirror_id&#039;&#039;, &#039;&#039;sequence_id&#039;&#039;)&lt;br /&gt;
:There are two different methods of creating a polyobject. In the first, the &amp;quot;first&amp;quot; line is given the &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039; special, and subsequent lines are added to the PolyObject by following segs from vertex to vertex. To use this, all the lines around the polyobject must run in the same direction, and the last line must end at the same vertex which starts the first line (in other words, it must be closed).&lt;br /&gt;
&lt;br /&gt;
:With the second method, every line to be included must be given the &#039;&#039;&#039;Polyobj_ExplicitLine&#039;&#039;&#039; special and must be given a &#039;&#039;linenum&#039;&#039; param which is unique amongst all lines that will added to that polyobject. Polyobjects of this sort should also be closed for proper rendering, but the game engine cannot and will not verify that this is the case.&lt;br /&gt;
   &lt;br /&gt;
:Only polyobjects created with the &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039; method can have other line specials on the polyobject&#039;s lines themselves. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;Mirror_id&#039;&#039; is the ID number of a PolyObject that wants to mirror every action that this PolyObject makes. This number cannot refer to the self-same PolyObject, nor should PolyObjects attempt to mirror each other in a cycle since this will create problems with override actions. Angle of motion is always reversed when applying an action to a mirroring PolyObject. If a mirror is already in motion for a non-override action, the mirror will not be affected even if the main object was moved. Mirror polyobjects can themselves define a mirror, and an action will affect all mirroring polyobjects in the chain.&lt;br /&gt;
*4 (352) &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Slides a polyobject in the direction given in &#039;&#039;angle&#039;&#039; by &#039;&#039;distance&#039;&#039;.&lt;br /&gt;
*6 &#039;&#039;&#039;Polyobj_MoveTimes8&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039; but with &#039;&#039;distance&#039;&#039; multiplied by 8. Needed only for the Hexen format and supported for legacy reasons.&lt;br /&gt;
*2 (356) &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Rotates a polyobject counterclockwise by the &#039;&#039;distance&#039;&#039; [[byte angle]] difference. If &#039;&#039;distance&#039;&#039; is 0, it means 360 degrees. If &#039;&#039;distance&#039;&#039; is 255, it means perpetual spinning.&lt;br /&gt;
*3 (354) &#039;&#039;&#039;Polyobj_RotateRight&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Rotates a polyobject clockwise by the &#039;&#039;distance&#039;&#039; [[byte angle]] difference. If &#039;&#039;distance&#039;&#039; is 0, it means 360 degrees. If &#039;&#039;distance&#039;&#039; is 255, it means perpetual spinning.&lt;br /&gt;
*92 (353) &#039;&#039;&#039;Polyobj_OR_Move&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*93 &#039;&#039;&#039;Polyobj_OR_MoveTimes8&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_MoveTimes8&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*90 (357) &#039;&#039;&#039;Polyobj_OR_RotateLeft&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*91 (355) &#039;&#039;&#039;Polyobj_OR_RotateRight&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_RotateRight&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*8 (350) &#039;&#039;&#039;Polyobj_DoorSlide&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Slides a polyobject like a door which closes after a &#039;&#039;delay&#039;&#039; and deflects if it gets jammed.&lt;br /&gt;
*7 (351) &#039;&#039;&#039;Polyobj_DoorSwing&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Swings a polyobject like a door which closes after a &#039;&#039;delay&#039;&#039; and deflects if it gets jammed. There are no special behaviors for setting &#039;&#039;distance&#039;&#039; to 0 or 255, unlike &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039; and derivatives.&lt;br /&gt;
*87 (474) &#039;&#039;&#039;Polyobj_Stop&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;)&lt;br /&gt;
:Stops a polyobject from movement. It will then be free for other activations.&lt;br /&gt;
&lt;br /&gt;
===Pillar building===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 29 || 362 || [[Pillar_Build]] || tag || speed || height || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 30 || 364 || [[Pillar_Open]] || tag || speed || floor dist || ceil dist ||&lt;br /&gt;
|-&lt;br /&gt;
|| 94 || 363 || [[Pillar_BuildAndCrush]] || tag || speed || height || damage ||&lt;br /&gt;
|-&lt;br /&gt;
|| 251 || 468 || [[FloorAndCeiling_LowerRaise]] || tag || floor speed || ceiling speed || Boom emulation ||&lt;br /&gt;
|}&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 #    Function                            ExtraData Name&lt;br /&gt;
 &lt;br /&gt;
 362  Build pillar                        Pillar_Build&lt;br /&gt;
 363  Build pillar and crush              Pillar_BuildAndCrush&lt;br /&gt;
 364  Open pillar                         Pillar_Open &lt;br /&gt;
 &lt;br /&gt;
 Parameters&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 Pillar_Build                  tag, speed, height&lt;br /&gt;
 Pillar_BuildAndCrush          tag, speed, height, crush&lt;br /&gt;
 Pillar_Open                   tag, speed, fdist, cdist&lt;br /&gt;
 &lt;br /&gt;
 Values&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 tag       : Tag of sector to close or open as a pillar. For the&lt;br /&gt;
             action to succeed, neither surface may have an &lt;br /&gt;
             action running on it already. If the tag is zero,&lt;br /&gt;
             the sector on the backside of a 2S line with this&lt;br /&gt;
             special will be used.&lt;br /&gt;
 speed     : Speed of the surface with the greatest distance to&lt;br /&gt;
             move in eights of a unit per tic. The other surface&lt;br /&gt;
             will move at a speed which causes it to reach its&lt;br /&gt;
             destination at the same time.&lt;br /&gt;
 height    : For Build and BuildAndCrush types, this is the &lt;br /&gt;
             height relative to the floor where the floor and &lt;br /&gt;
             ceiling should meet. If this value is zero, the &lt;br /&gt;
             floor and ceiling will meet exactly half-way.&lt;br /&gt;
 crush     : For BuildAndCrush type only, this specifies the &lt;br /&gt;
             amount of damage to inflict per crush event.&lt;br /&gt;
 fdist     : For Open type only, this is the distance the floor&lt;br /&gt;
             should move down. If this value is zero, the floor&lt;br /&gt;
             will move to its lowest neighboring floor.&lt;br /&gt;
 cdist     : For Open type only, this is the distance the&lt;br /&gt;
             ceiling should move up. If this value is zero, the&lt;br /&gt;
             ceiling will move to its highest neighboring &lt;br /&gt;
             ceiling.          &lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
*[[FloorAndCeiling_LowerRaise]]&lt;br /&gt;
&lt;br /&gt;
===ACS Scripts===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 80 || 365 || [[ACS_Execute]] || script || map || arg1 || arg2 || arg3&lt;br /&gt;
|-&lt;br /&gt;
|| 81 || 366 || [[ACS_Suspend]] || script || map || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 82 || 367 || [[ACS_Terminate]] || script || map || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 83 || 430 || [[ACS_LockedExecute]] || script || map || arg1 || arg2 || lock id&lt;br /&gt;
|-&lt;br /&gt;
|| 84 || 420 || [[ACS_ExecuteWithResult]] || script || arg1 || arg2 || arg3 || arg4&lt;br /&gt;
|-&lt;br /&gt;
|| 85 || 490 || [[ACS_LockedExecuteDoor]] || script || map || arg1 || arg2 || lock id&lt;br /&gt;
|-&lt;br /&gt;
|| 226 || 477 || [[ACS_ExecuteAlways]] || script || map || arg1 || arg2 || arg3&lt;br /&gt;
|}&lt;br /&gt;
{{zdoomwiki}}&lt;br /&gt;
Eternity supports ACS script calling.&lt;br /&gt;
*365:&#039;&#039;&#039;ACS_Execute&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg0&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;)&lt;br /&gt;
:Executes the specified script. A map value of zero indicates that the script is on the current map. If the script is on a different map, then the execution of the script will be delayed until the player enters the map that contains it. Only one copy of a script can be running at a time when started with this special. &lt;br /&gt;
:If the specified script was previously executed but then suspended, then execution will begin at the point immediately after where it was suspended instead of starting over again at the beginning.&lt;br /&gt;
:The number of usable arguments is limited to 3.&lt;br /&gt;
*477:&#039;&#039;&#039;ACS_ExecuteAlways&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg0&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;)&lt;br /&gt;
:Same as ACS_Execute, but will not be blocked if an instance of &#039;&#039;scriptnum&#039;&#039; is already running.&lt;br /&gt;
*366:&#039;&#039;&#039;ACS_Suspend&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;)&lt;br /&gt;
:Suspends execution of a script until an ACS_Execute special resumes it.&lt;br /&gt;
*367:&#039;&#039;&#039;ACS_Terminate&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;)&lt;br /&gt;
:Terminates the script.&lt;br /&gt;
*430:&#039;&#039;&#039;ACS_LockedExecute&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;, &#039;&#039;lock&#039;&#039;) &#039;&#039;(since Feb 25 2016)&#039;&#039;&lt;br /&gt;
:This one executes a script that requires the player to have a key or more. See [[Lock identifiers]] for info on what to put for the &#039;&#039;lock&#039;&#039; argument.&lt;br /&gt;
&lt;br /&gt;
===Lights===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 110 || 368 || [[Light_RaiseByValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 111 || 369 || [[Light_LowerByValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 112 || 370 || [[Light_ChangeToValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 113 || 371 || [[Light_Fade]] || tag || dest value || tics || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 114 || 372 || [[Light_Glow]] || tag || max || min || tics ||&lt;br /&gt;
|-&lt;br /&gt;
|| 115 || 373 || [[Light_Flicker]] || tag || max || min || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 116 || 374 || [[Light_Strobe]] || tag || max value || min value || max time || min time&lt;br /&gt;
|-&lt;br /&gt;
|| 232 || 463 || [[Light_StrobeDoom]] || tag || max time || min time || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 233 || 473 || [[Light_MinNeighbor]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 234 || 461 || [[Light_MaxNeighbor]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
If &#039;&#039;tag&#039;&#039; is 0, any such parameterized special will affect the sector behind the linedef, if applicable.&lt;br /&gt;
* &#039;&#039;&#039;Light_MinNeighbor&#039;&#039;&#039; sets the lights in tagged sectors to their minimum neighbors&#039; values.&lt;br /&gt;
* &#039;&#039;&#039;Light_MaxNeighbor&#039;&#039;&#039; sets the lights in tagged sectors to their maximum neighbors&#039; values.&lt;br /&gt;
&lt;br /&gt;
Eternity supports the following light level controlling parameterized linedef specials. If &#039;&#039;tag&#039;&#039; is 0, any such parameterized special will affect the sector behind the linedef, if applicable.&lt;br /&gt;
*368:&#039;&#039;&#039;Light_RaiseByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Adds the &#039;&#039;lvl&#039;&#039; value to the light levels of tagged sectors, capping them to 255. &lt;br /&gt;
*369:&#039;&#039;&#039;Light_LowerByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Substracts the &#039;&#039;lvl&#039;&#039; value from the light levels of tagged sectors, limiting them to 0.&lt;br /&gt;
*370:&#039;&#039;&#039;Light_ChangeToValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Sets the &#039;&#039;lvl&#039;&#039; value for the light level of tagged sectors, and caps it between 0 and 255 inclusive.&lt;br /&gt;
*371:&#039;&#039;&#039;Light_Fade&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;destvalue&#039;&#039;, &#039;&#039;tics&#039;&#039;)&lt;br /&gt;
:Makes the light level of tagged sectors gradually go to &#039;&#039;destvalue&#039;&#039;, for the given amount of tics. &#039;&#039;tics&#039;&#039; must be greater than 0.&lt;br /&gt;
*372:&#039;&#039;&#039;Light_Glow&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;, &#039;&#039;tics&#039;&#039;)&lt;br /&gt;
:Enables periodic glowing light effect on tagged sectors. &#039;&#039;tics&#039;&#039; is the duration between the extreme light levels and must be positive. The sequence starts by fading down.&lt;br /&gt;
*373:&#039;&#039;&#039;Light_Flicker&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;)&lt;br /&gt;
:Enables flickering light effect on tagged sectors.&lt;br /&gt;
*374:&#039;&#039;&#039;Light_Strobe&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;, &#039;&#039;maxtime&#039;&#039;, &#039;&#039;mintime&#039;&#039;)&lt;br /&gt;
:Enables strobing light effect on tagged sectors. Light will periodically flash, staying at &#039;&#039;maxval&#039;&#039; level for &#039;&#039;maxtime&#039;&#039; tics and at &#039;&#039;minval&#039;&#039; level for &#039;&#039;mintime&#039;&#039; tics.&lt;br /&gt;
*463:&#039;&#039;&#039;Light_StrobeDoom&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxtime&#039;&#039;, &#039;&#039;mintime&#039;&#039;)&lt;br /&gt;
:Enables strobing light effect on tagged sectors, using Doom&#039;s logic of choosing the minimum and maximum light levels.&lt;br /&gt;
*473:&#039;&#039;&#039;Light_MinNeighbor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Sets the lights in tagged sectors to their minimum neighbors&#039; values&lt;br /&gt;
*461:&#039;&#039;&#039;Light_MaxNeighbor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Sets the lights in tagged sectors to their maximum neighbors&#039; values&lt;br /&gt;
&lt;br /&gt;
===Things===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 17 || 422 || [[Thing_Raise]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 19 || 423 || [[Thing_Stop]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 72 || 424 || [[ThrustThing]] || angle || speed || - || tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 73 || 426 || [[DamageThing]] || damage || mod || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 119 || 427 || [[Thing_Damage]] || tid || damage || mod || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 128 || 425 || [[ThrustThingZ]] || tid || speed || up or down || set or add ||&lt;br /&gt;
|-&lt;br /&gt;
|| 130 || 404 || [[Thing_Activate]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 131 || 405 || [[Thing_Deactivate]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 132 || 478 || [[Thing_Remove]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 133 || 428 || [[Thing_Destroy]] || tid || - || sector tag || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 134 || 402 || [[Thing_Projectile]] || tid || type || angle || speed || vertical speed&lt;br /&gt;
|-&lt;br /&gt;
|| 135 || 398 || [[Thing_Spawn]] || tid || type || angle || new_tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 136 || 403 || [[Thing_ProjectileGravity]] || tid || type || angle || speed || vertical speed&lt;br /&gt;
|-&lt;br /&gt;
|| 137 || 399 || [[Thing_SpawnNoFog]] || tid || type || angle || new_tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 176 || 421 || [[Thing_ChangeTID]] || oldtid || newtid || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 248 || 469 || [[HealThing]] || amount || max health || || ||&lt;br /&gt;
|}&lt;br /&gt;
*402:&#039;&#039;&#039;Thing_Projectile&#039;&#039;&#039;(tid, type, angle, speed, verticalspeed)&lt;br /&gt;
:Throws a projectile from a map spot. Can also be used to throw a flying monster. Like in Thing_Spawn, &#039;&#039;type&#039;&#039; is an &#039;&#039;&#039;acs_spawndata num&#039;&#039;&#039;. Note that &#039;&#039;speed&#039;&#039; and &#039;&#039;verticalspeed&#039;&#039; are in eighths (units per 8 tics). Up is positive for &#039;&#039;verticalspeed&#039;&#039;.&lt;br /&gt;
*403:&#039;&#039;&#039;Thing_ProjectileGravity&#039;&#039;&#039;(tid, type, angle, speed, verticalspeed)&lt;br /&gt;
:Same as above, but the thrown projectile or monster will be subject to gravity.&lt;br /&gt;
*421:&#039;&#039;&#039;Thing_ChangeTID&#039;&#039;&#039;(oldtid, newtid) &#039;&#039;(since Nov 14 2015)&#039;&#039;&lt;br /&gt;
:Sets the TID of all things which currently have &#039;&#039;oldtid&#039;&#039; to the value &#039;&#039;newtid&#039;&#039;. If &#039;&#039;oldtid&#039;&#039; is zero, it will change the TID of the activator.&lt;br /&gt;
*426:&#039;&#039;&#039;DamageThing&#039;&#039;&#039;(damage, mod) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Damages the activator. &#039;&#039;Mod&#039;&#039; is a means-of-death ([[damagetype]]), which can be used for custom obituaries and damage resistances. If &#039;&#039;damage&#039;&#039; is 0, it will actually do 10000 (gibbing) damage.&lt;br /&gt;
*427:&#039;&#039;&#039;Thing_Damage&#039;&#039;&#039;(tid, damage, mod) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Same as &#039;&#039;&#039;DamageThing&#039;&#039;&#039;, but with the possibility to select TID (where 0 will mean the activator). It&#039;s done this way for ZDoom compatibility. Unlike &#039;&#039;&#039;DamageThing&#039;&#039;&#039;, it will not cause 10000 damage if &#039;&#039;damage&#039;&#039; is 0.&lt;br /&gt;
*428:&#039;&#039;&#039;Thing_Destroy&#039;&#039;&#039;(tid, reserved, sectortag) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Causes 10000 damage to all things tagged &#039;&#039;tid&#039;&#039;. Beware that, in accordance to Hexen, &#039;&#039;tid&#039;&#039; 0 will NOT affect the activator; for that use &#039;&#039;&#039;DamageThing&#039;&#039;&#039;. &#039;&#039;Reserved&#039;&#039; must be set to 0. &#039;&#039;Sectortag&#039;&#039; can be used to only kill things inside sectors with given tag.&lt;br /&gt;
*478:&#039;&#039;&#039;Thing_Remove&#039;&#039;&#039;(tid)&lt;br /&gt;
:Directly removes objects tagged &#039;&#039;tid&#039;&#039; from the game.&lt;br /&gt;
*469:&#039;&#039;&#039;HealThing&#039;&#039;&#039;(amount, maxhealth)&lt;br /&gt;
:Heals the activator by &#039;&#039;amount&#039;&#039;. &#039;&#039;Maxhealth&#039;&#039; influences maximum health and only affects player activators. For monsters and other objects, the maximum health is always the spawn health. On players, &#039;&#039;maxhealth&#039;&#039; has the following meanings:&lt;br /&gt;
:*If 0, it will heal the player up to the initial health (such as the maximum medikit health in default Doom).&lt;br /&gt;
:*If 1, it will heal the player up to the soulsphere maximum health (in default Doom) or the initial health + 100 (if no soulsphere is defined in current game mode)&lt;br /&gt;
:*Otherwise, it will heal the player up to &#039;&#039;maxhealth&#039;&#039;.&lt;br /&gt;
*227 (480) &#039;&#039;&#039;PointPush_SetForce&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;tid&#039;&#039;, &#039;&#039;amount&#039;&#039;, &#039;&#039;use_line&#039;&#039;)&lt;br /&gt;
:Enables and sets wind for Boom push/pull source things. If &#039;&#039;tag&#039;&#039; is non-zero, it looks for such things inside a tagged sector. Only one push/pull thing will be used for each tagged sector. If &#039;&#039;tag&#039;&#039; is zero, it will enable pushing for things tagged &#039;&#039;tid&#039;&#039;. &#039;&#039;Amount&#039;&#039; is the force, and depending on thing type, it will be attractive or repulsive. If &#039;&#039;use_line&#039;&#039; is 1, it will use the linedef length as amount, not the &#039;&#039;amount&#039;&#039; argument. Either the tagged sector (if &#039;&#039;tag&#039;&#039; is non-zero) or the sectors containing the &#039;&#039;tid&#039;&#039; things must have the Boom generalized wind special.&lt;br /&gt;
&lt;br /&gt;
===Sectors===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Static&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 48 || 482 || yes || [[Sector_Attach3dMidtex]] || line id || optional sector tag || use ceiling || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 54 || 503 || || [[Sector_ChangeFlags]] || tag || setflags || clearflags || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 140 || 495 || || [[Sector_ChangeSound]] || tag || sequence id || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 185 || 470 || || [[Sector_SetRotation]] || tag || floor angle || ceiling angle || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 186 || 472 || || [[Sector_SetCeilingPanning]] || tag || x integer || x fractional || y integer || y fractional&lt;br /&gt;
|-&lt;br /&gt;
|| 187 || 471 || || [[Sector_SetFloorPanning]] || tag || x integer || x fractional || y integer || y fractional&lt;br /&gt;
|-&lt;br /&gt;
|| 190 || 481 || yes || [[Static_Init (sky transfer)]] || tag || 255 || flip sky || ||&lt;br /&gt;
|}&lt;br /&gt;
*470:&#039;&#039;&#039;Sector_SetRotation&#039;&#039;&#039;(tag, floor_angle, ceiling_angle)&lt;br /&gt;
:Sets the floor and ceiling texture rotation of tagged sectors to the given values in degrees (0-360).&lt;br /&gt;
*471:&#039;&#039;&#039;Sector_SetFloorPanning&#039;&#039;&#039;(tag, x_int, x_frac, y_int, y_frac)&lt;br /&gt;
:Sets the floor texture panning of tagged sectors to given X and Y values. A value is calculated as x_int + 0.01 * x_frac.&lt;br /&gt;
*472:&#039;&#039;&#039;Sector_SetCeilingPanning&#039;&#039;&#039;(tag, x_int, x_frac, y_int, y_frac)&lt;br /&gt;
:Same as Sector_SetFloorPanning, but for the ceiling texture.&lt;br /&gt;
*&#039;&#039;&#039;Sector_SetFriction&#039;&#039;&#039;(tag, amount)&lt;br /&gt;
:Sets friction in the target sectors. Those sectors must have the Boom generalized friction special enabled to work. &#039;&#039;Amount&#039;&#039; is an optional argument. If 0, it will use the length of the linedef to specify friction. Otherwise, the friction will be settable by &#039;&#039;amount&#039;&#039;. As a rule, smaller values than 100 mean sludge (high friction) and greater than 100 mean slippery surface (low friction).&lt;br /&gt;
*218 (457) &#039;&#039;&#039;Sector_SetWind&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;strength&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;flags&#039;&#039;)&lt;br /&gt;
:Creates wind in the tagged sectors, which, if Boom-style, must have the wind generalized special set. &#039;&#039;Flags&#039;&#039; can be the sum of the following values:&lt;br /&gt;
:*1: if added, it will cause the wind to be defined by the linedef&#039;s length and direction, instead of the &#039;&#039;strength&#039;&#039; and &#039;&#039;angle&#039;&#039; ([[byte angle]]) parameters;&lt;br /&gt;
:*2: if added, it will use Heretic-style winds, which have a slightly different behavior and scale, and will not require the Boom wind sector special to be set.&lt;br /&gt;
*220 (479) &#039;&#039;&#039;Sector_SetCurrent&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;strength&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;flags&#039;&#039;)&lt;br /&gt;
:Similar to &#039;&#039;&#039;Sector_SetWind&#039;&#039;&#039;, but meant for water flow setup, not air wind.&lt;br /&gt;
&lt;br /&gt;
===Slopes===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 118 || 493 || [[Plane_Copy]] || front floor tag || front ceiling tag || back floor tag || back ceiling tag || share slope&lt;br /&gt;
|-&lt;br /&gt;
|| 181 || 455 || [[Plane_Align]] || floor || ceiling || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Teleportation===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 70 || 444 || [[Teleport]] || tid || sector tag || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 71 || 445 || [[Teleport_NoFog]] || tid || use angle || sector tag || keep height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 215 || 446 || [[Teleport_Line]] || - || dest_id || flip || ||&lt;br /&gt;
|}&lt;br /&gt;
*444:&#039;&#039;&#039;Teleport&#039;&#039;&#039;(tid, sector_tag, reserved)&lt;br /&gt;
:Teleports the activator. Depending on whether &#039;&#039;tid&#039;&#039; or &#039;&#039;sector_tag&#039;&#039; is nonzero, the behavior will be Hexen or Doom compatible. If &#039;&#039;tid&#039;&#039; is zero, then it will teleport like in Doom, into the first teleport destination found on sectors tagged &#039;&#039;sector_tag&#039;&#039;.&lt;br /&gt;
:If &#039;&#039;tid&#039;&#039; is non-zero, it will teleport to one random target thing (doesn&#039;t matter the type) among the ones tagged &#039;&#039;tid&#039;&#039;. If in this case &#039;&#039;sector_tag&#039;&#039; is also non-zero, it will only seek a destination thing located in these tagged sectors. This behavior is based on the Hexen teleporters.&lt;br /&gt;
*445:&#039;&#039;&#039;Teleport_NoFog&#039;&#039;&#039;(tid, use_angle, sector_tag, keep_height)&lt;br /&gt;
:Teleports the activator silently, without fog and without holding it. &#039;&#039;Tid&#039;&#039; and &#039;&#039;sector_tag&#039;&#039; are used the same as in &#039;&#039;&#039;Teleport&#039;&#039;&#039;.&lt;br /&gt;
:&#039;&#039;Use_angle&#039;&#039; sets how the activator angle should be set after teleportation, and can take one of the following values:&lt;br /&gt;
:*0: default Hexen behavior. The thing won&#039;t change its angle at all during teleportation.&lt;br /&gt;
:*1: set thing&#039;s angle to the same angle as the one of the destination spot&lt;br /&gt;
:*2: use Boom&#039;s original, buggy behavior: shift angle &#039;&#039;opposite&#039;&#039; to that of the difference between destination spot&#039;s angle and the line normal&#039;s angle&lt;br /&gt;
:*3: use Boom&#039;s supposedly intended behavior: shift angle by the difference between destination spot&#039;s angle and line normal&#039;s angle.&lt;br /&gt;
:If &#039;&#039;use_angle&#039;&#039; is 2 or 3 and the special is not triggered from a linedef, then it will work like mode 1.&lt;br /&gt;
:&#039;&#039;Keep_height&#039;&#039;: setting this to 1 will make the thing preserve its distance to the floor after teleporting. If it&#039;s 0, the thing will be teleported on the floor, like in Hexen.&lt;br /&gt;
*446:&#039;&#039;&#039;Teleport_Line&#039;&#039;&#039;(reserved, dest_id, flip)&lt;br /&gt;
:Encapsulates the Boom line-teleporting functions. &#039;&#039;Dest_id&#039;&#039; is the tag of the target line. &#039;&#039;Flip&#039;&#039; will cause the user to rotate 180 degrees after teleporting.&lt;br /&gt;
&lt;br /&gt;
===Portals===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 9 || 450 || [[Line_Horizon]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 300 || 492 || [[Portal_Define]] || portal id || type || anchor line id || z parameter || flipped anchor&lt;br /&gt;
|-&lt;br /&gt;
|| 301 || 491 || [[Line_QuickPortal]] || visual-only || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Line_Horizon&#039;&#039;&#039;&lt;br /&gt;
:Simple linedef specials which converts the middle part with a horizon portal which uses front sector&#039;s floor and ceiling.&lt;br /&gt;
*&#039;&#039;&#039;Portal_Define&#039;&#039;&#039;&lt;br /&gt;
:See the [[Portal_Define|linked article]] for its description.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Line_QuickPortal&#039;&#039;&#039;(&#039;&#039;non-interactive&#039;&#039;)&lt;br /&gt;
:Convenience linedef special to quickly create a portal between two areas, through a linedef&#039;s middle part. The two lines must be of equal length, and of opposite angles (if linked/interactive) or any angle if not linked. They must have the same, unique tag and the same &#039;&#039;non-interactive&#039;&#039; value, which is 0 for linked portals and 1 for two-way non-linked portals.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sector_SetPortal&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;type&#039;&#039;, &#039;&#039;plane&#039;&#039;, &#039;&#039;misc&#039;&#039;)&lt;br /&gt;
:&#039;&#039;&#039;Only needed for easily converting old maps with portals&#039;&#039;&#039;. You can skip this part if you&#039;re designing a new UDMF map.&lt;br /&gt;
:Only activates on map starts, this one sets a sector portal on floor and/or ceiling on the &#039;&#039;tag&#039;&#039;ged sectors. See [[Portal]] for visual examples.&lt;br /&gt;
:&#039;&#039;Plane&#039;&#039; can be 0 (display portal on floor), 1 (display portal on ceiling), 2 (display portal on both);&lt;br /&gt;
:&#039;&#039;Type&#039;&#039; can be:&lt;br /&gt;
:*0: anchored portal. This line must correspond to another line named &amp;quot;anchor&amp;quot;, whose first 3 parameters are the same with this one, except that &#039;&#039;misc&#039;&#039; is 0 for the anchor, while the source line has &#039;&#039;misc&#039;&#039; 1.&lt;br /&gt;
:*2: skybox portal. Uses the skybox camera object as a source, and displays the skybox (view of this camera) in tagged sectors.&lt;br /&gt;
:*3: plane portal. Renders the ceiling texture of line&#039;s front sector at a fixed camera distance.&lt;br /&gt;
:*4: horizon portal. Renders the floor and ceiling textures of line&#039;s front sector at relative camera distance, useful for infinite horizontal planes such as seas.&lt;br /&gt;
:*6: linked portal. Interactive anchored portals (through which gameplay passes seamlessly). Has the same rule as anchored portals with regard to anchor lines. Requires consistent offsets if there are multiple linked portals in the map, otherwise linked portals are disabled.&lt;br /&gt;
:&#039;&#039;Type&#039;&#039; can also be used for copying already placed portals:&lt;br /&gt;
:*1: copy the portal from a sector tagged with &#039;&#039;misc&#039;&#039; into the tagged sectors if &#039;&#039;tag&#039;&#039; is nonzero, or to the front sector if &#039;&#039;tag&#039;&#039; is 0.&lt;br /&gt;
:*5: copy the portal from a sector tagged with &#039;&#039;misc&#039;&#039; into the tagged lines if &#039;&#039;tag&#039;&#039; is nonzero, or to the current line if &#039;&#039;tag&#039;&#039; is 0.&lt;br /&gt;
:&#039;&#039;Misc&#039;&#039; has values depending on the &#039;&#039;type&#039;&#039; chosen. It makes sense for anchored and linked portals (with 0 meaning source line, and 1 meaning anchor line) and it also has a meaning for the copy types (1 and 5) where it specifies the tag of the sector with portals to copy.&lt;br /&gt;
&lt;br /&gt;
===Binary format specific===&lt;br /&gt;
*378:&#039;&#039;&#039;Line_SetIdentification&#039;&#039;&#039;(id)&lt;br /&gt;
:Sets the linedef identification number (separate from tag) to &#039;&#039;id&#039;&#039;. Useful for various specials that use the line id. Do not use in UDMF.&lt;br /&gt;
&lt;br /&gt;
===Property transfer===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Static&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 209 || 242 || yes || [[Transfer_Heights]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 210 || 213 || yes || [[Transfer_FloorLight]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 211 || 261 || yes || [[Transfer_CeilingLight]] || tag || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Transfer_FloorLight&#039;&#039;&#039;(tag)&lt;br /&gt;
*&#039;&#039;&#039;Transfer_CeilingLight&#039;&#039;&#039;(tag)&lt;br /&gt;
:These two are the same as the Boom special, but applicable in parameterized namespaces.&lt;br /&gt;
*&#039;&#039;&#039;Transfer_Heights&#039;&#039;&#039;(tag, reserved)&lt;br /&gt;
:This also acts like the Boom special 242. Argument &#039;&#039;reserved&#039;&#039; must be 0.&lt;br /&gt;
*190 (481) &#039;&#039;&#039;Static_Init&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;type&#039;&#039;, &#039;&#039;flip_or_ceiling&#039;&#039;, &#039;&#039;move_type&#039;&#039;)&lt;br /&gt;
:This is a multi-purpose special encapsulating several static specials from MBF and Boom. &#039;&#039;Tag&#039;&#039; is the tag of the target sector(s). &#039;&#039;Type&#039;&#039; can be 255 for MBF sky transfers. If &#039;&#039;flip_or_ceiling&#039;&#039; is 1, the sky will be flipped horizontally. If &#039;&#039;type&#039;&#039; is 255, &#039;&#039;move_type&#039;&#039; must be 0.&lt;br /&gt;
&lt;br /&gt;
===Scrollers===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 100 || 406 || [[Scroll_Texture_Left]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 101 || 407 || [[Scroll_Texture_Right]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 102 || 408 || [[Scroll_Texture_Up]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 103 || 409 || [[Scroll_Texture_Down]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 222 || 485 || [[Scroll_Texture_Model]] || line id || kind || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 223 || 484 || [[Scroll_Floor]] || tag || kind || move things || x || y&lt;br /&gt;
|- &lt;br /&gt;
|| 224 || 483 || [[Scroll_Ceiling]] || tag || kind || - || x || y&lt;br /&gt;
|-&lt;br /&gt;
|| 225 || ExtraData only || [[Scroll_Texture_Offsets]]&lt;br /&gt;
|}&lt;br /&gt;
*223 (484) &#039;&#039;&#039;Scroll_Floor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;kind&#039;&#039;, &#039;&#039;scroll_things&#039;&#039;, &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;)&lt;br /&gt;
*224 (483) &#039;&#039;&#039;Scroll_Ceiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;kind&#039;&#039;, &#039;&#039;unused&#039;&#039;, &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;)&lt;br /&gt;
*222 (485) &#039;&#039;&#039;Scroll_Texture_Model&#039;&#039;&#039;(&#039;&#039;line_id&#039;&#039;, &#039;&#039;kind&#039;&#039;)&lt;br /&gt;
:These specials do standard Boom scrolling. &#039;&#039;Kind&#039;&#039; specifies if it&#039;s a static scroller (0), displacement scroller (1) or accelerative scroller (2), and 4 can be added to it to discard arguments &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; and instead use the linedef&#039;s vertex coordinates do determine the scrolling vector. &#039;&#039;Scroll_things&#039;&#039; only apples for &#039;&#039;&#039;Scroll_Floor&#039;&#039;&#039; and means simple visual scrolling (0), thing movement with static floor (1) or thing movement with floor (2). &#039;&#039;X&#039;&#039; and &#039;&#039;y&#039;&#039; are the velocity components with which to scroll, if &#039;&#039;kind&#039;&#039; is less than 4 (otherwise the line&#039;s size is used).&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Scroll_Texture_Model&#039;&#039;&#039; does wall texture scrolling according to line&#039;s vector relative to the target lines.&lt;br /&gt;
&lt;br /&gt;
===Pushers===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 218 || 457 || [[Sector_SetWind]] || tag || force || angle || flags ||&lt;br /&gt;
|-&lt;br /&gt;
|| 219 || 223 || [[Sector_SetFriction]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 220 || 479 || [[Sector_SetCurrent]] || tag || force || angle || flags || &lt;br /&gt;
|-&lt;br /&gt;
|| 227 || 480 || [[PointPush_SetForce]] || tag || tid || force || use line ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Exits===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 74 || 449 || [[Teleport_NewMap]] || level number || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 75 || 400 || [[Teleport_EndGame]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 179 || 462 || [[ChangeSkill]] || skill || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 243 || 447 || [[Exit_Normal]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 244 || 448 || [[Exit_Secret]] || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*400:&#039;&#039;&#039;Teleport_EndGame&#039;&#039;&#039;&lt;br /&gt;
:Ends the entire game in victory. This triggers the current game&#039;s assigned ending cutscene and the player can only choose to start a new game.&lt;br /&gt;
*447:&#039;&#039;&#039;Exit_Normal&#039;&#039;&#039;(reserved)&lt;br /&gt;
:Exits to a normal destination level. The argument is reserved and must be 0.&lt;br /&gt;
*448:&#039;&#039;&#039;Exit_Secret&#039;&#039;&#039;(reserved)&lt;br /&gt;
:Exits to the secret destination level.  The argument is reserved and must be 0.&lt;br /&gt;
*449:&#039;&#039;&#039;Teleport_NewMap&#039;&#039;&#039;(level_number, reserved, reserved)&lt;br /&gt;
:Exits to the given map.  The last two arguments are reserved and must be 0.&lt;br /&gt;
*462:&#039;&#039;&#039;ChangeSkill&#039;&#039;&#039;(&#039;&#039;skill&#039;&#039;)&lt;br /&gt;
:Changes the current difficulty level, where &#039;&#039;skill&#039;&#039; is from 0 (I&#039;m too young to die) to 4 inclusive (Nightmare!).&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[ACS functions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Editing]]&lt;br /&gt;
[[Category:Editing reference]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Parameterized_linedef_specials&amp;diff=6384</id>
		<title>Parameterized linedef specials</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Parameterized_linedef_specials&amp;diff=6384"/>
		<updated>2025-12-13T09:55:58Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Floor movement, earthquake */ Removed misleading incomplete redundant info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The parameterized linedefs types are Hexen-like action specials with arguments, whose purpose is to be more customizable than the Boom generalized types. When mapping in UDMF, you have to use these parameterized specials instead of the classic parameter-less ones. They&#039;re also used in Hexen format maps (which is necessary when Hexen is going to be supported in Eternity), though Hexen format is not recommended or fully supported for other maps than vanilla Hexen in Eternity. To use parameterized specials in classic (Doom) format maps, provide an [[ExtraData]] lump by attaching it via [[MapInfo|EMAPINFO]] to the map. [[ACS]] scripts can also call parameterized specials. They&#039;re meant to be as compatible as possible with the ZDoom implementation, so minimal changes to zspecial.acs are needed, though Eternity may have extensions of its own. Most likely however the base zspecial.acs is going to be updated for Eternity. Parameters are only limited to 0-255 in the Hexen format (and some specials may have some legacy workarounds for that interval), but otherwise they&#039;re in the normal integer range for other environments (UDMF, ExtraData, ACS). Some specials have never been added to ExtraData, because of their mere purpose being to work under the limits of the Hexen map format.&lt;br /&gt;
&lt;br /&gt;
Each parameterized line special has a name and two associated numbers: one for UDMF, ACS and Hexen formats, and another one for ExtraData support, set this way to avoid conflicts with classic Boom specials (since it&#039;s possible to use their number in the editor instead of the 270 &amp;quot;ExtraData special&amp;quot;). If you only see one number mentioned in the documentation, then it&#039;s the UDMF number (for ExtraData it&#039;s preferred to use the names).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT&#039;&#039;&#039;: all &#039;&#039;reserved&#039;&#039; parameters must be set to 0. Failure to do so will result in your maps being broken in later Eternity versions! Also, for &amp;quot;flag&amp;quot; arguments, do not add or provide other values than in the intended range, for the same reason.&lt;br /&gt;
&lt;br /&gt;
{{Backto|Linedef types}}&lt;br /&gt;
==General info==&lt;br /&gt;
All sector tags, unless otherwise specified, have a special meaning if 0: that means to affect the sector behind the trigger linedef (like regular doors in vanilla Doom).&lt;br /&gt;
&lt;br /&gt;
Thing tags (TIDs) have special meaning for values 0 and negative: 0 means activator, and -1 to -4 mean to affect players 1 to 4 (if present). &#039;&#039;&#039;Consider other negative values reserved&#039;&#039;&#039; and do not use them in your maps.&lt;br /&gt;
==Specials==&lt;br /&gt;
===Doors===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! ExtraData #&lt;br /&gt;
! Name&lt;br /&gt;
! Args&lt;br /&gt;
! Summary&lt;br /&gt;
|-&lt;br /&gt;
|| 10 || 302 || [[Door_Close]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door.&lt;br /&gt;
|-&lt;br /&gt;
|| 11 || 301 || [[Door_Open]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door.&lt;br /&gt;
|-&lt;br /&gt;
|| 12 || 300 || [[Door_Raise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door temporarily.&lt;br /&gt;
|-&lt;br /&gt;
|| 13 || 429 || [[Door_LockedRaise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lock&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a locked door.&lt;br /&gt;
|-&lt;br /&gt;
|| 105 || 304 || [[Door_WaitRaise]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;timeoffset&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Opens a door temporarily after a delay.&lt;br /&gt;
|-&lt;br /&gt;
|| 106 || 305 || [[Door_WaitClose]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;timeoffset&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door after a delay.&lt;br /&gt;
|-&lt;br /&gt;
|| 249 || 303 || [[Door_CloseWaitOpen]] || &#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay_octics&#039;&#039;, &#039;&#039;light_tag&#039;&#039; || Closes a door, waits a bit, then opens it back.&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;tag&#039;&#039;: Tag of sector to affect. If it&#039;s 0, then the sector behind the linedef will be activated, if applicable.&lt;br /&gt;
:&#039;&#039;speed&#039;&#039;: How fast, in eights of units per tic, the door should move. Doom normal doors are as fast as 16, and blazing doors are 64.&lt;br /&gt;
:&#039;&#039;delay&#039;&#039;: Time in tics (1/35 seconds) for the door before it returns to its opposite movement.&lt;br /&gt;
:&#039;&#039;delay_octics&#039;&#039;: Delay, but expressed in octics, which is eighths of second (i.e. 8 octics = 1 second).&lt;br /&gt;
:&#039;&#039;timeoffset&#039;&#039;: Time in tics before the door activates.&lt;br /&gt;
:&#039;&#039;light_tag&#039;&#039;: Sector tag to receive light changes to maximum or minimum neighbor depending on whether the door is closed or opened.&lt;br /&gt;
:&#039;&#039;lock&#039;&#039;: One of the [[lock identifiers]] to specify the key or set of keys.&lt;br /&gt;
&lt;br /&gt;
===Floor movement, earthquake===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! ExtraData #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|| 20 || 318 || [[Floor_LowerByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 21 || 309 || [[Floor_LowerToLowest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 22 || 311 || [[Floor_LowerToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 23 || 317 || [[Floor_RaiseByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 24 || 306 || [[Floor_RaiseToHighest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 25 || 310 || [[Floor_RaiseToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 28 || 451 || [[Floor_RaiseAndCrush]] || tag || speed || crush || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 35 || - || [[Floor_RaiseByValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 36 || - || [[Floor_LowerByValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 37 || 319 || [[Floor_MoveToValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;neg&#039;&#039; || &#039;&#039;change&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 46 || 452 || [[Floor_CrushStop]] || &#039;&#039;tag&#039;&#039; || || || || || Stops crushing floor movement.&lt;br /&gt;
|-&lt;br /&gt;
|| 66 || 321 || [[Floor_LowerInstant]] || &#039;&#039;tag&#039;&#039; || - || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || || Lowers floor instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 67 || 320 || [[Floor_RaiseInstant]] || &#039;&#039;tag&#039;&#039; || - || &#039;&#039;height&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || Raises floor instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 68 || - || [[Floor_MoveToValueTimes8]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;neg&#039;&#039; || &#039;&#039;change&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 120 || 375 || [[Radius_Quake]] || intensity || duration || damage radius || tremor radius || foci tid&lt;br /&gt;
|-&lt;br /&gt;
|| 138 || 397 || [[Floor_Waggle]] || tag || height || speed || offset || timer&lt;br /&gt;
|-&lt;br /&gt;
|| 200 || 464 || [[Generic_Floor]] || tag || speed || height || target || flags || Boom-like generalized floor.&lt;br /&gt;
|-&lt;br /&gt;
|| 228 || 475 || [[Plat_RaiseAndStayTx0]] || tag || speed || lock out || || || Variation of [[Floor_RaiseToNearest]].&lt;br /&gt;
|-&lt;br /&gt;
|| 230 || 476 || [[Plat_UpByValueStayTx]] || tag || speed || height || || || Variation of [[Floor_RaiseByValue]]&lt;br /&gt;
|-&lt;br /&gt;
|| 231 || 487 || [[Plat_ToggleCeiling]] || tag || || || || || Toggles floor between ceiling and initial position.&lt;br /&gt;
|-&lt;br /&gt;
|| 235 || 466 || [[Floor_TransferTrigger]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 236 || 467 || [[Floor_TransferNumeric]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 238 || 312 || [[Floor_RaiseToLowestCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 240 || 315 || [[Floor_RaiseByTexture]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 242 || 416 || [[Floor_LowerToHighest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;adjust&#039;&#039; || &#039;&#039;force_adjust&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 250 || 431 || [[Floor_Donut]] || pillar tag || pillar speed || pool speed || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 256 || 307 || [[Floor_LowerToHighestEE]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 257 || 308 || [[Floor_RaiseToLowest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || || || Instantly lower floor to lowest neighbour.&lt;br /&gt;
|-&lt;br /&gt;
|| 258 || 313 || [[Floor_LowerToLowestCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || || || Lower floor to lowest ceiling.&lt;br /&gt;
|-&lt;br /&gt;
|| 259 || 314 || [[Floor_RaiseToCeiling]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039; || Raise floor to ceiling.&lt;br /&gt;
|-&lt;br /&gt;
|| 260 || 322 || [[Floor_ToCeilingInstant]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;change&#039;&#039; || &#039;&#039;crush&#039;&#039; || &#039;&#039;gap&#039;&#039; || || Raise floor to ceiling instantly.&lt;br /&gt;
|-&lt;br /&gt;
|| 261 || 316 || [[Floor_LowerByTexture]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;change&#039;&#039; || || || Lower floor by shortest lower texture.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Floor_Waggle&#039;&#039;&#039; ( tag, height, speed, offset, timer )&lt;br /&gt;
:This special implements the sinusoidal floor motion from Hexen. Its tag and speed parameters bear similar properties to the other floor specials, but -&lt;br /&gt;
:*height - waggle amplitude in 1/8 units&lt;br /&gt;
:*offset - phase offset; how much to delay the waggle in relation to others (0 to 63, in byte angles)&lt;br /&gt;
:*timer - time in seconds the waggle lasts. Zero means permanent&lt;br /&gt;
*&#039;&#039;&#039;Radius_Quake&#039;&#039;&#039; (intensity, duration, damageradius, quakeradius, tid)&lt;br /&gt;
:This special implements the earthquake effect, centred on the map spot with the given &#039;&#039;tid&#039;&#039;, with user-selectable intensity, duration and separate thing damage radius and tremor radius (both being multiplied with 64).&lt;br /&gt;
*&#039;&#039;&#039;Floor_RaiseAndCrush&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;crush&#039;&#039;)&lt;br /&gt;
:This one is for Hexen compatibility. Please use &#039;&#039;&#039;Floor_RaiseToCeiling&#039;&#039;&#039; or &#039;&#039;&#039;Floor_RaiseToLowestCeiling&#039;&#039;&#039; instead.&lt;br /&gt;
====See also====&lt;br /&gt;
*[[Floor movement classic specials]]: for the Doom format variants.&lt;br /&gt;
&lt;br /&gt;
===Plats, lifts===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|| 60 || 410 || [[Plat_PerpetualRaise]] || tag || speed || delay || || || Perpetual lift with lip of 8&lt;br /&gt;
|-&lt;br /&gt;
|| 61 || 411 || [[Plat_Stop]] || tag || stop_mode || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 62 || 412 || [[Plat_DownWaitUpStay]] || tag || speed || delay || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 63 || 413 || [[Plat_DownByValue]] || tag || speed || delay || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 64 || 414 || [[Plat_UpWaitDownStay]] || tag || speed || delay || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 65 || 415 || [[Plat_UpByValue]] || tag || speed || delay || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 203 || 501 || [[Generic_Lift]] || tag || speed || delay || type || height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 206 || 488 || [[Plat_DownWaitUpStayLip]] || tag || speed || delay || lip ||&lt;br /&gt;
|-&lt;br /&gt;
|| 207 || 489 || [[Plat_PerpetualRaiseLip]] || tag || speed || delay || lip ||&lt;br /&gt;
|}&lt;br /&gt;
*207 (489) &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lip&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039;, but lets you choose a &amp;quot;lip&amp;quot; (distance from lowest adjacent floor to move down to). If &#039;&#039;lip&#039;&#039; is 0, it will work like classic Doom perpetual plats.&lt;br /&gt;
*61 (411) &#039;&#039;&#039;Plat_Stop&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;stop_mode&#039;&#039;)&lt;br /&gt;
:Pauses or stops a perpetual platform from moving. The behavior depends on &#039;&#039;stop_mode&#039;&#039;:&lt;br /&gt;
:*1: the platform will be merely suspended. It will only be retriggerable by other &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039; or &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039; (or in Doom-format maps, by similar specials), continuing from the exact same state it stopped.&lt;br /&gt;
:*2: the platform movement will be stopped at the current position. It will be retriggerable by any other special. If restarted by &#039;&#039;&#039;Plat_PerpetualRaise&#039;&#039;&#039; or &#039;&#039;&#039;Plat_PerpetualRaiseLip&#039;&#039;&#039; it may not remember the last state.&lt;br /&gt;
:*0 (default): will act based on compatibility with current game mode. On Doom/Heretic/Hexen, it will act like mode 1, while in Hexen it will act like mode 2.&lt;br /&gt;
*62 (412) &#039;&#039;&#039;Plat_DownWaitUpStay&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Lowers the plat as a lift to the lowest adjacent floor &#039;&#039;&#039;plus 8 units&#039;&#039;&#039;. Use &#039;&#039;&#039;Plat_DownWaitUpStayLip&#039;&#039;&#039; with 0 lip if you want classic Doom-like lifts.&lt;br /&gt;
*206 (488) &#039;&#039;&#039;Plat_DownWaitUpStayLip&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;lip&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Plat_DownWaitUpStay&#039;&#039;&#039; but with settable &#039;&#039;lip&#039;&#039;.&lt;br /&gt;
*63 (413) &#039;&#039;&#039;Plat_DownByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;height&#039;&#039;)&lt;br /&gt;
:Lowers a lift by an absolute &#039;&#039;height&#039;&#039;, &#039;&#039;&#039;multiplied by 8&#039;&#039;&#039;. It will rise back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*64 (414) &#039;&#039;&#039;Plat_UpWaitDownStay&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Raises a lift to the highest neighbor floor. It will lower back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*65 (415) &#039;&#039;&#039;Plat_UpByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;delay&#039;&#039;, &#039;&#039;height&#039;&#039;)&lt;br /&gt;
:Raises a lift by an absolute &#039;&#039;height&#039;&#039;, &#039;&#039;&#039;multiplied by 8&#039;&#039;&#039;. It will lower back after &#039;&#039;delay&#039;&#039; tics.&lt;br /&gt;
*231 (487) &#039;&#039;&#039;Plat_ToggleCeiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Toggles a floor between the default position and touching the ceiling. It will be left busy after that.&lt;br /&gt;
&lt;br /&gt;
===Elevators===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 95 || 453 || [[FloorAndCeiling_LowerByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 96 || 454 || [[FloorAndCeiling_RaiseByValue]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 245 || 458 || [[Elevator_RaiseToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 246 || 460 || [[Elevator_MoveToFloor]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 247 || 459 || [[Elevator_LowerToNearest]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Ceiling movement===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 38 || 500 || [[Ceiling_Waggle]] || tag || height || speed || offset || timer&lt;br /&gt;
|-&lt;br /&gt;
|| 40 || 336 || [[Ceiling_LowerByValue]] || tag || speed || height || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 41 || 335 || [[Ceiling_RaiseByValue]] || tag || speed || height || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 42 || 432 || [[Ceiling_CrushAndRaise]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 43 || 435 || [[Ceiling_LowerAndCrush]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 44 || 433 || [[Ceiling_CrushStop]] || tag || stop mode || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 45 || 434 || [[Ceiling_CrushRaiseAndStay]] || tag || speed || crush || crush mode ||&lt;br /&gt;
|-&lt;br /&gt;
|| 47 || 337 || [[Ceiling_MoveToValue]] || tag || speed || height || negate || change&lt;br /&gt;
|-&lt;br /&gt;
|| 69 || - || [[Ceiling_MoveToValueTimes8]] || tag || speed || height || negate || change&lt;br /&gt;
|-&lt;br /&gt;
|| 97 || 436 || [[Ceiling_LowerAndCrushDist]] || tag || speed || crush || gap || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 104 || 441 || [[Ceiling_CrushAndRaiseSilentDist]] || tag || gap || speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 168 || 437 || [[Ceiling_CrushAndRaiseDist]] || tag || gap || speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 192 || 330 || [[Ceiling_LowerToHighestFloor]] || tag || speed || change || crush || gap to floor&lt;br /&gt;
|-&lt;br /&gt;
|| 193 || 339 || [[Ceiling_LowerInstant]] || tag || - || height * 8 || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 194 || 338 || [[Ceiling_RaiseInstant]] || tag || - || height * 8 || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 195 || 438 || [[Ceiling_CrushRaiseAndStayA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 196 || 439 || [[Ceiling_CrushAndRaiseA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 197 || 440 || [[Ceiling_CrushAndRaiseSilentA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 198 || - || [[Ceiling_RaiseByValueTimes8]] || tag || speed || height * 8 || change ||&lt;br /&gt;
|-&lt;br /&gt;
|| 199 || - || [[Ceiling_LowerByValueTimes8]] || tag || speed || height * 8 || change || crush&lt;br /&gt;
|-&lt;br /&gt;
|| 201 || 465 || [[Generic_Ceiling]] || tag || speed || height || target || flags&lt;br /&gt;
|-&lt;br /&gt;
|| 205 || 443 || [[Generic_Crusher]] || tag || down speed || up speed || silent || damage&lt;br /&gt;
|-&lt;br /&gt;
|| 252 || 325 || [[Ceiling_RaiseToNearest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 253 || 328 || [[Ceiling_LowerToLowest]] || tag || speed || change || crush ||&lt;br /&gt;
|-&lt;br /&gt;
|| 254 || 332 || [[Ceiling_LowerToFloor]] || tag || speed || change || crush || gap&lt;br /&gt;
|-&lt;br /&gt;
|| 255 || 442 || [[Ceiling_CrushRaiseAndStaySilA]] || tag || down speed || up speed || damage || crush mode&lt;br /&gt;
|-&lt;br /&gt;
|| 262 || 323 || [[Ceiling_RaiseToHighest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 263 || 324 || [[Ceiling_ToHighestInstant]] || tag || change || crush || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 264 || 326 || [[Ceiling_LowerToNearest]] || tag || speed || change || crush ||&lt;br /&gt;
|-&lt;br /&gt;
|| 265 || 327 || [[Ceiling_RaiseToLowest]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 266 || 329 || [[Ceiling_RaiseToHighestFloor]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 267 || 331 || [[Ceiling_ToFloorInstant]] || tag || change || crush || gap ||&lt;br /&gt;
|-&lt;br /&gt;
|| 268 || 333 || [[Ceiling_RaiseByTexture]] || tag || speed || change || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 269 || 334 || [[Ceiling_LowerByTexture]] || tag || speed || change || crush ||&lt;br /&gt;
|}&lt;br /&gt;
*323:&#039;&#039;&#039;Ceiling_RaiseToHighest&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*324:&#039;&#039;&#039;Ceiling_ToHighestInstant&#039;&#039;&#039;    ( tag, change, crush                )&lt;br /&gt;
*325:&#039;&#039;&#039;Ceiling_RaiseToNearest&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*326:&#039;&#039;&#039;Ceiling_LowerToNearest&#039;&#039;&#039;      ( tag, speed, change, crush         )&lt;br /&gt;
*327:&#039;&#039;&#039;Ceiling_RaiseToLowest&#039;&#039;&#039;       ( tag, speed, change                )&lt;br /&gt;
*328:&#039;&#039;&#039;Ceiling_LowerToLowest&#039;&#039;&#039;       ( tag, speed, change, crush         )&lt;br /&gt;
*329:&#039;&#039;&#039;Ceiling_RaiseToHighestFloor&#039;&#039;&#039; ( tag, speed, change                )&lt;br /&gt;
*330:&#039;&#039;&#039;Ceiling_LowerToHighestFloor&#039;&#039;&#039; ( tag, speed, change, crush, gap    )&lt;br /&gt;
*331:&#039;&#039;&#039;Ceiling_ToFloorInstant&#039;&#039;&#039;      ( tag, change, crush, gap           )&lt;br /&gt;
*332:&#039;&#039;&#039;Ceiling_LowerToFloor&#039;&#039;&#039;        ( tag, speed, change, crush, gap    )&lt;br /&gt;
*333:&#039;&#039;&#039;Ceiling_RaiseByTexture&#039;&#039;&#039;      ( tag, speed, change                )&lt;br /&gt;
*334:&#039;&#039;&#039;Ceiling_LowerByTexture&#039;&#039;&#039;      ( tag, speed, change, crush         )&lt;br /&gt;
*335:&#039;&#039;&#039;Ceiling_RaiseByValue&#039;&#039;&#039;        ( tag, speed, height, change        )&lt;br /&gt;
*336:&#039;&#039;&#039;Ceiling_LowerByValue&#039;&#039;&#039;        ( tag, speed, height, change, crush )&lt;br /&gt;
*337:&#039;&#039;&#039;Ceiling_MoveToValue&#039;&#039;&#039;         ( tag, speed, height, change, crush )&lt;br /&gt;
*338:&#039;&#039;&#039;Ceiling_RaiseInstant&#039;&#039;&#039;        ( tag, height, change               )&lt;br /&gt;
*339:&#039;&#039;&#039;Ceiling_LowerInstant&#039;&#039;&#039;        ( tag, height, change, crush        )&lt;br /&gt;
:Values for these specials:&lt;br /&gt;
:*tag: Tag of the sector(s) to affect. A tag of zero means to affect the sector on the second side of the line.&lt;br /&gt;
:*speed: Speed of ceiling in eighths of a unit per tic.&lt;br /&gt;
:*change: This parameter takes the following values:&lt;br /&gt;
::0 : No texture or type change.&lt;br /&gt;
::1 : Copy texture, zero type; trigger model.&lt;br /&gt;
::2 : Copy texture, zero type; numeric model.&lt;br /&gt;
::3 : Copy texture, preserve type; trigger model.&lt;br /&gt;
::4 : Copy texture, preserve type; numeric model.&lt;br /&gt;
::5 : Copy texture and type; trigger model.&lt;br /&gt;
::6 : Copy texture and type; numeric model.&lt;br /&gt;
:*crush: Amount of crushing damage ceiling inflicts at each crushing event (when gametic % 4 = 0). If this amount is less than or equal to zero, no crushing damage is done.&lt;br /&gt;
:*height: An integer number of units, either the amount to move the floor by or the exact z coordinate to move the floor toward. Negative numbers are valid for the latter case.&lt;br /&gt;
:*gap: Distance to keep from the destination. Useful if crush is nonzero&lt;br /&gt;
*465:&#039;&#039;&#039;Generic_Ceiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;height&#039;&#039;, &#039;&#039;target&#039;&#039;, &#039;&#039;flag&#039;&#039;)&lt;br /&gt;
:See &#039;&#039;&#039;Generic_Floor&#039;&#039;&#039; for an explanation of parameters.&lt;br /&gt;
&lt;br /&gt;
====Crushing ceilings====&lt;br /&gt;
There are some crushing ceilings available now. Some originate from Hexen while others are extensions from ZDoom. ZDoom compatibility is considered where relevant. For all specials where it applies, &#039;&#039;crushmode&#039;&#039; can take one of these values:&lt;br /&gt;
*0: compatibility. Act like it would do in ZDoom. This means that in Doom the crusher keeps pushing into the things it crushes, while in Hexen it stays on position while dealing damage. And if the game is Doom, the special has &amp;quot;Dist&amp;quot; in the name and the speed is set to 8, it will also slow down to speed 1 when crushing.&lt;br /&gt;
*1: Doom mode without slowdown. Same as classic Doom&#039;s fast crushers.&lt;br /&gt;
*2: Hexen mode. It will rest in position while crushing.&lt;br /&gt;
*3: Doom mode with slowdown. Same as classic Doom&#039;s slow crushers. Currently the crushing speed is hardcoded to 1.&lt;br /&gt;
The specials are the following. Take care that Ceiling_CrushAndRaise is mainly for Hexen compatibility: it will rise at half the speed it lowers. For Doom-like crushers use Ceiling_CrushAndRaiseA (all &amp;quot;A&amp;quot; crushers let you specify the rising speed) or Ceiling_CrushAndRaiseDist (all &amp;quot;Dist&amp;quot; crushers rise at the same speed as they lower, but instead let you specify the gap size to the ground). Finally, Generic_Crusher aims to act like the Boom crushers, having the following particularities: it will slow down when crushing if speed is less than 24, and it will be totally silent if specified in the parameter (won&#039;t even make clunk noises).&lt;br /&gt;
*432: Ceiling_CrushAndRaise(tag, speed, damage, crushmode)&lt;br /&gt;
*439: Ceiling_CrushAndRaiseA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*440: Ceiling_CrushAndRaiseSilentA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*437: Ceiling_CrushAndRaiseDist(tag, ground_distance, speed, damage, crushmode)&lt;br /&gt;
*441: Ceiling_CrushAndRaiseSilentDist(tag, ground_distance, speed, damage, crushmode)&lt;br /&gt;
*434: Ceiling_CrushAndRaiseAndStay(tag, speed, damage, crushmode)&lt;br /&gt;
*438: Ceiling_CrushAndRaiseAndStayA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*442: Ceiling_CrushAndRaiseAndStaySilA(tag, down_speed, up_speed, damage, crushmode)&lt;br /&gt;
*435: Ceiling_LowerAndCrush(tag, speed, damage, crushmode)&lt;br /&gt;
*436: Ceiling_LowerAndCrushDist(tag, speed, damage, ground_distance, crushmode)&lt;br /&gt;
*433: Ceiling_CrushStop(tag, stop_mode)&lt;br /&gt;
:*stop_mode can be: 0 (compatibility), 1 (Doom: pause crusher), 2 (Hexen: remove crusher and release the ceiling)&lt;br /&gt;
*443: Generic_Crusher(tag, down_speed, up_speed, silent, damage)&lt;br /&gt;
&lt;br /&gt;
===Stair building===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 204 || 502 || [[Generic_Stairs]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;height&#039;&#039; || &#039;&#039;flags&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 217 || 340 || [[Stairs_BuildUpDoom]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;delay&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 270 || 341 || [[Stairs_BuildDownDoom]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;delay&#039;&#039; || &#039;&#039;reset&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| 271 || 342 || [[Stairs_BuildUpDoomSync]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;reset&#039;&#039; ||&lt;br /&gt;
|-&lt;br /&gt;
|| 272 || 343 || [[Stairs_BuildDownDoomSync]] || &#039;&#039;tag&#039;&#039; || &#039;&#039;speed&#039;&#039; || &#039;&#039;stepsize&#039;&#039; || &#039;&#039;reset&#039;&#039; ||&lt;br /&gt;
|}&lt;br /&gt;
 ------------------------------------------------------------------------------ &lt;br /&gt;
 * Synchronized stairs have each step move at a different speed so that all the&lt;br /&gt;
   steps reach the destination height at the same time. This stair building&lt;br /&gt;
   style is only available with these parameterized line types. &lt;br /&gt;
 &lt;br /&gt;
 Values&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 tag       : Tag of first sector to raise or lower as a step.&lt;br /&gt;
             When the stair building method is DOOM, subsequent&lt;br /&gt;
             steps are found by searching across two-sided&lt;br /&gt;
             lines where the first side belongs to the current&lt;br /&gt;
             sector and the floor texture is the same. The&lt;br /&gt;
             Hexen stair building method is not yet supported.&lt;br /&gt;
 speed     : Speed of steps in eights of a unit per tic. If the&lt;br /&gt;
             build style is synchronized, only the first step&lt;br /&gt;
             moves at this speed. Other steps will move at a&lt;br /&gt;
             speed which allows them to reach their &lt;br /&gt;
             destination height at the same time.&lt;br /&gt;
 stepsize  : Step size in units.&lt;br /&gt;
 delay     : Delay time in tics between steps&lt;br /&gt;
 reset     : If greater than zero, the stairs will wait this&lt;br /&gt;
             amount of time in tics after completely building&lt;br /&gt;
             and will then reset by repeating the same stair&lt;br /&gt;
             building action but in the reverse direction. If&lt;br /&gt;
             zero, the stairs will never reset.&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
===Polyobjects===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 1 || 348 || [[Polyobj_StartLine]] || id || mirror id || sound sequence || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 2 || 356 || [[Polyobj_RotateLeft]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 3 || 354 || [[Polyobj_RotateRight]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 4 || 352 || [[Polyobj_Move]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 5 || 349 || [[Polyobj_ExplicitLine]] || id || line index || mirror id || sound sequence ||&lt;br /&gt;
|-&lt;br /&gt;
|| 6 || - || [[Polyobj_MoveTimes8]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 7 || 351 || [[Polyobj_DoorSwing]] || id || speed || rotation || delay ||&lt;br /&gt;
|-&lt;br /&gt;
|| 8 || 350 || [[Polyobj_DoorSlide]] || id || speed || angle || distance || delay&lt;br /&gt;
|-&lt;br /&gt;
|| 59 || 499 || [[Polyobj_OR_MoveToSpot]] || id || speed || [[TID]] || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 86 || 496 || [[Polyobj_MoveToSpot]] || id || speed || [[TID]] || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 87 || 474 || [[Polyobj_Stop]] || id || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 88 || 497 || [[Polyobj_MoveTo]] || id || speed || x || y ||&lt;br /&gt;
|-&lt;br /&gt;
|| 89 || 498 || [[Polyobj_OR_MoveTo]] || id || speed || x || y ||&lt;br /&gt;
|-&lt;br /&gt;
|| 90 || 357 || [[Polyobj_OR_RotateLeft]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 91 || 355 || [[Polyobj_OR_RotateRight]] || id || speed || rotation || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 92 || 353 || [[Polyobj_OR_Move]] || id || speed || angle || distance ||&lt;br /&gt;
|-&lt;br /&gt;
|| 93 || - || [[Polyobj_OR_MoveTimes8]] || id || speed || angle || distance ||&lt;br /&gt;
|}&lt;br /&gt;
*1 (348) &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;mirror_id&#039;&#039;, &#039;&#039;sequence_id&#039;&#039;)&lt;br /&gt;
*5 (349) &#039;&#039;&#039;Polyobj_ExplicitLine(&#039;&#039;id&#039;&#039;, &#039;&#039;linenum&#039;&#039;, &#039;&#039;mirror_id&#039;&#039;, &#039;&#039;sequence_id&#039;&#039;)&lt;br /&gt;
:There are two different methods of creating a polyobject. In the first, the &amp;quot;first&amp;quot; line is given the &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039; special, and subsequent lines are added to the PolyObject by following segs from vertex to vertex. To use this, all the lines around the polyobject must run in the same direction, and the last line must end at the same vertex which starts the first line (in other words, it must be closed).&lt;br /&gt;
&lt;br /&gt;
:With the second method, every line to be included must be given the &#039;&#039;&#039;Polyobj_ExplicitLine&#039;&#039;&#039; special and must be given a &#039;&#039;linenum&#039;&#039; param which is unique amongst all lines that will added to that polyobject. Polyobjects of this sort should also be closed for proper rendering, but the game engine cannot and will not verify that this is the case.&lt;br /&gt;
   &lt;br /&gt;
:Only polyobjects created with the &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039; method can have other line specials on the polyobject&#039;s lines themselves. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;Mirror_id&#039;&#039; is the ID number of a PolyObject that wants to mirror every action that this PolyObject makes. This number cannot refer to the self-same PolyObject, nor should PolyObjects attempt to mirror each other in a cycle since this will create problems with override actions. Angle of motion is always reversed when applying an action to a mirroring PolyObject. If a mirror is already in motion for a non-override action, the mirror will not be affected even if the main object was moved. Mirror polyobjects can themselves define a mirror, and an action will affect all mirroring polyobjects in the chain.&lt;br /&gt;
*4 (352) &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Slides a polyobject in the direction given in &#039;&#039;angle&#039;&#039; by &#039;&#039;distance&#039;&#039;.&lt;br /&gt;
*6 &#039;&#039;&#039;Polyobj_MoveTimes8&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039; but with &#039;&#039;distance&#039;&#039; multiplied by 8. Needed only for the Hexen format and supported for legacy reasons.&lt;br /&gt;
*2 (356) &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Rotates a polyobject counterclockwise by the &#039;&#039;distance&#039;&#039; [[byte angle]] difference. If &#039;&#039;distance&#039;&#039; is 0, it means 360 degrees. If &#039;&#039;distance&#039;&#039; is 255, it means perpetual spinning.&lt;br /&gt;
*3 (354) &#039;&#039;&#039;Polyobj_RotateRight&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Rotates a polyobject clockwise by the &#039;&#039;distance&#039;&#039; [[byte angle]] difference. If &#039;&#039;distance&#039;&#039; is 0, it means 360 degrees. If &#039;&#039;distance&#039;&#039; is 255, it means perpetual spinning.&lt;br /&gt;
*92 (353) &#039;&#039;&#039;Polyobj_OR_Move&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_Move&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*93 &#039;&#039;&#039;Polyobj_OR_MoveTimes8&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_MoveTimes8&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*90 (357) &#039;&#039;&#039;Polyobj_OR_RotateLeft&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*91 (355) &#039;&#039;&#039;Polyobj_OR_RotateRight&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;)&lt;br /&gt;
:Like &#039;&#039;&#039;Polyobj_RotateRight&#039;&#039;&#039;, but overrides the current movement.&lt;br /&gt;
*8 (350) &#039;&#039;&#039;Polyobj_DoorSlide&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;distance&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Slides a polyobject like a door which closes after a &#039;&#039;delay&#039;&#039; and deflects if it gets jammed.&lt;br /&gt;
*7 (351) &#039;&#039;&#039;Polyobj_DoorSwing&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;distance&#039;&#039;, &#039;&#039;delay&#039;&#039;)&lt;br /&gt;
:Swings a polyobject like a door which closes after a &#039;&#039;delay&#039;&#039; and deflects if it gets jammed. There are no special behaviors for setting &#039;&#039;distance&#039;&#039; to 0 or 255, unlike &#039;&#039;&#039;Polyobj_RotateLeft&#039;&#039;&#039; and derivatives.&lt;br /&gt;
*87 (474) &#039;&#039;&#039;Polyobj_Stop&#039;&#039;&#039;(&#039;&#039;id&#039;&#039;)&lt;br /&gt;
:Stops a polyobject from movement. It will then be free for other activations.&lt;br /&gt;
&lt;br /&gt;
===Pillar building===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 29 || 362 || [[Pillar_Build]] || tag || speed || height || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 30 || 364 || [[Pillar_Open]] || tag || speed || floor dist || ceil dist ||&lt;br /&gt;
|-&lt;br /&gt;
|| 94 || 363 || [[Pillar_BuildAndCrush]] || tag || speed || height || damage ||&lt;br /&gt;
|-&lt;br /&gt;
|| 251 || 468 || [[FloorAndCeiling_LowerRaise]] || tag || floor speed || ceiling speed || Boom emulation ||&lt;br /&gt;
|}&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 #    Function                            ExtraData Name&lt;br /&gt;
 &lt;br /&gt;
 362  Build pillar                        Pillar_Build&lt;br /&gt;
 363  Build pillar and crush              Pillar_BuildAndCrush&lt;br /&gt;
 364  Open pillar                         Pillar_Open &lt;br /&gt;
 &lt;br /&gt;
 Parameters&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 Pillar_Build                  tag, speed, height&lt;br /&gt;
 Pillar_BuildAndCrush          tag, speed, height, crush&lt;br /&gt;
 Pillar_Open                   tag, speed, fdist, cdist&lt;br /&gt;
 &lt;br /&gt;
 Values&lt;br /&gt;
 ---------------------------------------------------------------&lt;br /&gt;
 tag       : Tag of sector to close or open as a pillar. For the&lt;br /&gt;
             action to succeed, neither surface may have an &lt;br /&gt;
             action running on it already. If the tag is zero,&lt;br /&gt;
             the sector on the backside of a 2S line with this&lt;br /&gt;
             special will be used.&lt;br /&gt;
 speed     : Speed of the surface with the greatest distance to&lt;br /&gt;
             move in eights of a unit per tic. The other surface&lt;br /&gt;
             will move at a speed which causes it to reach its&lt;br /&gt;
             destination at the same time.&lt;br /&gt;
 height    : For Build and BuildAndCrush types, this is the &lt;br /&gt;
             height relative to the floor where the floor and &lt;br /&gt;
             ceiling should meet. If this value is zero, the &lt;br /&gt;
             floor and ceiling will meet exactly half-way.&lt;br /&gt;
 crush     : For BuildAndCrush type only, this specifies the &lt;br /&gt;
             amount of damage to inflict per crush event.&lt;br /&gt;
 fdist     : For Open type only, this is the distance the floor&lt;br /&gt;
             should move down. If this value is zero, the floor&lt;br /&gt;
             will move to its lowest neighboring floor.&lt;br /&gt;
 cdist     : For Open type only, this is the distance the&lt;br /&gt;
             ceiling should move up. If this value is zero, the&lt;br /&gt;
             ceiling will move to its highest neighboring &lt;br /&gt;
             ceiling.          &lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
*[[FloorAndCeiling_LowerRaise]]&lt;br /&gt;
&lt;br /&gt;
===ACS Scripts===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 80 || 365 || [[ACS_Execute]] || script || map || arg1 || arg2 || arg3&lt;br /&gt;
|-&lt;br /&gt;
|| 81 || 366 || [[ACS_Suspend]] || script || map || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 82 || 367 || [[ACS_Terminate]] || script || map || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 83 || 430 || [[ACS_LockedExecute]] || script || map || arg1 || arg2 || lock id&lt;br /&gt;
|-&lt;br /&gt;
|| 84 || 420 || [[ACS_ExecuteWithResult]] || script || arg1 || arg2 || arg3 || arg4&lt;br /&gt;
|-&lt;br /&gt;
|| 85 || 490 || [[ACS_LockedExecuteDoor]] || script || map || arg1 || arg2 || lock id&lt;br /&gt;
|-&lt;br /&gt;
|| 226 || 477 || [[ACS_ExecuteAlways]] || script || map || arg1 || arg2 || arg3&lt;br /&gt;
|}&lt;br /&gt;
{{zdoomwiki}}&lt;br /&gt;
Eternity supports ACS script calling.&lt;br /&gt;
*365:&#039;&#039;&#039;ACS_Execute&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg0&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;)&lt;br /&gt;
:Executes the specified script. A map value of zero indicates that the script is on the current map. If the script is on a different map, then the execution of the script will be delayed until the player enters the map that contains it. Only one copy of a script can be running at a time when started with this special. &lt;br /&gt;
:If the specified script was previously executed but then suspended, then execution will begin at the point immediately after where it was suspended instead of starting over again at the beginning.&lt;br /&gt;
:The number of usable arguments is limited to 3.&lt;br /&gt;
*477:&#039;&#039;&#039;ACS_ExecuteAlways&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg0&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;)&lt;br /&gt;
:Same as ACS_Execute, but will not be blocked if an instance of &#039;&#039;scriptnum&#039;&#039; is already running.&lt;br /&gt;
*366:&#039;&#039;&#039;ACS_Suspend&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;)&lt;br /&gt;
:Suspends execution of a script until an ACS_Execute special resumes it.&lt;br /&gt;
*367:&#039;&#039;&#039;ACS_Terminate&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;)&lt;br /&gt;
:Terminates the script.&lt;br /&gt;
*430:&#039;&#039;&#039;ACS_LockedExecute&#039;&#039;&#039;(&#039;&#039;scriptnum&#039;&#039;, &#039;&#039;mapnum&#039;&#039;, &#039;&#039;arg1&#039;&#039;, &#039;&#039;arg2&#039;&#039;, &#039;&#039;lock&#039;&#039;) &#039;&#039;(since Feb 25 2016)&#039;&#039;&lt;br /&gt;
:This one executes a script that requires the player to have a key or more. See [[Lock identifiers]] for info on what to put for the &#039;&#039;lock&#039;&#039; argument.&lt;br /&gt;
&lt;br /&gt;
===Lights===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 110 || 368 || [[Light_RaiseByValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 111 || 369 || [[Light_LowerByValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 112 || 370 || [[Light_ChangeToValue]] || tag || level || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 113 || 371 || [[Light_Fade]] || tag || dest value || tics || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 114 || 372 || [[Light_Glow]] || tag || max || min || tics ||&lt;br /&gt;
|-&lt;br /&gt;
|| 115 || 373 || [[Light_Flicker]] || tag || max || min || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 116 || 374 || [[Light_Strobe]] || tag || max value || min value || max time || min time&lt;br /&gt;
|-&lt;br /&gt;
|| 232 || 463 || [[Light_StrobeDoom]] || tag || max time || min time || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 233 || 473 || [[Light_MinNeighbor]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 234 || 461 || [[Light_MaxNeighbor]] || &#039;&#039;tag&#039;&#039; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
If &#039;&#039;tag&#039;&#039; is 0, any such parameterized special will affect the sector behind the linedef, if applicable.&lt;br /&gt;
* &#039;&#039;&#039;Light_MinNeighbor&#039;&#039;&#039; sets the lights in tagged sectors to their minimum neighbors&#039; values.&lt;br /&gt;
* &#039;&#039;&#039;Light_MaxNeighbor&#039;&#039;&#039; sets the lights in tagged sectors to their maximum neighbors&#039; values.&lt;br /&gt;
&lt;br /&gt;
Eternity supports the following light level controlling parameterized linedef specials. If &#039;&#039;tag&#039;&#039; is 0, any such parameterized special will affect the sector behind the linedef, if applicable.&lt;br /&gt;
*368:&#039;&#039;&#039;Light_RaiseByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Adds the &#039;&#039;lvl&#039;&#039; value to the light levels of tagged sectors, capping them to 255. &lt;br /&gt;
*369:&#039;&#039;&#039;Light_LowerByValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Substracts the &#039;&#039;lvl&#039;&#039; value from the light levels of tagged sectors, limiting them to 0.&lt;br /&gt;
*370:&#039;&#039;&#039;Light_ChangeToValue&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;lvl&#039;&#039;)&lt;br /&gt;
:Sets the &#039;&#039;lvl&#039;&#039; value for the light level of tagged sectors, and caps it between 0 and 255 inclusive.&lt;br /&gt;
*371:&#039;&#039;&#039;Light_Fade&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;destvalue&#039;&#039;, &#039;&#039;tics&#039;&#039;)&lt;br /&gt;
:Makes the light level of tagged sectors gradually go to &#039;&#039;destvalue&#039;&#039;, for the given amount of tics. &#039;&#039;tics&#039;&#039; must be greater than 0.&lt;br /&gt;
*372:&#039;&#039;&#039;Light_Glow&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;, &#039;&#039;tics&#039;&#039;)&lt;br /&gt;
:Enables periodic glowing light effect on tagged sectors. &#039;&#039;tics&#039;&#039; is the duration between the extreme light levels and must be positive. The sequence starts by fading down.&lt;br /&gt;
*373:&#039;&#039;&#039;Light_Flicker&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;)&lt;br /&gt;
:Enables flickering light effect on tagged sectors.&lt;br /&gt;
*374:&#039;&#039;&#039;Light_Strobe&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxval&#039;&#039;, &#039;&#039;minval&#039;&#039;, &#039;&#039;maxtime&#039;&#039;, &#039;&#039;mintime&#039;&#039;)&lt;br /&gt;
:Enables strobing light effect on tagged sectors. Light will periodically flash, staying at &#039;&#039;maxval&#039;&#039; level for &#039;&#039;maxtime&#039;&#039; tics and at &#039;&#039;minval&#039;&#039; level for &#039;&#039;mintime&#039;&#039; tics.&lt;br /&gt;
*463:&#039;&#039;&#039;Light_StrobeDoom&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;maxtime&#039;&#039;, &#039;&#039;mintime&#039;&#039;)&lt;br /&gt;
:Enables strobing light effect on tagged sectors, using Doom&#039;s logic of choosing the minimum and maximum light levels.&lt;br /&gt;
*473:&#039;&#039;&#039;Light_MinNeighbor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Sets the lights in tagged sectors to their minimum neighbors&#039; values&lt;br /&gt;
*461:&#039;&#039;&#039;Light_MaxNeighbor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;)&lt;br /&gt;
:Sets the lights in tagged sectors to their maximum neighbors&#039; values&lt;br /&gt;
&lt;br /&gt;
===Things===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 17 || 422 || [[Thing_Raise]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 19 || 423 || [[Thing_Stop]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 72 || 424 || [[ThrustThing]] || angle || speed || - || tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 73 || 426 || [[DamageThing]] || damage || mod || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 119 || 427 || [[Thing_Damage]] || tid || damage || mod || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 128 || 425 || [[ThrustThingZ]] || tid || speed || up or down || set or add ||&lt;br /&gt;
|-&lt;br /&gt;
|| 130 || 404 || [[Thing_Activate]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 131 || 405 || [[Thing_Deactivate]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 132 || 478 || [[Thing_Remove]] || tid || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 133 || 428 || [[Thing_Destroy]] || tid || - || sector tag || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 134 || 402 || [[Thing_Projectile]] || tid || type || angle || speed || vertical speed&lt;br /&gt;
|-&lt;br /&gt;
|| 135 || 398 || [[Thing_Spawn]] || tid || type || angle || new_tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 136 || 403 || [[Thing_ProjectileGravity]] || tid || type || angle || speed || vertical speed&lt;br /&gt;
|-&lt;br /&gt;
|| 137 || 399 || [[Thing_SpawnNoFog]] || tid || type || angle || new_tid ||&lt;br /&gt;
|-&lt;br /&gt;
|| 176 || 421 || [[Thing_ChangeTID]] || oldtid || newtid || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 248 || 469 || [[HealThing]] || amount || max health || || ||&lt;br /&gt;
|}&lt;br /&gt;
*402:&#039;&#039;&#039;Thing_Projectile&#039;&#039;&#039;(tid, type, angle, speed, verticalspeed)&lt;br /&gt;
:Throws a projectile from a map spot. Can also be used to throw a flying monster. Like in Thing_Spawn, &#039;&#039;type&#039;&#039; is an &#039;&#039;&#039;acs_spawndata num&#039;&#039;&#039;. Note that &#039;&#039;speed&#039;&#039; and &#039;&#039;verticalspeed&#039;&#039; are in eighths (units per 8 tics). Up is positive for &#039;&#039;verticalspeed&#039;&#039;.&lt;br /&gt;
*403:&#039;&#039;&#039;Thing_ProjectileGravity&#039;&#039;&#039;(tid, type, angle, speed, verticalspeed)&lt;br /&gt;
:Same as above, but the thrown projectile or monster will be subject to gravity.&lt;br /&gt;
*421:&#039;&#039;&#039;Thing_ChangeTID&#039;&#039;&#039;(oldtid, newtid) &#039;&#039;(since Nov 14 2015)&#039;&#039;&lt;br /&gt;
:Sets the TID of all things which currently have &#039;&#039;oldtid&#039;&#039; to the value &#039;&#039;newtid&#039;&#039;. If &#039;&#039;oldtid&#039;&#039; is zero, it will change the TID of the activator.&lt;br /&gt;
*426:&#039;&#039;&#039;DamageThing&#039;&#039;&#039;(damage, mod) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Damages the activator. &#039;&#039;Mod&#039;&#039; is a means-of-death ([[damagetype]]), which can be used for custom obituaries and damage resistances. If &#039;&#039;damage&#039;&#039; is 0, it will actually do 10000 (gibbing) damage.&lt;br /&gt;
*427:&#039;&#039;&#039;Thing_Damage&#039;&#039;&#039;(tid, damage, mod) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Same as &#039;&#039;&#039;DamageThing&#039;&#039;&#039;, but with the possibility to select TID (where 0 will mean the activator). It&#039;s done this way for ZDoom compatibility. Unlike &#039;&#039;&#039;DamageThing&#039;&#039;&#039;, it will not cause 10000 damage if &#039;&#039;damage&#039;&#039; is 0.&lt;br /&gt;
*428:&#039;&#039;&#039;Thing_Destroy&#039;&#039;&#039;(tid, reserved, sectortag) &#039;&#039;(since Feb 24 2016)&#039;&#039;&lt;br /&gt;
:Causes 10000 damage to all things tagged &#039;&#039;tid&#039;&#039;. Beware that, in accordance to Hexen, &#039;&#039;tid&#039;&#039; 0 will NOT affect the activator; for that use &#039;&#039;&#039;DamageThing&#039;&#039;&#039;. &#039;&#039;Reserved&#039;&#039; must be set to 0. &#039;&#039;Sectortag&#039;&#039; can be used to only kill things inside sectors with given tag.&lt;br /&gt;
*478:&#039;&#039;&#039;Thing_Remove&#039;&#039;&#039;(tid)&lt;br /&gt;
:Directly removes objects tagged &#039;&#039;tid&#039;&#039; from the game.&lt;br /&gt;
*469:&#039;&#039;&#039;HealThing&#039;&#039;&#039;(amount, maxhealth)&lt;br /&gt;
:Heals the activator by &#039;&#039;amount&#039;&#039;. &#039;&#039;Maxhealth&#039;&#039; influences maximum health and only affects player activators. For monsters and other objects, the maximum health is always the spawn health. On players, &#039;&#039;maxhealth&#039;&#039; has the following meanings:&lt;br /&gt;
:*If 0, it will heal the player up to the initial health (such as the maximum medikit health in default Doom).&lt;br /&gt;
:*If 1, it will heal the player up to the soulsphere maximum health (in default Doom) or the initial health + 100 (if no soulsphere is defined in current game mode)&lt;br /&gt;
:*Otherwise, it will heal the player up to &#039;&#039;maxhealth&#039;&#039;.&lt;br /&gt;
*227 (480) &#039;&#039;&#039;PointPush_SetForce&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;tid&#039;&#039;, &#039;&#039;amount&#039;&#039;, &#039;&#039;use_line&#039;&#039;)&lt;br /&gt;
:Enables and sets wind for Boom push/pull source things. If &#039;&#039;tag&#039;&#039; is non-zero, it looks for such things inside a tagged sector. Only one push/pull thing will be used for each tagged sector. If &#039;&#039;tag&#039;&#039; is zero, it will enable pushing for things tagged &#039;&#039;tid&#039;&#039;. &#039;&#039;Amount&#039;&#039; is the force, and depending on thing type, it will be attractive or repulsive. If &#039;&#039;use_line&#039;&#039; is 1, it will use the linedef length as amount, not the &#039;&#039;amount&#039;&#039; argument. Either the tagged sector (if &#039;&#039;tag&#039;&#039; is non-zero) or the sectors containing the &#039;&#039;tid&#039;&#039; things must have the Boom generalized wind special.&lt;br /&gt;
&lt;br /&gt;
===Sectors===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Static&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 48 || 482 || yes || [[Sector_Attach3dMidtex]] || line id || optional sector tag || use ceiling || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 54 || 503 || || [[Sector_ChangeFlags]] || tag || setflags || clearflags || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 140 || 495 || || [[Sector_ChangeSound]] || tag || sequence id || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 185 || 470 || || [[Sector_SetRotation]] || tag || floor angle || ceiling angle || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 186 || 472 || || [[Sector_SetCeilingPanning]] || tag || x integer || x fractional || y integer || y fractional&lt;br /&gt;
|-&lt;br /&gt;
|| 187 || 471 || || [[Sector_SetFloorPanning]] || tag || x integer || x fractional || y integer || y fractional&lt;br /&gt;
|-&lt;br /&gt;
|| 190 || 481 || yes || [[Static_Init (sky transfer)]] || tag || 255 || flip sky || ||&lt;br /&gt;
|}&lt;br /&gt;
*470:&#039;&#039;&#039;Sector_SetRotation&#039;&#039;&#039;(tag, floor_angle, ceiling_angle)&lt;br /&gt;
:Sets the floor and ceiling texture rotation of tagged sectors to the given values in degrees (0-360).&lt;br /&gt;
*471:&#039;&#039;&#039;Sector_SetFloorPanning&#039;&#039;&#039;(tag, x_int, x_frac, y_int, y_frac)&lt;br /&gt;
:Sets the floor texture panning of tagged sectors to given X and Y values. A value is calculated as x_int + 0.01 * x_frac.&lt;br /&gt;
*472:&#039;&#039;&#039;Sector_SetCeilingPanning&#039;&#039;&#039;(tag, x_int, x_frac, y_int, y_frac)&lt;br /&gt;
:Same as Sector_SetFloorPanning, but for the ceiling texture.&lt;br /&gt;
*&#039;&#039;&#039;Sector_SetFriction&#039;&#039;&#039;(tag, amount)&lt;br /&gt;
:Sets friction in the target sectors. Those sectors must have the Boom generalized friction special enabled to work. &#039;&#039;Amount&#039;&#039; is an optional argument. If 0, it will use the length of the linedef to specify friction. Otherwise, the friction will be settable by &#039;&#039;amount&#039;&#039;. As a rule, smaller values than 100 mean sludge (high friction) and greater than 100 mean slippery surface (low friction).&lt;br /&gt;
*218 (457) &#039;&#039;&#039;Sector_SetWind&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;strength&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;flags&#039;&#039;)&lt;br /&gt;
:Creates wind in the tagged sectors, which, if Boom-style, must have the wind generalized special set. &#039;&#039;Flags&#039;&#039; can be the sum of the following values:&lt;br /&gt;
:*1: if added, it will cause the wind to be defined by the linedef&#039;s length and direction, instead of the &#039;&#039;strength&#039;&#039; and &#039;&#039;angle&#039;&#039; ([[byte angle]]) parameters;&lt;br /&gt;
:*2: if added, it will use Heretic-style winds, which have a slightly different behavior and scale, and will not require the Boom wind sector special to be set.&lt;br /&gt;
*220 (479) &#039;&#039;&#039;Sector_SetCurrent&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;strength&#039;&#039;, &#039;&#039;angle&#039;&#039;, &#039;&#039;flags&#039;&#039;)&lt;br /&gt;
:Similar to &#039;&#039;&#039;Sector_SetWind&#039;&#039;&#039;, but meant for water flow setup, not air wind.&lt;br /&gt;
&lt;br /&gt;
===Slopes===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 118 || 493 || [[Plane_Copy]] || front floor tag || front ceiling tag || back floor tag || back ceiling tag || share slope&lt;br /&gt;
|-&lt;br /&gt;
|| 181 || 455 || [[Plane_Align]] || floor || ceiling || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Teleportation===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 70 || 444 || [[Teleport]] || tid || sector tag || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 71 || 445 || [[Teleport_NoFog]] || tid || use angle || sector tag || keep height ||&lt;br /&gt;
|-&lt;br /&gt;
|| 215 || 446 || [[Teleport_Line]] || - || dest_id || flip || ||&lt;br /&gt;
|}&lt;br /&gt;
*444:&#039;&#039;&#039;Teleport&#039;&#039;&#039;(tid, sector_tag, reserved)&lt;br /&gt;
:Teleports the activator. Depending on whether &#039;&#039;tid&#039;&#039; or &#039;&#039;sector_tag&#039;&#039; is nonzero, the behavior will be Hexen or Doom compatible. If &#039;&#039;tid&#039;&#039; is zero, then it will teleport like in Doom, into the first teleport destination found on sectors tagged &#039;&#039;sector_tag&#039;&#039;.&lt;br /&gt;
:If &#039;&#039;tid&#039;&#039; is non-zero, it will teleport to one random target thing (doesn&#039;t matter the type) among the ones tagged &#039;&#039;tid&#039;&#039;. If in this case &#039;&#039;sector_tag&#039;&#039; is also non-zero, it will only seek a destination thing located in these tagged sectors. This behavior is based on the Hexen teleporters.&lt;br /&gt;
*445:&#039;&#039;&#039;Teleport_NoFog&#039;&#039;&#039;(tid, use_angle, sector_tag, keep_height)&lt;br /&gt;
:Teleports the activator silently, without fog and without holding it. &#039;&#039;Tid&#039;&#039; and &#039;&#039;sector_tag&#039;&#039; are used the same as in &#039;&#039;&#039;Teleport&#039;&#039;&#039;.&lt;br /&gt;
:&#039;&#039;Use_angle&#039;&#039; sets how the activator angle should be set after teleportation, and can take one of the following values:&lt;br /&gt;
:*0: default Hexen behavior. The thing won&#039;t change its angle at all during teleportation.&lt;br /&gt;
:*1: set thing&#039;s angle to the same angle as the one of the destination spot&lt;br /&gt;
:*2: use Boom&#039;s original, buggy behavior: shift angle &#039;&#039;opposite&#039;&#039; to that of the difference between destination spot&#039;s angle and the line normal&#039;s angle&lt;br /&gt;
:*3: use Boom&#039;s supposedly intended behavior: shift angle by the difference between destination spot&#039;s angle and line normal&#039;s angle.&lt;br /&gt;
:If &#039;&#039;use_angle&#039;&#039; is 2 or 3 and the special is not triggered from a linedef, then it will work like mode 1.&lt;br /&gt;
:&#039;&#039;Keep_height&#039;&#039;: setting this to 1 will make the thing preserve its distance to the floor after teleporting. If it&#039;s 0, the thing will be teleported on the floor, like in Hexen.&lt;br /&gt;
*446:&#039;&#039;&#039;Teleport_Line&#039;&#039;&#039;(reserved, dest_id, flip)&lt;br /&gt;
:Encapsulates the Boom line-teleporting functions. &#039;&#039;Dest_id&#039;&#039; is the tag of the target line. &#039;&#039;Flip&#039;&#039; will cause the user to rotate 180 degrees after teleporting.&lt;br /&gt;
&lt;br /&gt;
===Portals===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 9 || 450 || [[Line_Horizon]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 300 || 492 || [[Portal_Define]] || portal id || type || anchor line id || z parameter || flipped anchor&lt;br /&gt;
|-&lt;br /&gt;
|| 301 || 491 || [[Line_QuickPortal]] || visual-only || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Line_Horizon&#039;&#039;&#039;&lt;br /&gt;
:Simple linedef specials which converts the middle part with a horizon portal which uses front sector&#039;s floor and ceiling.&lt;br /&gt;
*&#039;&#039;&#039;Portal_Define&#039;&#039;&#039;&lt;br /&gt;
:See the [[Portal_Define|linked article]] for its description.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Line_QuickPortal&#039;&#039;&#039;(&#039;&#039;non-interactive&#039;&#039;)&lt;br /&gt;
:Convenience linedef special to quickly create a portal between two areas, through a linedef&#039;s middle part. The two lines must be of equal length, and of opposite angles (if linked/interactive) or any angle if not linked. They must have the same, unique tag and the same &#039;&#039;non-interactive&#039;&#039; value, which is 0 for linked portals and 1 for two-way non-linked portals.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Sector_SetPortal&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;type&#039;&#039;, &#039;&#039;plane&#039;&#039;, &#039;&#039;misc&#039;&#039;)&lt;br /&gt;
:&#039;&#039;&#039;Only needed for easily converting old maps with portals&#039;&#039;&#039;. You can skip this part if you&#039;re designing a new UDMF map.&lt;br /&gt;
:Only activates on map starts, this one sets a sector portal on floor and/or ceiling on the &#039;&#039;tag&#039;&#039;ged sectors. See [[Portal]] for visual examples.&lt;br /&gt;
:&#039;&#039;Plane&#039;&#039; can be 0 (display portal on floor), 1 (display portal on ceiling), 2 (display portal on both);&lt;br /&gt;
:&#039;&#039;Type&#039;&#039; can be:&lt;br /&gt;
:*0: anchored portal. This line must correspond to another line named &amp;quot;anchor&amp;quot;, whose first 3 parameters are the same with this one, except that &#039;&#039;misc&#039;&#039; is 0 for the anchor, while the source line has &#039;&#039;misc&#039;&#039; 1.&lt;br /&gt;
:*2: skybox portal. Uses the skybox camera object as a source, and displays the skybox (view of this camera) in tagged sectors.&lt;br /&gt;
:*3: plane portal. Renders the ceiling texture of line&#039;s front sector at a fixed camera distance.&lt;br /&gt;
:*4: horizon portal. Renders the floor and ceiling textures of line&#039;s front sector at relative camera distance, useful for infinite horizontal planes such as seas.&lt;br /&gt;
:*6: linked portal. Interactive anchored portals (through which gameplay passes seamlessly). Has the same rule as anchored portals with regard to anchor lines. Requires consistent offsets if there are multiple linked portals in the map, otherwise linked portals are disabled.&lt;br /&gt;
:&#039;&#039;Type&#039;&#039; can also be used for copying already placed portals:&lt;br /&gt;
:*1: copy the portal from a sector tagged with &#039;&#039;misc&#039;&#039; into the tagged sectors if &#039;&#039;tag&#039;&#039; is nonzero, or to the front sector if &#039;&#039;tag&#039;&#039; is 0.&lt;br /&gt;
:*5: copy the portal from a sector tagged with &#039;&#039;misc&#039;&#039; into the tagged lines if &#039;&#039;tag&#039;&#039; is nonzero, or to the current line if &#039;&#039;tag&#039;&#039; is 0.&lt;br /&gt;
:&#039;&#039;Misc&#039;&#039; has values depending on the &#039;&#039;type&#039;&#039; chosen. It makes sense for anchored and linked portals (with 0 meaning source line, and 1 meaning anchor line) and it also has a meaning for the copy types (1 and 5) where it specifies the tag of the sector with portals to copy.&lt;br /&gt;
&lt;br /&gt;
===Binary format specific===&lt;br /&gt;
*378:&#039;&#039;&#039;Line_SetIdentification&#039;&#039;&#039;(id)&lt;br /&gt;
:Sets the linedef identification number (separate from tag) to &#039;&#039;id&#039;&#039;. Useful for various specials that use the line id. Do not use in UDMF.&lt;br /&gt;
&lt;br /&gt;
===Property transfer===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Static&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 209 || 242 || yes || [[Transfer_Heights]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 210 || 213 || yes || [[Transfer_FloorLight]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 211 || 261 || yes || [[Transfer_CeilingLight]] || tag || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*&#039;&#039;&#039;Transfer_FloorLight&#039;&#039;&#039;(tag)&lt;br /&gt;
*&#039;&#039;&#039;Transfer_CeilingLight&#039;&#039;&#039;(tag)&lt;br /&gt;
:These two are the same as the Boom special, but applicable in parameterized namespaces.&lt;br /&gt;
*&#039;&#039;&#039;Transfer_Heights&#039;&#039;&#039;(tag, reserved)&lt;br /&gt;
:This also acts like the Boom special 242. Argument &#039;&#039;reserved&#039;&#039; must be 0.&lt;br /&gt;
*190 (481) &#039;&#039;&#039;Static_Init&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;type&#039;&#039;, &#039;&#039;flip_or_ceiling&#039;&#039;, &#039;&#039;move_type&#039;&#039;)&lt;br /&gt;
:This is a multi-purpose special encapsulating several static specials from MBF and Boom. &#039;&#039;Tag&#039;&#039; is the tag of the target sector(s). &#039;&#039;Type&#039;&#039; can be 255 for MBF sky transfers. If &#039;&#039;flip_or_ceiling&#039;&#039; is 1, the sky will be flipped horizontally. If &#039;&#039;type&#039;&#039; is 255, &#039;&#039;move_type&#039;&#039; must be 0.&lt;br /&gt;
&lt;br /&gt;
===Scrollers===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 100 || 406 || [[Scroll_Texture_Left]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 101 || 407 || [[Scroll_Texture_Right]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 102 || 408 || [[Scroll_Texture_Up]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 103 || 409 || [[Scroll_Texture_Down]] || amount || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 222 || 485 || [[Scroll_Texture_Model]] || line id || kind || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 223 || 484 || [[Scroll_Floor]] || tag || kind || move things || x || y&lt;br /&gt;
|- &lt;br /&gt;
|| 224 || 483 || [[Scroll_Ceiling]] || tag || kind || - || x || y&lt;br /&gt;
|-&lt;br /&gt;
|| 225 || ExtraData only || [[Scroll_Texture_Offsets]]&lt;br /&gt;
|}&lt;br /&gt;
*223 (484) &#039;&#039;&#039;Scroll_Floor&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;kind&#039;&#039;, &#039;&#039;scroll_things&#039;&#039;, &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;)&lt;br /&gt;
*224 (483) &#039;&#039;&#039;Scroll_Ceiling&#039;&#039;&#039;(&#039;&#039;tag&#039;&#039;, &#039;&#039;kind&#039;&#039;, &#039;&#039;unused&#039;&#039;, &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;)&lt;br /&gt;
*222 (485) &#039;&#039;&#039;Scroll_Texture_Model&#039;&#039;&#039;(&#039;&#039;line_id&#039;&#039;, &#039;&#039;kind&#039;&#039;)&lt;br /&gt;
:These specials do standard Boom scrolling. &#039;&#039;Kind&#039;&#039; specifies if it&#039;s a static scroller (0), displacement scroller (1) or accelerative scroller (2), and 4 can be added to it to discard arguments &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; and instead use the linedef&#039;s vertex coordinates do determine the scrolling vector. &#039;&#039;Scroll_things&#039;&#039; only apples for &#039;&#039;&#039;Scroll_Floor&#039;&#039;&#039; and means simple visual scrolling (0), thing movement with static floor (1) or thing movement with floor (2). &#039;&#039;X&#039;&#039; and &#039;&#039;y&#039;&#039; are the velocity components with which to scroll, if &#039;&#039;kind&#039;&#039; is less than 4 (otherwise the line&#039;s size is used).&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Scroll_Texture_Model&#039;&#039;&#039; does wall texture scrolling according to line&#039;s vector relative to the target lines.&lt;br /&gt;
&lt;br /&gt;
===Pushers===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 218 || 457 || [[Sector_SetWind]] || tag || force || angle || flags ||&lt;br /&gt;
|-&lt;br /&gt;
|| 219 || 223 || [[Sector_SetFriction]] || tag || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 220 || 479 || [[Sector_SetCurrent]] || tag || force || angle || flags || &lt;br /&gt;
|-&lt;br /&gt;
|| 227 || 480 || [[PointPush_SetForce]] || tag || tid || force || use line ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Exits===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! UDMF #&lt;br /&gt;
! DOOM Format #&lt;br /&gt;
! Name&lt;br /&gt;
! Arg1&lt;br /&gt;
! Arg2&lt;br /&gt;
! Arg3&lt;br /&gt;
! Arg4&lt;br /&gt;
! Arg5&lt;br /&gt;
|-&lt;br /&gt;
|| 74 || 449 || [[Teleport_NewMap]] || level number || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 75 || 400 || [[Teleport_EndGame]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 179 || 462 || [[ChangeSkill]] || skill || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 243 || 447 || [[Exit_Normal]] || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| 244 || 448 || [[Exit_Secret]] || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
*400:&#039;&#039;&#039;Teleport_EndGame&#039;&#039;&#039;&lt;br /&gt;
:Ends the entire game in victory. This triggers the current game&#039;s assigned ending cutscene and the player can only choose to start a new game.&lt;br /&gt;
*447:&#039;&#039;&#039;Exit_Normal&#039;&#039;&#039;(reserved)&lt;br /&gt;
:Exits to a normal destination level. The argument is reserved and must be 0.&lt;br /&gt;
*448:&#039;&#039;&#039;Exit_Secret&#039;&#039;&#039;(reserved)&lt;br /&gt;
:Exits to the secret destination level.  The argument is reserved and must be 0.&lt;br /&gt;
*449:&#039;&#039;&#039;Teleport_NewMap&#039;&#039;&#039;(level_number, reserved, reserved)&lt;br /&gt;
:Exits to the given map.  The last two arguments are reserved and must be 0.&lt;br /&gt;
*462:&#039;&#039;&#039;ChangeSkill&#039;&#039;&#039;(&#039;&#039;skill&#039;&#039;)&lt;br /&gt;
:Changes the current difficulty level, where &#039;&#039;skill&#039;&#039; is from 0 (I&#039;m too young to die) to 4 inclusive (Nightmare!).&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[ACS functions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Editing]]&lt;br /&gt;
[[Category:Editing reference]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=List_of_maps_and_mods_made_for_Eternity&amp;diff=6382</id>
		<title>List of maps and mods made for Eternity</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=List_of_maps_and_mods_made_for_Eternity&amp;diff=6382"/>
		<updated>2025-12-07T11:01:30Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Maps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of maps and mods designed to work with Eternity. They&#039;re either exclusively for Eternity or made to work both with Eternity and another advanced port (e.g. ZDoom). All the Boom-compatible wads are not listed here. &lt;br /&gt;
&lt;br /&gt;
NOTE: the list may be incomplete, check if anything new was added in the meantime.&lt;br /&gt;
==Maps==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|| [https://www.doomworld.com/idgames/levels/doom2/Ports/a-c/cc-cod Caverns of Darkness] || Chaos Crew ([https://doomwiki.org/wiki/Caverns_of_Darkness Doom wiki link]) || &#039;&#039;&#039;actually uses a modified version of old DOS Eternity.&#039;&#039;&#039; You can load it with DOSBox or similar emulators, but you may need extra setup.&lt;br /&gt;
|-&lt;br /&gt;
||[https://www.doomworld.com/forum/topic/111787-cubic-worlds-wip-a-mapset-for-eternity-with-original-music-6-maps-done/ Cubic Worlds] || [[Doom Wiki:stewboy|stewboy]] ||&lt;br /&gt;
|-&lt;br /&gt;
||[https://www.doomworld.com/idgames/levels/doom2/Ports/p-r/rf_kerkr De Kerker (The Dungeon)] || ravage ||&lt;br /&gt;
|-&lt;br /&gt;
||[https://doomwiki.org/wiki/DOOM_PSX:_Damnation_of_Eternity Doom PSX: Damnation of Eternity] || [https://doomwiki.org/wiki/Andrey_Skochko_(DRON12261) Andrey Skochko] ||&lt;br /&gt;
|-&lt;br /&gt;
||[https://www.doomworld.com/idgames/levels/doom/Ports/j-l/lostepis Doom: The Lost Episode] || [[Doom Wiki:Xaser|Xaser]] et al. || designed for ZDoom and Eternity.&lt;br /&gt;
|-&lt;br /&gt;
||[https://www.doomworld.com/forum/topic/122483-dread-moon-map02-released/ Dread Moon]||Gwarl||&lt;br /&gt;
|-&lt;br /&gt;
||[https://www.doomworld.com/idgames/levels/doom2/Ports/megawads/dsv4_rvltinE DSV Episode 4: The Revolution]|| [[Doom Wiki:Samuel Villarreal|Samuel Villarreal]] et al. || &#039;&#039;&#039;does not work with modern Eternity&#039;&#039;&#039; due to using FraggleScript)&lt;br /&gt;
|-&lt;br /&gt;
||[https://www.doomworld.com/forum/topic/120175-heartland-an-episode-for-the-eternity-engine-rc2-out-lots-of-bugfixes/ Heartland] || [[Doom Wiki:skillsaw|skillsaw]] ||&lt;br /&gt;
|-&lt;br /&gt;
||[https://www.doomworld.com/forum/topic/117985-in-search-eternity-engine-map-demo/ In search] || [[Doom Wiki:Misty|Misty]] ||&lt;br /&gt;
|-&lt;br /&gt;
||[https://www.doomworld.com/idgames/levels/doom2/Ports/g-i/igaite It goes away in the end] || Misty ||&lt;br /&gt;
|-&lt;br /&gt;
||[https://www.doomworld.com/forum/topic/123344-light-pollution-a-map-for-the-eternity-engine-update/ Light Pollution]|| NokturnuS ||&lt;br /&gt;
|-&lt;br /&gt;
||[https://www.doomworld.com/idgames/levels/doom2/Ports/d-f/e2l11 Maniac Ridge] || [[Doom Wiki:Max Waine (Altazimuth)|Max &amp;quot;Altazimuth&amp;quot; Waine]] ||&lt;br /&gt;
|-&lt;br /&gt;
||[https://doomwiki.org/wiki/MAYhem_2023 MAYhem 2023] || various || [https://doomwiki.org/wiki/James_Caldwell_(Obsidian) James Caldwell] maintainer&lt;br /&gt;
|-&lt;br /&gt;
||[https://www.doomworld.com/idgames/levels/doom2/Ports/m-o/mothership Mothership] || Albatross ||&lt;br /&gt;
|-&lt;br /&gt;
||[https://www.doomworld.com/idgames/levels/doom2/Ports/m-o/opf Ogro Power Facility] || Stephen &amp;quot;[[Doom Wiki:SoM|SoM]]&amp;quot; McGranahan ||&lt;br /&gt;
|-&lt;br /&gt;
||[https://www.doomworld.com/idgames/levels/doom2/Ports/s-u/solid solid.pke] || [[Doom Wiki:anotak|anotak]] ||&lt;br /&gt;
|-&lt;br /&gt;
||[https://www.doomworld.com/forum/topic/122115-megawad-tarnsmans-projectile-hell-rcf/ Tarnsman&#039;s Projectile Hell]||Tarnsman||&lt;br /&gt;
|-&lt;br /&gt;
||[https://doomwiki.org/wiki/Testing_Pool Testing Pool] || [https://doomwiki.org/wiki/Zan-zan-zawa-veia Zan-zan-zawa-veia] ||&lt;br /&gt;
|-&lt;br /&gt;
||Vaporware Demo: [http://esselfortium.net/wasd/vaprdemo.zip direct download link] || [[Doom wiki:esselfortium|esselfortium]] ||&lt;br /&gt;
|-&lt;br /&gt;
||[https://www.doomworld.com/idgames/levels/doom/Ports/v-z/wastevat Waste Vats] || stewboy ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mods==&lt;br /&gt;
*[https://www.doomworld.com/idgames/combos/e_bskull The beta lost soul]: &#039;&#039;&#039;redundant now&#039;&#039;&#039; because the beta lost soul is included with Eternity.&lt;br /&gt;
*[https://www.doomworld.com/forum/topic/114640-colander-10-interloper-released/ Colander] by _sink&lt;br /&gt;
*[https://www.doomworld.com/idgames/combos/swad SWAD Pack 1: Stock CounterStrike Weapons]&lt;br /&gt;
*[https://www.doomworld.com/idgames/combos/swad2 SWAD Pack 2: Custom CounterStrike Weapons]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=WeaponMeleeAttack&amp;diff=6379</id>
		<title>WeaponMeleeAttack</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=WeaponMeleeAttack&amp;diff=6379"/>
		<updated>2025-10-11T18:48:27Z</updated>

		<summary type="html">&lt;p&gt;Printz: Created page with &amp;quot;{{codepointer|description=Generic weapon melee attack, from MBF21. |usage=&amp;#039;&amp;#039;&amp;#039;A_WeaponMeleeAttack&amp;#039;&amp;#039;&amp;#039;(&amp;#039;&amp;#039;baseDamage&amp;#039;&amp;#039;, &amp;#039;&amp;#039;randomMultiplier&amp;#039;&amp;#039;, &amp;#039;&amp;#039;berserkMultiplier&amp;#039;&amp;#039;, &amp;#039;&amp;#039;hitSound&amp;#039;&amp;#039;, &amp;#039;&amp;#039;range&amp;#039;&amp;#039;) |parameters= * &amp;#039;&amp;#039;baseDamage&amp;#039;&amp;#039;: base damage of attack; if not set, defaults to 2 * &amp;#039;&amp;#039;randomMultiplier&amp;#039;&amp;#039;: attack damage random multiplier; if not set, defaults to 10 * &amp;#039;&amp;#039;berserkMultiplier&amp;#039;&amp;#039;: berserk damage multiplier; if not set, defaults to 1.0 * &amp;#039;&amp;#039;hitSound&amp;#039;&amp;#039;: sound index to play if at...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{codepointer|description=Generic weapon melee attack, from [[MBF21]].&lt;br /&gt;
|usage=&#039;&#039;&#039;A_WeaponMeleeAttack&#039;&#039;&#039;(&#039;&#039;baseDamage&#039;&#039;, &#039;&#039;randomMultiplier&#039;&#039;, &#039;&#039;berserkMultiplier&#039;&#039;, &#039;&#039;hitSound&#039;&#039;, &#039;&#039;range&#039;&#039;)&lt;br /&gt;
|parameters=&lt;br /&gt;
* &#039;&#039;baseDamage&#039;&#039;: base damage of attack; if not set, defaults to 2&lt;br /&gt;
* &#039;&#039;randomMultiplier&#039;&#039;: attack damage random multiplier; if not set, defaults to 10&lt;br /&gt;
* &#039;&#039;berserkMultiplier&#039;&#039;: berserk damage multiplier; if not set, defaults to 1.0&lt;br /&gt;
* &#039;&#039;hitSound&#039;&#039;: sound index to play if attack hits&lt;br /&gt;
* &#039;&#039;range&#039;&#039; attack range; if not set, defaults to player mobj&#039;s melee range property&lt;br /&gt;
|examples=&lt;br /&gt;
This is an example for a &amp;quot;plasma lance&amp;quot; which deals damage and noise like the plasma shot (5-40) at double range, but only has 2x berserk multiplication (because it is farther from the berserker&#039;s body).&lt;br /&gt;
  Fire:&lt;br /&gt;
    LANC B 4&lt;br /&gt;
    LANC C 4 A_WeaponMeleeAttack(5, 8, 2.0, &amp;quot;firxpl&amp;quot;, 128.0)&lt;br /&gt;
    LANC D 5&lt;br /&gt;
    LANC C 4&lt;br /&gt;
    LANC B 5 A_ReFire&lt;br /&gt;
    goto Ready&lt;br /&gt;
|notes=This is the [[MBF21]] standard implementation equivalent of [[CustomPlayerMelee]]. Check that function too for feature comparison.&lt;br /&gt;
|seealso=&lt;br /&gt;
*[[CustomPlayerMelee]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=List_of_codepointers&amp;diff=6378</id>
		<title>List of codepointers</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=List_of_codepointers&amp;diff=6378"/>
		<updated>2025-10-11T18:40:22Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Parameterized */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This &#039;&#039;&#039;list of codepointers&#039;&#039;&#039; is a list of all the action routines which can be performed by [[thingtype|things]] from [[EDF]] [[frame]]s. They are common for all games, so for example Heretic codepointers can be used in Doom.&lt;br /&gt;
&lt;br /&gt;
You can specify the codepointers with or without their internal A_ prefix, even inside [[DECORATE state syntax]]. For simplicity, they will be referred in this wiki without the prefix.&lt;br /&gt;
&lt;br /&gt;
Note that some codepointers, inherited from MBF, use the &#039;&#039;&#039;misc1&#039;&#039;&#039; and &#039;&#039;&#039;misc2&#039;&#039;&#039; frame properties, instead of the more general &#039;&#039;&#039;args&#039;&#039;&#039; list. Side effects aside, this also means that in the DECORATE syntax they will have to use the &#039;&#039;&#039;offset&#039;&#039;&#039;(&#039;&#039;misc1&#039;&#039;, &#039;&#039;misc2&#039;&#039;) specifier. They all have DECORATE-friendly equivalents however.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; Do not provide more nonzero arguments to the codepointers than specified in the reference. Doing so may break forward compatibility with versions of Eternity that implement new functionality to codepointers.&lt;br /&gt;
&lt;br /&gt;
{{backto|EDF state reference}}&lt;br /&gt;
{{backto|Eternity Engine}}&lt;br /&gt;
&lt;br /&gt;
==Player guns==&lt;br /&gt;
===Weapon maintenance===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[CheckAmmo]]||MBF21 ammo check against value||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[CheckReload]]||Super shotgun reload check.||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[CheckReloadEx]]||Extended version of [[CheckReload]] that allows counter comparison.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[ConsumeAmmo]]||MBF21 codepointer to use ammo||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[GunFlash]]||Produces a gun flash sprite without firing anything at the current moment.||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[GunFlashTo]]||Generic weapon muzzle flash||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[JumpIfNoAmmo]]||Jumps to a state if ammo is gone.||ZDoom&lt;br /&gt;
|-&lt;br /&gt;
||[[Light0]]||Resets the gun flash light level.||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[Light1]]||Sets the gun flash light level to 1.||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[Light2]]||Sets the gun flash light level to 2.||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[Lower]]||Action during a weapon&#039;s lowering sequence.||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[Raise]]||Action during a weapon&#039;s raise sequence.||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[ReFire]]||Skip frame if shooting is sustained (e.g. for plasma rifle&#039;s cooldown effect).||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[RefireTo]]||Change to a given frame if shooting is sustained||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[SubtractAmmo]]||Consumes one ammo unit without firing.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[WeaponAlert]]||Alerts monsters from the weapon frame||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[WeaponReady]]||Action during a weapon&#039;s idle sequence.||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[WeaponSound]]||Play sound from a weapon frame.||MBF21&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Player attacks===&lt;br /&gt;
====Classic Doom====&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! Specifics&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[BFGsound]]||Plays the BFG charge-up sound effect.||BFG||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[CloseShotgun2]]||Plays the super shotgun closing sound effect. Also includes [[ReFire]].||Super shotgun||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[FireBFG]]||BFG9000 attack.||BFG||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[FireCGun]]||Chaingun attack.||||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[FireMissile]]||Rocket launcher attack.||||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[FireOldBFG]]||Alpha Doom BFG attack (made available since [[MBF]]).||||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[FirePistol]]||Pistol attack.||||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[FirePlasma]]||Plasma rifle attack.||||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[FireShotgun]]||Shotgun attack.||||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[FireShotgun2]]||Super shotgun attack.||Super shotgun||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[LoadShotgun2]]||Plays the super shotgun loading sound effect.||Super shotgun||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[OpenShotgun2]]||Plays the super shotgun opening sound effect.||Super shotgun||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[Punch]]||Fist attack.||||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[Saw]]||Chainsaw attack.||||Doom&lt;br /&gt;
|}&lt;br /&gt;
====Classic Heretic====&lt;br /&gt;
These exist to support the vanilla Doom and Heretic player attacks.&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[FireBlasterPL1]]||Dragon claw attack.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[FireBlasterPL2]]||Dragon claw powered attack.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[FireCrossbowPL1]]||Ethereal crossbow attack.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[FireCrossbowPL2]]||Ethereal crossbow attack with Tome of Power.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[FireGoldWandPL1]]||Elven wand attack.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[FireGoldWandPL2]]||Elven wand attack with Tome of Power.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[FireMacePL1]]||Fire mace attack.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[FireMacePL2]]||Fire mace attack with Tome of Power.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[FirePhoenixPL1]]||[[Doom Wiki:Phoenix Rod|Phoenix Rod]] attack.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[FirePhoenixPL2]]||Phoenix rod attack with Tome of Power.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[FireSkullRodPL1]]||[[Doom Wiki:Hellstaff|Hellstaff]] attack.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[FireSkullRodPL2]]||[[Doom Wiki:Hellstaff|Hellstaff]] attack with Tome of Power.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[GauntletAttack]]||Gauntlets of the Necromancer attack.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[InitPhoenixPL2]]||Heretic Tome of Power Phoenix Rod startup.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[StaffAttackPL1]]||Heretic staff.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[StaffAttackPL2]]||Heretic powered staff||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[ViewThrust]]||Heretic beak thrust||Heretic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Parameterized====&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[CustomPlayerMelee]]||Configurable player melee attack.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[EjectCasing]]||Used for the effect of throwing casing.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[FireCustomBullets]]||Configurable player bullet (hitscan) attack.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[FirePlayerMissile]]||Configurable player projectile attack.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[PlayerThunk]]||{{deprecated}} Run monster-specific codepointers as weapon actions.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[WeaponBulletAttack]]||Generic weapon hitscan attack||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[WeaponMeleeAttack]]||Generic weapon melee attack||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[WeaponProjectile]]||Generic weapon projectile attack||MBF21&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Weapon frame scripting===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[PlayerStartScript]]||Starts map script, as from a player weapon.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[WeaponCopyCtr]]||Copy counter value to another counter.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[WeaponCtrOp]]||Computer operation between two counters, storing result into another counter.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[WeaponCtrJump]]||Change to a given state, based on a counter&#039;s value.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[WeaponCtrSwitch]]||Change to a state from a given list, depending on a counter&#039;s value.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[WeaponJump]]||Weapon frame compatible random frame change||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[WeaponSetCtr]]||Assign value to a counter.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[WeaponSetTics]]||Set weapon frame duration.||Eternity 4.4.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Map objects==&lt;br /&gt;
===Simple movement===&lt;br /&gt;
These operations perform simple effects on thing&#039;s direction, position or velocity. The available codepointers are:&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[Face]]||Face a specified angle.||MBF&lt;br /&gt;
|-&lt;br /&gt;
||[[Stop]]||Set velocity to 0.||MBF beta emulation&lt;br /&gt;
|-&lt;br /&gt;
||[[Turn]]||Turn around by a specified angle.||MBF&lt;br /&gt;
|-&lt;br /&gt;
||[[TurnProjectile]]||Turn around and update velocity to direction.||Eternity 4.2.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Explosions and flames===&lt;br /&gt;
====BFG9000====&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[BFG11KHit]]||[[SMMU]] BFG variant.||SMMU&lt;br /&gt;
|-&lt;br /&gt;
||[[BFGBurst]]||Produces a burst of smaller plasma projectiles.||MagDOOM by Cephaler&lt;br /&gt;
|-&lt;br /&gt;
||[[BFGSpray]]||Original Doom BFG explosion damage-inflicting afterglow.||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[BouncingBFG]]||SMMU bouncing BFG.||SMMU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====DOOM 2 Final boss====&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[BrainExplode]]||Brain perpetual explosion controller.||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[BrainScream]]||Giant demon wall explosion sequence.||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[SpawnFly]]||Spawn cube controller.||Doom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Explosions====&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[Detonate]]||Thing damage controlled explosion.||MBF&lt;br /&gt;
|-&lt;br /&gt;
||[[DetonateEx]]||Parameterized detonate action.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[Explode]]||Rocket/barrel splash damage.||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[Mushroom]]||[[MBF]]-style mushroom explosion.||MBF&lt;br /&gt;
|-&lt;br /&gt;
||[[MushroomEx]]||Extended mushroom explosion codepointer.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[Nailbomb]]||[[SMMU]]-style explosion with shrapnels.||SMMU&lt;br /&gt;
|-&lt;br /&gt;
||[[RadiusDamage]]||MBF21 explosion: allows separate radius and damage values.||MBF21&lt;br /&gt;
|}&lt;br /&gt;
=====Heretic=====&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[DeathBallImpact]]||Heretic super firemace sphere impact.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[HticExplode]]||Heretic-compatible explosion.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[MaceBallImpact]]||Heretic small firemace sphere impact.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[MaceBallImpact2]]||Heretic medium firemace sphere impact.||Heretic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Homing projectiles====&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[ClearTracer]]||Stop seeking current target.||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[FindTracer]]||Homing target search and lock.||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[GenTracer]]||Generic homing projectile.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[HticTracer]]||Heretic nitrogolem homing projectile (generalized).||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[MummyFX1Seek]]||Heretic nitrogolem homing projectile (particular).||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[SeekerMissile]]||ZDoom-based generic homing missile.||ZDoom&lt;br /&gt;
|-&lt;br /&gt;
||[[SeekTracer]]||Generic seeker missile function.||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[SkullRodPL2Seek]]||Powered hellstaff projectile seek||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[Tracer]]||Revenant homing projectile.||Doom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Others====&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[Fire]]||Stick on the face of attacker&#039;s target, like the archvile&#039;s fire effect.||Doom 2&lt;br /&gt;
|}&lt;br /&gt;
=====Heretic specific=====&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[AddPlayerRain]]||Powered hellstaff hellrain maintenance||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[FlameEnd]]||Phoenix rod flame rising.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[FloatPuff]]||Phoenix rod flame hitting wall.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[BeastPuff]]||Weredragon fire projectile smoke.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[BoltSpark]]||Ethereal arrow trail.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[BlueSpark]]||Create a blue D&#039;sparil attack projectile.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[GenWizard]]||Spawn a disciple of D&#039;sparil.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[LichFireGrow]]||Expand the iron lich fire column projectile.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[LichIceImpact]]||Explode iron lich ice globe into shards.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[MacePL1Check]]||Small Heretic mace sphere maintenance.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[MntrFloorFire]]||Used by the maulotaur ground fire projectile.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[PhoenixPuff]]||Phoenix rod missile trail.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[PodPain]]||Special effect when pod is damaged.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[RainImpact]]||Hell rain fall impact.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[SkullRodStorm]]||Spawn hellrain drop||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[SpawnRippers]]||Powered dragon claw impact spawning of ripping balls||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[VolcBallImpact]]||Heretic volcano lava ball impact.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[WhirlwindSeek]]||Homing behaviour used by iron lich tornado projectiles.||Heretic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===AI===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[AlertMonsters]]||Shout so other monsters chase the player.||ZDoom&lt;br /&gt;
|-&lt;br /&gt;
||[[Chase]]||Pursue a target and check for attacks||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[CPosRefire]]||Go to &#039;&#039;&#039;seestate&#039;&#039;&#039; if target is out of sight.||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[FaceTarget]]||Turn to target, looking around it if it&#039;s partially invisible.||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[GenRefire]]||Customizable refire control.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[HealChase]]||Parameterized version of VileChase.||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[KeepChasing]]||pursue target without attacking.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[Look]]||Stand in guard, looking for targets.||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[NoiseAlert]]||MBF21 version of AlertMonsters||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[RandomWalk]]||Random wandering for inactive enemies.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[Sor1Chase]]||D&#039;sparil&#039;s mount specific chase.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[Sor1Pain]]||D&#039;sparil&#039;s mount specific twitch. Calls Pain.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[SpidRefire]]||Like CPosRefire, slightly modified.||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[VileChase]]||Same as Chase, but resurrects encountered cadavres.||Doom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===AI attacks===&lt;br /&gt;
====Parameterized====&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[BetaSkullAttack]]||Remote melee attack, as used by the Doom alpha lost souls (available since [[MBF]]).||MBF beta emulation&lt;br /&gt;
|-&lt;br /&gt;
||[[BulletAttack]]||Generic bullet (hitscan) shooting.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[MissileAttack]]||Generic projectile shooting.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[MissileSpread]]||&#039;&#039;&#039;MissileAttack&#039;&#039;&#039; variation, supports shooting in spread patterns.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[MonsterBulletAttack]]||MBF21 variant of BulletAttack||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[MonsterMeleeAttack]]||MBF21 variant of Scratch||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[MonsterProjectile]]||MBF21 variant of MissileAttack||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[SargAttack12]]||Old Doom 1.2 style monster melee attack which uses hitscan similar to player&#039;s fist.||Doom v1.2&lt;br /&gt;
|-&lt;br /&gt;
||[[Scratch]]||Generic melee attack.||MBF&lt;br /&gt;
|-&lt;br /&gt;
||[[ThingSummon]]||Generic creature summoning.||Eternity&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Original Doom====&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[BrainSpit]]||cube spawn||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[BruisAttack]]||baron/knight of hell||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[BspiAttack]]||arachnotron||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[CPosAttack]]||pistol attack w/ shotgn noise||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[CyberAttack]]||rocket launching||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[FatAttack1]]||mancubus left attack||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[FatAttack2]]||mancubus right attack||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[FatAttack3]]||mancubus front attack||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[HeadAttack]]||cacodemon||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[PainAttack]]||elemental||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[PainDie]]||elemental death (3 souls)||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[PosAttack]]||former human||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[SargAttack]]||demon bite||Doom &lt;br /&gt;
|-&lt;br /&gt;
||[[SkelFist]]||revenant punch||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[SkelMissile]]||revenant missile||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[SkullAttack]]||flying skull||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[SPosAttack]]||sergeant||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[TroopAttack]]||imp||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[VileAttack]]||arch vile toss||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[VileTarget]]||spawn a vile fire effect on target||Doom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Heretic====&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[BeastAttack]]||weredragon||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[ClinkAttack]]||sabreclaw||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[ImpChargeAtk]]||gargoyle charge||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[ImpMeleeAtk]]||gargoyle scratch||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[ImpMissileAtk]]||gargoyle fire||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[KnightAttack]]||undead warrior||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[LichAttack]]||iron lich random attack **only one which includes ice globes**||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[LichFire]]||iron lich fire column||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[LichWhirlwind]]||iron lich tornado||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[MinotaurAtk1]]||maulotaur melee damage||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[MinotaurAtk2]]||spreadshot||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[MinotaurAtk3]]||straight flame snake||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[MinotaurCharge]]||maulotaur charge||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[MinotaurDecide]]||maulotaur ranged attack choosing||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[MummyAttack]]||golem melee||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[MummyAttack2]]||nitrogolem range||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[SnakeAttack]]||ophidian blue spark||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[SnakeAttack2]]||ophidian yellow shot||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[Srcr1Attack]]||d&#039;sparil mount attack||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[Srcr2Attack]]||d&#039;sparil sorcerer attack||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[Srcr2Decide]]||d&#039;sparil decide whether to teleport||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[VolcanoBlast]]||volcano burst||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[WizardAtk3]]||disciple tri-ball||Heretic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Alterations===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[AddFlags]]||Add flags (MBF21 style)||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[BossDeath]]||special monster death functions (such as Baron death in E1M8)||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[BrainDie]]||exits the level||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[CasingThrust]]||movement for ejected casing||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[Die]]||causes suicide||MBF&lt;br /&gt;
|-&lt;br /&gt;
||[[Fall]]||remove SOLID flag (used on dying monsters)||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[KeenDie]]||open 666-tagged doors on death of all like-named monsters||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[KillChildren]]||destroy all summoned things||ZDoom&lt;br /&gt;
|-&lt;br /&gt;
||[[LineEffect]]||activate a tag using a special||MBF&lt;br /&gt;
|-&lt;br /&gt;
||[[PainNukeSpec]]||Pain elemental nuke cheat handler.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[RemoveFlags]]||MBF21 codepointer to remove flags||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[RestoreArtifact]]||Adds the SPECIAL flag back to an object, sets the object back into its spawnstate, and plays the object&#039;s seesound.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[RestoreSpecialThing1]]||Removes the DONTDRAW flag from an object. If the object defines the itemrespawnat property, it will at this time be moved to a random spot if any such spots exist on the map (otherwise the item will remain where it spawned originally). The item will play its seesound.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[RestoreSpecialThing2]]||Adds the SPECIAL flag back to an object and sets the object back into its spawnstate.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[SelfDestruct]]||Projectile-compatible counterpart to &#039;&#039;&#039;Die&#039;&#039;&#039;.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[SetFlags]]||alter flags||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[SetSpecial]]||alter thing&#039;s special and args||ZDoom&lt;br /&gt;
|-&lt;br /&gt;
||[[ShowMessage]]||display text message||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[Spawn]]||create another object on top of this one||MBF&lt;br /&gt;
|-&lt;br /&gt;
||[[SpawnEx]]||enhanced spawn variant||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[SpawnObject]]||MBF21 spawn variant||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[SteamSpawn]]||create steam effects||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[UnSetFlags]]||alter flags||Eternity&lt;br /&gt;
|}&lt;br /&gt;
====Visual====&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[ClearSkin]]||Removes the sprite skin.||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[FadeIn]]||increments alpha||ZDoom&lt;br /&gt;
|-&lt;br /&gt;
||[[FadeOut]]||decrements alpha, DOESN&#039;T destroy the thing||ZDoom&lt;br /&gt;
|-&lt;br /&gt;
||[[HideThing]]||Sets DONTDRAW flag on an object||ZDoom&lt;br /&gt;
|-&lt;br /&gt;
||[[SetTranslucent]]||modify alpha amount; setup additiveness or fuzziness||ZDoom&lt;br /&gt;
|-&lt;br /&gt;
||[[UnHideThing]]||Unsets DONTDRAW flag on an object||ZDoom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
====Heretic====&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[AccelGlitter]]||accelerate upwards||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[DripBlood]]||spawn heretic blood||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[Feathers]]||make feathers fly||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[GhostOff]]||Remove the ghost effect||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[HideInCeiling]]||moves above ceiling level||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[HticBossDeath]]||special monster death functions for Heretic||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[Fall|HticDrop]]||{{deprecated}} same thing as [[Fall]]||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[ImpDeath]]||special death for gargoyle||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[ImpExplode]]||crash for gargoyle||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[ImpXDeath1]]||special extreme death for gargoyle, stage 1||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[ImpXDeath2]]||special extreme death for gargoyle, stage 2||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[InitKeyGizmo]]||Heretic key lock orb statue maintenance||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[MakePod]]||generate a pod||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[MummySoul]]||create raising soul||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[PlayerSkull]]||player death effect, when the skull tosses in air||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[RemovePod]]||notifies the generator that this pod was destroyed||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[Sor2DthInit]]||d&#039;sparil death maintenance||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[Sor2DthLoop]]||d&#039;sparil death maintenance||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[SorcererRise]]||d&#039;sparil waking up after mount crash||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[SorcNukeSpec]]||D&#039;sparil handling of the nuke cheat.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[SpawnAbove]]||spawns above the summoner||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[SpawnGlitter]]||create teleportation sparkle||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[SpawnTeleGlitter]]||Heretic teleport glitter object spawner.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[SpawnTeleGlitter2]]||Heretic exit glitter object spawner.||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[VolcanoSet]]||Set volcano tic duration||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[WizardAtk1]]||face target and clear GHOST flag||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[WizardAtk2]]||face target and set GHOST flag||Heretic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Sound effects===&lt;br /&gt;
====Generic====&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[AmbientThinker]]||ambient sound maintenance||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[Pain]]||play pain sound||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[PlayerScream]]||player-specific, health-dependent (death) sound||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[PlaySound]]||custom sound||MBF&lt;br /&gt;
|-&lt;br /&gt;
||[[PlaySoundEx]]||extended custom sound||ZDoom&lt;br /&gt;
|-&lt;br /&gt;
||[[Scream]]||play death sound||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[XScream]]||extreme death gut noise||Doom&lt;br /&gt;
|}&lt;br /&gt;
====Game specific====&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[BrainAwake]]||loud bossit sound effect||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[BrainPain]]||loud bospn sound effect||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[ContMobjSound]]||Heretic knight axe and nitrogolem missile sounds||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[ESound]]||Heretic water and wind ambiend sounds||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[FlameSnd]]||Heretic player burning death sound||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[RavenPlayerScream]]||Heretic player scream||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;SorDBon&#039;&#039;&#039;||Plays sound 329 (&#039;&#039;&#039;ht_sordbon&#039;&#039;&#039;)||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;SorDExp&#039;&#039;&#039;||Plays sound 328 (&#039;&#039;&#039;ht_sordexp&#039;&#039;&#039;)||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;SorDSph&#039;&#039;&#039;||Plays sound 327 (&#039;&#039;&#039;ht_sordsph&#039;&#039;&#039;)||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;SorRise&#039;&#039;&#039;||Plays sound 322 (&#039;&#039;&#039;ht_sorrise&#039;&#039;&#039;)||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;SorSightSnd&#039;&#039;&#039;||Plays sound 323 (&#039;&#039;&#039;ht_sorsit&#039;&#039;&#039;)||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;SorZap&#039;&#039;&#039;||Plays sound 321 (&#039;&#039;&#039;ht_sorzap&#039;&#039;&#039;)||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[StartFire]]||flamst sound effect — also includes &amp;quot;Fire&amp;quot; action!||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[VileStart]]||archvile heat-up noise||Doom 2&lt;br /&gt;
|}&lt;br /&gt;
=====Combined=====&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[BabyMetal]]||bspwlk sound effect — also includes Chase!||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[FatRaise]]||mancubus warning — also includes FaceTarget||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[FireCrackle]]||flame sound effect — also includes &amp;quot;Fire&amp;quot; action!||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[Hoof]]||cyberdemon hoof sound — also includes Chase!||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[Metal]]||metal sound effect — also includes Chase!||Doom&lt;br /&gt;
|-&lt;br /&gt;
||[[SkelWhoosh]]||revenant swing noise — also includes FaceTarget||Doom 2&lt;br /&gt;
|-&lt;br /&gt;
||[[SpawnSound]]||boscub sound effect — also includes SpawnFly||Doom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Frame scripting===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[AproxDistance]]||assign distance from target to a variable||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[CheckPlayerDone]]||jump to a frame if not under player control||ZDoom&lt;br /&gt;
|-&lt;br /&gt;
||[[CopyCounter]]||copy a variable to another variable||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[CounterDiceRoll]]||set a variable to the result of a damage calculation||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[CounterJump]]||counter-based next frame||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[CounterJumpEx]]||DECORATE-compatible counter-based next frame||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[CounterOp]]||set a variable to an operation of another 2 variables||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[CounterSwitch]]||counter-based set of frames||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[CounterSwitchEx]]||DECORATE-compatible counter-based set of states||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[HealthJump]]||health-based next frame||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[JumpIfFlagsSet]]||jump if flags set||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[JumpIfHealthBelow]]||jump to frame if health is below threshold||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[JumpIfTargetInLOS]]||jump to frame if target is in the field of view||ZDoom&lt;br /&gt;
|-&lt;br /&gt;
||[[JumpIfTargetInSight]]||MBF21 target sight and field of view test.||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[JumpIfTargetCloser]]||Jump if target is closer than threshold||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[JumpIfTracerInSight]]||Jump if projectile seeking target is in sight||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[JumpIfTracerCloser]]||Jump if projectile seeking target is closer than threshold||MBF21&lt;br /&gt;
|-&lt;br /&gt;
||[[RandomJump]]||random next frame||MBF&lt;br /&gt;
|-&lt;br /&gt;
||[[Jump]]||Decorate-compatible alternative to RandomJump.||ZDoom&lt;br /&gt;
|-&lt;br /&gt;
||[[SetCounter]]||set a variable||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[SetTics]]||set frame duration||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[StartScript]]||run map script (such as [[ACS]])||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[StartScriptNamed]]||run named map script||Eternity&lt;br /&gt;
|-&lt;br /&gt;
||[[TargetJump]]||go to designated frame if having a target||Eternity&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Powerup use===&lt;br /&gt;
These are triggered from [[EDF_item_effects_and_inventory#artifact|artifact]]&#039;s &#039;&#039;&#039;useaction&#039;&#039;&#039; field, not from states.&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! First game it appeared&lt;br /&gt;
|-&lt;br /&gt;
||[[HticArtiTele]]||Chaos Device action||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[HticMorphOvum]]||Morph Ovum action||Heretic&lt;br /&gt;
|-&lt;br /&gt;
||[[HticSpawnFireBomb]]||Time Bomb of the Ancients action||Heretic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Codepointers|*]]&lt;br /&gt;
[[Category:EDF]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Generalized_sector_types&amp;diff=6377</id>
		<title>Generalized sector types</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Generalized_sector_types&amp;diff=6377"/>
		<updated>2025-10-04T18:22:05Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Introduced with MBF21 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eternity provides generalized sector types, based on bit fields, that allow several sector type properties to be independently specified for a sector. Texture change linedefs can be used to switch some or all of these properties dynamically, outside lighting.&lt;br /&gt;
&lt;br /&gt;
{{Backto|Sector types}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For classic non-UDMF format only&#039;&#039;&#039;: Bits 0 to 4 specify the lighting type in the sector, the same codes that DOOM used are employed:&lt;br /&gt;
&lt;br /&gt;
 Dec Bits 4-0   Description&lt;br /&gt;
 -------------------------------------------------------------------&lt;br /&gt;
 0   00000      Normal lighting&lt;br /&gt;
 1   00001      random off&lt;br /&gt;
 2   00010      blink 0.5 second&lt;br /&gt;
 3   00011      blink 1.0 second&lt;br /&gt;
 4   00100      -10/20% health AND light blink 0.5 second&lt;br /&gt;
 8   01000      light oscillates&lt;br /&gt;
 12  01100      blink 0.5 second, synchronized&lt;br /&gt;
 13  01101      blink 1.0 second, synchronized&lt;br /&gt;
 17  10001      flickers on and off randomly&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For UDMF&#039;&#039;&#039;: bits 0 to 7 are the same as in [[Regular sector types]], the UDMF section.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT for UDMF&#039;&#039;&#039;: to use the following values in UDMF, you need to multiply them by 8 first. The components from 0 to 255 apply te&lt;br /&gt;
&lt;br /&gt;
All decimal values listed below can be added from each category to obtain the generalized sector effects.&lt;br /&gt;
&lt;br /&gt;
Bits 5 and 6 set the damage type of the sector, with the usual 5/10/20 damage units per second.&lt;br /&gt;
&lt;br /&gt;
 Dec  UDMF dec  Bits 6-5 / 9-8   Description&lt;br /&gt;
 -------------------------------------------------------------------&lt;br /&gt;
 0    0         00               No damage&lt;br /&gt;
 32   256       01               5  units damage per sec (halve damage in TYTD skill)&lt;br /&gt;
 64   512       10               10 units damage per sec&lt;br /&gt;
 96   768       11               20 units damage per sec&lt;br /&gt;
Bit 7 makes the sector count towards the secrets total at game end&lt;br /&gt;
&lt;br /&gt;
 Dec  UDMF dec  Bit 7 / 10    Description&lt;br /&gt;
 -------------------------------------------------------------------&lt;br /&gt;
 0    0          0            Sector is not secret&lt;br /&gt;
 128  1024       1            Sector is secret&lt;br /&gt;
Bit 8 enables the ice/mud effect controlled by linedef 223&lt;br /&gt;
&lt;br /&gt;
 Dec  UDMF dec  Bit 8 / 11    Description&lt;br /&gt;
 -------------------------------------------------------------------&lt;br /&gt;
 0    0          0            Sector friction disabled&lt;br /&gt;
 256  2048       1            Sector friction enabled&lt;br /&gt;
Bit 9 enables the wind effects controlled by linedefs 224-226&lt;br /&gt;
&lt;br /&gt;
 Dec  UDMF dec  Bit 9 / 12    Description&lt;br /&gt;
 -------------------------------------------------------------------&lt;br /&gt;
 0    0          0            Sector wind disabled&lt;br /&gt;
 512  4096       1            Sector wind enabled&lt;br /&gt;
== Introduced with SMMU ==&lt;br /&gt;
&lt;br /&gt;
Bits 10 and 11 are now implemented as of SMMU v3.21.&lt;br /&gt;
Bit 10 suppresses all sounds within the sector, while Bit 11 disables any sounds due to floor or ceiling motion by the sector. Bit 11 is especially useful in silencing constructs such as pseudo-3D bridges, which give off an undesirable plat sound when they move.&lt;br /&gt;
&lt;br /&gt;
 Dec   UDMF dec  Bit 10 / 13  Description&lt;br /&gt;
 -------------------------------------------------------------------&lt;br /&gt;
 0     0          0           Sounds made in sector function normally&lt;br /&gt;
 1024  8192       1           Sounds made in sector are suppressed&lt;br /&gt;
&lt;br /&gt;
 Dec   UDMF dec  Bit 11 / 14  Description&lt;br /&gt;
 -------------------------------------------------------------------&lt;br /&gt;
 0     0          0           Sounds made by sector floor/ceiling movement normal&lt;br /&gt;
 2048  16384      1           Sounds made by sector floor/ceiling movement suppressed&lt;br /&gt;
&lt;br /&gt;
== Introduced with MBF21 ==&lt;br /&gt;
These new bits are added since the MBF21 editing standard.&lt;br /&gt;
&lt;br /&gt;
===Instant death sector===&lt;br /&gt;
A new bit is added in MBF21, bit 12 under classic format and bit 15 under UDMF. When this bit is set, bits 5-6 (classic) or 8-9 (UDMF) change their meaning from &amp;quot;sector damage&amp;quot; to different variations of this instant death sector type, as shown in the following table:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Dec&lt;br /&gt;
! Hex&lt;br /&gt;
! UDMF dec&lt;br /&gt;
! UDMF hex&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
||4096||1000||32768||8000||Player dies instantly when on sector floor (unless wearing radiation suit or invulnerability)&lt;br /&gt;
|-&lt;br /&gt;
||4128||1020||33024||8100||Player dies instantly when on sector floor (even if wearing suit or invulnerability)&lt;br /&gt;
|-&lt;br /&gt;
||4160||1040||33280||8200||Kill all players and exit to next level (useful for forcing pistol start)&lt;br /&gt;
|-&lt;br /&gt;
||4192||1060||33536||8300||Kill all players and exit to the secret level (useful for forcing pistol start)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Kill grounded monsters===&lt;br /&gt;
Bit 13, i.e. value 8192, if added to a sector, causes monsters on the ground to die.&lt;br /&gt;
&lt;br /&gt;
[[Category:Editing reference]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=BFGSpray&amp;diff=6375</id>
		<title>BFGSpray</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=BFGSpray&amp;diff=6375"/>
		<updated>2025-08-23T20:32:57Z</updated>

		<summary type="html">&lt;p&gt;Printz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{codepointer|description=BFGSpray is a codepointer which causes a BFG explosion effect.|usage=&#039;&#039;&#039;BFGSpray&#039;&#039;&#039;(&#039;&#039;sprayType&#039;&#039;, &#039;&#039;numRays&#039;&#039;, &#039;&#039;damageCount&#039;&#039;, &#039;&#039;fov&#039;&#039;, &#039;&#039;maxDist&#039;&#039;)&lt;br /&gt;
|parameters=&lt;br /&gt;
*&#039;&#039;sprayType&#039;&#039;: name of thing type to spawn on hit targets. Default is the thingtype with dehackednum 43, which in Doom is BFGFlash.&lt;br /&gt;
*&#039;&#039;numRays&#039;&#039;: number of rays. Default: 40.&lt;br /&gt;
*&#039;&#039;damageCount&#039;&#039;: how many times to add the random 1-8 damage for each ray. Default: 15.&lt;br /&gt;
*&#039;&#039;fov&#039;&#039;: angle in degrees of the spread. Default: 90.&lt;br /&gt;
*&#039;&#039;maxDist&#039;&#039;: range of each ray. Default: 1024.&lt;br /&gt;
|notes=&lt;br /&gt;
The effect differs depending on the player&#039;s selected type of BFG:&lt;br /&gt;
&lt;br /&gt;
*Normal BFG: &#039;&#039;numRays&#039;&#039; tracers will emanate from the object which fired the projectile in the general direction in which the projectile was fired, each doing damage that is the sum of &#039;&#039;damageCount&#039;&#039; rolls of an 8-sided die.&lt;br /&gt;
*BFG11K: Control is transferred to the [[BFG11KHit]] codepointer.&lt;br /&gt;
*Bouncing BFG: Control is transferred to the [[BouncingBFG]] codepointer.&lt;br /&gt;
*Plasma Burst BFG: Control is transferred to the [[BFGBurst]] codepointer.&lt;br /&gt;
&lt;br /&gt;
Note: this will not trigger the Doom beta BFG attack if its gameplay setting is enabled. There is a separate set of frames for the classic BFG that replace the normal BFG9000.|seealso=&lt;br /&gt;
*[[BFG11KHit]]&lt;br /&gt;
*[[BFGBurst]]&lt;br /&gt;
*[[BouncingBFG]]|examples=&lt;br /&gt;
{{example|description=From base\doom\frames.edf:|code=&amp;lt;nowiki&amp;gt;frame S_BFGLAND3 { cmp = &amp;quot;BFE1|2|T|8|BFGSpray|@next&amp;quot;;       dehackednum = 119 }&amp;lt;/nowiki&amp;gt;}}}}&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Eternity_Engine&amp;diff=6374</id>
		<title>Eternity Engine</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Eternity_Engine&amp;diff=6374"/>
		<updated>2025-08-23T17:30:55Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Version 4.05 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Eternity Engine is [[Doom Wiki:Team Eternity|Team Eternity]]&#039;s advanced [[Doom Wiki:Doom|Doom]] [[Doom Wiki:Source port|source port]] and the primary subject of this Wiki. It is meant as a versatile feature port which keeps gameplay compatibility with its roots (DOOM, [[BOOM]], [[MBF]] and so on) while advancing with powerful features such as new ways to design levels ([[linked portals]], [[3DMidTex]], [[polyobjects]] etc.) and modding capabilities (using the [[EDF]] definition language). Every new feature we add is tested not to affect anything that exists so far. &lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
The Eternity Engine began in 1998 as a simple modification of [[Doom Wiki:Boom|Boom]] meant to power [[Doom Wiki:Eternity TC|Eternity TC]], which was at that time a new and active project. When [[Doom Wiki:Lee Killough|Lee Killough]] began the [[MBF]] project, [[Doom Wiki:James_Haley_(Quasar)|James &amp;quot;Quasar&amp;quot; Haley]] became a beta tester after emailing Lee with questions about the early Doom alpha versions. The Eternity project moved to an MBF code base after that port&#039;s first release.&lt;br /&gt;
&lt;br /&gt;
In late 1999, [[Doom Wiki:Simon &amp;quot;Fraggle&amp;quot; Howard|Fraggle]] released v3.10 of his MBF-based source port [[SMMU]], which contained support for the new [[Doom Wiki:FraggleScript|FraggleScript]] scripting language. Although activity in the Eternity TC project by editors had steadily dropped to almost nothing, Quasar was still interested in developing the code associated with it. Needing features such as scripting and the [[console]], he then moved the Eternity project&#039;s code into SMMU.&lt;br /&gt;
&lt;br /&gt;
Despite this long history of jumping between Boom-based ports, no public release of Eternity based on any port other than SMMU was ever made. The first private alpha, released to a select few beta testers, was derived from SMMU 3.21 with selected modifications from 3.30. Because of this, Eternity began at version 3.29.&lt;br /&gt;
&lt;br /&gt;
After the release of the [[Doom Wiki:Caverns_of_Darkness|Caverns of Darkness]] project, which used a customized version of Eternity Engine v3.29 Development Beta 5, the project began to attract more attention. A second programmer, [[Doom Wiki:Stephen_McGranahan_(SoM)|Steven &amp;quot;SoM&amp;quot; McGranahan]], joined the project and immediately set to work porting the code to use [[Wikipedia:Simple_DirectMedia_Layer|SDL]], making it capable of running on many operating systems, including [[Wikipedia:Microsoft Windows|Windows]].&lt;br /&gt;
&lt;br /&gt;
Now it has [[Universal Doom Map Format|UDMF]] support and a dynamic weapon and inventory system. It supports linked portals for full room-over-room gameplay. Current major goals for the engine include completing support for [[Doom Wiki:Heretic|Heretic]].&lt;br /&gt;
&lt;br /&gt;
==Getting started==&lt;br /&gt;
You can download Eternity either from [https://www.doomworld.com/forum/25-eternity/ Doomworld] (as official releases) or from [https://devbuilds.drdteam.org/eternity/ DRDTeam] (as &amp;quot;beta quality&amp;quot; development builds, which in practice are generally stable, and may be needed for some modding features listed on this wiki).&lt;br /&gt;
&lt;br /&gt;
Eternity&#039;s goal that makes it different from feature ports such as [[Doom Wiki:GZDoom|GZDoom]] is demo compatibility similar to that of [[Doom Wiki:PrBoom+|PrBoom+]], kept specifically to ensure that every new feature we add fits seamlessly with what exists so far, and that we don&#039;t stray from the bases made so far in the DOOM gameplay.&lt;br /&gt;
&lt;br /&gt;
Support for [[Doom Wiki:Heretic|Heretic]] is growing, though still under way. While we don&#039;t support vanilla Heretic demos for playback yet, a possibility exists in the horizon.&lt;br /&gt;
&lt;br /&gt;
===Playing Eternity===&lt;br /&gt;
When run directly, Eternity tries to find the DOOM, DOOM 2 or Final DOOM megawads in some standard locations. If it can&#039;t find them, it will let you know. If it finds several of them, it will start with a picker screen, letting you choose.&lt;br /&gt;
&lt;br /&gt;
On [[Wikipedia:Windows|Windows]] you can use the drag-and-drop feature of Explorer by moving WADs and PKEs into Eternity&#039;s executable. Or you can use Powershell or Command Prompt in a manner similar to starting [[Doom Wiki:Vanilla Doom|vanilla DOOM]]. See [[list of command line parameters]]. For more advanced cases, you can use [[GFS]] files to quickly load multiple files and settings together.&lt;br /&gt;
&lt;br /&gt;
The [[Wikipedia:macOS|macOS]] version of Eternity also comes with a visual dialog-box launcher, hiding the complexity behind starting a terminal.&lt;br /&gt;
&lt;br /&gt;
For advanced technical stuff, cheating and testing maps, Eternity has a [[console]] similar to [[Wikipedia:Quake|Quake&#039;s]].&lt;br /&gt;
&lt;br /&gt;
====Loading main game WADs====&lt;br /&gt;
Eternity looks for the main game WADs (IWADs), e.g. doom2.wad, at these locations:&lt;br /&gt;
* IWAD file paths in user/system.cfg;&lt;br /&gt;
* the -iwad command-line parameter;&lt;br /&gt;
* the [[Doom Wiki:Environment variables|&#039;&#039;&#039;DOOMWADDIR&#039;&#039;&#039; or &#039;&#039;&#039;DOOMWADPATH&#039;&#039;&#039; environment variables]];&lt;br /&gt;
* the IWAD in the working directory;&lt;br /&gt;
* the IWAD file under the appropriate game folder of the base directory, which can be found using the -game parameter.&lt;br /&gt;
&lt;br /&gt;
====Loading Master Levels for DOOM II====&lt;br /&gt;
Eternity offers a menu for conveniently loading each WAD from the Master Levels. To start the Master Levels:&lt;br /&gt;
# Start Eternity with DOOM II;&lt;br /&gt;
# Go to the Options menu, under the Game Files section, select WAD Options;&lt;br /&gt;
# Under the Master Levels section, you may need to specify Master Levels Dir to the path with the WADs;&lt;br /&gt;
# Once the path is configured, enter Play Master Levels.&lt;br /&gt;
Once the Master Levels Dir is configured, entering New Game from the menu will give you the choice to start the Master Levels.&lt;br /&gt;
&lt;br /&gt;
===Making mods for Eternity===&lt;br /&gt;
The editors [[Doom Wiki:Doom Builder X|Doom Builder X]], [[Doom Wiki:GZDoom Builder|GZDoom Builder]], [[Doom Wiki:Eureka|Eureka]] and [[Doom Wiki:SLADE|SLADE]] have Eternity level editing support of varying degrees. For [[UDMF]] (modern advanced format) you can use Doom Builder X, GZDoom Builder or SLADE. However, if you lack access to a UDMF-capable editor or don&#039;t want the complexity it brings, you can also use the classic DOOM format, combined with [[ExtraData]]&lt;br /&gt;
&lt;br /&gt;
For general modding, Eternity relies on [[EDF]], its own content definition language. For level definitions in particular it uses [[EMAPINFO]]. Eternity also has growing support for some lumps from [[Doom Wiki:GZDoom|GZDoom]] and [[Doom Wiki:Hexen|Hexen]] such as [[ANIMDEFS]], thus increasing the support for cross-port mods.&lt;br /&gt;
&lt;br /&gt;
Eternity can load [[PKE]] archives, not just [[Doom Wiki:WAD|WADs]]. It can also load unarchived folders structured the same as PKE archives (you can use the -file command-line parameter on folders), facilitating project work. You can use powerful editors such as [[Wikipedia:Visual Studio Code|Visual Studio Code]] on such folders to edit your EDF modifications.&lt;br /&gt;
&lt;br /&gt;
See [[Editing reference|all editing reference]] to get started on modding.&lt;br /&gt;
&lt;br /&gt;
==Major Features==&lt;br /&gt;
&lt;br /&gt;
===Cardboard engine===&lt;br /&gt;
[[Cardboard]] is a floating-point rendering engine created by [[Doom Wiki:Stephen_McGranahan_(SoM)|SoM]] that fixes several problems inherent with the classic fixed-point [[Doom Wiki:Doom rendering engine|Doom rendering engine]].&lt;br /&gt;
&lt;br /&gt;
===EDF===&lt;br /&gt;
[[EDF]], which stands for Eternity Definition Files, is a textual input language that allows specification of almost all the static game data which was once contained inside the executable. This includes [[thingtype|thing types]], [[frame|frames]], sprites, terrain definitions, and more. EDF has a relaxed [[Wikipedia:C programming language|C]]-like syntax and can be used from both files and [[WAD]] lumps.&lt;br /&gt;
&lt;br /&gt;
===ExtraData===&lt;br /&gt;
[[ExtraData]] is another EDF-like data specification language that allows the Doom map format to be extended with any kind of data. Use of special thing, line, and sector types within a map allows the editor to attach ExtraData records to those objects. Special data for the objects is then given inside the script.&lt;br /&gt;
&lt;br /&gt;
===Linked portals===&lt;br /&gt;
[[Linked portals]] are surfaces that, like regular [[portals]], connect different areas of the map, but in addition can be walked through, thus allowing multistory maps to be designed in Doom.&lt;br /&gt;
&lt;br /&gt;
===[[MapInfo]]===&lt;br /&gt;
Eternity expands SMMU&#039;s level info system significantly, allowing dozens of new properties to be specified, and allowing cascading global EMAPINFO lumps as an alternative to inserting MapInfo data into level headers. Among other things, MapInfo is used to tie ExtraData and ACS scripts to the maps that use them.&lt;br /&gt;
&lt;br /&gt;
==Releases==&lt;br /&gt;
A complete list of Eternity&#039;s release history follows. You can find most of these releases on the [https://www.doomworld.com/forum/25-eternity/ Doomworld Eternity forum], on the [https://github.com/team-eternity/eternity/releases GitHub Eternity repository] and the older releases on the [http://eternity.mancubus.net/ee-old/ Eternity Mancubus website]. Most of the releases are Windows only, but the most recent ones are also available on macOS.&lt;br /&gt;
&lt;br /&gt;
For finer grained non-official releases, see also the [[Eternity Engine#Development builds|development builds]] below.&lt;br /&gt;
&lt;br /&gt;
===Version 3.29===&lt;br /&gt;
* 3.29 Private Alpha - September 14, 2000&lt;br /&gt;
* 3.29 Public Beta 1 - January 8, 2001&lt;br /&gt;
* 3.29 Public Beta 2 - January 9, 2001&lt;br /&gt;
* 3.29 Public Beta 3 - May 10, 2001&lt;br /&gt;
* 3.29 Public Beta 4 - June 30, 2001&lt;br /&gt;
* 3.29 Development Beta 5 - October 2, 2001&lt;br /&gt;
* 3.29 &amp;quot;Gamma&amp;quot; - July 4, 2002&lt;br /&gt;
&lt;br /&gt;
===Version 3.31===&lt;br /&gt;
* 3.31 Public Beta 1 - September 11, 2002&lt;br /&gt;
* 3.31 Public Beta 2 - March 5, 2003&lt;br /&gt;
* 3.31 Public Beta 3 - August 8, 2003&lt;br /&gt;
* 3.31 Public Beta 4 - November 29, 2003&lt;br /&gt;
* 3.31 Public Beta 5 - December 17, 2003&lt;br /&gt;
* 3.31 Public Beta 6 - February 29, 2004&lt;br /&gt;
* 3.31 Public Beta 7 - April 11, 2004&lt;br /&gt;
* 3.31 &amp;quot;Delta&amp;quot; Pre-Release Alpha 1 - August 23, 2004&lt;br /&gt;
* 3.31 &amp;quot;Delta&amp;quot; Pre-Release Alpha 2 - November 11, 2004&lt;br /&gt;
* 3.31.10 &amp;quot;Delta&amp;quot; - January 19, 2005&lt;br /&gt;
&lt;br /&gt;
===Version 3.33===&lt;br /&gt;
* 3.33.00 &amp;quot;Genesis&amp;quot; - May 26, 2005&lt;br /&gt;
* 3.33.01 &amp;quot;Outcast&amp;quot; - June 24, 2005&lt;br /&gt;
* 3.33.02 &amp;quot;Warrior&amp;quot; - October 1, 2005&lt;br /&gt;
* 3.33.33 &amp;quot;Paladin&amp;quot; - May 17, 2006&lt;br /&gt;
* 3.33.50 &amp;quot;Phoenix&amp;quot; - October 23, 2006&lt;br /&gt;
&lt;br /&gt;
===Version 3.35===&lt;br /&gt;
* [http://www.doomworld.com/vb/eternity/45146-eternity-engine-v3-35-90-simorgh/ 3.35.90] &amp;quot;Simorgh&amp;quot; - January 11, 2009&lt;br /&gt;
* [http://www.doomworld.com/vb/eternity/45757-eternity-engine-3-35-92-nekhbet/ 3.35.92] &amp;quot;Nekhbet&amp;quot; - March 22, 2009&lt;br /&gt;
&lt;br /&gt;
===Version 3.37===&lt;br /&gt;
* [http://www.doomworld.com/vb/eternity/49268-eternity-engine-3-37-00-sekhmet/ 3.37.00] &amp;quot;Sekhmet&amp;quot; - January 1, 2010&lt;br /&gt;
&lt;br /&gt;
===Version 3.39===&lt;br /&gt;
* [http://www.doomworld.com/vb/eternity/52873-eternity-engine-v3-39-20-resheph/ 3.39.20] &amp;quot;Resheph&amp;quot; - October 10, 2010&lt;br /&gt;
&lt;br /&gt;
===Version 3.40===&lt;br /&gt;
* [http://www.doomworld.com/vb/eternity/53944-eternity-engine-v3-40-00-rebirth/ 3.40.00] &amp;quot;Rebirth&amp;quot; - January 8, 2011&lt;br /&gt;
* [http://www.doomworld.com/vb/eternity/55219-announcing-the-blue-box-ee-3-40-11-and-vaporware-demo/ 3.40.11] &amp;quot;Aasgard&amp;quot; - May 2, 2011&lt;br /&gt;
* [http://www.doomworld.com/vb/eternity/55874-eternity-engine-3-40-15-wodanaz/ 3.40.15] &amp;quot;Wodanaz&amp;quot; - June 22, 2011&lt;br /&gt;
* [http://www.doomworld.com/vb/eternity/58281-eternity-engine-v3-40-20-mjolnir/ 3.40.20] &amp;quot;Mjolnir&amp;quot; - December 26, 2011&lt;br /&gt;
* [http://www.doomworld.com/vb/eternity/61245-eternity-engine-3-40-25-midgard/ 3.40.25] &amp;quot;Midgard&amp;quot; - August 27, 2012&lt;br /&gt;
* [http://www.doomworld.com/vb/eternity/62087-eternity-engine-3-40-30-alfheim/ 3.40.30] &amp;quot;Alfheim&amp;quot; - November 4, 2012&lt;br /&gt;
* [http://www.doomworld.com/vb/eternity/64382-eternity-engine-3-40-37-gungnir/ 3.40.37] &amp;quot;Gungnir&amp;quot; - May 27, 2013&lt;br /&gt;
* [http://www.doomworld.com/vb/eternity/67069-eternity-engine-3-40-46-bifrost/ 3.40.46] &amp;quot;Bifröst&amp;quot; - January 19, 2014 - &#039;&#039;first one with a macOS release&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Version 3.42===&lt;br /&gt;
* [https://www.doomworld.com/forum/topic/94046-eternity-engine-34202-heimdal-files-documentation-buglist/ 3.42.02] &amp;quot;Heimdal&amp;quot; - May 7, 2017&lt;br /&gt;
* [https://www.doomworld.com/forum/topic/95351-eternity-engine-34203a-heimdal-release-2-hotfix/ 3.42.03a] &amp;quot;Heimdal&amp;quot; release 2 - August 2, 2017&lt;br /&gt;
&lt;br /&gt;
===Version 4.00===&lt;br /&gt;
* [https://www.doomworld.com/forum/topic/99957-eternity-engine-40000-v%C3%B6lusp%C3%A1/ 4.00.00] &amp;quot;Völuspá&amp;quot; - March 17, 2018&lt;br /&gt;
&lt;br /&gt;
===Version 4.01===&lt;br /&gt;
* [https://www.doomworld.com/forum/topic/117429-eternity-engine-40100-tyrfing/ 4.01.00] &amp;quot;Tyrfing&amp;quot; - October 13, 2020&lt;br /&gt;
&lt;br /&gt;
===Version 4.02===&lt;br /&gt;
* [https://www.doomworld.com/forum/topic/119425-eternity-engine-40200-forseti/ 4.02.00] &amp;quot;Forseti&amp;quot; - January 27, 2021&lt;br /&gt;
&lt;br /&gt;
===Version 4.04===&lt;br /&gt;
* [https://www.doomworld.com/forum/topic/148678-eternity-engine-40400-glitnir/ 4.04.00] &amp;quot;Glitnir&amp;quot; - October 12, 2024&lt;br /&gt;
* [https://www.doomworld.com/forum/topic/148678-eternity-engine-40401-glitnir-update-1/ 4.04.01] &amp;quot;Glitnir&amp;quot; Update 1 - October 20, 2024&lt;br /&gt;
* [https://www.doomworld.com/forum/topic/148678-eternity-engine-40402-glitnir-update-2/ 4.04.02] &amp;quot;Glitnir&amp;quot; Update 2 - November 18, 2024&lt;br /&gt;
&lt;br /&gt;
===Version 4.05===&lt;br /&gt;
* [https://www.doomworld.com/forum/topic/154848-eternity-engine-40504-citadel/ 4.05.04] &amp;quot;Citadel&amp;quot; - August 23, 2025&lt;br /&gt;
&lt;br /&gt;
==Cross-platform development==&lt;br /&gt;
Eternity is built by using the [[Wikipedia:CMake|CMake]] utility. You can download the Eternity [[Wikipedia:source code|source code]] from [[Wikipedia:GitHub|GitHub]] and execute CMake. Eternity&#039;s source code repository, as well as the latest releases, are located [https://github.com/team-eternity/eternity/ here].&lt;br /&gt;
&lt;br /&gt;
==Development builds==&lt;br /&gt;
Development builds (&amp;quot;beta&amp;quot; releases) for Eternity are available for Windows and macOS at [http://devbuilds.drdteam.org/eternity/ DRDTeam&#039;s website]. They are recommended if you encounter serious bugs with any of the official releases, or if you want to test brand new features that didn&#039;t exist in the latest official releases. Due to their beta status, they may be untested and have other problems. However, due to the sometimes sporadic release cycles, it&#039;s often recommended to just try the development builds. The only problem is that by upgrading Eternity often, savegames tend to become unusable, so exercise caution before upgrading Eternity if you rely on games with saves.&lt;br /&gt;
&lt;br /&gt;
==System features==&lt;br /&gt;
*[[Cardboard engine]]&lt;br /&gt;
*[[List of command line parameters]]&lt;br /&gt;
*[[Console]]&lt;br /&gt;
*[[List of cheat codes]]&lt;br /&gt;
*[[GFS|GFS files]]&lt;br /&gt;
*[[ZIP|ZIP mods]]&lt;br /&gt;
&lt;br /&gt;
==Gameplay and modding features==&lt;br /&gt;
*[[DeHackEd / BEX Reference]]&lt;br /&gt;
*[[List of codepointers]]&lt;br /&gt;
*[[EDF|EDF files]]&lt;br /&gt;
*[[Editing reference]]&lt;br /&gt;
*[[OPTIONS|OPTIONS lump]]&lt;br /&gt;
*[[MapInfo]]&lt;br /&gt;
*[[SMMU|Features inherited from SMMU]]&lt;br /&gt;
*[[ExtraData]]&lt;br /&gt;
*[[Hexen format SNDINFO]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Source ports]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Template:Latest&amp;diff=6373</id>
		<title>Template:Latest</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Template:Latest&amp;diff=6373"/>
		<updated>2025-08-23T17:30:30Z</updated>

		<summary type="html">&lt;p&gt;Printz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://www.doomworld.com/forum/topic/154848-eternity-engine-40504-citadel/ 4.05.04]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=DECORATE_state_syntax&amp;diff=6372</id>
		<title>DECORATE state syntax</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=DECORATE_state_syntax&amp;diff=6372"/>
		<updated>2025-08-23T17:13:48Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Labels */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;EDF allows using a concise ZDoom DECORATE-style state syntax for [[thingtype|thing types]], by using the &#039;&#039;&#039;states&#039;&#039;&#039; field, followed by a heredoc (multiline string). The syntax is based on the one from ZDoom, described [http://zdoom.org/wiki/Actor_states here], in the ZDoom wiki.&lt;br /&gt;
&lt;br /&gt;
Note that DECORATE errors in Eternity will trigger warnings at startup which can only be observed with -edfout or -edf-show-warnings during the text-mode part of the program initialization. You can press the &#039;&#039;Pause&#039;&#039; key during that sequence to read the warning messages. Usually in these cases, the DECORATE state definition is fully disabled.&lt;br /&gt;
{{Backto|EDF state reference}}&lt;br /&gt;
==Syntax==&lt;br /&gt;
The DECORATE grammar is defined as such (source: Eternity source code comment):&lt;br /&gt;
  &amp;lt;labeledunit&amp;gt; := &amp;lt;labelblock&amp;gt;&amp;lt;frameblock&amp;gt;&amp;lt;labeledunit&amp;gt; | nil&lt;br /&gt;
    &amp;lt;labelblock&amp;gt; := &amp;lt;label&amp;gt;&amp;lt;eol&amp;gt;&amp;lt;labelblock&amp;gt;&lt;br /&gt;
      &amp;lt;label&amp;gt; := [A-Za-z0-9_]+(&#039;.&#039;[A-Za-z0-9_]+)?&#039;:&#039;&lt;br /&gt;
      &amp;lt;eol&amp;gt;   := &#039;\n&#039;&lt;br /&gt;
    &amp;lt;frameblock&amp;gt; := &amp;lt;frame&amp;gt;&amp;lt;frameblock&amp;gt; | &amp;lt;frame&amp;gt;&lt;br /&gt;
      &amp;lt;frame&amp;gt; := &amp;lt;keyword&amp;gt;&amp;lt;eol&amp;gt; | &amp;lt;frame_token_list&amp;gt;&amp;lt;eol&amp;gt;&lt;br /&gt;
        &amp;lt;keyword&amp;gt; := &amp;quot;stop&amp;quot; | &amp;quot;wait&amp;quot; | &amp;quot;loop&amp;quot; | &amp;quot;goto&amp;quot; &amp;lt;jumplabel&amp;gt;&lt;br /&gt;
          &amp;lt;jumplabel&amp;gt; := &amp;lt;jlabel&amp;gt; | &amp;lt;jlabel&amp;gt; &#039;+&#039; number&lt;br /&gt;
            &amp;lt;jlabel&amp;gt; := [A-Za-z0-9_:]+(&#039;.&#039;[A-Za-z0-9_]+)?&lt;br /&gt;
        &amp;lt;frame_token_list&amp;gt; := &amp;lt;sprite&amp;gt;&amp;lt;frameletters&amp;gt;&amp;lt;tics&amp;gt;&amp;lt;flagslist&amp;gt;&amp;lt;action&amp;gt;&lt;br /&gt;
          &amp;lt;sprite&amp;gt; := [A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9]&lt;br /&gt;
          &amp;lt;frameletters&amp;gt; := [A-Z\[\\\]]+&lt;br /&gt;
          &amp;lt;tics&amp;gt; := [0-9]+&lt;br /&gt;
          &amp;lt;flagslist&amp;gt; := &amp;lt;flag&amp;gt;&amp;lt;flagslist&amp;gt;&lt;br /&gt;
            &amp;lt;flag&amp;gt; := &amp;quot;bright&amp;quot; | &amp;quot;fast&amp;quot; | &amp;quot;offset&amp;quot; &#039;(&#039; &amp;lt;x&amp;gt; &#039;,&#039; &amp;lt;y&amp;gt; [&#039;,&#039; &amp;quot;interpolate&amp;quot;] &#039;)&#039; | nil&lt;br /&gt;
          &amp;lt;action&amp;gt; := &amp;lt;name&amp;gt;&lt;br /&gt;
                    | &amp;lt;name&amp;gt; &#039;(&#039; &amp;lt;arglist&amp;gt; &#039;)&#039;&lt;br /&gt;
                    | nil&lt;br /&gt;
            &amp;lt;name&amp;gt; := [A-Za-z0-9_]+&lt;br /&gt;
            &amp;lt;arglist&amp;gt; := &amp;lt;arg&amp;gt; &#039;,&#039; &amp;lt;arglist&amp;gt; | &amp;lt;arg&amp;gt; | nil&lt;br /&gt;
              &amp;lt;arg&amp;gt; := &amp;quot;string&amp;quot; | number&lt;br /&gt;
Here&#039;s an example, the Sergeant&#039;s DECORATE state (from base/doom/things.edf):&lt;br /&gt;
  states&lt;br /&gt;
  @&amp;quot;&lt;br /&gt;
  Spawn:&lt;br /&gt;
    SPOS AB 10 A_Look&lt;br /&gt;
    loop&lt;br /&gt;
  See:&lt;br /&gt;
    SPOS AABBCCDD 3 A_Chase&lt;br /&gt;
    loop&lt;br /&gt;
  Missile:&lt;br /&gt;
    SPOS E 10        A_FaceTarget&lt;br /&gt;
    SPOS F 10 bright A_SPosAttack&lt;br /&gt;
    SPOS E 10&lt;br /&gt;
    goto See&lt;br /&gt;
  Pain:&lt;br /&gt;
    SPOS G 3&lt;br /&gt;
    SPOS G 3 A_Pain&lt;br /&gt;
    goto See&lt;br /&gt;
  Death:&lt;br /&gt;
    SPOS H 5&lt;br /&gt;
    SPOS I 5 A_Scream&lt;br /&gt;
    SPOS J 5 A_Fall&lt;br /&gt;
    SPOS K 5&lt;br /&gt;
    SPOS L -1&lt;br /&gt;
    stop&lt;br /&gt;
  XDeath:&lt;br /&gt;
    SPOS M      5&lt;br /&gt;
    SPOS N      5 A_XScream&lt;br /&gt;
    SPOS O      5 A_Fall&lt;br /&gt;
    SPOS PQRST  5&lt;br /&gt;
    SPOS U     -1&lt;br /&gt;
    stop&lt;br /&gt;
  Raise:&lt;br /&gt;
    SPOS LKJIH 5&lt;br /&gt;
    goto See&lt;br /&gt;
  &amp;quot;@  &lt;br /&gt;
Here we can see three kinds of units: labels, frames and keywords.&lt;br /&gt;
===Labels===&lt;br /&gt;
Labels are the &#039;&#039;&#039;Spawn:&#039;&#039;&#039;, &#039;&#039;&#039;See:&#039;&#039;&#039;, &#039;&#039;&#039;Missile:&#039;&#039;&#039; and other lines ended with colons. They designate starting points for special thing states, equivalent to non-DECORATE EDF [[thingtype]] &#039;&#039;&#039;spawnstate&#039;&#039;&#039;, &#039;&#039;&#039;seestate&#039;&#039;&#039;, &#039;&#039;&#039;missilestate&#039;&#039;&#039; and so on. You can also create your own labels, which will be reachable using keywords like &#039;&#039;&#039;goto&#039;&#039;&#039;, as well as state-jumping [[List of codepointers|codepointers]]. Labels are case-insensitive. The following labels are used natively by Eternity:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Spawn&#039;&#039;&#039;: equivalent of &#039;&#039;&#039;spawnstate&#039;&#039;&#039;: state the thing is spawned at;&lt;br /&gt;
*&#039;&#039;&#039;See&#039;&#039;&#039;: equivalent of &#039;&#039;&#039;seestate&#039;&#039;&#039;: state the monster goes into after seeing a target;&lt;br /&gt;
*&#039;&#039;&#039;Melee&#039;&#039;&#039;: equivalent of &#039;&#039;&#039;meleestate&#039;&#039;&#039;: state the monster goes into after getting close to the target;&lt;br /&gt;
*&#039;&#039;&#039;Missile&#039;&#039;&#039;: equivalent of &#039;&#039;&#039;missilestate&#039;&#039;&#039;: state the monster goes into when deciding to shoot the target;&lt;br /&gt;
*&#039;&#039;&#039;Pain&#039;&#039;&#039;: equivalent of &#039;&#039;&#039;painstate&#039;&#039;&#039;: state the thing goes into when hit;&lt;br /&gt;
*&#039;&#039;&#039;Death&#039;&#039;&#039;: equivalent of &#039;&#039;&#039;deathstate&#039;&#039;&#039;: state the thing goes into when killed or otherwise destroyed;&lt;br /&gt;
*&#039;&#039;&#039;XDeath&#039;&#039;&#039;: equivalent of &#039;&#039;&#039;xdeathstate&#039;&#039;&#039;: optional state the thing goes into when killed with very high damage;&lt;br /&gt;
*&#039;&#039;&#039;Raise&#039;&#039;&#039;: equivalent of &#039;&#039;&#039;raisestate&#039;&#039;&#039;: optional state the corpse goes into when raised by an archvile;&lt;br /&gt;
*&#039;&#039;&#039;Heal&#039;&#039;&#039; (since Feb 21 2016): equivalent of &#039;&#039;&#039;healstate&#039;&#039;&#039;: state to jump to if during [[VileChase]] it encounters a corpse. If not set, it will just go into S_VILE_HEAL1.&lt;br /&gt;
*&#039;&#039;&#039;Crash&#039;&#039;&#039;: equivalent of &#039;&#039;&#039;crashstate&#039;&#039;&#039;: optional state for a corpse to go into when falling and hitting the floor;&lt;br /&gt;
*&#039;&#039;&#039;Active&#039;&#039;&#039;: equivalent of &#039;&#039;&#039;activestate&#039;&#039;&#039;: optional state to go into when triggered by [[Detailed parameterized linedef specification#Things|Thing_Activate]];&lt;br /&gt;
*&#039;&#039;&#039;Inactive&#039;&#039;&#039;: equivalent of &#039;&#039;&#039;inactivestate&#039;&#039;&#039;: optional state to go into when triggered by [[Detailed parameterized linedef specification#Things|Thing_Deactivate]];&lt;br /&gt;
*&#039;&#039;&#039;Pickup.Respawn&#039;&#039;&#039;: state to jump to when the gettable item thing has the &#039;&#039;&#039;RAVENRESPAWN&#039;&#039;&#039; flag and is picked up, after which it waits to respawn;&lt;br /&gt;
*&#039;&#039;&#039;Pickup.Remove&#039;&#039;&#039;: state to jump to when the gettable item thing has the &#039;&#039;&#039;RAVENRESPAWN&#039;&#039;&#039; flag and is picked up, after which it is removed permanently without respawning. This applies for items which for any reasons must not respawn, such as individual dropped items. It&#039;s a property of the particular item, not of the entire thingtype class, so be sure to also include a &#039;&#039;&#039;Pickup.Respawn&#039;&#039;&#039; state.&lt;br /&gt;
*&#039;&#039;&#039;Crunch&#039;&#039;&#039; or &#039;&#039;&#039;Crush&#039;&#039;&#039;: equivalent of &#039;&#039;&#039;crunchstate&#039;&#039;&#039;: optional state to go into when crushed as a dead body by a door or any other sector type. Default depends on game mode. It may be nothing if game mode doesn&#039;t specify anything, in which case there&#039;s no transition.&lt;br /&gt;
====Damage type pain and death states====&lt;br /&gt;
You can also add labels for means-of-death (damage type) specific pain and death states. They&#039;re equivalent to the &#039;&#039;&#039;dmg_painstates&#039;&#039;&#039; and &#039;&#039;&#039;dmg_deathstates&#039;&#039;&#039; thingype fields. You formulate them as such:&lt;br /&gt;
*&#039;&#039;&#039;Pain&#039;&#039;&#039;.&#039;&#039;damage_type&#039;&#039;: for non-death pain states to go into when hit by specific kinds of damage;&lt;br /&gt;
*&#039;&#039;&#039;Death&#039;&#039;&#039;.&#039;&#039;damage_type&#039;&#039;: for death states when hit by specific kinds of damage.&lt;br /&gt;
The built-in damage types are defined in base/things.edf, and you can add your own. Example: define &#039;&#039;&#039;Pain.Pistol&#039;&#039;&#039;, &#039;&#039;&#039;Death.Pistol&#039;&#039;&#039; states when the thing is hit by player pistol bullets and has to react specifically to this kind of damage.&lt;br /&gt;
&lt;br /&gt;
===Frames===&lt;br /&gt;
A frame has the following syntax:&lt;br /&gt;
:&#039;&#039;sprite&#039;&#039; &#039;&#039;frame_letters&#039;&#039; &#039;&#039;tics&#039;&#039; [&#039;&#039;flags_list&#039;&#039;] [&#039;&#039;action&#039;&#039;]&lt;br /&gt;
*&#039;&#039;sprite&#039;&#039;: this is a four letter code corresponding to the sprite lump stem. In Doom, for example, imps have TROO, zombiemen have POSS and so on. For the invisible sprite, use TNT1.&lt;br /&gt;
*&#039;&#039;frame_letters&#039;&#039;: this is one or more letters corresponding to the sprite frame index. Include more than one letter if you want a sequence of frames with the same properties (duration, flags and action).&lt;br /&gt;
*&#039;&#039;tics&#039;&#039;: the duration, in tics (1/35 seconds), of each frame. Do not use value 0 in loops. Setting value -1 will cause the thing to stop at that frame, without going forward.&lt;br /&gt;
*&#039;&#039;flags_list&#039;&#039;: zero or more flags, separated by spaces. The flags can be:&lt;br /&gt;
**&#039;&#039;&#039;bright&#039;&#039;&#039;: causes the sprite to be full bright in any place;&lt;br /&gt;
**&#039;&#039;&#039;fast&#039;&#039;&#039;: makes the frame take half as long on fast skill levels (used in Doom by the demons);&lt;br /&gt;
**&#039;&#039;&#039;offset&#039;&#039;&#039;(&#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;[, &#039;&#039;&#039;interpolate&#039;&#039;&#039;]): useful for weapon HUD sprites, causes the image to be offset by the exact amount of &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039; from the center-bottom, overriding the current bob amount. Under Doom, &#039;&#039;x&#039;&#039; must be nonzero for both offsets to have effect; under other games, each of them needs to be nonzero for each of them to have effect — otherwise the offset will be preserved from the previous frame. You can override the 0 condition choice (Doom/non-Doom) in [[gameproperties]]. Beware that &#039;&#039;y&#039;&#039; has the origin at 32. An offset of (0, 32) keeps the weapon at the origin, but because of Doom&#039;s rules, you may need to have (1, 32) or (-1, 32) instead. Do note that this &#039;&#039;&#039;offset&#039;&#039;&#039; vector has been available in vanilla Doom as well, modifiable under [[DeHackEd]], and it is the same thing as the &#039;&#039;&#039;misc1&#039;&#039;&#039; and &#039;&#039;&#039;misc2&#039;&#039;&#039; [[frame]] fields, which means these work as parameters for several [[MBF]] [[codepointers]]. However, currently you cannot use strings or other expressions in &#039;&#039;x&#039;&#039; and &#039;&#039;y&#039;&#039;, unlike when using the full &#039;&#039;&#039;frame&#039;&#039;&#039; section or the &#039;&#039;&#039;cmp&#039;&#039;&#039; specifier. In the classic games original designs, only Hexen has used &#039;&#039;&#039;offset&#039;&#039;&#039;, in order to animate its melee weapons.&lt;br /&gt;
::If &#039;&#039;&#039;interpolate&#039;&#039;&#039; is added, it causes the movement between offsets to be smooth. By default interpolation is disabled when &#039;&#039;&#039;offset&#039;&#039;&#039; is specified.&lt;br /&gt;
*&#039;&#039;action&#039;&#039;: this can be a [[List of codepointers|codepointer]], optionally followed by a list of arguments enclosed by parentheses. Make sure to include strings in double quotes (&amp;quot;&amp;quot;). Conventionally, from ZDoom, and based on the Doom source code in general, codepointers are prefixed with &#039;&#039;&#039;A_&#039;&#039;&#039;, but it is not required here.&lt;br /&gt;
&lt;br /&gt;
====Using state-switching codepointers with DECORATE====&lt;br /&gt;
Some codepointers, such as [[CounterJump]], [[Jump]] and so on let the calling thing jump to specific frames. For the frame name parameter, just use the label name.&lt;br /&gt;
&lt;br /&gt;
The MBF-based [[RandomJump]] uses the &#039;&#039;&#039;misc1&#039;&#039;&#039; and &#039;&#039;&#039;misc2&#039;&#039;&#039; frame fields as parameters. Since the DECORATE style syntax currently only supports &#039;&#039;&#039;misc1&#039;&#039;&#039; and &#039;&#039;&#039;misc2&#039;&#039;&#039; through the &#039;&#039;&#039;offset&#039;&#039;&#039; specifier, you are better off using [[Jump]], which uses args, is based on ZDoom&#039;s implementation and only works for DECORATE state syntax. Other codepointers, such as [[CounterJump]], work well both for non-DECORATE and DECORATE syntax. Certain codepointers such as [[CounterSwitch]] aren&#039;t designed for DECORATE state syntax however.&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
These are placed at the end of a state, before other labels. They are:&lt;br /&gt;
*&#039;&#039;&#039;stop&#039;&#039;&#039;: this is equivalent to setting next frame to 0. If the last frame in the state has a finite (different from -1) duration, it will disappear. Otherwise it&#039;s commonly used after -1 duration frames when nothing is expected to follow.&lt;br /&gt;
*&#039;&#039;&#039;wait&#039;&#039;&#039;: this causes the last frame to loop back into itself. If the duration is 0, it will be adjusted to 1.&lt;br /&gt;
*&#039;&#039;&#039;loop&#039;&#039;&#039;: this causes the last frame to loop back to where its label points.&lt;br /&gt;
*&#039;&#039;&#039;goto&#039;&#039;&#039; &#039;&#039;jump_label&#039;&#039;: sets the next frame of the last frame to the one designated by the label.&lt;br /&gt;
&lt;br /&gt;
==Differences from ZDoom&#039;s DECORATE==&lt;br /&gt;
* The frame after a &#039;&#039;&#039;goto&#039;&#039;&#039; line must be labelled in Eternity. Of course, labels can be native (spawn, see, pain etc.)  or user-defined.&lt;br /&gt;
&lt;br /&gt;
[[category:EDF]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_thing_reference&amp;diff=6371</id>
		<title>EDF thing reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_thing_reference&amp;diff=6371"/>
		<updated>2025-08-23T17:12:38Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* States */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Thing types define monsters, lamps, control points, items, etc -- anything that moves, occupies space, can display a sprite, or is useful for singling out locations. Things have unique names, or mnemonics, for easy identification. They&#039;re referenced in several places by their name, such as the console command &#039;&#039;Summon&#039;&#039;, or [[List of codepointers|action functions]] dealing with spawning things (such as [[Spawn]] or [[MissileAttack]]).&lt;br /&gt;
&lt;br /&gt;
If a thing type&#039;s mnemonic is not unique, the latest definition of a thing type with that mnemonic replaces any earlier ones. Like most other identifiers in EDF (but not lump names or subnames), thing type mnemonics are completely case-insensitive.&lt;br /&gt;
&lt;br /&gt;
New objects, created via EDF files or wad lumps, can be later tweaked with Dehacked (BEX) patches, if they&#039;re given a unique &#039;&#039;&#039;dehackednum&#039;&#039;&#039; entry. For forward compatibility, the &#039;&#039;&#039;dehackednum&#039;&#039;&#039; has to be greater than or equal to 10000.&lt;br /&gt;
&lt;br /&gt;
For placing the thing on the map, an integer field called &#039;&#039;&#039;doomednum&#039;&#039;&#039; must be specified. For forward compatibility it has to be greater than or equal to 20000 or in the 3000-3999 range. Due to how binary WAD files format their THINGS lumps, &#039;&#039;&#039;doomednum&#039;&#039;&#039; values have to be less than 32767, though textmode representations such as [[ExtraData]] or UDMF solve this limit.&lt;br /&gt;
&lt;br /&gt;
If you want to know the base game thing types from Doom, you can look on the [https://github.com/team-eternity/eternity/blob/master/base/doom/things.edf list of Doom thing types].&lt;br /&gt;
&lt;br /&gt;
{{See|Thing type flags}}&lt;br /&gt;
{{See|thinggroup}}. Some of the customization should be set in &#039;&#039;&#039;thinggroup&#039;&#039;&#039; blocks, which group multiple things. Most notably, infighting control. There are also flags and &#039;&#039;&#039;damagefactor&#039;&#039;&#039; &amp;quot;immune&amp;quot; (see this page) settings.&lt;br /&gt;
{{Backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
==Eternity Alfheim syntax==&lt;br /&gt;
For versions of Eternity from Alfheim up, EDF thingtypes support the following syntax. Make sure to add:&lt;br /&gt;
 setdialect(&amp;quot;ALFHEIM&amp;quot;)&lt;br /&gt;
before using this syntax:&lt;br /&gt;
 thingtype &amp;lt;unique name&amp;gt; : &amp;lt;inherited thingtype&amp;gt;, &amp;lt;doomednum&amp;gt;, &amp;lt;dehackednum&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;lt;other attributes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Header properties===&lt;br /&gt;
* &#039;&#039;&amp;lt;inherited thingtype&amp;gt;&#039;&#039; must be a value, even if the thingtype doesn&#039;t inherit from anything else. In that case, it must be &#039;&#039;&#039;Mobj&#039;&#039;&#039;, which is a placeholder value belonging to no real thingtype.&lt;br /&gt;
* &#039;&#039;&amp;lt;doomednum&amp;gt;&#039;&#039; and &#039;&#039;&amp;lt;dehackednum&amp;gt;&#039;&#039; can be -1 if not used. If both are -1, they can be omitted, leaving just this:&lt;br /&gt;
 thingtype &amp;lt;unique name&amp;gt; : &amp;lt;inherited thingtype&amp;gt; {&amp;lt;attributes&amp;gt;}&lt;br /&gt;
* If header properties are used, the pre-Alfheim &#039;&#039;&#039;inherits&#039;&#039;&#039;, &#039;&#039;&#039;doomednum&#039;&#039;&#039; and &#039;&#039;&#039;dehackednum&#039;&#039;&#039; attributes are not used.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
 thingtype &amp;lt;unique name&amp;gt; [: &amp;lt;parent type&amp;gt; [, &amp;lt;doomednum&amp;gt; [, &amp;lt;dehackednum&amp;gt;]]]&lt;br /&gt;
 {&lt;br /&gt;
   doomednum              &amp;lt;number&amp;gt;&lt;br /&gt;
   dehackednum            &amp;lt;unique number&amp;gt;&lt;br /&gt;
   inherits               &amp;lt;thingtype&amp;gt;&lt;br /&gt;
   compatname             &amp;lt;name&amp;gt;&lt;br /&gt;
   basictype              &amp;lt;basic type qualifier&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // NOTE: for this section, see the &amp;quot;states&amp;quot; field below and use it instead of these.&lt;br /&gt;
   spawnstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   seestate               &amp;lt;frame&amp;gt;&lt;br /&gt;
   painstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   dmg_painstates         {&amp;lt;damage type&amp;gt;, &amp;lt;frame&amp;gt;, ...}&lt;br /&gt;
   dmg_painstates.add     {&amp;lt;damage type&amp;gt;, &amp;lt;frame&amp;gt;, ...}&lt;br /&gt;
   dmg_painstates.remove  {&amp;lt;damage type&amp;gt;, ...}&lt;br /&gt;
   meleestate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   missilestate           &amp;lt;frame&amp;gt;&lt;br /&gt;
   deathstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   dmg_deathstates        {&amp;lt;damage type&amp;gt;, &amp;lt;frame&amp;gt;, ...}&lt;br /&gt;
   dmg_deathstates.add    {&amp;lt;damage type&amp;gt;, &amp;lt;frame&amp;gt;, ...}&lt;br /&gt;
   dmg_deathstates.remove {&amp;lt;damage type&amp;gt;, ...}&lt;br /&gt;
   xdeathstate            &amp;lt;frame&amp;gt;&lt;br /&gt;
   raisestate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   healstate              &amp;lt;frame&amp;gt;  // since Feb 21 2016&lt;br /&gt;
   crashstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   activestate            &amp;lt;frame&amp;gt;&lt;br /&gt;
   inactivestate          &amp;lt;frame&amp;gt;&lt;br /&gt;
   crunchstate            &amp;lt;frame&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   seesound               &amp;lt;sound&amp;gt;&lt;br /&gt;
   attacksound            &amp;lt;sound&amp;gt;&lt;br /&gt;
   painsound              &amp;lt;sound&amp;gt;&lt;br /&gt;
   deathsound             &amp;lt;sound&amp;gt;&lt;br /&gt;
   activesound            &amp;lt;sound&amp;gt;&lt;br /&gt;
   activatesound          &amp;lt;sound&amp;gt;&lt;br /&gt;
   deactivatesound        &amp;lt;sound&amp;gt;&lt;br /&gt;
   ripsound               &amp;lt;sound&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   spawnhealth            &amp;lt;number&amp;gt;&lt;br /&gt;
   gibhealth              &amp;lt;number&amp;gt;&lt;br /&gt;
   reactiontime           &amp;lt;number&amp;gt;&lt;br /&gt;
   painchance             &amp;lt;number&amp;gt;&lt;br /&gt;
   speed                  &amp;lt;number OR floating-point number&amp;gt;&lt;br /&gt;
   fastspeed              &amp;lt;number OR floating-point number&amp;gt;&lt;br /&gt;
   radius                 &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   height                 &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   correct_height         &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   mass                   &amp;lt;number&amp;gt;&lt;br /&gt;
   respawntime            &amp;lt;number&amp;gt;&lt;br /&gt;
   respawnchance          &amp;lt;number&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   damage                 &amp;lt;number&amp;gt;&lt;br /&gt;
   damagemod              &amp;lt;number&amp;gt;&lt;br /&gt;
   dmgspecial             &amp;lt;dmgspecial name&amp;gt;&lt;br /&gt;
   missiletype            &amp;lt;option&amp;gt;&lt;br /&gt;
   aimshift               &amp;lt;number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   meleerange             &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   missileheight          &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   bulletzoffset          &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   damagefactor           &amp;lt;damage type&amp;gt;, &amp;lt;floating point number&amp;gt;|immune[, rounded]&lt;br /&gt;
   damagefactor           &amp;lt;damage type&amp;gt;, &amp;lt;floating point number&amp;gt;|immune[, rounded]&lt;br /&gt;
   ...&lt;br /&gt;
   damagefactor.remove    &amp;lt;damage type&amp;gt;&lt;br /&gt;
   cleardamagefactors&lt;br /&gt;
 &lt;br /&gt;
   topdamage              &amp;lt;number&amp;gt;&lt;br /&gt;
   topdamagemask          &amp;lt;number&amp;gt;&lt;br /&gt;
   mod                    &amp;lt;MOD name OR number&amp;gt;&lt;br /&gt;
   obituary_normal        &amp;lt;string&amp;gt;&lt;br /&gt;
   obituary_melee         &amp;lt;string&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   bloodcolor             &amp;lt;number&amp;gt;&lt;br /&gt;
   nukespecial            &amp;lt;BEX codepointer mnemonic&amp;gt;&lt;br /&gt;
   droptype               &amp;lt;thing type mnemonic&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   bloodbehavior          &amp;lt;action&amp;gt;, &amp;lt;behavior&amp;gt;&lt;br /&gt;
   clearbloodbehaviors&lt;br /&gt;
   bloodtype.normal       &amp;lt;name&amp;gt;&lt;br /&gt;
   bloodtype.impact       &amp;lt;name&amp;gt;&lt;br /&gt;
   bloodtype.rip          &amp;lt;name&amp;gt;&lt;br /&gt;
   bloodtype.crush        &amp;lt;name&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   cleardropitems&lt;br /&gt;
   dropitem               &amp;lt;type&amp;gt;, [, &amp;lt;chance&amp;gt; [, &amp;lt;amount&amp;gt; [, &amp;lt;toss&amp;gt;]]]&lt;br /&gt;
   dropitem.remove        &amp;lt;type&amp;gt;&lt;br /&gt;
   collectionspawn        &amp;lt;thingtype&amp;gt; [, &amp;lt;spchance&amp;gt; [, &amp;lt;coopchance&amp;gt; [, &amp;lt;dmchance&amp;gt;]]]&lt;br /&gt;
   itemrespawnat          &amp;lt;thingtype&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   cflags                 &amp;lt;flag list&amp;gt;&lt;br /&gt;
   addflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   remflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   flags                  &amp;lt;flag list&amp;gt;&lt;br /&gt;
   flags2                 &amp;lt;flag list&amp;gt;&lt;br /&gt;
   flags3                 &amp;lt;flag list&amp;gt;&lt;br /&gt;
   flags4                 &amp;lt;flag list&amp;gt;&lt;br /&gt;
   flags5                 &amp;lt;flag list&amp;gt;&lt;br /&gt;
   particlefx             &amp;lt;particle effect flag list&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   translucency           &amp;lt;number OR percentage&amp;gt;&lt;br /&gt;
   translation            &amp;lt;number OR translation table lump name&amp;gt;&lt;br /&gt;
   tranmap                &amp;lt;lump name&amp;gt;&lt;br /&gt;
   skinsprite             &amp;lt;sprite&amp;gt;&lt;br /&gt;
   defaultsprite          &amp;lt;sprite&amp;gt;&lt;br /&gt;
   alphavelocity          &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   xscale                 &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   yscale                 &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   trail.type             &amp;lt;thing type&amp;gt;&lt;br /&gt;
   trail.zoffset          &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   trail.spawnchance      &amp;lt;number&amp;gt;&lt;br /&gt;
   trail.sparsity         &amp;lt;number&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   acs_spawndata          {num &amp;lt;number&amp;gt; modes &amp;lt;mnemonic&amp;gt;}&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect&lt;br /&gt;
   {&lt;br /&gt;
     effects              &amp;lt;effect1&amp;gt;, ...&lt;br /&gt;
     changeweapon         &amp;lt;weapon&amp;gt;&lt;br /&gt;
     message              &amp;lt;text&amp;gt;&lt;br /&gt;
     sound                &amp;lt;sound&amp;gt;&lt;br /&gt;
     flags                &amp;lt;flags&amp;gt;&lt;br /&gt;
   }&lt;br /&gt;
   clearpickupeffect&lt;br /&gt;
 &lt;br /&gt;
   firstdecoratestate     &amp;lt;frame&amp;gt;&lt;br /&gt;
   states                 &amp;lt;[[DECORATE state syntax]] heredoc&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
====ID / Type Info====&lt;br /&gt;
*&#039;&#039;&#039;doomednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:The identification number, which makes this actor type placeable in maps. Zombieman monsters for example have &#039;&#039;&#039;doomednum&#039;&#039;&#039; 3004. Objects which don&#039;t need to be placed on the map can have &#039;&#039;&#039;doomednum&#039;&#039;&#039; -1. For EDF, recommended numbers are in the ranges 3000-3999 and 20000 up. Other numbers may be used by future versions of Eternity, so they&#039;re not safe to use.&lt;br /&gt;
:NOTE: you can just use the first number following the inherited class, in the title. Just remember to start the script with &amp;lt;code&amp;gt;setdialect(&amp;quot;alfheim&amp;quot;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Fake array index number, for Dehacked patch (BEX or DEH file) compatibility. It has to be an unique number if not -1. Safe numbers are from 10000 up.&lt;br /&gt;
:NOTE: you can use the second number following the inherited class in the title. For this, you also need &amp;lt;code&amp;gt;setdialect(&amp;quot;alfheim&amp;quot;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*&#039;&#039;&#039;inherits&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Sets the thing type from which this will copy properties. All of the properties except &#039;&#039;&#039;dehackednum&#039;&#039;&#039; will be copied from the base actor type.&lt;br /&gt;
:NOTE: you can use the class in the title properties after the colon, instead of &#039;&#039;&#039;inherits&#039;&#039;&#039; in the &#039;&#039;&#039;thingtype&#039;&#039;&#039; body. You also need &amp;lt;code&amp;gt;setdialect(&amp;quot;alfheim&amp;quot;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*&#039;&#039;&#039;compatname&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Sets a &amp;quot;compatible name&amp;quot; useful for [[ACS]] scripts copied from GZDoom mods or for cross-port usage. Typically the need for this is because of ACS scripts assuming thingtype names from GZDoom, and in the base Eternity definitions, &#039;&#039;&#039;compatname&#039;&#039;&#039; is set to names which GZDoom uses for its thingtypes.&lt;br /&gt;
:Setting this flag is not needed and shouldn&#039;t be done in mods.&lt;br /&gt;
*&#039;&#039;&#039;basictype&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:&#039;&#039;&#039;Basictype&#039;&#039;&#039; is a list of common flags used in Doom and derived games. Using &#039;&#039;&#039;basictype&#039;&#039;&#039; instead of setting individual flags is encouraged, in order to keep up with Eternity engine updates. Other flags may be subsequently added or removed with &#039;&#039;&#039;addflags&#039;&#039;&#039; or &#039;&#039;&#039;remflags&#039;&#039;&#039;. See the [[Thing type flags]] page for a full list. The &#039;&#039;&#039;basictype&#039;&#039;&#039; mnemonics follow:&lt;br /&gt;
:*&#039;&#039;Monster&#039;&#039;&lt;br /&gt;
::An ordinary walking monster with no fancy features.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;SOLID+SHOOTABLE+COUNTKILL+FOOTCLIP+SPACMONSTER+PASSMOBJ&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;FlyingMonster&#039;&#039;&lt;br /&gt;
::An ordinary flying monster.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;SOLID+SHOOTABLE+COUNTKILL+NOGRAVITY+FLOAT+SPACMONSTER+PASSMOBJ&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;FriendlyHelper&#039;&#039;&lt;br /&gt;
::A player helper with maximum friendliness options.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;SOLID+SHOOTABLE+COUNTKILL+FRIEND+JUMPDOWN+FOOTCLIP+WINDTHRUST+SUPERFRIEND+SPACMONSTER+PASSMOBJ&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;Projectile&#039;&#039;&lt;br /&gt;
::A standard projectile.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;NOBLOCKMAP+NOGRAVITY+DROPOFF+MISSILE+NOCROSS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;PlayerProjectile&#039;&#039;&lt;br /&gt;
::A projectile for use by players.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;NOBLOCKMAP+NOGRAVITY+DROPOFF+MISSILE+NOCROSS+SPACMISSILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;Seeker&#039;&#039;&lt;br /&gt;
::A missile prepared to be fired by homing missile codepointers.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;NOBLOCKMAP+NOGRAVITY+DROPOFF+MISSILE+NOCROSS+SEEKERMISSILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;SolidDecor&#039;&#039;&lt;br /&gt;
::A solid decorative item.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; SOLID&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;HangingDecor&#039;&#039;&lt;br /&gt;
::A hanging decorative item that is passable even without 3D object clipping.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;SPAWNCEILING+NOGRAVITY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;SolidHangingDecor&#039;&#039;&lt;br /&gt;
::A solid hanging decorative item.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;SOLID+SPAWNCEILING+NOGRAVITY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;ShootableDecor&#039;&#039;&lt;br /&gt;
::A shootable decorative item.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;SOLID+SHOOTABLE+NOBLOOD&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;Fog&#039;&#039;&lt;br /&gt;
::A fog item such as telefog or item fog.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;NOBLOCKMAP+NOGRAVITY+TRANSLUCENT+NOSPLASH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;Item&#039;&#039;&lt;br /&gt;
::A collectable item. Doesn&#039;t count towards the item score.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; SPECIAL&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;ItemCount&#039;&#039;&lt;br /&gt;
::A collectable item. Counts for item score.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;SPECIAL+COUNTITEM&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;TerrainBase&#039;&#039;&lt;br /&gt;
::A TerrainTypes base item.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;NOBLOCKMAP+NOGRAVITY+NOSPLASH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;TerrainChunk&#039;&#039;&lt;br /&gt;
::A TerrainTypes chunk item.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;NOBLOCKMAP+DROPOFF+MISSILE+LOGRAV+NOSPLASH+NOCROSS+CANNOTPUSH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;ControlPoint&#039;&#039;&lt;br /&gt;
::An inert control point.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;NOBLOCKMAP+NOSECTOR+NOGRAVITY&amp;quot;&lt;br /&gt;
::&#039;&#039;&#039;spawnstate&#039;&#039;&#039; S_TNT1 &lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;ControlPointGrav&#039;&#039;&lt;br /&gt;
::An control point that is subject to gravity. Because of this, it&#039;s not considered inert.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;DONTDRAW+NOSPLASH&amp;quot;&lt;br /&gt;
::&#039;&#039;&#039;spawnstate&#039;&#039;&#039; S_TNT1&lt;br /&gt;
&lt;br /&gt;
====States====&lt;br /&gt;
*&#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039;&lt;br /&gt;
:Sets the first frame in a sequential list of dummy frames that use the internal Decorate-style defined &#039;&#039;&#039;states&#039;&#039;&#039; of this actor for [[EDF delta structures|framedelta]] compatibility. It&#039;s not required unless the intention is to make the Decorate states of this thing accessible from other thing types. Default games&#039; (Doom, Heretic) thing types use externalized frames for all thing types, for compatibility.&lt;br /&gt;
*&#039;&#039;&#039;states&#039;&#039;&#039;&lt;br /&gt;
{{see|DECORATE state syntax}}&lt;br /&gt;
:Default = nothing&lt;br /&gt;
:Defines frames using [http://zdoom.org/wiki/DECORATE DECORATE]-style state definitions. This means it won&#039;t be necessary to define separate [[frame]] blocks for each individual frame. See the DECORATE reference at the ZDoom wiki for documentation on its syntax. Using the &#039;&#039;&#039;states&#039;&#039;&#039; field instead of any of the ones below results in more concise text, but also the newly created frames won&#039;t be accessible from outside (other thingtypes, Dehacked patches or delta structures), unless you use the &#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039; field as well. Like normally, [[List of codepointers|codepointers]] may or may not be preceded by &#039;&#039;&#039;A_&#039;&#039;&#039;. The DECORATE code has to be implemented via a heredoc: a text string that spans on multiple lines. Unlike a regular string which uses quotation marks, the heredoc is marked by @&amp;quot; and &amp;quot;@ respectively. Example on an imp-like monster (the &#039;=&#039; sign is optional):&lt;br /&gt;
 states =&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
      TROO AB 10 A_Look&lt;br /&gt;
      loop&lt;br /&gt;
   See:&lt;br /&gt;
      TROO AABBCCDD 3 A_Chase&lt;br /&gt;
      loop&lt;br /&gt;
   Pain:&lt;br /&gt;
      TROO H 2&lt;br /&gt;
      TROO H 2 A_Pain&lt;br /&gt;
      goto See&lt;br /&gt;
   Melee:&lt;br /&gt;
   Missile:&lt;br /&gt;
      TROO EF 8 A_FaceTarget&lt;br /&gt;
      TROO G  6 A_TroopAttack&lt;br /&gt;
      goto See   &lt;br /&gt;
   Death:&lt;br /&gt;
      TROO I  8&lt;br /&gt;
      TROO J  8  A_Scream&lt;br /&gt;
      TROO K  6&lt;br /&gt;
      TROO L  6  A_Fall&lt;br /&gt;
      TROO M -1&lt;br /&gt;
      stop&lt;br /&gt;
   XDeath:&lt;br /&gt;
      TROO N    5&lt;br /&gt;
      TROO O    5 A_XScream&lt;br /&gt;
      TROO P    5&lt;br /&gt;
      TROO Q    5 A_Fall&lt;br /&gt;
      TROO RST  5&lt;br /&gt;
      TROO U   -1&lt;br /&gt;
      stop&lt;br /&gt;
   Raise:&lt;br /&gt;
      TROO ML  8&lt;br /&gt;
      TROO KJI 6&lt;br /&gt;
      goto See&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
:A &amp;quot;fast&amp;quot; flag is now allowed between the tics and action function of DECORATE states (along with the pre-existing &amp;quot;bright&amp;quot; flag) which determines if that state halves its &amp;quot;tics&amp;quot; value when the game is in -fast or Nightmare skill. Example (from demon&#039;s states):&lt;br /&gt;
  states&lt;br /&gt;
  @&amp;quot;&lt;br /&gt;
  See:&lt;br /&gt;
    SARG AABBCCDD 2 fast A_Chase&lt;br /&gt;
    loop&lt;br /&gt;
  Melee:&lt;br /&gt;
    SARG EF 8 fast A_FaceTarget&lt;br /&gt;
    SARG G  8 fast A_SargAttack&lt;br /&gt;
    goto See&lt;br /&gt;
  Pain:&lt;br /&gt;
    SARG H 2 fast&lt;br /&gt;
    SARG H 2 fast A_Pain&lt;br /&gt;
    goto See&lt;br /&gt;
  &amp;quot;@  &lt;br /&gt;
*&#039;&#039;&#039;spawnstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a thing starts in when it is spawned. Monsters generally use this frame to stand still and look for targets. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;spawnstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;seestate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a monster will jump to when it sees or hears a target during a [[Look]] (monster standing unawakened) check. If an object is alive and has a seestate, it is considered &#039;&#039;sentient&#039;&#039; by certain game mechanics.&lt;br /&gt;
*&#039;&#039;&#039;painstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame a thing may randomly enter when it has been injured. If set to S_NULL, the creature will be removed instantly from the game if the random check succeeds.&lt;br /&gt;
*&#039;&#039;&#039;dmg_painstates&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:This is a list of one or more damagetype/frame pairs, enclosed in braces. For example:&lt;br /&gt;
 dmg_painstates &lt;br /&gt;
 { &lt;br /&gt;
    Fire, S_HPLAY_FPAIN1,&lt;br /&gt;
    Lava, S_HPLAY_LPAIN1&lt;br /&gt;
 }&lt;br /&gt;
makes the actor go to frame S_HPLAY_FPAIN1 when damaged by fire, or to S_HPLAY_LPAIN1 when harmed by lava. It defaults to its &#039;&#039;&#039;painstate&#039;&#039;&#039; if the damage is of another nature. The damage type of an actor is set up through the &#039;&#039;&#039;mod&#039;&#039;&#039; field.&lt;br /&gt;
*&#039;&#039;&#039;dmg_painstates.add&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;dmg_painstates.remove&#039;&#039;&#039;&lt;br /&gt;
:Can be used for derived actor types, who can have more or fewer specialized pain states than their ancestors. &#039;&#039;Dmg_painstates.add&#039;&#039; has the same format as &#039;&#039;dmg_painstates&#039;&#039;, but &#039;&#039;dmg_painstates.remove&#039;&#039; only lists the damagetypes. For example:&lt;br /&gt;
 dmg_painstates.remove&lt;br /&gt;
 {&lt;br /&gt;
    Fire, lava&lt;br /&gt;
 }&lt;br /&gt;
makes them get hurt normally from fire or lava, without going to special pain states.&lt;br /&gt;
*&#039;&#039;&#039;meleestate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:If this frame is not S_NULL, monsters will have a slightly lower range attack probability and when they are within about 64 units of their target, they will enter this frame to perform a melee attack.&lt;br /&gt;
*&#039;&#039;&#039;missilestate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:If this frame is not S_NULL, monsters chasing a target will randomly enter it to perform a missile attack.&lt;br /&gt;
*&#039;&#039;&#039;deathstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:When a thing dies normally, it will enter this state. If the state is S_NULL, the thing will disappear forever.&lt;br /&gt;
*&#039;&#039;&#039;dmg_deathstates&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;dmg_deathstates.add&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;dmg_deathstates.remove&#039;&#039;&#039;&lt;br /&gt;
:Defaults = (nothing)&lt;br /&gt;
:These three properties work similar to &#039;&#039;dmg_painstates*&#039;&#039;, in that they allow the object to enter special frames depending on the damage type suffered, but if they die. The formats are the same.&lt;br /&gt;
*&#039;&#039;&#039;xdeathstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:If a thing dies by taking enough damage that its health is equal to its negated spawnhealth value (or negated 0.5 spawnhealth value in Heretic), it will enter this frame instead of its deathstate. If this frame is S_NULL, the thing will always die normally.&lt;br /&gt;
*&#039;&#039;&#039;raisestate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:If this frame is not S_NULL, a creature running [[VileChase]] codepointers can perform a resurrection on this actor. When this occurs, the actor will enter this frame along with being restored.&lt;br /&gt;
*&#039;&#039;&#039;healstate&#039;&#039;&#039; (since Feb 21 2016)&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame to jump to if, during a [[VileChase]] frame, the thing encounters a corpse and raises it. If not set (or set to S_NULL), it will actually default to S_VILE_HEAL1, same as in Doom.&lt;br /&gt;
*&#039;&#039;&#039;crashstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:When a thing with this state dies and then subsequently hits the ground, it will enter this state. If this state S_NULL, it is not used.&lt;br /&gt;
*&#039;&#039;&#039;activestate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:State to enter when triggered by the &#039;&#039;&#039;Thing_Activate&#039;&#039;&#039; parameterized special.&lt;br /&gt;
*&#039;&#039;&#039;inactivestate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:State to enter when triggered by the &#039;&#039;&#039;Thing_Deactivate&#039;&#039;&#039; parameterized special.&lt;br /&gt;
*&#039;&#039;&#039;crunchstate&#039;&#039;&#039;&lt;br /&gt;
:State, if specified, to enter when crushed as a dead body by a sector (door, crusher etc.). If unspecified, it depends on game mode, and it&#039;s the pool of blood (S_GIBS) in Doom. NOTE: for DECORATE-style syntax, it&#039;s the Crunch: or Crush: label.&lt;br /&gt;
&lt;br /&gt;
====Sounds====&lt;br /&gt;
*&#039;&#039;&#039;seesound&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:Sets the sound that a monster will play when it awakens. This sound is also played by missiles when they are shot. (Note: &amp;quot;none&amp;quot; is a special mnemonic for no sound) &lt;br /&gt;
*&#039;&#039;&#039;attacksound&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:Sets a sound used by some monster attacks, including the Lost Soul&#039;s charge, or melee attacks.&lt;br /&gt;
*&#039;&#039;&#039;painsound&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:Sets the sound played by the Pain codepointer when this thing uses it.&lt;br /&gt;
*&#039;&#039;&#039;deathsound&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:Sound played by the Scream codepointer. Used to play monster death sounds. &lt;br /&gt;
*&#039;&#039;&#039;activesound&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:Sets the sound used by a thing when it is wandering around. A thing is given a 3 out of 256 chance (1.17%) of making this sound every time it calls the Chase codepointer. There are some new flags3 flags which can alter the behavior of this sound. &lt;br /&gt;
*&#039;&#039;&#039;activatesound&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:Sound to play when triggered by the &#039;&#039;&#039;Thing_Activate&#039;&#039;&#039; parameterized special.&lt;br /&gt;
*&#039;&#039;&#039;deactivatesound&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:Sound to play when triggered by the &#039;&#039;&#039;Thing_Deactivate&#039;&#039;&#039; parameterized special.&lt;br /&gt;
*&#039;&#039;&#039;ripsound&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:Sound to play if it&#039;s a projectile using the &#039;&#039;&#039;RIP&#039;&#039;&#039; flag and it&#039;s moving and ripping through shootable targets. This is for example used by the Heretic powered-up Dragon Claw secondary &amp;quot;spiked ball&amp;quot; projectiles when they pass through enemies.&lt;br /&gt;
&lt;br /&gt;
====Basic Stats====&lt;br /&gt;
*&#039;&#039;&#039;spawnhealth&#039;&#039;&#039;&lt;br /&gt;
:Default = 1000&lt;br /&gt;
:Sets a thing&#039;s maximum amount of life.&lt;br /&gt;
*&#039;&#039;&#039;gibhealth&#039;&#039;&#039; &#039;&#039;number&#039;&#039;&lt;br /&gt;
:gibhealth overrides the gamemode default behavior for determining the negative amount of health at which a thing uses its &amp;quot;extreme&amp;quot; death state rather than its normal one. This is ordinarily defined in terms of the spawnhealth (Doom and Strife thingtypes gib at -spawnhealth; Heretic and Hexen thingtypes gib at -(spawnhealth/2).&lt;br /&gt;
:If an inheriting thingtype changes its spawnhealth, it will &amp;quot;lose&amp;quot; the inherited definition of gibhealth from its parent. If changing spawnhealth when inheriting from a thingtype that customizes gibhealth, be sure to re-customize the gibhealth in the inheriting thingtype.&lt;br /&gt;
*&#039;&#039;&#039;reactiontime&#039;&#039;&#039;&lt;br /&gt;
:Default = 8&lt;br /&gt;
:Sets an amount of time that a thing must wait under certain circumstances. Monsters use this value as a means to control their rate of attack. This value is also used as an internal field for varying purposes, but those uses are not editable.  &lt;br /&gt;
*&#039;&#039;&#039;painchance&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:Sets the chance out of 255 that this thing will enter its painstate when it is injured. A thing with 0 painchance will never feel pain, whereas a thing with 255 painchance will always feel pain. If a thing has a painchance greater than zero, it should have a valid painstate, otherwise it will disappear forever. &lt;br /&gt;
*&#039;&#039;&#039;speed&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:Value used by monsters as a movement delta per walking frame. The monster will move by an amount relative to this value each time it uses the Chase codepointer. For missiles, this value is a fixed-point number (multiplied by 65536), and represents a constant speed by which the missile advances every game tic. Missile speed is not affected by the missile frame durations, whereas monster walking speed is.&lt;br /&gt;
:This field also supports floating-point values. When a floating-point value is provided, it will be translated into the corresponding fixed-point value. This means that a value of 10.0 is equivalent to the integer value 655360 (10*65536). It is NOT equivalent to 10. This distinction is very important. Small integer speed values are appropriate for monsters, whereas floating-point values will be suitable only for missiles. &lt;br /&gt;
*&#039;&#039;&#039;fastspeed&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:When the game is switched into Nightmare difficulty or -fast mode is active, all thing types with a non-zero fastspeed will have their speed fields changed to their fastspeed value. This enables editing of the -fast speed of projectiles and monsters. For detailed information on speed, see the speed field itself above. Note: as of EDF 1.2, this field also supports floating-point numbers, with the same meaning as that for the speed field.&lt;br /&gt;
*&#039;&#039;&#039;radius&#039;&#039;&#039;&lt;br /&gt;
:Default = 20.0&lt;br /&gt;
:Floating-point value that represents the radius of this thing type. A thing can fit into corridors which are at least as wide as this value times two, plus one unit (ie a thing with radius 32 can fit into a 65-wide hallway). The maximum value this field *should* have is 64.0 units. However, the game breaks its own rule here, giving several monsters radii up to 128 units. These monsters, which include the Mancubus, Arachnotron, and Spider Demon, exhibit clipping errors which enable other things to walk into them, and which can cause some moving sectors to malfunction. Avoid giving things radii larger than 64.0 to remain absolutely safe. &lt;br /&gt;
*&#039;&#039;&#039;height&#039;&#039;&#039;&lt;br /&gt;
:Default = 16.0&lt;br /&gt;
:Floating-point value that represents the height of this thing type. A thing can fit into areas which are of this exact height or taller. Note that in DOOM, this value is only used to see where a monster can fit relative to walls and floor/ceiling heights. For purposes of clipping against other things, monsters were considered to be infinitely tall. However, Eternity&#039;s extended 3D object clipping enables this field to also be used to allow or disallow things to pass over, under, or stand on this thing. &lt;br /&gt;
*&#039;&#039;&#039;correct_height&#039;&#039;&#039;&lt;br /&gt;
:Default = 0.0&lt;br /&gt;
:Floating-point value that represents a height for this thing type which is corrected for 3D object clipping. When 3D object clipping is enabled and the comp_theights variable is set to off, objects which have a non-zero correct_height field will begin to use this value for their height instead of the normal height field. If an object has the 3DDECORATION flags3 bit set, it will still clip missiles at its original height instead of at this value, so that playability of old maps is not altered. This field will generally only be necessary for old DOOM objects, which have now been assigned correct_height values in the default things.edf module. Use for new objects is discouraged; instead, set the height field above to the proper value.&lt;br /&gt;
*&#039;&#039;&#039;mass&#039;&#039;&#039;&lt;br /&gt;
:Default = 100&lt;br /&gt;
:Normal integer value that serves as a mass factor for this object. Mass affects the amount of thrust an object is given when it is damaged, the amount of effect an archvile&#039;s attack can have on it, and for bouncing objects, the rate at which they fall. Objects with a mass less than 10 will cause small terrain hits when landing on terrain that supports small splashes.&lt;br /&gt;
*&#039;&#039;&#039;respawntime&#039;&#039;&#039;&lt;br /&gt;
:Default = 420&lt;br /&gt;
:Sets the number of gametics before the monster may respawn. A tic is 1/35 of a second.&lt;br /&gt;
*&#039;&#039;&#039;respawnchance&#039;&#039;&#039;&lt;br /&gt;
:Default = 4&lt;br /&gt;
:Sets the chance out of 255 that the monster may respawn after respawntime has passed. The check is done for each tic that the monster isn&#039;t blocked.&lt;br /&gt;
====Damage Properties====&lt;br /&gt;
*&#039;&#039;&#039;damage&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:This number is used as a damage multiplier when a [[Thing type flags|MISSILE]] or SKULLFLY actor hits a SHOOTABLE. The damage formula used for impact damage is: &lt;br /&gt;
       ((rnd % damagemod) + 1) * damage   &lt;br /&gt;
:This field is also used as a parameter by some parameterized codepointers, including [[Scratch]], [[BetaSkullAttack]] and [[Detonate]]. See &#039;&#039;&#039;damagemod&#039;&#039;&#039; field&#039;s description for the &amp;lt;code&amp;gt;damagemod&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
*&#039;&#039;&#039;damagemod&#039;&#039;&#039;&lt;br /&gt;
:Default = 8&lt;br /&gt;
:This is the damage modulus to use when computing projectile damage. This is the maximum multiplier of &#039;&#039;&#039;damage&#039;&#039;&#039; for a projectile impact. For Doom projectiles, it&#039;s typically 8. To have constant impact damage, you can set it to 1. Do not set it to 0.&lt;br /&gt;
*&#039;&#039;&#039;dmgspecial&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;none&amp;quot;&lt;br /&gt;
:The dmgspecial field allows specification of a special action that will be taken when this object is involved in damaging another object as the inflictor (an inflictor is the object actually doing the damage, and not necessarily the object that is blamed for the damage). Supported values and their meanings are as follows: &lt;br /&gt;
:*&#039;&#039;none&#039;&#039;&lt;br /&gt;
::This is the default value. No special action is taken; the object is normal when damaging other things. &lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;MinotaurCharge&#039;&#039;&lt;br /&gt;
::If the thing is flying like a skull (has flags bit SKULLFLY set), it will inflict a large amount of thrust on the target along the vector of the impact, will hit it directly for ((rnd % 8) + 1) * 6 damage, and if the target is a player, the player&#039;s controls will be frozen for 14 + (rnd % 8) gametics. When the thing is not in SKULLFLY mode, normal damage is done by all attacks. &lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;Whirlwind&#039;&#039;&lt;br /&gt;
::The target will have its angle and x/y momenta modified by random amounts. If the current level time has the 5th bit (value 16) set and the target is not a boss (possesses the BOSS flag), the target will be given randomized z momentum up to but no greater than 12 units per tic. When the level time is divisible by 8, the target will be hit directly for 3 damage. &lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;PoweredMaceBall&#039;&#039;&lt;br /&gt;
::Behavior specific to the powered mace projectile. Beware that it has behavior specific to some Heretic thing type targets, and it can even cause a target player to use the Chaos Device.&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;PoweredPhoenixFire&#039;&#039;&lt;br /&gt;
::Causes players to be occasionally stunned.&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;BossTeleport&#039;&#039;&lt;br /&gt;
::Causes monsters with properties similar to dismounted D&#039;Sparil to teleport away on impact.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;missiletype&#039;&#039;&#039;&lt;br /&gt;
:Default = &#039;&#039;&#039;Default&#039;&#039;&#039;&lt;br /&gt;
:Type of movement if this thingtype is a projectile. It can be &#039;&#039;&#039;Default&#039;&#039;&#039; or &#039;&#039;&#039;RavenFast&#039;&#039;&#039;. The &#039;&#039;&#039;Default&#039;&#039;&#039; type is usual, allowing speeds up to about 35 (but in practice the limit is around 25, after which it becomes inaccurate). The &#039;&#039;&#039;RavenFast&#039;&#039;&#039; type is for very fast projectiles, as happening to some types in the Heretic and Hexen games, which can be very fast and still being accurate. Do mind that &#039;&#039;&#039;RavenFast&#039;&#039;&#039; works only and strictly with projectiles, and can&#039;t be used with other types of actors, as they&#039;re severely limited on their interactions with the environment.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;aimshift&#039;&#039;&#039; &#039;&#039;number&#039;&#039;&lt;br /&gt;
:If in the range of 0 to 24, this value overrides the &amp;quot;shift&amp;quot; amount that enemies of this object experience while trying to aim at it due to effects like SHADOW, GHOST, and TOTALINVISIBLE. A larger number in this field makes enemies more inaccurate when aiming at this creature. The default value of -1 means that no aiming inaccuracy is experienced *except* what may be incurred from what flags this monster has. A value larger than 24 will, on the other hand, override the creature&#039;s flags and cause enemies to experience no inaccuracy due to to those flags (so for example a creature inheriting from Spectre and setting its aimshift to 25 will behave as though it does not have the SHADOW flag other than for rendering purposes). Values of 20 and 21 are used by the various built-in flag effects.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;meleerange&#039;&#039;&#039;&lt;br /&gt;
:Default = 64.0&lt;br /&gt;
:Sets the close attack distance for this monster, allowing initiation of attack to start at a different distance from default.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;missileheight&#039;&#039;&#039;&lt;br /&gt;
:Default = 32.0&lt;br /&gt;
:Height relative to thing&#039;s feet to spawn new projectiles if no other changes are implied in the codepointer.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;bulletzoffset&#039;&#039;&#039;&lt;br /&gt;
:Default = 8.0&lt;br /&gt;
:Height relative to thing&#039;s middle to source bullet (hitscan) rays.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;damagefactor&#039;&#039;&#039;&lt;br /&gt;
:This sets up the monster&#039;s resistance to various [[EDF damagetype reference|damage types]] (&amp;quot;means of death&amp;quot;). 0 means invincible (&#039;&#039;but still suffering pain&#039;&#039;), 1 full damage. This property has a distinct syntax: there may be as many &#039;&#039;DamageFactor&#039;&#039; lines as damage resistances. Note that setting the factor to 0 won&#039;t prevent monster retaliation. Example of usage:&lt;br /&gt;
 damagefactor fire, 0.3&lt;br /&gt;
 damagefactor lava, 0.2&lt;br /&gt;
:As seen above, no braces are used, and the arguments are separated by commas.&lt;br /&gt;
:You can also use the &#039;&#039;&#039;immune&#039;&#039;&#039; keyword to make a thingtype truly immune to certain damage types, preventing any reaction or infighting. Example:&lt;br /&gt;
 damagefactor fire, immune&lt;br /&gt;
:A third optional argument is possible, called &#039;&#039;&#039;rounded&#039;&#039;&#039;. It was needed to support the various Heretic boss damage resistances. Its presence has the following effects:&lt;br /&gt;
:*The reduction of damage is rounded to the nearest, instead of down.&lt;br /&gt;
:*If there ends up being no damage, the target won&#039;t react as if in pain.&lt;br /&gt;
:Example:&lt;br /&gt;
 damagefactor lava, 0.25, rounded&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;damagefactor.remove&#039;&#039;&#039;&lt;br /&gt;
:Removes the given &#039;&#039;&#039;damagefactor&#039;&#039;&#039; specification if it already exists from an inherited thingtype, or in a delta structure of an existing one.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;cleardamagefactors&#039;&#039;&#039;&lt;br /&gt;
:Removes all already existing &#039;&#039;&#039;damagefactor&#039;&#039;&#039; specifications.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;topdamage&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:This number is a constant amount of damage inflicted on any shootable object that stands on top of this object when 3D object clipping is active. This is useful for objects such as torches and flaming barrels. The frequency of damage is determined by the topdamagemask field.&lt;br /&gt;
*&#039;&#039;&#039;topdamagemask&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:This number determines how often a thing with a non-zero topdamage field burns objects that are standing on top of it. This number should be a power of two minus 1 to work properly, such as 1, 3, 7, 15, or 31 (31 would be approximately once per second and is used by DOOM&#039;s nukage sector types). New to EDF 1.7. &lt;br /&gt;
*&#039;&#039;&#039;mod&#039;&#039;&#039;&lt;br /&gt;
:Default = UNKNOWN (0)&lt;br /&gt;
:Originally standing for &amp;quot;Means of Death&amp;quot;, this field allows you to associate a &#039;&#039;&#039;[[damagetype]]&#039;&#039;&#039; to an inflictor (such as projectile) thing type. Then, you&#039;ll be able to make other thing types resistant to the given damage type by using the &#039;&#039;&#039;damagefactor&#039;&#039;&#039; field. You can give them specific pain or death states as well. Damage types also have the role in multiplayer to specify what obituaries are shown depending on which weapon the player uses.&lt;br /&gt;
:The mnemonics were initially hard-coded, but are now available inside &#039;&#039;base\things.edf&#039;&#039; as &#039;&#039;&#039;damagetype&#039;&#039;&#039; blocks. Notice that the default damage types (means of death) have been differentiated for each player attack, as well as for the various slime types and whatnot, so as to have the obituaries differentiated. Monsters don&#039;t need new damage types to have new obituaries, because these are defined within the &#039;&#039;&#039;thingtype&#039;&#039;&#039; block. See the two fields below.&lt;br /&gt;
*&#039;&#039;&#039;obituary_normal&#039;&#039;&#039;&lt;br /&gt;
:Default = empty&lt;br /&gt;
:Defines the obituary seen by players when killed by a projectile or other miscellaneous attack by a monster. If the obituary is not defined for this type, it will simply read that the player died. Note that you are only allowed to specify an obituary starting immediately after the player&#039;s name. If you want an obituary to say &amp;quot;Player was flamed&amp;quot;, then simply make the obituary read &amp;quot;was flamed&amp;quot;.&lt;br /&gt;
:You can also use a $-prefixed Dehacked string for this.&lt;br /&gt;
*&#039;&#039;&#039;obituary_melee&#039;&#039;&#039;&lt;br /&gt;
:Default = empty&lt;br /&gt;
:Defines the obituary seen by players when killed by a monster&#039;s melee attack. If the obituary is not defined for this type, it will simply read that the player died. Note that you are only allowed to specify an obituary starting immediately after the player&#039;s name. If you want an obituary to say &amp;quot;Player was stabbed mercilessly&amp;quot;, then simply make the obituary read &amp;quot;was stabbed mercilessly&amp;quot;.&lt;br /&gt;
:You can also use a $-prefixed Dehacked string for this.&lt;br /&gt;
&lt;br /&gt;
====Pain/Death Properties====&lt;br /&gt;
*&#039;&#039;&#039;nukespecial&#039;&#039;&#039;&lt;br /&gt;
:Default = NULL&lt;br /&gt;
:This field is the name of a special codepointer to call when the player uses the KILLEM cheat to kill all monsters. Currently only two special pointers are provided for this purpose, PainNukeSpec and SorcNukeSpec. These enable monsters with spawn-on-death actions to either spawn enemies early, or not at all. See the Eternity Engine Definitive Codepointer Reference for detailed information. &lt;br /&gt;
*&#039;&#039;&#039;droptype&#039;&#039;&#039;&lt;br /&gt;
:Default = NONE&lt;br /&gt;
:This field allows the type of thing that is dropped by this thing when it dies to be edited. This field should either be a valid thing type mnemonic, or the special value NONE. &lt;br /&gt;
*&#039;&#039;&#039;cleardropitems&#039;&#039;&#039;&lt;br /&gt;
:The &#039;&#039;&#039;cleardropitems&#039;&#039;&#039; flag, if present, removes ALL dropitems from a thingtype. This is applied *before* any dropitem or droptype fields defined within this thingtype itself. This allows removing all inherited dropitems at once. This field is a flag and does not accept any value. Its presence in a thingtype is not inheritable (things which inherit from this type must again specify cleardropitems if they want to in turn remove any items this type added).&lt;br /&gt;
*&#039;&#039;&#039;dropitem &#039;&#039;type&#039;&#039;, [, &#039;&#039;chance&#039;&#039; [, &#039;&#039;amount&#039;&#039; [, &#039;&#039;toss&#039;&#039;]]]&#039;&#039;&#039;&lt;br /&gt;
:dropitem defines a Doom- or Heretic-style drop item; any number of dropitems can be defined. All are dropped when an enemy dies, subject to possible randomization.&lt;br /&gt;
:*&#039;&#039;type&#039;&#039;: name of EDF thing type to spawn&lt;br /&gt;
:*&#039;&#039;chance&#039;&#039;: If specified, chance between 0 and 255 to spawn this drop, 0 being no chance and 255 being 100%.&lt;br /&gt;
:*&#039;&#039;amount&#039;&#039;: If specified, overrides the &#039;&#039;&#039;dropamount&#039;&#039;&#039; field of an &#039;&#039;&#039;ammoeffect&#039;&#039;&#039; definition. Does not affect any other item effect type. If zero, this field is ignored.&lt;br /&gt;
:*&#039;&#039;toss&#039;&#039;: Flag value. If specified as +toss, the item is a Heretic-style item drop which will be thrown out during the A_Fall action function with randomized velocity. If this flag is not specified, or is specified as -toss, the item is a Doom-style drop item which will be spawned on the floor as soon as the dying thing has reached 0 health.&lt;br /&gt;
:Note: The older &#039;&#039;&#039;droptype&#039;&#039;&#039; field is still supported, and defines a Doom-style dropitem (100% chance, no dropamount override, and never tossed).&lt;br /&gt;
*&#039;&#039;&#039;dropitem.remove&#039;&#039;&#039;&lt;br /&gt;
:removes from this thingtype&#039;s dropitem list the named EDF thingtype. Useful when inheriting.&lt;br /&gt;
*&#039;&#039;&#039;collectionspawn&#039;&#039;&#039; &#039;&#039;thingtype&#039;&#039; [, &#039;&#039;spchance&#039;&#039; [, &#039;&#039;coopchance&#039;&#039; [, &#039;&#039;dmchance&#039;&#039;]]]&lt;br /&gt;
:collectionspawn defines a thingtype at which THIS thingtype will select one instance out of all instances on the map at which to spawn itself at level start. This attribute is used by the Heretic Fire Mace. See the example in [https://github.com/team-eternity/eternity/blob/master/base/heretic/things.edf#L3213 Heretic&#039;s things.edf] on how it&#039;s used.&lt;br /&gt;
:Explanation of collectionspawn multivalue properties:&lt;br /&gt;
:*&#039;&#039;thingtype&#039;&#039;: Name of the EDF thingtype at which to spawn at random. If this is invalid, this collectionspawn definition will be disregarded.&lt;br /&gt;
:*&#039;&#039;spchance&#039;&#039;: if specified, chance this item will spawn at all in single player, from 0 to 255. Default is 255.&lt;br /&gt;
:*&#039;&#039;coopchance&#039;&#039;: if specified, chance this item will spawn at all in coop mode, from 0 to 255. Default is 255.&lt;br /&gt;
:*&#039;&#039;dmchance&#039;&#039;: if specified, chance this item will spawn at all in deathmatch mode, from 0 to 255. Default is 255.&lt;br /&gt;
*&#039;&#039;&#039;itemrespawnat&#039;&#039;&#039; &#039;&#039;thingtype&#039;&#039;&lt;br /&gt;
:itemrespawnat defines an EDF thingtype at which this thingtype will respawn if it becomes subject to Heretic-style item respawning.&lt;br /&gt;
&lt;br /&gt;
=====Blood properties=====&lt;br /&gt;
*&#039;&#039;&#039;bloodcolor&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:Allows this thing type to have differently colored blood when particle blood effects are enabled (this does not currently have any effect on blood sprites). Currently available blood color values are as follows: &lt;br /&gt;
     Blood color       Number&lt;br /&gt;
    --------------------------&lt;br /&gt;
     Red (normal)        0&lt;br /&gt;
     Grey                1&lt;br /&gt;
     Green               2&lt;br /&gt;
     Blue                3&lt;br /&gt;
     Yellow              4&lt;br /&gt;
     Black               5&lt;br /&gt;
     Purple              6&lt;br /&gt;
     White               7&lt;br /&gt;
     Orange              8&lt;br /&gt;
    --------------------------&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;bloodbehavior&#039;&#039;&#039;&lt;br /&gt;
:Syntax: &#039;&#039;&#039;bloodbehavior&#039;&#039;&#039; &#039;&#039;action&#039;&#039;, &#039;&#039;behavior&#039;&#039;&lt;br /&gt;
:A &#039;&#039;&#039;thingtype&#039;&#039;&#039; can have one or more of these entries. &#039;&#039;Action&#039;&#039; can be one of: &#039;&#039;&#039;shot&#039;&#039;&#039;, &#039;&#039;&#039;impact&#039;&#039;&#039;, &#039;&#039;&#039;rip&#039;&#039;&#039; or &#039;&#039;&#039;crush&#039;&#039;&#039;. &#039;&#039;Behavior&#039;&#039; can be one of: &#039;&#039;&#039;Doom&#039;&#039;&#039;, &#039;&#039;&#039;Heretic&#039;&#039;&#039;, &#039;&#039;&#039;HereticRip&#039;&#039;&#039;, &#039;&#039;&#039;Hexen&#039;&#039;&#039;, &#039;&#039;&#039;HexenRip&#039;&#039;&#039;, &#039;&#039;&#039;Strife&#039;&#039;&#039; or &#039;&#039;&#039;crush&#039;&#039;&#039;. Setting this will override game&#039;s default settings, which for Doom are respectively (&#039;&#039;&#039;Doom&#039;&#039;&#039;, &#039;&#039;&#039;Heretic&#039;&#039;&#039;, &#039;&#039;&#039;HereticRip&#039;&#039;&#039;, &#039;&#039;&#039;crush&#039;&#039;&#039;) and for Heretic are (&#039;&#039;&#039;Heretic&#039;&#039;&#039;, &#039;&#039;&#039;Heretic&#039;&#039;&#039;, &#039;&#039;&#039;HereticRip&#039;&#039;&#039;, &#039;&#039;&#039;crush&#039;&#039;&#039;). Due to Doom having no innate impact or rip attacks, it borrows the behaviors from Heretic. The meanings of the actions are as such:&lt;br /&gt;
:*&#039;&#039;&#039;shot&#039;&#039;&#039;: from bullet (hitscan) attacks.&lt;br /&gt;
:*&#039;&#039;&#039;impact&#039;&#039;&#039;: from projectiles with the &#039;&#039;&#039;DRAWSBLOOD&#039;&#039;&#039; flag (Heretic projectiles commonly have this).&lt;br /&gt;
:*&#039;&#039;&#039;rip&#039;&#039;&#039;: from projectiles with the &#039;&#039;&#039;RIP&#039;&#039;&#039; flag (Heretic&#039;s powered dragonclaw attack has this).&lt;br /&gt;
:*&#039;&#039;&#039;crush&#039;&#039;&#039;: from crushing surfaces (except for polyobjects).&lt;br /&gt;
:The behaviors assigned to each action can be:&lt;br /&gt;
:*&#039;&#039;&#039;Doom&#039;&#039;&#039;: spawns the given blood objects with a small vertical speed of 2 and lowers the tic count of the first frame. If damage is less than 9, it will jump to Decorate state &#039;&#039;&#039;Blood3&#039;&#039;&#039; (or if missing, &#039;&#039;&#039;dehackednum&#039;&#039;&#039; 92). If damage is between 9 and 12, it will jump to Decorate state &#039;&#039;&#039;Blood2&#039;&#039;&#039; (or if missing, &#039;&#039;&#039;dehackednum&#039;&#039;&#039; 91).&lt;br /&gt;
:*&#039;&#039;&#039;Heretic&#039;&#039;&#039;: similar to the &#039;&#039;&#039;Doom&#039;&#039;&#039; behavior, but without the state transition or randomization, and with a random horizontal spread.&lt;br /&gt;
:*&#039;&#039;&#039;HereticRip&#039;&#039;&#039;: spawns the blood object at a slight distance away from inflictor or (if missing) target, clears it of gravity and propels it in a direction of inflictor/target&#039;s speed. It will also randomly increase the duration of the first state by 0-3.&lt;br /&gt;
:*&#039;&#039;&#039;Hexen&#039;&#039;&#039;: like &#039;&#039;&#039;Heretic&#039;&#039;&#039; but with even more spread.&lt;br /&gt;
:*&#039;&#039;&#039;HexenRip&#039;&#039;&#039;: like &#039;&#039;&#039;HereticRip&#039;&#039;&#039; but with gravity (won&#039;t add &#039;&#039;&#039;NOGRAVITY&#039;&#039;&#039;).&lt;br /&gt;
:*&#039;&#039;&#039;Strife&#039;&#039;&#039;: similar to Doom but with no duration randomization and with transitions to &#039;&#039;&#039;Blood2&#039;&#039;&#039;, &#039;&#039;&#039;Blood1&#039;&#039;&#039;, &#039;&#039;&#039;Blood0&#039;&#039;&#039; for damages 0-6, 7-9 or 10-13 respectively.&lt;br /&gt;
:*&#039;&#039;&#039;crush&#039;&#039;&#039;: blood splat will be spread horizontally.&lt;br /&gt;
&lt;br /&gt;
====Flags====&lt;br /&gt;
*&#039;&#039;&#039;cflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field allows specification of all the thing&#039;s flag values in one single flag list. When this field is defined, flags, flags2, flags3 and flags4 are ignored. The only caveat to this field is that the &#039;&#039;&#039;flags&#039;&#039;&#039; bit &amp;quot;SLIDE&amp;quot;, which has no effect, cannot be specified in this field. If SLIDE is used, it will activate the &#039;&#039;&#039;flags3&#039;&#039;&#039; bit with the same name, which has the expected effect. All other flags will be assigned to their appropriate internal fields as normal. See the [[Thing type flags]] for their descriptions. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;addflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be added to the thing&#039;s existing flags values (this works the same as the cflags field above). Flags in this list are &amp;quot;turned on&amp;quot; in the thing. If flags are listed here which are already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within thingdelta sections and in concert with thing type inheritance. &lt;br /&gt;
*&#039;&#039;&#039;remflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be subtracted from the thing&#039;s existing flags values (this works the same as the cflags field above). Flags in this list are &amp;quot;turned off&amp;quot; in the thing, as if they had never been listed. If flags are listed here which are not already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within thingdelta sections and in concert with thing type inheritance. This field will be applied &#039;&#039;&#039;AFTER&#039;&#039;&#039; the addflags field is applied, so it could potentially turn off flags turned on by that field. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;flags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field controls a number of thing type properties using bit flags, where each bit in the field stands for some effect, and has the value of being either on or off. See the [[Thing type flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks. &lt;br /&gt;
*&#039;&#039;&#039;flags2&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Similar to flags but takes a different set of values with different meanings. See the [[Thing type flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks. &lt;br /&gt;
*&#039;&#039;&#039;flags3&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Similar to flags, but takes a different set of values with different meanings. See the [[Thing type flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks. &lt;br /&gt;
*&#039;&#039;&#039;flags4&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Similar to flags, but takes a different set of values with different meanings. See the [[Thing type flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks. &lt;br /&gt;
*&#039;&#039;&#039;flags5&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Similar to flags, but takes a different set of values with different meanings. See the [[Thing type flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks. &lt;br /&gt;
*&#039;&#039;&#039;particlefx&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:This field is a flag field with syntax identical to the flags, flags2, and flags3 fields, but which accepts the following values which control what persistent particle effects are associated with objects of this type: &lt;br /&gt;
     Flag name       Hex Value     Effect&lt;br /&gt;
    --------------------------------------------------------&lt;br /&gt;
     ROCKET          0x00000001    Rocket trail&lt;br /&gt;
     GRENADE         0x00000002    Grenade trail&lt;br /&gt;
     FLIES           0x00000004    Swarm of flies w/ sound&lt;br /&gt;
     BFG             0x00000008    BFG particle swarm&lt;br /&gt;
     FLIESONDEATH    0x00000010    Flies when object dies&lt;br /&gt;
     DRIP            0x00000020    Parameterized drip effect&lt;br /&gt;
     REDFOUNTAIN     0x00010000    Red fountain&lt;br /&gt;
     GREENFOUNTAIN   0x00020000    Green fountain&lt;br /&gt;
     BLUEFOUNTAIN    0x00030000    Blue fountain&lt;br /&gt;
     YELLOWFOUNTAIN  0x00040000    Yellow fountain&lt;br /&gt;
     PURPLEFOUNTAIN  0x00050000    Purple fountain&lt;br /&gt;
     BLACKFOUNTAIN   0x00060000    Black fountain&lt;br /&gt;
     WHITEFOUNTAIN   0x00070000    White fountain&lt;br /&gt;
    --------------------------------------------------------&lt;br /&gt;
:Note that the fountain flag values cannot be combined with each other. Doing so will simply result in another one of the existing fountain colors.     &lt;br /&gt;
:The DRIP effect requires parameters to be specified in a thing&#039;s [[ExtraData]] mapthing block. The parameters to this effect are as follows: &lt;br /&gt;
:*args 0: color (palette index from 0 to 255) &lt;br /&gt;
:*args 1: particle width/height in pixels &lt;br /&gt;
:*args 2: frequency in gametics &lt;br /&gt;
:*args 3: if 1, particles cause terrain hits &lt;br /&gt;
:*args 4: if 1, particles are fullbright &lt;br /&gt;
:Examples: &lt;br /&gt;
    # a single effect&lt;br /&gt;
    particlefx = ROCKET&lt;br /&gt;
    &lt;br /&gt;
    # multiple effects&lt;br /&gt;
    particlefx = BFG+GREENFOUNTAIN&lt;br /&gt;
    &lt;br /&gt;
    # if there are spaces or disallowed characters, you must use quotations&lt;br /&gt;
    particlefx = &amp;quot;BFG + GREENFOUNTAIN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====Graphic Properties====&lt;br /&gt;
*&#039;&#039;&#039;translucency&#039;&#039;&#039;&lt;br /&gt;
:Default = 65536 (100%)&lt;br /&gt;
:This field allows fine, customizable control over a thing&#039;s translucency. This field accepts two types of values. First, it may be given an integer value in the range of 0 to 65536, with 0 being completely invisible, and 65536 being normal. Alternatively, beginning with EDF 1.3, you can provide a percentage value to this field indicating the amount of the foreground sprite that is blended with the background. A percentage value must be a base 10 integer between 0 and 100, with the final digit followed immediately by a &#039;%&#039; character (percent sign). &lt;br /&gt;
&lt;br /&gt;
:Note this effect is mutually exclusive of BOOM-style translucency. If this value is not 65536 (or 100%), and the BOOM translucency flag is turned on for the same thing type, the flag will be turned off at run-time, and this field will take precedence. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;translation&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:Sets a translation for the thing&#039;s sprite. Translation tables are 256-byte lumps which can be used to remap any range of colors in a sprite. When this field defaults, no translation will be used. Otherwise, you may either provide a number to access one of the internal player translation tables, or you may provide the name of a translation lump, which must be found either inside the &#039;&#039;&#039;translations&#039;&#039;&#039; folder inside a [[PKE]], or between T_START and T_END markers inside a [[Doom Wiki:WAD|wad]]. Numeric values for player translations are as follows. All of the player translations remap the pure green range:&lt;br /&gt;
:*1: indigo&lt;br /&gt;
:*2: brown&lt;br /&gt;
:*3: red&lt;br /&gt;
:*4: tomato&lt;br /&gt;
:*5: dirt&lt;br /&gt;
:*6: blue&lt;br /&gt;
:*7: gold&lt;br /&gt;
:*8: sea&lt;br /&gt;
:*9: black&lt;br /&gt;
:*10: purple&lt;br /&gt;
:*11: orange&lt;br /&gt;
:*12: pink&lt;br /&gt;
:*13: cream&lt;br /&gt;
:*14: white&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;tranmap&#039;&#039;&#039;&lt;br /&gt;
:Default: not used&lt;br /&gt;
:This is a [[translucency map]] lump name to use to render the thing. NOTE: it should NOT be between T_START and T_END. Useful if you want custom translucency effects, not easily available with simple parameterized means.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;skinsprite&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;noskin&amp;quot;&lt;br /&gt;
:The skinsprite field defines a sprite that will be used to override the sprite value in any frame a thing of this type enters. This allows the creation of thingtypes which behave identically but look different without the creation of any new frames. Note that when things are crushed into gibs, the skinsprite is cleared at that time. If an Archvile resurrects such a thing, the proper skinsprite is then restored.&lt;br /&gt;
:NOTE: for any use of &#039;&#039;&#039;skinsprite&#039;&#039;&#039;, you need to add the sprite to the &#039;&#039;&#039;spritenames&#039;&#039;&#039; list, e.g. &amp;lt;code&amp;gt;spritenames += { SPRT }&amp;lt;/code&amp;gt; (for a sprite named &amp;lt;code&amp;gt;SPRT&amp;lt;/code&amp;gt;)&lt;br /&gt;
*&#039;&#039;&#039;defaultsprite&#039;&#039;&#039;&lt;br /&gt;
:Default = the object&#039;s first spawn state&#039;s sprite&lt;br /&gt;
:Controls the remapping behavior of skins for objects that use more than one sprite. Any frame not using the defaultsprite is ignored for remapping by the skin. If not set, the defaultsprite is adapted from the object&#039;s first spawn state.&lt;br /&gt;
*&#039;&#039;&#039;alphavelocity&#039;&#039;&#039;&lt;br /&gt;
:Default = 0.0&lt;br /&gt;
:If nonzero, the thing&#039;s opacity (alpha value) will raise up to full solidity, or lower to full invisibility, depending on &#039;&#039;&#039;alphavelocity&#039;&#039;&#039;&#039;s sign and quantity per tic. If the &#039;&#039;&#039;CYCLEALPHA&#039;&#039;&#039; [[Thing type flags|flag]] is set, the thing will cycle between visibility and invisibility with this speed.&lt;br /&gt;
*&#039;&#039;&#039;xscale&#039;&#039;&#039;&lt;br /&gt;
:Default = 1.0&lt;br /&gt;
:Sets how much the horizontal component of the sprite is to be scaled.&lt;br /&gt;
*&#039;&#039;&#039;yscale&#039;&#039;&#039;&lt;br /&gt;
:Default = 1.0&lt;br /&gt;
:Sets how much the vertical component of the sprite is to be scaled.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;trail.type&#039;&#039;&#039;&lt;br /&gt;
:If specified, is the thing type of trail to spawn when moving as a &#039;&#039;&#039;RavenFast&#039;&#039;&#039; projectile.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;trail.zoffset&#039;&#039;&#039;&lt;br /&gt;
:Default = -8.0&lt;br /&gt;
:Vertical offset where to spawn the trail object.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;trail.spawnchance&#039;&#039;&#039;&lt;br /&gt;
:Default = 256&lt;br /&gt;
:Chance out of 256 to spawn a trail object.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;trail.sparsity&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
: How sparsely to spawn the trail objects. Be careful that this uses the counter of 0 (commonly used in frame scripting [[codepointers]]). 1 or less means all the time, larger values reduce the amount of sparkles.&lt;br /&gt;
&lt;br /&gt;
====Pick-up effect====&lt;br /&gt;
*&#039;&#039;&#039;pickupeffect&#039;&#039;&#039;&lt;br /&gt;
:You can define the details of an item with the &#039;&#039;&#039;SPECIAL&#039;&#039;&#039; [[Thing type flags|flag]] in this block. See the [[pickupeffect|standalone block definition]] for explanation of the available fields.&lt;br /&gt;
*&#039;&#039;&#039;clearpickupeffect&#039;&#039;&#039;&lt;br /&gt;
:If added, it will clear the previous &#039;&#039;&#039;pickupeffect&#039;&#039;&#039; definition from an inherited &#039;&#039;&#039;thingtype&#039;&#039;&#039; or when using a &#039;&#039;&#039;thingdelta&#039;&#039;&#039;. By default it will be copied.&lt;br /&gt;
&lt;br /&gt;
====ACS Spawn Data Sub-Block====&lt;br /&gt;
*&#039;&#039;&#039;acs_spawndata&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:This specifies the identification number for various parameterized specials, such as [[Thing_Spawn]] or [[Thing_SpawnNoFog]]. It also limits the number to a game namespace. For example, by default the Zombieman has&lt;br /&gt;
 acs_spawndata { num 4; modes doom }&lt;br /&gt;
:Heretic objects will use &#039;&#039;&#039;modes heretic&#039;&#039;&#039; instead of &#039;&#039;&#039;modes doom&#039;&#039;&#039;. To make it work for any game mode, use &#039;&#039;&#039;modes all&#039;&#039;&#039; or simply omit it. You shouldn&#039;t need to use &#039;&#039;&#039;modes&#039;&#039;&#039; in any custom mod unless it&#039;s available for more than one game.&lt;br /&gt;
:&#039;&#039;&#039;num&#039;&#039;&#039; must be between 0 and 255 inclusive.&lt;br /&gt;
[[category:EDF]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
This document has content from:&lt;br /&gt;
*New Bifrost features, on Eternity website: http://eternity.mancubus.net/text/bifrost_docs.txt&lt;br /&gt;
*Old documentation&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_thing_reference&amp;diff=6370</id>
		<title>EDF thing reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_thing_reference&amp;diff=6370"/>
		<updated>2025-08-23T17:11:34Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Thing types define monsters, lamps, control points, items, etc -- anything that moves, occupies space, can display a sprite, or is useful for singling out locations. Things have unique names, or mnemonics, for easy identification. They&#039;re referenced in several places by their name, such as the console command &#039;&#039;Summon&#039;&#039;, or [[List of codepointers|action functions]] dealing with spawning things (such as [[Spawn]] or [[MissileAttack]]).&lt;br /&gt;
&lt;br /&gt;
If a thing type&#039;s mnemonic is not unique, the latest definition of a thing type with that mnemonic replaces any earlier ones. Like most other identifiers in EDF (but not lump names or subnames), thing type mnemonics are completely case-insensitive.&lt;br /&gt;
&lt;br /&gt;
New objects, created via EDF files or wad lumps, can be later tweaked with Dehacked (BEX) patches, if they&#039;re given a unique &#039;&#039;&#039;dehackednum&#039;&#039;&#039; entry. For forward compatibility, the &#039;&#039;&#039;dehackednum&#039;&#039;&#039; has to be greater than or equal to 10000.&lt;br /&gt;
&lt;br /&gt;
For placing the thing on the map, an integer field called &#039;&#039;&#039;doomednum&#039;&#039;&#039; must be specified. For forward compatibility it has to be greater than or equal to 20000 or in the 3000-3999 range. Due to how binary WAD files format their THINGS lumps, &#039;&#039;&#039;doomednum&#039;&#039;&#039; values have to be less than 32767, though textmode representations such as [[ExtraData]] or UDMF solve this limit.&lt;br /&gt;
&lt;br /&gt;
If you want to know the base game thing types from Doom, you can look on the [https://github.com/team-eternity/eternity/blob/master/base/doom/things.edf list of Doom thing types].&lt;br /&gt;
&lt;br /&gt;
{{See|Thing type flags}}&lt;br /&gt;
{{See|thinggroup}}. Some of the customization should be set in &#039;&#039;&#039;thinggroup&#039;&#039;&#039; blocks, which group multiple things. Most notably, infighting control. There are also flags and &#039;&#039;&#039;damagefactor&#039;&#039;&#039; &amp;quot;immune&amp;quot; (see this page) settings.&lt;br /&gt;
{{Backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
==Eternity Alfheim syntax==&lt;br /&gt;
For versions of Eternity from Alfheim up, EDF thingtypes support the following syntax. Make sure to add:&lt;br /&gt;
 setdialect(&amp;quot;ALFHEIM&amp;quot;)&lt;br /&gt;
before using this syntax:&lt;br /&gt;
 thingtype &amp;lt;unique name&amp;gt; : &amp;lt;inherited thingtype&amp;gt;, &amp;lt;doomednum&amp;gt;, &amp;lt;dehackednum&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;lt;other attributes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Header properties===&lt;br /&gt;
* &#039;&#039;&amp;lt;inherited thingtype&amp;gt;&#039;&#039; must be a value, even if the thingtype doesn&#039;t inherit from anything else. In that case, it must be &#039;&#039;&#039;Mobj&#039;&#039;&#039;, which is a placeholder value belonging to no real thingtype.&lt;br /&gt;
* &#039;&#039;&amp;lt;doomednum&amp;gt;&#039;&#039; and &#039;&#039;&amp;lt;dehackednum&amp;gt;&#039;&#039; can be -1 if not used. If both are -1, they can be omitted, leaving just this:&lt;br /&gt;
 thingtype &amp;lt;unique name&amp;gt; : &amp;lt;inherited thingtype&amp;gt; {&amp;lt;attributes&amp;gt;}&lt;br /&gt;
* If header properties are used, the pre-Alfheim &#039;&#039;&#039;inherits&#039;&#039;&#039;, &#039;&#039;&#039;doomednum&#039;&#039;&#039; and &#039;&#039;&#039;dehackednum&#039;&#039;&#039; attributes are not used.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
 thingtype &amp;lt;unique name&amp;gt; [: &amp;lt;parent type&amp;gt; [, &amp;lt;doomednum&amp;gt; [, &amp;lt;dehackednum&amp;gt;]]]&lt;br /&gt;
 {&lt;br /&gt;
   doomednum              &amp;lt;number&amp;gt;&lt;br /&gt;
   dehackednum            &amp;lt;unique number&amp;gt;&lt;br /&gt;
   inherits               &amp;lt;thingtype&amp;gt;&lt;br /&gt;
   compatname             &amp;lt;name&amp;gt;&lt;br /&gt;
   basictype              &amp;lt;basic type qualifier&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // NOTE: for this section, see the &amp;quot;states&amp;quot; field below and use it instead of these.&lt;br /&gt;
   spawnstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   seestate               &amp;lt;frame&amp;gt;&lt;br /&gt;
   painstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   dmg_painstates         {&amp;lt;damage type&amp;gt;, &amp;lt;frame&amp;gt;, ...}&lt;br /&gt;
   dmg_painstates.add     {&amp;lt;damage type&amp;gt;, &amp;lt;frame&amp;gt;, ...}&lt;br /&gt;
   dmg_painstates.remove  {&amp;lt;damage type&amp;gt;, ...}&lt;br /&gt;
   meleestate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   missilestate           &amp;lt;frame&amp;gt;&lt;br /&gt;
   deathstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   dmg_deathstates        {&amp;lt;damage type&amp;gt;, &amp;lt;frame&amp;gt;, ...}&lt;br /&gt;
   dmg_deathstates.add    {&amp;lt;damage type&amp;gt;, &amp;lt;frame&amp;gt;, ...}&lt;br /&gt;
   dmg_deathstates.remove {&amp;lt;damage type&amp;gt;, ...}&lt;br /&gt;
   xdeathstate            &amp;lt;frame&amp;gt;&lt;br /&gt;
   raisestate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   healstate              &amp;lt;frame&amp;gt;  // since Feb 21 2016&lt;br /&gt;
   crashstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   activestate            &amp;lt;frame&amp;gt;&lt;br /&gt;
   inactivestate          &amp;lt;frame&amp;gt;&lt;br /&gt;
   crunchstate            &amp;lt;frame&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   seesound               &amp;lt;sound&amp;gt;&lt;br /&gt;
   attacksound            &amp;lt;sound&amp;gt;&lt;br /&gt;
   painsound              &amp;lt;sound&amp;gt;&lt;br /&gt;
   deathsound             &amp;lt;sound&amp;gt;&lt;br /&gt;
   activesound            &amp;lt;sound&amp;gt;&lt;br /&gt;
   activatesound          &amp;lt;sound&amp;gt;&lt;br /&gt;
   deactivatesound        &amp;lt;sound&amp;gt;&lt;br /&gt;
   ripsound               &amp;lt;sound&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   spawnhealth            &amp;lt;number&amp;gt;&lt;br /&gt;
   gibhealth              &amp;lt;number&amp;gt;&lt;br /&gt;
   reactiontime           &amp;lt;number&amp;gt;&lt;br /&gt;
   painchance             &amp;lt;number&amp;gt;&lt;br /&gt;
   speed                  &amp;lt;number OR floating-point number&amp;gt;&lt;br /&gt;
   fastspeed              &amp;lt;number OR floating-point number&amp;gt;&lt;br /&gt;
   radius                 &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   height                 &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   correct_height         &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   mass                   &amp;lt;number&amp;gt;&lt;br /&gt;
   respawntime            &amp;lt;number&amp;gt;&lt;br /&gt;
   respawnchance          &amp;lt;number&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   damage                 &amp;lt;number&amp;gt;&lt;br /&gt;
   damagemod              &amp;lt;number&amp;gt;&lt;br /&gt;
   dmgspecial             &amp;lt;dmgspecial name&amp;gt;&lt;br /&gt;
   missiletype            &amp;lt;option&amp;gt;&lt;br /&gt;
   aimshift               &amp;lt;number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   meleerange             &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   missileheight          &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   bulletzoffset          &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   damagefactor           &amp;lt;damage type&amp;gt;, &amp;lt;floating point number&amp;gt;|immune[, rounded]&lt;br /&gt;
   damagefactor           &amp;lt;damage type&amp;gt;, &amp;lt;floating point number&amp;gt;|immune[, rounded]&lt;br /&gt;
   ...&lt;br /&gt;
   damagefactor.remove    &amp;lt;damage type&amp;gt;&lt;br /&gt;
   cleardamagefactors&lt;br /&gt;
 &lt;br /&gt;
   topdamage              &amp;lt;number&amp;gt;&lt;br /&gt;
   topdamagemask          &amp;lt;number&amp;gt;&lt;br /&gt;
   mod                    &amp;lt;MOD name OR number&amp;gt;&lt;br /&gt;
   obituary_normal        &amp;lt;string&amp;gt;&lt;br /&gt;
   obituary_melee         &amp;lt;string&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   bloodcolor             &amp;lt;number&amp;gt;&lt;br /&gt;
   nukespecial            &amp;lt;BEX codepointer mnemonic&amp;gt;&lt;br /&gt;
   droptype               &amp;lt;thing type mnemonic&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   bloodbehavior          &amp;lt;action&amp;gt;, &amp;lt;behavior&amp;gt;&lt;br /&gt;
   clearbloodbehaviors&lt;br /&gt;
   bloodtype.normal       &amp;lt;name&amp;gt;&lt;br /&gt;
   bloodtype.impact       &amp;lt;name&amp;gt;&lt;br /&gt;
   bloodtype.rip          &amp;lt;name&amp;gt;&lt;br /&gt;
   bloodtype.crush        &amp;lt;name&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   cleardropitems&lt;br /&gt;
   dropitem               &amp;lt;type&amp;gt;, [, &amp;lt;chance&amp;gt; [, &amp;lt;amount&amp;gt; [, &amp;lt;toss&amp;gt;]]]&lt;br /&gt;
   dropitem.remove        &amp;lt;type&amp;gt;&lt;br /&gt;
   collectionspawn        &amp;lt;thingtype&amp;gt; [, &amp;lt;spchance&amp;gt; [, &amp;lt;coopchance&amp;gt; [, &amp;lt;dmchance&amp;gt;]]]&lt;br /&gt;
   itemrespawnat          &amp;lt;thingtype&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   cflags                 &amp;lt;flag list&amp;gt;&lt;br /&gt;
   addflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   remflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   flags                  &amp;lt;flag list&amp;gt;&lt;br /&gt;
   flags2                 &amp;lt;flag list&amp;gt;&lt;br /&gt;
   flags3                 &amp;lt;flag list&amp;gt;&lt;br /&gt;
   flags4                 &amp;lt;flag list&amp;gt;&lt;br /&gt;
   flags5                 &amp;lt;flag list&amp;gt;&lt;br /&gt;
   particlefx             &amp;lt;particle effect flag list&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   translucency           &amp;lt;number OR percentage&amp;gt;&lt;br /&gt;
   translation            &amp;lt;number OR translation table lump name&amp;gt;&lt;br /&gt;
   tranmap                &amp;lt;lump name&amp;gt;&lt;br /&gt;
   skinsprite             &amp;lt;sprite&amp;gt;&lt;br /&gt;
   defaultsprite          &amp;lt;sprite&amp;gt;&lt;br /&gt;
   alphavelocity          &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   xscale                 &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   yscale                 &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   trail.type             &amp;lt;thing type&amp;gt;&lt;br /&gt;
   trail.zoffset          &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   trail.spawnchance      &amp;lt;number&amp;gt;&lt;br /&gt;
   trail.sparsity         &amp;lt;number&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   acs_spawndata          {num &amp;lt;number&amp;gt; modes &amp;lt;mnemonic&amp;gt;}&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect&lt;br /&gt;
   {&lt;br /&gt;
     effects              &amp;lt;effect1&amp;gt;, ...&lt;br /&gt;
     changeweapon         &amp;lt;weapon&amp;gt;&lt;br /&gt;
     message              &amp;lt;text&amp;gt;&lt;br /&gt;
     sound                &amp;lt;sound&amp;gt;&lt;br /&gt;
     flags                &amp;lt;flags&amp;gt;&lt;br /&gt;
   }&lt;br /&gt;
   clearpickupeffect&lt;br /&gt;
 &lt;br /&gt;
   firstdecoratestate     &amp;lt;frame&amp;gt;&lt;br /&gt;
   states                 &amp;lt;[[DECORATE state syntax]] heredoc&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
====ID / Type Info====&lt;br /&gt;
*&#039;&#039;&#039;doomednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:The identification number, which makes this actor type placeable in maps. Zombieman monsters for example have &#039;&#039;&#039;doomednum&#039;&#039;&#039; 3004. Objects which don&#039;t need to be placed on the map can have &#039;&#039;&#039;doomednum&#039;&#039;&#039; -1. For EDF, recommended numbers are in the ranges 3000-3999 and 20000 up. Other numbers may be used by future versions of Eternity, so they&#039;re not safe to use.&lt;br /&gt;
:NOTE: you can just use the first number following the inherited class, in the title. Just remember to start the script with &amp;lt;code&amp;gt;setdialect(&amp;quot;alfheim&amp;quot;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Fake array index number, for Dehacked patch (BEX or DEH file) compatibility. It has to be an unique number if not -1. Safe numbers are from 10000 up.&lt;br /&gt;
:NOTE: you can use the second number following the inherited class in the title. For this, you also need &amp;lt;code&amp;gt;setdialect(&amp;quot;alfheim&amp;quot;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*&#039;&#039;&#039;inherits&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Sets the thing type from which this will copy properties. All of the properties except &#039;&#039;&#039;dehackednum&#039;&#039;&#039; will be copied from the base actor type.&lt;br /&gt;
:NOTE: you can use the class in the title properties after the colon, instead of &#039;&#039;&#039;inherits&#039;&#039;&#039; in the &#039;&#039;&#039;thingtype&#039;&#039;&#039; body. You also need &amp;lt;code&amp;gt;setdialect(&amp;quot;alfheim&amp;quot;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*&#039;&#039;&#039;compatname&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Sets a &amp;quot;compatible name&amp;quot; useful for [[ACS]] scripts copied from GZDoom mods or for cross-port usage. Typically the need for this is because of ACS scripts assuming thingtype names from GZDoom, and in the base Eternity definitions, &#039;&#039;&#039;compatname&#039;&#039;&#039; is set to names which GZDoom uses for its thingtypes.&lt;br /&gt;
:Setting this flag is not needed and shouldn&#039;t be done in mods.&lt;br /&gt;
*&#039;&#039;&#039;basictype&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:&#039;&#039;&#039;Basictype&#039;&#039;&#039; is a list of common flags used in Doom and derived games. Using &#039;&#039;&#039;basictype&#039;&#039;&#039; instead of setting individual flags is encouraged, in order to keep up with Eternity engine updates. Other flags may be subsequently added or removed with &#039;&#039;&#039;addflags&#039;&#039;&#039; or &#039;&#039;&#039;remflags&#039;&#039;&#039;. See the [[Thing type flags]] page for a full list. The &#039;&#039;&#039;basictype&#039;&#039;&#039; mnemonics follow:&lt;br /&gt;
:*&#039;&#039;Monster&#039;&#039;&lt;br /&gt;
::An ordinary walking monster with no fancy features.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;SOLID+SHOOTABLE+COUNTKILL+FOOTCLIP+SPACMONSTER+PASSMOBJ&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;FlyingMonster&#039;&#039;&lt;br /&gt;
::An ordinary flying monster.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;SOLID+SHOOTABLE+COUNTKILL+NOGRAVITY+FLOAT+SPACMONSTER+PASSMOBJ&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;FriendlyHelper&#039;&#039;&lt;br /&gt;
::A player helper with maximum friendliness options.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;SOLID+SHOOTABLE+COUNTKILL+FRIEND+JUMPDOWN+FOOTCLIP+WINDTHRUST+SUPERFRIEND+SPACMONSTER+PASSMOBJ&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;Projectile&#039;&#039;&lt;br /&gt;
::A standard projectile.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;NOBLOCKMAP+NOGRAVITY+DROPOFF+MISSILE+NOCROSS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;PlayerProjectile&#039;&#039;&lt;br /&gt;
::A projectile for use by players.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;NOBLOCKMAP+NOGRAVITY+DROPOFF+MISSILE+NOCROSS+SPACMISSILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;Seeker&#039;&#039;&lt;br /&gt;
::A missile prepared to be fired by homing missile codepointers.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;NOBLOCKMAP+NOGRAVITY+DROPOFF+MISSILE+NOCROSS+SEEKERMISSILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;SolidDecor&#039;&#039;&lt;br /&gt;
::A solid decorative item.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; SOLID&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;HangingDecor&#039;&#039;&lt;br /&gt;
::A hanging decorative item that is passable even without 3D object clipping.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;SPAWNCEILING+NOGRAVITY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;SolidHangingDecor&#039;&#039;&lt;br /&gt;
::A solid hanging decorative item.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;SOLID+SPAWNCEILING+NOGRAVITY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;ShootableDecor&#039;&#039;&lt;br /&gt;
::A shootable decorative item.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;SOLID+SHOOTABLE+NOBLOOD&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;Fog&#039;&#039;&lt;br /&gt;
::A fog item such as telefog or item fog.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;NOBLOCKMAP+NOGRAVITY+TRANSLUCENT+NOSPLASH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;Item&#039;&#039;&lt;br /&gt;
::A collectable item. Doesn&#039;t count towards the item score.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; SPECIAL&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;ItemCount&#039;&#039;&lt;br /&gt;
::A collectable item. Counts for item score.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;SPECIAL+COUNTITEM&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;TerrainBase&#039;&#039;&lt;br /&gt;
::A TerrainTypes base item.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;NOBLOCKMAP+NOGRAVITY+NOSPLASH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;TerrainChunk&#039;&#039;&lt;br /&gt;
::A TerrainTypes chunk item.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;NOBLOCKMAP+DROPOFF+MISSILE+LOGRAV+NOSPLASH+NOCROSS+CANNOTPUSH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;ControlPoint&#039;&#039;&lt;br /&gt;
::An inert control point.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;NOBLOCKMAP+NOSECTOR+NOGRAVITY&amp;quot;&lt;br /&gt;
::&#039;&#039;&#039;spawnstate&#039;&#039;&#039; S_TNT1 &lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;ControlPointGrav&#039;&#039;&lt;br /&gt;
::An control point that is subject to gravity. Because of this, it&#039;s not considered inert.&lt;br /&gt;
::&#039;&#039;&#039;cflags&#039;&#039;&#039; &amp;quot;DONTDRAW+NOSPLASH&amp;quot;&lt;br /&gt;
::&#039;&#039;&#039;spawnstate&#039;&#039;&#039; S_TNT1&lt;br /&gt;
&lt;br /&gt;
====States====&lt;br /&gt;
*&#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039;&lt;br /&gt;
:Sets the first frame in a sequential list of dummy frames that use the internal Decorate-style defined &#039;&#039;&#039;states&#039;&#039;&#039; of this actor for [[EDF delta structures|framedelta]] compatibility. It&#039;s not required unless the intention is to make the Decorate states of this thing accessible from other thing types. Default games&#039; (Doom, Heretic) thing types use externalized frames for all thing types, for compatibility.&lt;br /&gt;
*&#039;&#039;&#039;states&#039;&#039;&#039;&lt;br /&gt;
{{see|DECORATE state syntax}}&lt;br /&gt;
:Default = nothing&lt;br /&gt;
:Defines frames using [http://zdoom.org/wiki/DECORATE DECORATE]-style state definitions. This means it won&#039;t be necessary to define separate [[frame]] blocks for each individual frame. See the DECORATE reference at the ZDoom wiki for documentation on its syntax. Using the &#039;&#039;&#039;states&#039;&#039;&#039; field instead of any of the ones below results in more concise text, but also the newly created frames won&#039;t be accessible from outside (other thingtypes, Dehacked patches or delta structures), unless you use the &#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039; field as well. Like normally, [[List of codepointers|codepointers]] may or may not be preceded by &#039;&#039;&#039;A_&#039;&#039;&#039;. The DECORATE code has to be implemented via a heredoc: a text string that spans on multiple lines. Unlike a regular string which uses quotation marks, the heredoc is marked by @&amp;quot; and &amp;quot;@ respectively. Example on an imp-like monster (the &#039;=&#039; sign is optional):&lt;br /&gt;
 states =&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
      TROO AB 10 A_Look&lt;br /&gt;
      loop&lt;br /&gt;
   See:&lt;br /&gt;
      TROO AABBCCDD 3 A_Chase&lt;br /&gt;
      loop&lt;br /&gt;
   Pain:&lt;br /&gt;
      TROO H 2&lt;br /&gt;
      TROO H 2 A_Pain&lt;br /&gt;
      goto See&lt;br /&gt;
   Melee:&lt;br /&gt;
   Missile:&lt;br /&gt;
      TROO EF 8 A_FaceTarget&lt;br /&gt;
      TROO G  6 A_TroopAttack&lt;br /&gt;
      goto See   &lt;br /&gt;
   Death:&lt;br /&gt;
      TROO I  8&lt;br /&gt;
      TROO J  8  A_Scream&lt;br /&gt;
      TROO K  6&lt;br /&gt;
      TROO L  6  A_Fall&lt;br /&gt;
      TROO M -1&lt;br /&gt;
      stop&lt;br /&gt;
   XDeath:&lt;br /&gt;
      TROO N    5&lt;br /&gt;
      TROO O    5 A_XScream&lt;br /&gt;
      TROO P    5&lt;br /&gt;
      TROO Q    5 A_Fall&lt;br /&gt;
      TROO RST  5&lt;br /&gt;
      TROO U   -1&lt;br /&gt;
      stop&lt;br /&gt;
   Raise:&lt;br /&gt;
      TROO ML  8&lt;br /&gt;
      TROO KJI 6&lt;br /&gt;
      goto See&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
:A &amp;quot;fast&amp;quot; flag is now allowed between the tics and action function of DECORATE states (along with the pre-existing &amp;quot;bright&amp;quot; flag) which determines if that state halves its &amp;quot;tics&amp;quot; value when the game is in -fast or Nightmare skill. Example (from demon&#039;s states):&lt;br /&gt;
  states&lt;br /&gt;
  @&amp;quot;&lt;br /&gt;
  See:&lt;br /&gt;
    SARG AABBCCDD 2 fast A_Chase&lt;br /&gt;
    loop&lt;br /&gt;
  Melee:&lt;br /&gt;
    SARG EF 8 fast A_FaceTarget&lt;br /&gt;
    SARG G  8 fast A_SargAttack&lt;br /&gt;
    goto See&lt;br /&gt;
  Pain:&lt;br /&gt;
    SARG H 2 fast&lt;br /&gt;
    SARG H 2 fast A_Pain&lt;br /&gt;
    goto See&lt;br /&gt;
  &amp;quot;@  &lt;br /&gt;
*&#039;&#039;&#039;spawnstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a thing starts in when it is spawned. Monsters generally use this frame to stand still and look for targets. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;spawnstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;seestate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a monster will jump to when it sees or hears a target during a [[Look]] (monster standing unawakened) check. If an object is alive and has a seestate, it is considered &#039;&#039;sentient&#039;&#039; by certain game mechanics.&lt;br /&gt;
*&#039;&#039;&#039;painstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame a thing may randomly enter when it has been injured. If set to S_NULL, the creature will be removed instantly from the game if the random check succeeds.&lt;br /&gt;
*&#039;&#039;&#039;dmg_painstates&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:This is a list of one or more damagetype/frame pairs, enclosed in braces. For example:&lt;br /&gt;
 dmg_painstates &lt;br /&gt;
 { &lt;br /&gt;
    Fire, S_HPLAY_FPAIN1,&lt;br /&gt;
    Lava, S_HPLAY_LPAIN1&lt;br /&gt;
 }&lt;br /&gt;
makes the actor go to frame S_HPLAY_FPAIN1 when damaged by fire, or to S_HPLAY_LPAIN1 when harmed by lava. It defaults to its &#039;&#039;&#039;painstate&#039;&#039;&#039; if the damage is of another nature. The damage type of an actor is set up through the &#039;&#039;&#039;mod&#039;&#039;&#039; field.&lt;br /&gt;
*&#039;&#039;&#039;dmg_painstates.add&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;dmg_painstates.remove&#039;&#039;&#039;&lt;br /&gt;
:Can be used for derived actor types, who can have more or fewer specialized pain states than their ancestors. &#039;&#039;Dmg_painstates.add&#039;&#039; has the same format as &#039;&#039;dmg_painstates&#039;&#039;, but &#039;&#039;dmg_painstates.remove&#039;&#039; only lists the damagetypes. For example:&lt;br /&gt;
 dmg_painstates.remove&lt;br /&gt;
 {&lt;br /&gt;
    Fire, lava&lt;br /&gt;
 }&lt;br /&gt;
makes them get hurt normally from fire or lava, without going to special pain states.&lt;br /&gt;
*&#039;&#039;&#039;meleestate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:If this frame is not S_NULL, monsters will have a slightly lower range attack probability and when they are within about 64 units of their target, they will enter this frame to perform a melee attack.&lt;br /&gt;
*&#039;&#039;&#039;missilestate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:If this frame is not S_NULL, monsters chasing a target will randomly enter it to perform a missile attack.&lt;br /&gt;
*&#039;&#039;&#039;deathstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:When a thing dies normally, it will enter this state. If the state is S_NULL, the thing will disappear forever.&lt;br /&gt;
*&#039;&#039;&#039;dmg_deathstates&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;dmg_deathstates.add&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;dmg_deathstates.remove&#039;&#039;&#039;&lt;br /&gt;
:Defaults = (nothing)&lt;br /&gt;
:These three properties work similar to &#039;&#039;dmg_painstates*&#039;&#039;, in that they allow the object to enter special frames depending on the damage type suffered, but if they die. The formats are the same.&lt;br /&gt;
*&#039;&#039;&#039;xdeathstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:If a thing dies by taking enough damage that its health is equal to its negated spawnhealth value (or negated 0.5 spawnhealth value in Heretic), it will enter this frame instead of its deathstate. If this frame is S_NULL, the thing will always die normally.&lt;br /&gt;
*&#039;&#039;&#039;raisestate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:If this frame is not S_NULL, a creature running [[VileChase]] codepointers can perform a resurrection on this actor. When this occurs, the actor will enter this frame along with being restored.&lt;br /&gt;
*&#039;&#039;&#039;healstate&#039;&#039;&#039; (since Feb 21 2016)&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame to jump to if, during a [[VileChase]] frame, the thing encounters a corpse and raises it. If not set (or set to S_NULL), it will actually default to S_VILE_HEAL1, same as in Doom.&lt;br /&gt;
*&#039;&#039;&#039;crashstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:When a thing with this state dies and then subsequently hits the ground, it will enter this state. If this state S_NULL, it is not used.&lt;br /&gt;
*&#039;&#039;&#039;activestate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:State to enter when triggered by the &#039;&#039;&#039;Thing_Activate&#039;&#039;&#039; parameterized special.&lt;br /&gt;
*&#039;&#039;&#039;inactivestate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:State to enter when triggered by the &#039;&#039;&#039;Thing_Deactivate&#039;&#039;&#039; parameterized special.&lt;br /&gt;
*&#039;&#039;&#039;crunchstate&#039;&#039;&#039;&lt;br /&gt;
:State, if specified, to enter when crushed as a dead body by a sector (door, crusher etc.). If unspecified, it depends on game mode, and it&#039;s the pool of blood in Doom.&lt;br /&gt;
&lt;br /&gt;
====Sounds====&lt;br /&gt;
*&#039;&#039;&#039;seesound&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:Sets the sound that a monster will play when it awakens. This sound is also played by missiles when they are shot. (Note: &amp;quot;none&amp;quot; is a special mnemonic for no sound) &lt;br /&gt;
*&#039;&#039;&#039;attacksound&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:Sets a sound used by some monster attacks, including the Lost Soul&#039;s charge, or melee attacks.&lt;br /&gt;
*&#039;&#039;&#039;painsound&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:Sets the sound played by the Pain codepointer when this thing uses it.&lt;br /&gt;
*&#039;&#039;&#039;deathsound&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:Sound played by the Scream codepointer. Used to play monster death sounds. &lt;br /&gt;
*&#039;&#039;&#039;activesound&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:Sets the sound used by a thing when it is wandering around. A thing is given a 3 out of 256 chance (1.17%) of making this sound every time it calls the Chase codepointer. There are some new flags3 flags which can alter the behavior of this sound. &lt;br /&gt;
*&#039;&#039;&#039;activatesound&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:Sound to play when triggered by the &#039;&#039;&#039;Thing_Activate&#039;&#039;&#039; parameterized special.&lt;br /&gt;
*&#039;&#039;&#039;deactivatesound&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:Sound to play when triggered by the &#039;&#039;&#039;Thing_Deactivate&#039;&#039;&#039; parameterized special.&lt;br /&gt;
*&#039;&#039;&#039;ripsound&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:Sound to play if it&#039;s a projectile using the &#039;&#039;&#039;RIP&#039;&#039;&#039; flag and it&#039;s moving and ripping through shootable targets. This is for example used by the Heretic powered-up Dragon Claw secondary &amp;quot;spiked ball&amp;quot; projectiles when they pass through enemies.&lt;br /&gt;
&lt;br /&gt;
====Basic Stats====&lt;br /&gt;
*&#039;&#039;&#039;spawnhealth&#039;&#039;&#039;&lt;br /&gt;
:Default = 1000&lt;br /&gt;
:Sets a thing&#039;s maximum amount of life.&lt;br /&gt;
*&#039;&#039;&#039;gibhealth&#039;&#039;&#039; &#039;&#039;number&#039;&#039;&lt;br /&gt;
:gibhealth overrides the gamemode default behavior for determining the negative amount of health at which a thing uses its &amp;quot;extreme&amp;quot; death state rather than its normal one. This is ordinarily defined in terms of the spawnhealth (Doom and Strife thingtypes gib at -spawnhealth; Heretic and Hexen thingtypes gib at -(spawnhealth/2).&lt;br /&gt;
:If an inheriting thingtype changes its spawnhealth, it will &amp;quot;lose&amp;quot; the inherited definition of gibhealth from its parent. If changing spawnhealth when inheriting from a thingtype that customizes gibhealth, be sure to re-customize the gibhealth in the inheriting thingtype.&lt;br /&gt;
*&#039;&#039;&#039;reactiontime&#039;&#039;&#039;&lt;br /&gt;
:Default = 8&lt;br /&gt;
:Sets an amount of time that a thing must wait under certain circumstances. Monsters use this value as a means to control their rate of attack. This value is also used as an internal field for varying purposes, but those uses are not editable.  &lt;br /&gt;
*&#039;&#039;&#039;painchance&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:Sets the chance out of 255 that this thing will enter its painstate when it is injured. A thing with 0 painchance will never feel pain, whereas a thing with 255 painchance will always feel pain. If a thing has a painchance greater than zero, it should have a valid painstate, otherwise it will disappear forever. &lt;br /&gt;
*&#039;&#039;&#039;speed&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:Value used by monsters as a movement delta per walking frame. The monster will move by an amount relative to this value each time it uses the Chase codepointer. For missiles, this value is a fixed-point number (multiplied by 65536), and represents a constant speed by which the missile advances every game tic. Missile speed is not affected by the missile frame durations, whereas monster walking speed is.&lt;br /&gt;
:This field also supports floating-point values. When a floating-point value is provided, it will be translated into the corresponding fixed-point value. This means that a value of 10.0 is equivalent to the integer value 655360 (10*65536). It is NOT equivalent to 10. This distinction is very important. Small integer speed values are appropriate for monsters, whereas floating-point values will be suitable only for missiles. &lt;br /&gt;
*&#039;&#039;&#039;fastspeed&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:When the game is switched into Nightmare difficulty or -fast mode is active, all thing types with a non-zero fastspeed will have their speed fields changed to their fastspeed value. This enables editing of the -fast speed of projectiles and monsters. For detailed information on speed, see the speed field itself above. Note: as of EDF 1.2, this field also supports floating-point numbers, with the same meaning as that for the speed field.&lt;br /&gt;
*&#039;&#039;&#039;radius&#039;&#039;&#039;&lt;br /&gt;
:Default = 20.0&lt;br /&gt;
:Floating-point value that represents the radius of this thing type. A thing can fit into corridors which are at least as wide as this value times two, plus one unit (ie a thing with radius 32 can fit into a 65-wide hallway). The maximum value this field *should* have is 64.0 units. However, the game breaks its own rule here, giving several monsters radii up to 128 units. These monsters, which include the Mancubus, Arachnotron, and Spider Demon, exhibit clipping errors which enable other things to walk into them, and which can cause some moving sectors to malfunction. Avoid giving things radii larger than 64.0 to remain absolutely safe. &lt;br /&gt;
*&#039;&#039;&#039;height&#039;&#039;&#039;&lt;br /&gt;
:Default = 16.0&lt;br /&gt;
:Floating-point value that represents the height of this thing type. A thing can fit into areas which are of this exact height or taller. Note that in DOOM, this value is only used to see where a monster can fit relative to walls and floor/ceiling heights. For purposes of clipping against other things, monsters were considered to be infinitely tall. However, Eternity&#039;s extended 3D object clipping enables this field to also be used to allow or disallow things to pass over, under, or stand on this thing. &lt;br /&gt;
*&#039;&#039;&#039;correct_height&#039;&#039;&#039;&lt;br /&gt;
:Default = 0.0&lt;br /&gt;
:Floating-point value that represents a height for this thing type which is corrected for 3D object clipping. When 3D object clipping is enabled and the comp_theights variable is set to off, objects which have a non-zero correct_height field will begin to use this value for their height instead of the normal height field. If an object has the 3DDECORATION flags3 bit set, it will still clip missiles at its original height instead of at this value, so that playability of old maps is not altered. This field will generally only be necessary for old DOOM objects, which have now been assigned correct_height values in the default things.edf module. Use for new objects is discouraged; instead, set the height field above to the proper value.&lt;br /&gt;
*&#039;&#039;&#039;mass&#039;&#039;&#039;&lt;br /&gt;
:Default = 100&lt;br /&gt;
:Normal integer value that serves as a mass factor for this object. Mass affects the amount of thrust an object is given when it is damaged, the amount of effect an archvile&#039;s attack can have on it, and for bouncing objects, the rate at which they fall. Objects with a mass less than 10 will cause small terrain hits when landing on terrain that supports small splashes.&lt;br /&gt;
*&#039;&#039;&#039;respawntime&#039;&#039;&#039;&lt;br /&gt;
:Default = 420&lt;br /&gt;
:Sets the number of gametics before the monster may respawn. A tic is 1/35 of a second.&lt;br /&gt;
*&#039;&#039;&#039;respawnchance&#039;&#039;&#039;&lt;br /&gt;
:Default = 4&lt;br /&gt;
:Sets the chance out of 255 that the monster may respawn after respawntime has passed. The check is done for each tic that the monster isn&#039;t blocked.&lt;br /&gt;
====Damage Properties====&lt;br /&gt;
*&#039;&#039;&#039;damage&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:This number is used as a damage multiplier when a [[Thing type flags|MISSILE]] or SKULLFLY actor hits a SHOOTABLE. The damage formula used for impact damage is: &lt;br /&gt;
       ((rnd % damagemod) + 1) * damage   &lt;br /&gt;
:This field is also used as a parameter by some parameterized codepointers, including [[Scratch]], [[BetaSkullAttack]] and [[Detonate]]. See &#039;&#039;&#039;damagemod&#039;&#039;&#039; field&#039;s description for the &amp;lt;code&amp;gt;damagemod&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
*&#039;&#039;&#039;damagemod&#039;&#039;&#039;&lt;br /&gt;
:Default = 8&lt;br /&gt;
:This is the damage modulus to use when computing projectile damage. This is the maximum multiplier of &#039;&#039;&#039;damage&#039;&#039;&#039; for a projectile impact. For Doom projectiles, it&#039;s typically 8. To have constant impact damage, you can set it to 1. Do not set it to 0.&lt;br /&gt;
*&#039;&#039;&#039;dmgspecial&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;none&amp;quot;&lt;br /&gt;
:The dmgspecial field allows specification of a special action that will be taken when this object is involved in damaging another object as the inflictor (an inflictor is the object actually doing the damage, and not necessarily the object that is blamed for the damage). Supported values and their meanings are as follows: &lt;br /&gt;
:*&#039;&#039;none&#039;&#039;&lt;br /&gt;
::This is the default value. No special action is taken; the object is normal when damaging other things. &lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;MinotaurCharge&#039;&#039;&lt;br /&gt;
::If the thing is flying like a skull (has flags bit SKULLFLY set), it will inflict a large amount of thrust on the target along the vector of the impact, will hit it directly for ((rnd % 8) + 1) * 6 damage, and if the target is a player, the player&#039;s controls will be frozen for 14 + (rnd % 8) gametics. When the thing is not in SKULLFLY mode, normal damage is done by all attacks. &lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;Whirlwind&#039;&#039;&lt;br /&gt;
::The target will have its angle and x/y momenta modified by random amounts. If the current level time has the 5th bit (value 16) set and the target is not a boss (possesses the BOSS flag), the target will be given randomized z momentum up to but no greater than 12 units per tic. When the level time is divisible by 8, the target will be hit directly for 3 damage. &lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;PoweredMaceBall&#039;&#039;&lt;br /&gt;
::Behavior specific to the powered mace projectile. Beware that it has behavior specific to some Heretic thing type targets, and it can even cause a target player to use the Chaos Device.&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;PoweredPhoenixFire&#039;&#039;&lt;br /&gt;
::Causes players to be occasionally stunned.&lt;br /&gt;
&lt;br /&gt;
:*&#039;&#039;BossTeleport&#039;&#039;&lt;br /&gt;
::Causes monsters with properties similar to dismounted D&#039;Sparil to teleport away on impact.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;missiletype&#039;&#039;&#039;&lt;br /&gt;
:Default = &#039;&#039;&#039;Default&#039;&#039;&#039;&lt;br /&gt;
:Type of movement if this thingtype is a projectile. It can be &#039;&#039;&#039;Default&#039;&#039;&#039; or &#039;&#039;&#039;RavenFast&#039;&#039;&#039;. The &#039;&#039;&#039;Default&#039;&#039;&#039; type is usual, allowing speeds up to about 35 (but in practice the limit is around 25, after which it becomes inaccurate). The &#039;&#039;&#039;RavenFast&#039;&#039;&#039; type is for very fast projectiles, as happening to some types in the Heretic and Hexen games, which can be very fast and still being accurate. Do mind that &#039;&#039;&#039;RavenFast&#039;&#039;&#039; works only and strictly with projectiles, and can&#039;t be used with other types of actors, as they&#039;re severely limited on their interactions with the environment.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;aimshift&#039;&#039;&#039; &#039;&#039;number&#039;&#039;&lt;br /&gt;
:If in the range of 0 to 24, this value overrides the &amp;quot;shift&amp;quot; amount that enemies of this object experience while trying to aim at it due to effects like SHADOW, GHOST, and TOTALINVISIBLE. A larger number in this field makes enemies more inaccurate when aiming at this creature. The default value of -1 means that no aiming inaccuracy is experienced *except* what may be incurred from what flags this monster has. A value larger than 24 will, on the other hand, override the creature&#039;s flags and cause enemies to experience no inaccuracy due to to those flags (so for example a creature inheriting from Spectre and setting its aimshift to 25 will behave as though it does not have the SHADOW flag other than for rendering purposes). Values of 20 and 21 are used by the various built-in flag effects.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;meleerange&#039;&#039;&#039;&lt;br /&gt;
:Default = 64.0&lt;br /&gt;
:Sets the close attack distance for this monster, allowing initiation of attack to start at a different distance from default.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;missileheight&#039;&#039;&#039;&lt;br /&gt;
:Default = 32.0&lt;br /&gt;
:Height relative to thing&#039;s feet to spawn new projectiles if no other changes are implied in the codepointer.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;bulletzoffset&#039;&#039;&#039;&lt;br /&gt;
:Default = 8.0&lt;br /&gt;
:Height relative to thing&#039;s middle to source bullet (hitscan) rays.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;damagefactor&#039;&#039;&#039;&lt;br /&gt;
:This sets up the monster&#039;s resistance to various [[EDF damagetype reference|damage types]] (&amp;quot;means of death&amp;quot;). 0 means invincible (&#039;&#039;but still suffering pain&#039;&#039;), 1 full damage. This property has a distinct syntax: there may be as many &#039;&#039;DamageFactor&#039;&#039; lines as damage resistances. Note that setting the factor to 0 won&#039;t prevent monster retaliation. Example of usage:&lt;br /&gt;
 damagefactor fire, 0.3&lt;br /&gt;
 damagefactor lava, 0.2&lt;br /&gt;
:As seen above, no braces are used, and the arguments are separated by commas.&lt;br /&gt;
:You can also use the &#039;&#039;&#039;immune&#039;&#039;&#039; keyword to make a thingtype truly immune to certain damage types, preventing any reaction or infighting. Example:&lt;br /&gt;
 damagefactor fire, immune&lt;br /&gt;
:A third optional argument is possible, called &#039;&#039;&#039;rounded&#039;&#039;&#039;. It was needed to support the various Heretic boss damage resistances. Its presence has the following effects:&lt;br /&gt;
:*The reduction of damage is rounded to the nearest, instead of down.&lt;br /&gt;
:*If there ends up being no damage, the target won&#039;t react as if in pain.&lt;br /&gt;
:Example:&lt;br /&gt;
 damagefactor lava, 0.25, rounded&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;damagefactor.remove&#039;&#039;&#039;&lt;br /&gt;
:Removes the given &#039;&#039;&#039;damagefactor&#039;&#039;&#039; specification if it already exists from an inherited thingtype, or in a delta structure of an existing one.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;cleardamagefactors&#039;&#039;&#039;&lt;br /&gt;
:Removes all already existing &#039;&#039;&#039;damagefactor&#039;&#039;&#039; specifications.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;topdamage&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:This number is a constant amount of damage inflicted on any shootable object that stands on top of this object when 3D object clipping is active. This is useful for objects such as torches and flaming barrels. The frequency of damage is determined by the topdamagemask field.&lt;br /&gt;
*&#039;&#039;&#039;topdamagemask&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:This number determines how often a thing with a non-zero topdamage field burns objects that are standing on top of it. This number should be a power of two minus 1 to work properly, such as 1, 3, 7, 15, or 31 (31 would be approximately once per second and is used by DOOM&#039;s nukage sector types). New to EDF 1.7. &lt;br /&gt;
*&#039;&#039;&#039;mod&#039;&#039;&#039;&lt;br /&gt;
:Default = UNKNOWN (0)&lt;br /&gt;
:Originally standing for &amp;quot;Means of Death&amp;quot;, this field allows you to associate a &#039;&#039;&#039;[[damagetype]]&#039;&#039;&#039; to an inflictor (such as projectile) thing type. Then, you&#039;ll be able to make other thing types resistant to the given damage type by using the &#039;&#039;&#039;damagefactor&#039;&#039;&#039; field. You can give them specific pain or death states as well. Damage types also have the role in multiplayer to specify what obituaries are shown depending on which weapon the player uses.&lt;br /&gt;
:The mnemonics were initially hard-coded, but are now available inside &#039;&#039;base\things.edf&#039;&#039; as &#039;&#039;&#039;damagetype&#039;&#039;&#039; blocks. Notice that the default damage types (means of death) have been differentiated for each player attack, as well as for the various slime types and whatnot, so as to have the obituaries differentiated. Monsters don&#039;t need new damage types to have new obituaries, because these are defined within the &#039;&#039;&#039;thingtype&#039;&#039;&#039; block. See the two fields below.&lt;br /&gt;
*&#039;&#039;&#039;obituary_normal&#039;&#039;&#039;&lt;br /&gt;
:Default = empty&lt;br /&gt;
:Defines the obituary seen by players when killed by a projectile or other miscellaneous attack by a monster. If the obituary is not defined for this type, it will simply read that the player died. Note that you are only allowed to specify an obituary starting immediately after the player&#039;s name. If you want an obituary to say &amp;quot;Player was flamed&amp;quot;, then simply make the obituary read &amp;quot;was flamed&amp;quot;.&lt;br /&gt;
:You can also use a $-prefixed Dehacked string for this.&lt;br /&gt;
*&#039;&#039;&#039;obituary_melee&#039;&#039;&#039;&lt;br /&gt;
:Default = empty&lt;br /&gt;
:Defines the obituary seen by players when killed by a monster&#039;s melee attack. If the obituary is not defined for this type, it will simply read that the player died. Note that you are only allowed to specify an obituary starting immediately after the player&#039;s name. If you want an obituary to say &amp;quot;Player was stabbed mercilessly&amp;quot;, then simply make the obituary read &amp;quot;was stabbed mercilessly&amp;quot;.&lt;br /&gt;
:You can also use a $-prefixed Dehacked string for this.&lt;br /&gt;
&lt;br /&gt;
====Pain/Death Properties====&lt;br /&gt;
*&#039;&#039;&#039;nukespecial&#039;&#039;&#039;&lt;br /&gt;
:Default = NULL&lt;br /&gt;
:This field is the name of a special codepointer to call when the player uses the KILLEM cheat to kill all monsters. Currently only two special pointers are provided for this purpose, PainNukeSpec and SorcNukeSpec. These enable monsters with spawn-on-death actions to either spawn enemies early, or not at all. See the Eternity Engine Definitive Codepointer Reference for detailed information. &lt;br /&gt;
*&#039;&#039;&#039;droptype&#039;&#039;&#039;&lt;br /&gt;
:Default = NONE&lt;br /&gt;
:This field allows the type of thing that is dropped by this thing when it dies to be edited. This field should either be a valid thing type mnemonic, or the special value NONE. &lt;br /&gt;
*&#039;&#039;&#039;cleardropitems&#039;&#039;&#039;&lt;br /&gt;
:The &#039;&#039;&#039;cleardropitems&#039;&#039;&#039; flag, if present, removes ALL dropitems from a thingtype. This is applied *before* any dropitem or droptype fields defined within this thingtype itself. This allows removing all inherited dropitems at once. This field is a flag and does not accept any value. Its presence in a thingtype is not inheritable (things which inherit from this type must again specify cleardropitems if they want to in turn remove any items this type added).&lt;br /&gt;
*&#039;&#039;&#039;dropitem &#039;&#039;type&#039;&#039;, [, &#039;&#039;chance&#039;&#039; [, &#039;&#039;amount&#039;&#039; [, &#039;&#039;toss&#039;&#039;]]]&#039;&#039;&#039;&lt;br /&gt;
:dropitem defines a Doom- or Heretic-style drop item; any number of dropitems can be defined. All are dropped when an enemy dies, subject to possible randomization.&lt;br /&gt;
:*&#039;&#039;type&#039;&#039;: name of EDF thing type to spawn&lt;br /&gt;
:*&#039;&#039;chance&#039;&#039;: If specified, chance between 0 and 255 to spawn this drop, 0 being no chance and 255 being 100%.&lt;br /&gt;
:*&#039;&#039;amount&#039;&#039;: If specified, overrides the &#039;&#039;&#039;dropamount&#039;&#039;&#039; field of an &#039;&#039;&#039;ammoeffect&#039;&#039;&#039; definition. Does not affect any other item effect type. If zero, this field is ignored.&lt;br /&gt;
:*&#039;&#039;toss&#039;&#039;: Flag value. If specified as +toss, the item is a Heretic-style item drop which will be thrown out during the A_Fall action function with randomized velocity. If this flag is not specified, or is specified as -toss, the item is a Doom-style drop item which will be spawned on the floor as soon as the dying thing has reached 0 health.&lt;br /&gt;
:Note: The older &#039;&#039;&#039;droptype&#039;&#039;&#039; field is still supported, and defines a Doom-style dropitem (100% chance, no dropamount override, and never tossed).&lt;br /&gt;
*&#039;&#039;&#039;dropitem.remove&#039;&#039;&#039;&lt;br /&gt;
:removes from this thingtype&#039;s dropitem list the named EDF thingtype. Useful when inheriting.&lt;br /&gt;
*&#039;&#039;&#039;collectionspawn&#039;&#039;&#039; &#039;&#039;thingtype&#039;&#039; [, &#039;&#039;spchance&#039;&#039; [, &#039;&#039;coopchance&#039;&#039; [, &#039;&#039;dmchance&#039;&#039;]]]&lt;br /&gt;
:collectionspawn defines a thingtype at which THIS thingtype will select one instance out of all instances on the map at which to spawn itself at level start. This attribute is used by the Heretic Fire Mace. See the example in [https://github.com/team-eternity/eternity/blob/master/base/heretic/things.edf#L3213 Heretic&#039;s things.edf] on how it&#039;s used.&lt;br /&gt;
:Explanation of collectionspawn multivalue properties:&lt;br /&gt;
:*&#039;&#039;thingtype&#039;&#039;: Name of the EDF thingtype at which to spawn at random. If this is invalid, this collectionspawn definition will be disregarded.&lt;br /&gt;
:*&#039;&#039;spchance&#039;&#039;: if specified, chance this item will spawn at all in single player, from 0 to 255. Default is 255.&lt;br /&gt;
:*&#039;&#039;coopchance&#039;&#039;: if specified, chance this item will spawn at all in coop mode, from 0 to 255. Default is 255.&lt;br /&gt;
:*&#039;&#039;dmchance&#039;&#039;: if specified, chance this item will spawn at all in deathmatch mode, from 0 to 255. Default is 255.&lt;br /&gt;
*&#039;&#039;&#039;itemrespawnat&#039;&#039;&#039; &#039;&#039;thingtype&#039;&#039;&lt;br /&gt;
:itemrespawnat defines an EDF thingtype at which this thingtype will respawn if it becomes subject to Heretic-style item respawning.&lt;br /&gt;
&lt;br /&gt;
=====Blood properties=====&lt;br /&gt;
*&#039;&#039;&#039;bloodcolor&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:Allows this thing type to have differently colored blood when particle blood effects are enabled (this does not currently have any effect on blood sprites). Currently available blood color values are as follows: &lt;br /&gt;
     Blood color       Number&lt;br /&gt;
    --------------------------&lt;br /&gt;
     Red (normal)        0&lt;br /&gt;
     Grey                1&lt;br /&gt;
     Green               2&lt;br /&gt;
     Blue                3&lt;br /&gt;
     Yellow              4&lt;br /&gt;
     Black               5&lt;br /&gt;
     Purple              6&lt;br /&gt;
     White               7&lt;br /&gt;
     Orange              8&lt;br /&gt;
    --------------------------&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;bloodbehavior&#039;&#039;&#039;&lt;br /&gt;
:Syntax: &#039;&#039;&#039;bloodbehavior&#039;&#039;&#039; &#039;&#039;action&#039;&#039;, &#039;&#039;behavior&#039;&#039;&lt;br /&gt;
:A &#039;&#039;&#039;thingtype&#039;&#039;&#039; can have one or more of these entries. &#039;&#039;Action&#039;&#039; can be one of: &#039;&#039;&#039;shot&#039;&#039;&#039;, &#039;&#039;&#039;impact&#039;&#039;&#039;, &#039;&#039;&#039;rip&#039;&#039;&#039; or &#039;&#039;&#039;crush&#039;&#039;&#039;. &#039;&#039;Behavior&#039;&#039; can be one of: &#039;&#039;&#039;Doom&#039;&#039;&#039;, &#039;&#039;&#039;Heretic&#039;&#039;&#039;, &#039;&#039;&#039;HereticRip&#039;&#039;&#039;, &#039;&#039;&#039;Hexen&#039;&#039;&#039;, &#039;&#039;&#039;HexenRip&#039;&#039;&#039;, &#039;&#039;&#039;Strife&#039;&#039;&#039; or &#039;&#039;&#039;crush&#039;&#039;&#039;. Setting this will override game&#039;s default settings, which for Doom are respectively (&#039;&#039;&#039;Doom&#039;&#039;&#039;, &#039;&#039;&#039;Heretic&#039;&#039;&#039;, &#039;&#039;&#039;HereticRip&#039;&#039;&#039;, &#039;&#039;&#039;crush&#039;&#039;&#039;) and for Heretic are (&#039;&#039;&#039;Heretic&#039;&#039;&#039;, &#039;&#039;&#039;Heretic&#039;&#039;&#039;, &#039;&#039;&#039;HereticRip&#039;&#039;&#039;, &#039;&#039;&#039;crush&#039;&#039;&#039;). Due to Doom having no innate impact or rip attacks, it borrows the behaviors from Heretic. The meanings of the actions are as such:&lt;br /&gt;
:*&#039;&#039;&#039;shot&#039;&#039;&#039;: from bullet (hitscan) attacks.&lt;br /&gt;
:*&#039;&#039;&#039;impact&#039;&#039;&#039;: from projectiles with the &#039;&#039;&#039;DRAWSBLOOD&#039;&#039;&#039; flag (Heretic projectiles commonly have this).&lt;br /&gt;
:*&#039;&#039;&#039;rip&#039;&#039;&#039;: from projectiles with the &#039;&#039;&#039;RIP&#039;&#039;&#039; flag (Heretic&#039;s powered dragonclaw attack has this).&lt;br /&gt;
:*&#039;&#039;&#039;crush&#039;&#039;&#039;: from crushing surfaces (except for polyobjects).&lt;br /&gt;
:The behaviors assigned to each action can be:&lt;br /&gt;
:*&#039;&#039;&#039;Doom&#039;&#039;&#039;: spawns the given blood objects with a small vertical speed of 2 and lowers the tic count of the first frame. If damage is less than 9, it will jump to Decorate state &#039;&#039;&#039;Blood3&#039;&#039;&#039; (or if missing, &#039;&#039;&#039;dehackednum&#039;&#039;&#039; 92). If damage is between 9 and 12, it will jump to Decorate state &#039;&#039;&#039;Blood2&#039;&#039;&#039; (or if missing, &#039;&#039;&#039;dehackednum&#039;&#039;&#039; 91).&lt;br /&gt;
:*&#039;&#039;&#039;Heretic&#039;&#039;&#039;: similar to the &#039;&#039;&#039;Doom&#039;&#039;&#039; behavior, but without the state transition or randomization, and with a random horizontal spread.&lt;br /&gt;
:*&#039;&#039;&#039;HereticRip&#039;&#039;&#039;: spawns the blood object at a slight distance away from inflictor or (if missing) target, clears it of gravity and propels it in a direction of inflictor/target&#039;s speed. It will also randomly increase the duration of the first state by 0-3.&lt;br /&gt;
:*&#039;&#039;&#039;Hexen&#039;&#039;&#039;: like &#039;&#039;&#039;Heretic&#039;&#039;&#039; but with even more spread.&lt;br /&gt;
:*&#039;&#039;&#039;HexenRip&#039;&#039;&#039;: like &#039;&#039;&#039;HereticRip&#039;&#039;&#039; but with gravity (won&#039;t add &#039;&#039;&#039;NOGRAVITY&#039;&#039;&#039;).&lt;br /&gt;
:*&#039;&#039;&#039;Strife&#039;&#039;&#039;: similar to Doom but with no duration randomization and with transitions to &#039;&#039;&#039;Blood2&#039;&#039;&#039;, &#039;&#039;&#039;Blood1&#039;&#039;&#039;, &#039;&#039;&#039;Blood0&#039;&#039;&#039; for damages 0-6, 7-9 or 10-13 respectively.&lt;br /&gt;
:*&#039;&#039;&#039;crush&#039;&#039;&#039;: blood splat will be spread horizontally.&lt;br /&gt;
&lt;br /&gt;
====Flags====&lt;br /&gt;
*&#039;&#039;&#039;cflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field allows specification of all the thing&#039;s flag values in one single flag list. When this field is defined, flags, flags2, flags3 and flags4 are ignored. The only caveat to this field is that the &#039;&#039;&#039;flags&#039;&#039;&#039; bit &amp;quot;SLIDE&amp;quot;, which has no effect, cannot be specified in this field. If SLIDE is used, it will activate the &#039;&#039;&#039;flags3&#039;&#039;&#039; bit with the same name, which has the expected effect. All other flags will be assigned to their appropriate internal fields as normal. See the [[Thing type flags]] for their descriptions. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;addflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be added to the thing&#039;s existing flags values (this works the same as the cflags field above). Flags in this list are &amp;quot;turned on&amp;quot; in the thing. If flags are listed here which are already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within thingdelta sections and in concert with thing type inheritance. &lt;br /&gt;
*&#039;&#039;&#039;remflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be subtracted from the thing&#039;s existing flags values (this works the same as the cflags field above). Flags in this list are &amp;quot;turned off&amp;quot; in the thing, as if they had never been listed. If flags are listed here which are not already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within thingdelta sections and in concert with thing type inheritance. This field will be applied &#039;&#039;&#039;AFTER&#039;&#039;&#039; the addflags field is applied, so it could potentially turn off flags turned on by that field. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;flags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field controls a number of thing type properties using bit flags, where each bit in the field stands for some effect, and has the value of being either on or off. See the [[Thing type flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks. &lt;br /&gt;
*&#039;&#039;&#039;flags2&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Similar to flags but takes a different set of values with different meanings. See the [[Thing type flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks. &lt;br /&gt;
*&#039;&#039;&#039;flags3&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Similar to flags, but takes a different set of values with different meanings. See the [[Thing type flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks. &lt;br /&gt;
*&#039;&#039;&#039;flags4&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Similar to flags, but takes a different set of values with different meanings. See the [[Thing type flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks. &lt;br /&gt;
*&#039;&#039;&#039;flags5&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Similar to flags, but takes a different set of values with different meanings. See the [[Thing type flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks. &lt;br /&gt;
*&#039;&#039;&#039;particlefx&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:This field is a flag field with syntax identical to the flags, flags2, and flags3 fields, but which accepts the following values which control what persistent particle effects are associated with objects of this type: &lt;br /&gt;
     Flag name       Hex Value     Effect&lt;br /&gt;
    --------------------------------------------------------&lt;br /&gt;
     ROCKET          0x00000001    Rocket trail&lt;br /&gt;
     GRENADE         0x00000002    Grenade trail&lt;br /&gt;
     FLIES           0x00000004    Swarm of flies w/ sound&lt;br /&gt;
     BFG             0x00000008    BFG particle swarm&lt;br /&gt;
     FLIESONDEATH    0x00000010    Flies when object dies&lt;br /&gt;
     DRIP            0x00000020    Parameterized drip effect&lt;br /&gt;
     REDFOUNTAIN     0x00010000    Red fountain&lt;br /&gt;
     GREENFOUNTAIN   0x00020000    Green fountain&lt;br /&gt;
     BLUEFOUNTAIN    0x00030000    Blue fountain&lt;br /&gt;
     YELLOWFOUNTAIN  0x00040000    Yellow fountain&lt;br /&gt;
     PURPLEFOUNTAIN  0x00050000    Purple fountain&lt;br /&gt;
     BLACKFOUNTAIN   0x00060000    Black fountain&lt;br /&gt;
     WHITEFOUNTAIN   0x00070000    White fountain&lt;br /&gt;
    --------------------------------------------------------&lt;br /&gt;
:Note that the fountain flag values cannot be combined with each other. Doing so will simply result in another one of the existing fountain colors.     &lt;br /&gt;
:The DRIP effect requires parameters to be specified in a thing&#039;s [[ExtraData]] mapthing block. The parameters to this effect are as follows: &lt;br /&gt;
:*args 0: color (palette index from 0 to 255) &lt;br /&gt;
:*args 1: particle width/height in pixels &lt;br /&gt;
:*args 2: frequency in gametics &lt;br /&gt;
:*args 3: if 1, particles cause terrain hits &lt;br /&gt;
:*args 4: if 1, particles are fullbright &lt;br /&gt;
:Examples: &lt;br /&gt;
    # a single effect&lt;br /&gt;
    particlefx = ROCKET&lt;br /&gt;
    &lt;br /&gt;
    # multiple effects&lt;br /&gt;
    particlefx = BFG+GREENFOUNTAIN&lt;br /&gt;
    &lt;br /&gt;
    # if there are spaces or disallowed characters, you must use quotations&lt;br /&gt;
    particlefx = &amp;quot;BFG + GREENFOUNTAIN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====Graphic Properties====&lt;br /&gt;
*&#039;&#039;&#039;translucency&#039;&#039;&#039;&lt;br /&gt;
:Default = 65536 (100%)&lt;br /&gt;
:This field allows fine, customizable control over a thing&#039;s translucency. This field accepts two types of values. First, it may be given an integer value in the range of 0 to 65536, with 0 being completely invisible, and 65536 being normal. Alternatively, beginning with EDF 1.3, you can provide a percentage value to this field indicating the amount of the foreground sprite that is blended with the background. A percentage value must be a base 10 integer between 0 and 100, with the final digit followed immediately by a &#039;%&#039; character (percent sign). &lt;br /&gt;
&lt;br /&gt;
:Note this effect is mutually exclusive of BOOM-style translucency. If this value is not 65536 (or 100%), and the BOOM translucency flag is turned on for the same thing type, the flag will be turned off at run-time, and this field will take precedence. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;translation&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:Sets a translation for the thing&#039;s sprite. Translation tables are 256-byte lumps which can be used to remap any range of colors in a sprite. When this field defaults, no translation will be used. Otherwise, you may either provide a number to access one of the internal player translation tables, or you may provide the name of a translation lump, which must be found either inside the &#039;&#039;&#039;translations&#039;&#039;&#039; folder inside a [[PKE]], or between T_START and T_END markers inside a [[Doom Wiki:WAD|wad]]. Numeric values for player translations are as follows. All of the player translations remap the pure green range:&lt;br /&gt;
:*1: indigo&lt;br /&gt;
:*2: brown&lt;br /&gt;
:*3: red&lt;br /&gt;
:*4: tomato&lt;br /&gt;
:*5: dirt&lt;br /&gt;
:*6: blue&lt;br /&gt;
:*7: gold&lt;br /&gt;
:*8: sea&lt;br /&gt;
:*9: black&lt;br /&gt;
:*10: purple&lt;br /&gt;
:*11: orange&lt;br /&gt;
:*12: pink&lt;br /&gt;
:*13: cream&lt;br /&gt;
:*14: white&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;tranmap&#039;&#039;&#039;&lt;br /&gt;
:Default: not used&lt;br /&gt;
:This is a [[translucency map]] lump name to use to render the thing. NOTE: it should NOT be between T_START and T_END. Useful if you want custom translucency effects, not easily available with simple parameterized means.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;skinsprite&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;noskin&amp;quot;&lt;br /&gt;
:The skinsprite field defines a sprite that will be used to override the sprite value in any frame a thing of this type enters. This allows the creation of thingtypes which behave identically but look different without the creation of any new frames. Note that when things are crushed into gibs, the skinsprite is cleared at that time. If an Archvile resurrects such a thing, the proper skinsprite is then restored.&lt;br /&gt;
:NOTE: for any use of &#039;&#039;&#039;skinsprite&#039;&#039;&#039;, you need to add the sprite to the &#039;&#039;&#039;spritenames&#039;&#039;&#039; list, e.g. &amp;lt;code&amp;gt;spritenames += { SPRT }&amp;lt;/code&amp;gt; (for a sprite named &amp;lt;code&amp;gt;SPRT&amp;lt;/code&amp;gt;)&lt;br /&gt;
*&#039;&#039;&#039;defaultsprite&#039;&#039;&#039;&lt;br /&gt;
:Default = the object&#039;s first spawn state&#039;s sprite&lt;br /&gt;
:Controls the remapping behavior of skins for objects that use more than one sprite. Any frame not using the defaultsprite is ignored for remapping by the skin. If not set, the defaultsprite is adapted from the object&#039;s first spawn state.&lt;br /&gt;
*&#039;&#039;&#039;alphavelocity&#039;&#039;&#039;&lt;br /&gt;
:Default = 0.0&lt;br /&gt;
:If nonzero, the thing&#039;s opacity (alpha value) will raise up to full solidity, or lower to full invisibility, depending on &#039;&#039;&#039;alphavelocity&#039;&#039;&#039;&#039;s sign and quantity per tic. If the &#039;&#039;&#039;CYCLEALPHA&#039;&#039;&#039; [[Thing type flags|flag]] is set, the thing will cycle between visibility and invisibility with this speed.&lt;br /&gt;
*&#039;&#039;&#039;xscale&#039;&#039;&#039;&lt;br /&gt;
:Default = 1.0&lt;br /&gt;
:Sets how much the horizontal component of the sprite is to be scaled.&lt;br /&gt;
*&#039;&#039;&#039;yscale&#039;&#039;&#039;&lt;br /&gt;
:Default = 1.0&lt;br /&gt;
:Sets how much the vertical component of the sprite is to be scaled.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;trail.type&#039;&#039;&#039;&lt;br /&gt;
:If specified, is the thing type of trail to spawn when moving as a &#039;&#039;&#039;RavenFast&#039;&#039;&#039; projectile.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;trail.zoffset&#039;&#039;&#039;&lt;br /&gt;
:Default = -8.0&lt;br /&gt;
:Vertical offset where to spawn the trail object.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;trail.spawnchance&#039;&#039;&#039;&lt;br /&gt;
:Default = 256&lt;br /&gt;
:Chance out of 256 to spawn a trail object.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;trail.sparsity&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
: How sparsely to spawn the trail objects. Be careful that this uses the counter of 0 (commonly used in frame scripting [[codepointers]]). 1 or less means all the time, larger values reduce the amount of sparkles.&lt;br /&gt;
&lt;br /&gt;
====Pick-up effect====&lt;br /&gt;
*&#039;&#039;&#039;pickupeffect&#039;&#039;&#039;&lt;br /&gt;
:You can define the details of an item with the &#039;&#039;&#039;SPECIAL&#039;&#039;&#039; [[Thing type flags|flag]] in this block. See the [[pickupeffect|standalone block definition]] for explanation of the available fields.&lt;br /&gt;
*&#039;&#039;&#039;clearpickupeffect&#039;&#039;&#039;&lt;br /&gt;
:If added, it will clear the previous &#039;&#039;&#039;pickupeffect&#039;&#039;&#039; definition from an inherited &#039;&#039;&#039;thingtype&#039;&#039;&#039; or when using a &#039;&#039;&#039;thingdelta&#039;&#039;&#039;. By default it will be copied.&lt;br /&gt;
&lt;br /&gt;
====ACS Spawn Data Sub-Block====&lt;br /&gt;
*&#039;&#039;&#039;acs_spawndata&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:This specifies the identification number for various parameterized specials, such as [[Thing_Spawn]] or [[Thing_SpawnNoFog]]. It also limits the number to a game namespace. For example, by default the Zombieman has&lt;br /&gt;
 acs_spawndata { num 4; modes doom }&lt;br /&gt;
:Heretic objects will use &#039;&#039;&#039;modes heretic&#039;&#039;&#039; instead of &#039;&#039;&#039;modes doom&#039;&#039;&#039;. To make it work for any game mode, use &#039;&#039;&#039;modes all&#039;&#039;&#039; or simply omit it. You shouldn&#039;t need to use &#039;&#039;&#039;modes&#039;&#039;&#039; in any custom mod unless it&#039;s available for more than one game.&lt;br /&gt;
:&#039;&#039;&#039;num&#039;&#039;&#039; must be between 0 and 255 inclusive.&lt;br /&gt;
[[category:EDF]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
This document has content from:&lt;br /&gt;
*New Bifrost features, on Eternity website: http://eternity.mancubus.net/text/bifrost_docs.txt&lt;br /&gt;
*Old documentation&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=List_of_console_commands_and_variables&amp;diff=6369</id>
		<title>List of console commands and variables</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=List_of_console_commands_and_variables&amp;diff=6369"/>
		<updated>2025-08-23T16:22:42Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Console variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Console commands carry out a particular action when sent to the console.&lt;br /&gt;
:&#039;&#039;Back to [[Console]]&#039;&#039;&lt;br /&gt;
==Console commands==&lt;br /&gt;
Console commands are executed, they don&#039;t inherently store values to be checked.&lt;br /&gt;
===Flags===&lt;br /&gt;
Console commands have flags assigned to them, which alter their usability. They are:&lt;br /&gt;
*buffered: wait until all screen has rendered before running command.&lt;br /&gt;
*hidden: not showing when running cmdlist.&lt;br /&gt;
*level: only runnable during levels.&lt;br /&gt;
*netvar: under multiplayer, synchronizes with the other players.&lt;br /&gt;
*notnet: forbidden in multiplayer (unless during a demo).&lt;br /&gt;
*server: if under multiplayer, only triggerable by the &amp;quot;server&amp;quot; player.&lt;br /&gt;
===Categories===&lt;br /&gt;
The commands can be grouped by their purpose:&lt;br /&gt;
*Control: general game control.&lt;br /&gt;
*Core: main console stuff, such as &amp;quot;echo&amp;quot; or &amp;quot;delay&amp;quot;.&lt;br /&gt;
*I/O: input/output setup.&lt;br /&gt;
*Information: purely informative commands. Can be executed any time as they don&#039;t affect the game.&lt;br /&gt;
*Logging: special console logging commands.&lt;br /&gt;
*Menu: commands that show various menus, as well as a few commands with actual effects, which depend on the current menu state, and can&#039;t be run standalone.&lt;br /&gt;
*Testing: gameplay testing and &amp;quot;cheating&amp;quot; commands.&lt;br /&gt;
===List of console commands===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Parameters&lt;br /&gt;
! Flags&lt;br /&gt;
! Category&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;addfile&#039;&#039;&#039;||&#039;&#039;wadfilename&#039;&#039;||buffered notnet||Control||Adds the specified wad file at run-time. Some features will not function completely as expected when WADs are loaded at run-time, so for maximum compatibility always use the command line to load files.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;alias&#039;&#039;&#039;||&#039;&#039;newcmdname&#039;&#039; &#039;&#039;command&#039;&#039;||||Core||&#039;&#039;&#039;alias&#039;&#039;&#039; alone will list all currently defined aliases. Providing &#039;&#039;newcmdname&#039;&#039; alone will remove that alias if it exists. Providing &#039;&#039;newcmdname&#039;&#039; and a valid console &#039;&#039;command&#039;&#039; will create &amp;quot;newcmdname&amp;quot; as an alias to that command, allowing shortcuts. &lt;br /&gt;
&lt;br /&gt;
In order to make an alias take parameters, use the special variable &amp;quot;%opt&amp;quot;, as such: &lt;br /&gt;
  alias &amp;quot;mycommand&amp;quot; &amp;quot;hu_overlay %opt&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;animshot&#039;&#039;&#039;||&#039;&#039;numframes&#039;&#039;||||Control||Takes the given number of consecutive screenshots for the purpose of making a crude animation. Would be useful for animated GIFs or AVI movies. This command will make the game run very slow, however, and will eat up disk space quickly, so use it with care. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;banish&#039;&#039;&#039;||||level notnet||Testing||If the player is autoaiming at an enemy, the enemy will be removed from the play simulation and its memory will be freed once no other objects reference it.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;bind&#039;&#039;&#039;||&#039;&#039;keyname&#039;&#039; &#039;&#039;actionname&#039;&#039;||||I/O||Binds the specified action to the specified key. actionname is a string and should be enclosed in quotes if it contains whitespace. actionname may specify any valid action or console command. If &amp;quot;actionname&amp;quot; is not provided, the current binding status of the specified key will be displayed. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;bindings&#039;&#039;&#039;||||||Information||Dumps a list of all active keybindings to the console.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;buddha&#039;&#039;&#039;||||level notnet||Testing||Toggles &amp;quot;Buddha&amp;quot; mode, where you can take any amount of damage without dying.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;c_popup&#039;&#039;&#039;||||||Core||Instantly removes the console from view.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;closelog&#039;&#039;&#039;||||||Logging||Closes a console log opened by the &#039;&#039;&#039;openlog&#039;&#039;&#039; command. If no logging is currently occuring, this command does nothing. This command doesn&#039;t apply to files used by &#039;&#039;&#039;dumplog&#039;&#039;&#039;, as they are closed immediately, so it doesn&#039;t need to be used with the &#039;&#039;&#039;dumplog&#039;&#039;&#039; command.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;cmdlist&#039;&#039;&#039;||&#039;&#039;filter&#039;&#039;||||Core||Displays all user-visible console commands, one per line. As of Eternity Engine v3.31 Delta, this command accepts an optional &#039;&#039;filter&#039;&#039; parameter that, if provided, should consist of a single character between A and Z. The character will be used to filter the command list down to only commands beginning with that letter. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;creator&#039;&#039;&#039;||||||Information||Displays the name of the creator as set in [[EMAPINFO]].&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;credits&#039;&#039;&#039;||||||Menu||Displays game engine / game credits. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;cvarhelp&#039;&#039;&#039;||&#039;&#039;variablename&#039;&#039;||||Core||Outputs a list of possible values for the given variable.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;delay&#039;&#039;&#039;||&#039;&#039;amt&#039;&#039;||||Core||Delays the running of the next console command by either 1, or if provided, by &#039;&#039;amt&#039;&#039; game tics. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;defdmflags&#039;&#039;&#039;||&#039;&#039;mode&#039;&#039;||server||Control||Sets the deathmatch flags variable to its default settings. If no argument is provided, dmflags is set to the default for the current game type. Otherwise, the &amp;quot;mode&amp;quot; parameter indicates what game mode&#039;s defaults to set, with the following values: &lt;br /&gt;
&lt;br /&gt;
*0 = Single-player mode&lt;br /&gt;
*1 = Cooperative mode&lt;br /&gt;
*2 = Deathmatch mode&lt;br /&gt;
*3 = Altdeath mode (deathmatch 2.0, items respawn)&lt;br /&gt;
*4 = Trideath mode (DM 3, barrels respawn, players drop backpacks)&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;dir&#039;&#039;&#039;||||||Information||Lists the contents of the current working directory to the console.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;dumplog&#039;&#039;&#039;||&#039;&#039;filename&#039;&#039;||||Logging||Dumps the current state of the console message buffer to the specified file as ASCII text. The text will be appended to the file if it already exists, allowing multiple use of a single log file. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;e_dumpitemeffect&#039;&#039;&#039;||&#039;&#039;mnemonic&#039;&#039;||||Information||Displays the properties of an item effect metatable.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;e_dumpitems&#039;&#039;&#039;||||||Information||Lists all EDF thing type mnemonics and DeHackEd/DoomEd numbers for thing types which are collectable items. Useful in conjunction with the give command. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;e_dumpmeta&#039;&#039;&#039;||&#039;&#039;mnemonic&#039;&#039;||||Information||Displays the properties stored in the metatable for the given thingtype.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;e_dumpstate&#039;&#039;&#039;||&#039;&#039;mnemonic&#039;&#039;||||Information||Displays information on one EDF state definition.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;e_dumpthings&#039;&#039;&#039;||||||Information||Lists all EDF thing type mnemonics along with the DeHackEd numbers and doomednums of the corresponding types.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;e_linedef&#039;&#039;&#039;||&#039;&#039;recordnum&#039;&#039;||level||Information||Lists verbose information on an ExtraData linedef record with the given numeric record number. If no such linedef is defined or no ExtraData exists for the current map, an appropriate error message will be given.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;e_listkeyitems&#039;&#039;&#039;||||||Information||Lists all key-type artifact definitions.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;e_listlinedefs&#039;&#039;&#039;||||level||Information||Lists all linedef definitions from the current map&#039;s ExtraData. If no linedefs are defined or no ExtraData exists for the current map, an appropriate error message will be given. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;e_listmapthings&#039;&#039;&#039;||||level||Information||Lists all mapthing definitions from the current map&#039;s [[ExtraData]]. If no mapthings are defined or no [[ExtraData]] exists for the current map, an appropriate error message will be given. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;e_mapthing&#039;&#039;&#039;||&#039;&#039;recordnum&#039;&#039;||level||Information||Lists verbose information on an ExtraData mapthing record with the given numeric record number. If no such mapthing is defined or no ExtraData exists for the current map, an appropriate error message will be given. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;e_playsound&#039;&#039;&#039;||&#039;&#039;name&#039;&#039;||||Testing||Plays an EDF sound.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;e_thingtype&#039;&#039;&#039;||&#039;&#039;thingtypename&#039;&#039;||||Information||Lists verbose information on an EDF thingtype with the given mnemonic. If no such thingtype is defined, an error message will be given. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;echo&#039;&#039;&#039;||&#039;&#039;msg&#039;&#039;||||Core||Echoes a string message to the console. As with all console strings, the string should be in quotes if it contains whitespace. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;enable_lightning&#039;&#039;&#039;||||||Testing||Enables lightning sky effects in current level.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;endgame&#039;&#039;&#039;||||notnet||Testing||Ends game and drops to console mode.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;ev_mapsectorspecs&#039;&#039;&#039;||||level||Information||List out all the sector specials in use on the current map.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;ev_mapspecials&#039;&#039;&#039;||||level||Information||Lists all linedef specials in current map.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;exitlevel&#039;&#039;&#039;||||level netvar server||Testing||Exits the current level. Starting with EE v3.31 beta 1, this command will not allow an exit if the player is dead unless the comp_zombie variable is set to allow zombie exits.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;flood&#039;&#039;&#039;||||||Testing||Writes 300 garbage characters to the console. Usefulness is of debate.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;fly&#039;&#039;&#039;||||level notnet||Testing||Toggles flight mode, allowing you to fly like when having the [[Doom Wiki:Wings of Wrath|Wings of Wrath]].&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;frags&#039;&#039;&#039;||||||Information||Displays the current frag count for all players. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;g_padprofile&#039;&#039;&#039;||&#039;&#039;profilename&#039;&#039;||||I/O||Runs a console script that can setup default bindings for a particular model/brand of gamepad. &#039;&#039;Profilename&#039;&#039; is the name of a lump, typically inside &amp;quot;gamepads/&amp;quot; in the Eternity&#039;s [[PKE]]. Example values (as currently in the base Eternity PKE) are:&lt;br /&gt;
*firestorm digital 3&lt;br /&gt;
*vanilla&lt;br /&gt;
*xbox360 keylook&lt;br /&gt;
*xbox360&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;give&#039;&#039;&#039;||&#039;&#039;thingtypename&#039;&#039; &#039;&#039;num&#039;&#039;||level notnet||Testing||Spawns 1, or &amp;quot;num&amp;quot; if provided, of the object with this EDF thing type name on the player and causes the player to collect it/them. If the requested thing type is not collectable, it will not be spawned. In addition, if a collectable item is not picked up by the player, it will be removed immediately. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;GIVEARSENAL&#039;&#039;&#039;||||level notnet||Testing||Gives all weapons (as with IDFA).&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;GIVEKEYS&#039;&#039;&#039;||||level notnet||Testing||Gives all keys (as with IDK).&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;god&#039;&#039;&#039;||||level notnet||Testing||Toggles god mode (IDDQD) on or off.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;help&#039;&#039;&#039;||||||Menu||Displays built-in and user-provided help screens. See the BOOM editing reference on how to provide up to 99 custom help screens. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_error&#039;&#039;&#039;||...||||Testing||Exits Eternity with error. Prints any arguments provided as a single string when the game exits. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_exitwithmessage&#039;&#039;&#039;||...||||Testing||Causes a non-error exit with message.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_fatalerror&#039;&#039;&#039;||...||||Testing||Exits Eternity with error. Prints any arguments provided as a single string when the game exits. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_joystick&#039;&#039;&#039;||&#039;&#039;num&#039;&#039;||||I/O||Selects the gamepad configured in &#039;&#039;num&#039;&#039;, if it can be found.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;infammo&#039;&#039;&#039;||||level notnet||Testing||Toggles infinite ammo (INFSHOTS) on or off.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;kill&#039;&#039;&#039;||||level netvar||Testing||Causes the player to commit suiceide.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;listactions&#039;&#039;&#039;||||||Information||Displays a list of all bindable actions, aside from console commands. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;listkeys&#039;&#039;&#039;||||||Information||Displays a list of all bindable key names. Not all bindable key codes correspond to pressable keys, however. Most pressable keys have obvious names which correspond to those on the keyboard. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;listskins&#039;&#039;&#039;||||||Information||Lists names of all available player skins. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;listwads&#039;&#039;&#039;||||||Information||Lists all currently loaded WAD files.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;map&#039;&#039;&#039;||&#039;&#039;mapname&#039;&#039;||netvar server||Control||Transfers game play to the given map. mapname may be the name of a WAD file to load, as well as the name of a map header itself. &lt;br /&gt;
  Examples:&lt;br /&gt;
  	map E1M1&lt;br /&gt;
  	map w00t.wad&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapchecksum&#039;&#039;&#039;||||||Information||Displays the MD5 checksum of current level. Useful for [[EDF]] gameplay compatibility patches. Compatible with GZDoom&#039;s checksum calculation.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;maxdisplaynum&#039;&#039;&#039;||||||Information||Displays the maximum index of the available displaynum.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mdk&#039;&#039;&#039;||||level notnet||Testing||Fires a tracer from the player that instantly kills any monster the player is targetting.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mdkbomb&#039;&#039;&#039;||||level notnet||Testing||As above, but fires 60 such tracers in a circle around the player.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_advkeys&#039;&#039;&#039;||||||Menu||Displays the advanced movement control customize menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_automap&#039;&#039;&#039;||||||Menu||Displays the automap options menu. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_automapkeys&#039;&#039;&#039;||||||Menu||Displays the automap keybindings menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_bindings||||||Menu||Displays the control customize menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_clearmenus&#039;&#039;&#039;||||||Menu||Deactivates any active menu and returns to the game &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_compat&#039;&#039;&#039;||||||Menu||Displays the DOOM compatibility options menu. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_config&#039;&#039;&#039;||||||Menu||Displays the user configuration menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_consolekeys&#039;&#039;&#039;||||||Menu||Brings up the console keybindings menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_demos&#039;&#039;&#039;||||notnet||Menu||Displays the Demos menu&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_dynamenu&#039;&#039;&#039;||&#039;&#039;menuname&#039;&#039;||||Menu||Brings up the EDF dynamic menu with the given mnemonic. If no such menu exists, an error message will appear in the console. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_endgame&#039;&#039;&#039;||||||Menu||Prompts the user to end the current game and return to the title screen. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_enemies&#039;&#039;&#039;||||||Menu||Displays enemy AI options menu. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_envkeys&#039;&#039;&#039;||||||Menu||Displays the environment keybindings menu. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_episode&#039;&#039;&#039;||&#039;&#039;num&#039;&#039;||notnet||Menu||Brings up the Doom difficulty selection menu. &#039;&#039;Num&#039;&#039; it the index of the episode after which to show the difficulty settings.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_gamepad&#039;&#039;&#039;||||||Menu||Brings up the gamepad menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_gamefuncs&#039;&#039;&#039;||||||Menu||Brings up the game function key bindings menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_gset&#039;&#039;&#039;||||||Menu||Brings up the game settings menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_hepis&#039;&#039;&#039;||&#039;&#039;num&#039;&#039;||notnet||Menu||Brings up the Heretic difficulty selection menu. &#039;&#039;Num&#039;&#039; it the index of the episode after which to show the difficulty settings.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_hud&#039;&#039;&#039;||||||Menu||Displays the heads-up display options menu. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_joymenu&#039;&#039;&#039;||||||Menu||Brings up the SDL joystick configuration menu. NOTE: This command does not exist in the DOS version of Eternity. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_load&#039;&#039;&#039;||&#039;&#039;slotnum&#039;&#039;||||Menu||Loads the save game from save slot slotnum. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_loadgame&#039;&#039;&#039;||||||Menu||Displays the load game menu. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_loadwad&#039;&#039;&#039;||||notnet||Menu||Displays the wad/file options menu. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_menukeys&#039;&#039;&#039;||||||Menu||Brings up the menue control keybindings menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_menus&#039;&#039;&#039;||||||Menu||Brings up the menu options menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_mouse&#039;&#039;&#039;||||||Menu||Displays the mouse options menu. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_movekeys&#039;&#039;&#039;||||||Menu||Displays the basic movement control customize menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_newgame&#039;&#039;&#039;||||||Menu||Displays the New Game menu or takes the player to the start map, depending on their configuration. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_old_options&#039;&#039;&#039;||||||Menu||Displays the vanilla Doom options menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_old_sound&#039;&#039;&#039;||||||Menu||Displays the vanilla Doom sounds menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_options&#039;&#039;&#039;||||||Menu||Displays the main options menu. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_padtest&#039;&#039;&#039;||||||Menu||If there&#039;s an active gamepad, brings up the testing widget.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_particle&#039;&#039;&#039;||||||Menu||Displays the particle effects options menu. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_player&#039;&#039;&#039;||||||Menu||Displays the player setup menu. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_prevmenu&#039;&#039;&#039;||||||Menu||Returns user to the last menu they viewed, or to the game if the present menu is the highest-most in that chain. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_quit&#039;&#039;&#039;||||||Menu||Displays a prompt asking the user if they want to quit. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_save&#039;&#039;&#039;||slot||||Menu||Saves the game. Use with caution!&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_savegame&#039;&#039;&#039;||||||Menu||Displays the save game menu. Will not display if not in a level. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_search&#039;&#039;&#039;||||||Menu||Opens the menu search&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_selectbank&#039;&#039;&#039;||||||Menu||Brings up the ADLMIDI bank selector.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_selectflat&#039;&#039;&#039;||||||Menu||Brings up the menu background customization menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_selectmusic&#039;&#039;&#039;||||||Menu||Brings up the music menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_selectwad&#039;&#039;&#039;||||||Menu||Brings up the wad selection dialog box. The selected wad cannot be loaded if the current gamemode is a shareware game. Flags: not in a netgame &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_sound&#039;&#039;&#039;||||||Menu||Displays the sound options menu. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_status&#039;&#039;&#039;||||||Menu||Displays the status bar options menu. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_testfont&#039;&#039;&#039;||&#039;&#039;fontname&#039;&#039; [&#039;&#039;message&#039;&#039;]||||Testing||Displays a widget to test a font.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_video&#039;&#039;&#039;||||||Menu||Displays the video options menu. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_weaponkeys&#039;&#039;&#039;||||||Menu||Displays the weapon control customize menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_weapons&#039;&#039;&#039;||||||Menu||Displays the weapons preferences menu &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;newgame&#039;&#039;&#039;||||notnet||Menu||Clears any active menus and starts a new game.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;noclip&#039;&#039;&#039;||||level notnet||Testing||Toggles no clipping (IDCLIP) on or off.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;nuke&#039;&#039;&#039;||||netvar level server||Testing||Kills all enemies on the level, and if there are no enemies, kills all friends on the level (equivalent to KILLEM).&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;openlog&#039;&#039;&#039;||&#039;&#039;filename&#039;&#039;||||Logging||Opens the specified file in append mode and begins writing any text printed to the console into the file. All console messages will be logged until either the &#039;&#039;&#039;closelog&#039;&#039;&#039; command is used, or the program closes. Note this log file is totally separate from any used with the &amp;quot;dumplog&amp;quot; command, which is simply for saving the current buffer. If a log file is already open, this command does nothing. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;p_dumphubs&#039;&#039;&#039;||||||Information||Displays hub information (if hubs exist).&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;p_linespec&#039;&#039;&#039;||&#039;&#039;name&#039;&#039; &#039;&#039;arg&#039;&#039; &#039;&#039;arg&#039;&#039; &#039;&#039;arg&#039;&#039; &#039;&#039;arg&#039;&#039; &#039;&#039;arg&#039;&#039;||level notnet||Testing||Executes the named Eternity Engine parameterized line special with the given parameters. The line special is restricted to behaving as though it has been invoked without any linedef to reference, and thus certain effects such as sector special transfers will not occur even if specified by the special type or arguments. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;p_testenvironment||&#039;&#039;id1&#039;&#039; &#039;&#039;id2&#039;&#039;||level||Testing||Alters player&#039;s sound zone to the one identified by &#039;&#039;id1&#039;&#039; and &#039;&#039;id2&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;pause&#039;&#039;&#039;||||server||Control||Pauses or unpauses the game.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;playdemo&#039;&#039;&#039;||&#039;&#039;demoname&#039;&#039;||notnet||Control||Plays the given demo normally.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;playerinfo&#039;&#039;&#039;||||||Information||Displays name information for all connected players. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;puke&#039;&#039;&#039;||&#039;&#039;script&#039;&#039; &#039;&#039;arg...&#039;&#039;||notnet||Testing||Executes an [[ACS]] script. Neither activator thing nor trigger linedef are set.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_changesky&#039;&#039;&#039;||&#039;&#039;texturename&#039;&#039; [&#039;&#039;index&#039;&#039;]||||Testing||Changes sky to specified one in &#039;&#039;texturename&#039;&#039;. If &#039;&#039;index&#039;&#039; is set, it uses the specified sky flat (if more than one).&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;quicksave&#039;&#039;&#039;||||||Control||Quicksaves a game. First time command is used, a slot must be chosen normally. Subsequent uses will overwrite the save in that slot.&lt;br /&gt;
&lt;br /&gt;
NOTE: does nothing in network games or demos &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;quickload&#039;&#039;&#039;||||||Control||Quickloads a game from a previously chosen quicksave slot. NOTE: does nothing in network games or demos &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;quit&#039;&#039;&#039;||||||Control||Plays a random monster sound and exits the game normally, with no prompt. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;quote&#039;&#039;&#039;||||||Core||Currently does nothing.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;restartmap&#039;&#039;&#039;||||server netvar||Testing||Restarts current map.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;resurrect&#039;&#039;&#039;||||level notnet||Testing||Raises dead player.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;s_playmusic&#039;&#039;&#039;||&#039;&#039;name&#039;&#039;||||Testing||Plays the given lump as music, if that lump can be found in the music hash table. Only lumps listed in the internal music table, or new lumps with names beginning with &amp;quot;D_&amp;quot; in DOOM or &amp;quot;MUS_&amp;quot; in Heretic are available.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;s_stopmusic&#039;&#039;&#039;||||||Testing||Stops the music.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;say&#039;&#039;&#039;||&#039;&#039;...&#039;&#039;||netvar||Control||Sends all arguments as a single message to all players in a network game.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;screenshot&#039;&#039;&#039;||||||Control||Takes a single screenshot. Bind this command to a key in order to take a shot without the console in the way.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;skinviewer&#039;&#039;&#039;||||||Menu||Brings up the skin viewer menu widget. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;snd_selectbank||||||Menu||Brings up the ADLMidi sound bank selector menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;spacejump&#039;&#039;&#039;||||hidden notnet||Testing||Allows the player to jump any number of times in midair; useful for testing linked portals.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;spectate_next&#039;&#039;&#039;||||||Control||Switches display to next player (spy mode). Only works during non-deathmatch gameplay, or during any multiplayer demo.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;spectate_prev&#039;&#039;&#039;||||||Control||Switches display to previous player (spy mode). Only works during non-deathmatch gameplay, or during any multiplayer demo.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;spectate_self&#039;&#039;&#039;||||||Control||Switches display to user-controlled player (back from spy mode). Only works during non-deathmatch gameplay, or during any multiplayer mode.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;starttitle&#039;&#039;&#039;||||notnet||Testing||Returns the game to the title screen / demo / credits loop.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;stopdemo&#039;&#039;&#039;||||notnet||Control||Stops any currently playing demo and drops to console.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;summon&#039;&#039;&#039;||&#039;&#039;thingtypename&#039;&#039; &#039;&#039;flagslist&#039;&#039; &#039;&#039;mode&#039;&#039;||hidden level notnet||Testing||Allows spawning of things via their EDF thing type name. An EDF/BEX flag list can optionally be provided, with the flags separated by commas only. By default, this will cause the listed flags to be added to the thing along with its normal flags. By specifying the third parameter as &amp;quot;set&amp;quot; or &amp;quot;remove&amp;quot;, it is possible to set the thing&#039;s flags value to only the listed flags, or to remove the listed flags if the thingtype has them set by default.&lt;br /&gt;
&lt;br /&gt;
Example to spawn a friendly thing:&lt;br /&gt;
 $ summon doomimp friend &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;thunder&#039;&#039;&#039;||||||Testing||Forces a thunder to occur.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;timedemo&#039;&#039;&#039;||&#039;&#039;demoname&#039;&#039; &#039;&#039;showmenu&#039;&#039;||notnet||Control||Starts the given demo as a time demo, in which the framerate of the game can be measured. If showmenu is set to 1, a meter comparing the framerate against that of a &amp;quot;fast&amp;quot; machine will be displayed after the demo is complete. Otherwise, the framerate will be printed to the console as a number.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;togglefullscreen&#039;&#039;&#039;||||buffered||I/O||Toggles between fullscreen and window, by toggling between &#039;w&#039; and &#039;f&#039; in the current [[geom string]].&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;unbind&#039;&#039;&#039;||&#039;&#039;keyname&#039;&#039; &#039;&#039;bindingclass&#039;&#039;||||I/O||Unbinds the specified key from any action, or from only the action in the specified class if the bindingclass parameter is specified. As of Eternity Engine v3.31 Delta, keys may have one binding from each separate binding class. Binding class numbers are displayed next to action names when using the &amp;quot;bind keyname&amp;quot; command. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;unbindall&#039;&#039;&#039;||||||I/O||Releases *all* dynamic keybindings. Use with caution!&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;v_dumppatch&#039;&#039;&#039;||&#039;&#039;lumpname&#039;&#039; &#039;&#039;filename&#039;&#039; &#039;&#039;fillcolor&#039;&#039;||||Testing||Dumps a patch to a file as a PNG.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;v_fontcolors&#039;&#039;&#039;||&#039;&#039;fontname&#039;&#039; &#039;&#039;filename&#039;&#039;||||Testing||Writes the colors of &#039;&#039;fontname&#039;&#039; to a file names &#039;&#039;filename&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;vilehit&#039;&#039;&#039;||||level notnet||Testing||If the player is autoaiming at an enemy, the player will perform an Arch-vile attack on that enemy.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;viles&#039;&#039;&#039;||||hidden level notnet||Testing||A special command for DOOM II only. Try it and see what happens :)&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;w_masterlevels&#039;&#039;&#039;||[&#039;&#039;skill&#039;&#039;]||notnet||Menu||Shows the Master Levels menu, assuming master_levels_dir is properly configured.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;w_playnorest&#039;&#039;&#039;||[&#039;&#039;skill&#039;&#039;]||||Control||Start playing No Rest for the Living (if available).&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;w_writelump&#039;&#039;&#039;||&#039;&#039;lumpname&#039;&#039;||||Testing||Writes a lump to a file, with the name of the lump followed by .lmp, stored in the user game path.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;warp&#039;&#039;&#039;||&#039;&#039;x&#039;&#039; &#039;&#039;y&#039;&#039;||level notnet||Testing||Teleports player to given XY coordinates.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;whistle&#039;&#039;&#039;||&#039;&#039;thingtypename&#039;&#039;||level notnet||Testing||If there is a live, friendly thing of the given EDF type, the first such thing found on the map will be teleported in front of the player. If the thing doesn&#039;t fit where the player is trying to teleport it, it will not be teleported. It will also not be teleported across blocking lines. &lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;xl_dumpemapinfo&#039;&#039;&#039;||&#039;&#039;mapname&#039;&#039;||||Information||Displays information on a single [[EMAPINFO]] (Eternity) entry by map name.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;xl_dumpmapinfo&#039;&#039;&#039;||&#039;&#039;mapname&#039;&#039;||||Information||Displays information on a single MAPINFO (Hexen/ZDoom) entry by map name.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;z_dumpcore&#039;&#039;&#039;||||hidden||Information||Write the zone heap to a file. Useful for debugging.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;z_print&#039;&#039;&#039;||||hidden||Information||Prints the zone heap. Useful for development debugging.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Console constants==&lt;br /&gt;
These can&#039;t be changed, and when executed, show their content as information.&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;version&#039;&#039;&#039;||Eternity version number (only the major and minor components, not the subversion).&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;ver_date&#039;&#039;&#039;||Build date.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;ver_time&#039;&#039;&#039;||Build time.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;ver_name&#039;&#039;&#039;||Textual name of version.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;opt&#039;&#039;&#039;||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;rngseed&#039;&#039;&#039;||Show the random generator seed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Console variables==&lt;br /&gt;
These items store inherent values (unlike the commands) which can be queried by simply executing the variable without a new value, and can also be changed, often with side effects to the game.&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Limits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_back&#039;&#039;&#039;||int||0 to 255||Colour of automap background&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_grid&#039;&#039;&#039;||int||0 to 255||Colour of grid&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_wall&#039;&#039;&#039;||int||0 to 255||Colour of normal walls&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_fchg&#039;&#039;&#039;||int||0 to 255||Colour of lines with floor height change&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_cchg&#039;&#039;&#039;||int||0 to 255||Colour of lines with ceiling height change&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_clsd&#039;&#039;&#039;||int||0 to 255||Colour of closed doors or areas&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_rkey&#039;&#039;&#039;||int||0 to 255||Colour of red key objects&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_bkey&#039;&#039;&#039;||int||0 to 255||Colour of blue key objects&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_ykey&#039;&#039;&#039;||int||0 to 255||Colour of yellow key objects&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_rdor&#039;&#039;&#039;||int||0 to 255||Colour of red doors&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_bdor&#039;&#039;&#039;||int||0 to 255||Colour of blue doors&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_ydor&#039;&#039;&#039;||int||0 to 255||Colour of yellow doors&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_tele&#039;&#039;&#039;||int||0 to 255||Colour of teleport lines&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_secr&#039;&#039;&#039;||int||0 to 255||Colour of secret sector boundaries&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_exit&#039;&#039;&#039;||int||0 to 255||Colour of exit lines&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_unsn&#039;&#039;&#039;||int||0 to 255||Colour of computer map unexplored lines&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_flat&#039;&#039;&#039;||int||0 to 255||Colour of no-height-change line seen when doing iddt&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_sprt&#039;&#039;&#039;||int||0 to 255||Colour of normal map objects when doing iddt/iddt&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_hair&#039;&#039;&#039;||int||0 to 255||Colour of map pointer&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_sngl&#039;&#039;&#039;||int||0 to 255||Colour of player arrow in single player&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_frnd&#039;&#039;&#039;||int||0 to 255||Colour of friends in iddt/iddt&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapcolor_prtl&#039;&#039;&#039;||int||0 to 255||Colour of lines from other portal layers&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mapportal_overlay&#039;&#039;&#039;||bool||yes/no||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;am_drawnodelines&#039;&#039;&#039;||toggle||on/off||Whether to draw node lines (and certain other internal lines not documented otherwise), for debugging&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;am_drawsegs&#039;&#039;&#039;||toggle||on/off||Whether to draw BSP segs, for debugging.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;am_dynasegs_bysubsec&#039;&#039;&#039;||toggle||yes/no||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;am_overlay&#039;&#039;&#039;||toggle||on/off||Whether automap is in overlay mode.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;c_height&#039;&#039;&#039;||int||20 to 200||normal height of the console in pixels&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;c_speed&#039;&#039;&#039;||int||1 to 200||speed at which console descends/recedes&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;d_drawfps&#039;&#039;&#039;||toggle||on/off||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;d_fastrefresh&#039;&#039;&#039;||toggle||on/off||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;d_interpolate&#039;&#039;&#039;||toggle||on/off||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;gl_colordepth&#039;&#039;&#039;||int||16 to 32||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;gl_filter_type&#039;&#039;&#039;||int||0 to 1 or GL_LINEAR, GL_NEAREST||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;gl_use_extensions&#039;&#039;&#039;||toggle||yes/no||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;gl_arb_pixelbuffer&#039;&#039;&#039;||toggle||yes/no||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;draw_particles&#039;&#039;&#039;||bool||on/off||Whether to show particle effects.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;bloodsplattype&#039;&#039;&#039;||int||0 to 2 or sprites, particles, both||effect for blood splats&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;bulletpufftype&#039;&#039;&#039;||int||0 to 2 or sprites, particles, both||effect for bullet puffs&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;rocket_trails&#039;&#039;&#039;||bool||on/off||whether rockets have a smoke trail&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;grenade_trails&#039;&#039;&#039;||bool||on/off||whether MBF grenades have a smoke trail&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;bfg_cloud&#039;&#039;&#039;||bool||on/off||whether BFG projectiles have a particle cloud&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;alwaysmlook&#039;&#039;&#039;||bool||on/off||Whether mouse movements are always interpreted as mouse-look.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;invertmouse&#039;&#039;&#039;||bool||on/off||Whether vertical mouse movements are reversed.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;invert_padlock&#039;&#039;&#039;||bool||on/off||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;sens_horiz&#039;&#039;&#039;||float||0 to 1024||Relative horizontal sensitivity of the mouse.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;sens_vert&#039;&#039;&#039;||float||0 to 1024||Relative vertical sensitivity of the mouse.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;sens_combined&#039;&#039;&#039;||int||0 to 16||Also changes &#039;&#039;&#039;sens_horiz&#039;&#039;&#039; and &#039;&#039;&#039;sens_vert&#039;&#039;&#039; with this value times 4.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;sens_vanilla&#039;&#039;&#039;||toggle||yes/no||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;weapon_hotkey_cycling&#039;&#039;&#039;||bool||on/off||Whether to allow a weapon key to select one from multiple weapons, as is the case with the fist/chainsaw and the two shotguns in original DOOM.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;weapon_hotkey_holding&#039;&#039;&#039;||bool||on/off||Whether holding the weapon key keeps changing the current weapon, when multiple weapons are selectable from the same key.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;turbo&#039;&#039;&#039;||int||10 to 400||Turbo scale factor for walking/running. Only affects current player, even in multiplayer.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;cooldemo&#039;&#039;&#039;||int||0 to 2 or off, random, follow||If &#039;&#039;&#039;follow&#039;&#039;&#039; and if the level has intermission cameras, the view will move between them randomly during the demo. If &#039;&#039;&#039;random&#039;&#039;&#039;, it will alternate between the &amp;quot;follow&amp;quot; mode and the chase-cam. If &#039;&#039;&#039;off&#039;&#039;&#039;, demos are normal even in levels with intermission cameras.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;shot_type&#039;&#039;&#039;||int||0 to 3 or bmp, pcx, tga, png||file type written when screenshots are taken&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;shot_gamma&#039;&#039;&#039;||bool||yes/no||whether to create gamma correct screenshots&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;textmode_startup&#039;&#039;&#039;||bool||on/off||If &#039;&#039;&#039;on&#039;&#039;&#039;, game starts in text mode like the original DOOM. If &#039;&#039;&#039;off&#039;&#039;&#039;, game starts in console mode with graphics.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;demo_insurance&#039;&#039;&#039;||int||0 to 2 or off, on, &amp;quot;when recording&amp;quot;||Determines whether or not extra steps should be taken to ensure that demos will remain in sync. This should not be needed for vanilla Doom demos.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;smooth_turning&#039;&#039;&#039;||bool||on/off||Whether mouse turning is smoothed by the game.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mouse_accel_type&#039;&#039;&#039;||int||0 to 3 or off, linear, choco, custom||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mouse_accel_threshold&#039;&#039;&#039;||int||0 to 1024||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mouse_accel_value&#039;&#039;&#039;||float||0 to 100||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mouse_vert&#039;&#039;&#039;||bool||on/off||Was previously &#039;&#039;&#039;mouse_novert&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mouse_dblc1&#039;&#039;&#039;||int||-1 to 2||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mouse_dblc2&#039;&#039;&#039;||int||-1 to 2||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;map_coords&#039;&#039;&#039;||bool||on/off||Whether automap coordinates follow the pointer in non-follow mode, or show the player coordinates.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;map_secret_after&#039;&#039;&#039;||bool||yes/no||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;numhelpers&#039;&#039;&#039;||int||0 to 3||Number of helper creatures that spawn with the player.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;autorun&#039;&#039;&#039;||bool||on/off||Makes the player always run, without having to hold the shift key.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;runiswalk&#039;&#039;&#039;||bool||on/off||Makes it so the shift key makes the player walk if &#039;&#039;&#039;autorun&#039;&#039;&#039; is &#039;&#039;&#039;on&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;iwad_doom_shareware&#039;&#039;&#039;||string||||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;iwad_doom&#039;&#039;&#039;||string||||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;iwad_ultimate_doom&#039;&#039;&#039;||string||||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;iwad_doom2&#039;&#039;&#039;||string||||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;iwad_bfgdoom2&#039;&#039;&#039;||string||||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;iwad_tnt&#039;&#039;&#039;||string||||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;iwad_plutonia&#039;&#039;&#039;||string||||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;iwad_hacx&#039;&#039;&#039;||string||||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;iwad_heretic_shareware&#039;&#039;&#039;||string||||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;iwad_heretic&#039;&#039;&#039;||string||||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;iwad_heretic_sosr&#039;&#039;&#039;||string||||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;iwad_freedoom&#039;&#039;&#039;||string||||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;iwad_freedoomu&#039;&#039;&#039;||string||||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;iwad_freedm&#039;&#039;&#039;||string||||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;pwad_id24res&#039;&#039;&#039;||string||||Support finding NR4TL from Doom + Doom II for GOG/Steam&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;master_levels_dir||string||||Path to the Master Levels for DOOM II WADs. Must be path to the location which contains the actual WAD files. Used when starting the Master Level menu.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;w_norestpath&#039;&#039;&#039;||string||||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;use_doom_config&#039;&#039;&#039;||bool||yes/no||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_joysticksens&#039;&#039;&#039;||int||0 to 32767||**Removed in EE 4.04.00**&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_joyturnsens&#039;&#039;&#039;||float||0.0 to 100.0||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_joy_deadzone_left&#039;&#039;&#039;||int||0 to 32767||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_joy_deadzone_right&#039;&#039;&#039;||int||0 to 32767||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_joy_deadzone_trigger&#039;&#039;&#039;||int||0 to 32767||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_forcefeedback&#039;&#039;&#039;||toggle||on/off||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_gamespeed&#039;&#039;&#039;||int||0 to 500||Changes the speed of the entire game. The value is a percentage. 100 means the normal speed. Caution: setting 0 effectively freezes the game (stops time), but fortunately the console is available even then, so you can restore it to a nonzero value. This variable is useful for testing rendering interpolation.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;v_retrace&#039;&#039;&#039;||bool||yes/no||Vertical synchronization. Turn it on if the display looks like tearing in the middle when changing frames. Turn it off if you experience other problems due to it.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_usemouse&#039;&#039;&#039;||bool||yes/no||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_grabmouse&#039;&#039;&#039;||bool||yes/no||whether the window grabs mouse input&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_videomode&#039;&#039;&#039;||string||buffered||This is a [[geom string]]. Use it to change the video mode.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_resolution&#039;&#039;&#039;||string||buffered||Resolution of the renderer&#039;s target (WWWWxHHHH or native). Usually it&#039;s set to &#039;&#039;&#039;native&#039;&#039;&#039;, which means to just use the same resolution as in &#039;&#039;&#039;i_videomode&#039;&#039;&#039;, but sometimes you may want a different resolution, such as for displaying in low-detail.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_videodriverid&#039;&#039;&#039;||int||-1 to 1 or default, &amp;quot;SDL Software&amp;quot;, &amp;quot;SDL GL2D&amp;quot;||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_letterbox&#039;&#039;&#039;||toggle||yes/no buffered||Whether to enable letterboxing when &#039;&#039;&#039;i_videomode&#039;&#039;&#039; is set to a square tower-like aspect ratio. This flag only applies for that; it does not apply for fullscreen letter/pillarboxing of 4:3 or wider aspect ratios.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;show_scores&#039;&#039;&#039;||bool||on/off||Whether to show frags when you die.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_overlayid&#039;&#039;&#039;||int||-1 to 1 or default, &amp;quot;Modern HUD&amp;quot;, &amp;quot;Boom HUD&amp;quot;||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_overlaystyle&#039;&#039;&#039;||int||0 to 4 or off, &amp;quot;boom style&amp;quot;, flat, distributed, graphical||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_hidesecrets&#039;&#039;&#039;||bool||yes/no||whether to display secrets on the HUD.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_hidestats&#039;&#039;&#039;||bool||yes/no||whether to display kills/items/secrets on the HUD.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_obituaries&#039;&#039;&#039;||bool||on/off||whether to show obituary when player dies.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_obitcolor&#039;&#039;&#039;||int||0 to 9||Color of obituary message&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_crosshair&#039;&#039;&#039;||int||0 to 2 or none, cross, angle||Shape/presence of aiming crosshairs.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_crosshair_hilite&#039;&#039;&#039;||toggle||on/off||Whether crosshair will highlight when player is aiming at a monster or friend&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_crosshair_scale&#039;&#039;&#039;||toggle||on/off||Whether the crosshair gets scaled. It gets saved into the &#039;&#039;&#039;crosshair_scale&#039;&#039;&#039; [[OPTIONS]] field.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_messages&#039;&#039;&#039;||bool||on/off||Whether to show HUD messages.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_messagealignment&#039;&#039;&#039;||int||0 to 2 or default, left, centered||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_messagecolor&#039;&#039;&#039;||int||0 to 9||Colour of HUD messages.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_messagelines&#039;&#039;&#039;||int||0 to 14||Number of lines of the HUD message widget.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_messagescroll&#039;&#039;&#039;||bool||yes/no||Whether the widget can be scrolled to see previous messages.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_messagetime&#039;&#039;&#039;||int||0 to 100000||Length of time messages appear.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_showtime&#039;&#039;&#039;||toggle||yes/no||Whether to display level time in the automap.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_showcoords&#039;&#039;&#039;||toggle||yes/no||Whether to display player/pointer coordinates in the automap.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_alwaysshowcoords&#039;&#039;&#039;||toggle||yes/no||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_timecolor&#039;&#039;&#039;||int||0 to 9||Colour of the time widget&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_levelnamecolor&#039;&#039;&#039;||int||0 to 9||Colour of the level name widget&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_coordscolor&#039;&#039;&#039;||int||0 to 9||Colour of the coordinate widget.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;hu_restrictoverlaywidth&#039;&#039;&#039;||toggle||yes/no buffered||Whether to restrict the modern HUD to a 16:9 subscreen (if at 16:9 or wider aspect)&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_toggleisback&#039;&#039;&#039;||toggle||yes/no||whether the &#039;&#039;&#039;menu_toggle&#039;&#039;&#039; keybinding action goes back one menu instead of exiting.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_background&#039;&#039;&#039;||string||length 8||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;wad_directory&#039;&#039;&#039;||string||length 1024||user&#039;s wad directory which will be listed in the wad loading dialog&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_wadname&#039;&#039;&#039;||string||handlerset||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_start_mapname&#039;&#039;&#039;||string||length 9 handlerset||Exact map header name of a map at which a new game started from the menus should begin at. If invoked from the menus, this command will immediately invoke the gamemode-dependent skill selection menu when its value is set.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_demoname&#039;&#039;&#039;||string||length 12||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;startlevel&#039;&#039;&#039;||string||length 9 handlerset||name of first level to start new games&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_favaspectratio&#039;&#039;&#039;||int||0 to 7 or Legacy, 5:4, 4:3, 3:2, 16:10, 5:3, WSVGA, 16:9||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_favscreentype&#039;&#039;&#039;||int||0 to 1 or windowed, fullscreen||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_searchstr&#039;&#039;&#039;||string||length 32||string to search for in menus via the &#039;&#039;&#039;mn_search&#039;&#039;&#039; command&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mn_classic_menus&#039;&#039;&#039;||bool||yes/no||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;chasecam&#039;&#039;&#039;||bool||on/off||Whether to have a third-person camera behind you.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;chasecam_height&#039;&#039;&#039;||int||-31 to 100||Preferred height of the chasecam above player&#039;s viewheight.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;chasecam_dist&#039;&#039;&#039;||int||10 to 1024||Preferred distance from chasecam to player.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;chasecam_speed&#039;&#039;&#039;||int||1 to 100||Percentage of distance to target chasecam moves per gametic.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;walkcam&#039;&#039;&#039;||bool||on/off notnet||Whether to control a walkcam, which lets you explore the entire level as a spectator.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;spechits_emulation&#039;&#039;&#039;||int||0 to 2 or off, chocodoom, prboomplus||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;donut_emulation&#039;&#039;&#039;||bool||on/off||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;p_markunknowns&#039;&#039;&#039;||bool||yes/no||&#039;&#039;&#039;yes&#039;&#039;&#039;: location of unknown thingtypes will be marked with EDF &#039;&#039;&#039;Unknown&#039;&#039;&#039; objects. &#039;&#039;&#039;no&#039;&#039;&#039;: only messages are displayed when unknown things are used in a map.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;wipewait&#039;&#039;&#039;||int||0 to 2 or never, always, demos||Whether or not the screen wipe routine blocks the main game loop&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;wipetype&#039;&#039;&#039;||int||0 to 2 or none, melt, fade||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;p_lastenemyroar&#039;&#039;&#039;||bool||on/off||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;secret_notification&#039;&#039;&#039;||bool||on/off||Whether to sound the secret found notification&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_numcontexts||int||0 to CPU thread count||Sets the number of render contexts. If 0 it just means the maximum.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_fov&#039;&#039;&#039;||int||20 to 179||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_showrefused&#039;&#039;&#039;||bool||on/off||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;gamma&#039;&#039;&#039;||int||0 to 4||Gamma correction level&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;lefthanded&#039;&#039;&#039;||bool||right/left||whether player is left handed (flips the player weapon sprites)&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_blockmap&#039;&#039;&#039;||bool||on/off||whether to rebuild blockmaps at runtime&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_homflash&#039;&#039;&#039;||bool||on/off||whether to flash the HOM indicator or keep it red.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_precache&#039;&#039;&#039;||bool||on/off||whether to precache graphics&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_showgun&#039;&#039;&#039;||bool||yes/no||whether to draw weapon sprites&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_showhom&#039;&#039;&#039;||bool||yes/no||whether to show the flashing HOM indicator&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_stretchsky&#039;&#039;&#039;||bool||on/off||{{deprecated}} Do not use. Skies no longer need stretching, as Eternity will just fade them to a flat colour when looking up.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_swirl&#039;&#039;&#039;||bool||on/off||Whether to enable the swirling effect for all animated flats. Meant mainly for testing the effect; otherwise it&#039;s preferable to use [[EDF animations]].&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_trans&#039;&#039;&#039;||bool||on/off||whether general translucency is enabled&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_tranpct&#039;&#039;&#039;||int||0 to 100||general global translucency percentage&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;screensize&#039;&#039;&#039;||int||0 to 8 buffered||View frame size.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_ptcltrans&#039;&#039;&#039;||int||0 to 2 or none, smooth, general||translucency type for particle effects — smoth is ZDoom-style smooth fading, and general is static, BOOM-style translucency as used in Eternity v3.29 Gamma and earlier.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_columnengine&#039;&#039;&#039;||int||0 to 1 or normal, quad||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_spanengine&#039;&#039;&#039;||int||0 or highprecision||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_tlstyle&#039;&#039;&#039;||int||0 to 2 or none, boom, new||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_sprprojstyle&#039;&#039;&#039;||int||0 to 2 or default, fast, thorough||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_boomcolormaps&#039;&#039;&#039;||toggle||on/off||If &#039;&#039;&#039;on&#039;&#039;&#039;, causes all sectors with colormaps to apply the Boom-like logic of changing player&#039;s full colormap instead of using it locally. This is mainly for compatibility. See also &#039;&#039;&#039;sector-colormap&#039;&#039;&#039; in [[EMAPINFO]] for level-based options on how to customize this behaviour.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_drawplayersprites&#039;&#039;&#039;||toggle||on/off||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;r_centerfire&#039;&#039;&#039;||toggle||on/off||Whether to centre the weapon sprites when firing, like in GZDoom. Can also be saved in [[OPTIONS]].&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;displaynum&#039;&#039;&#039;||int||0 to number of displays||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;snd_card&#039;&#039;&#039;||int||-1 to 1 or &amp;quot;SDL mixer&amp;quot;, none, &amp;quot;PC Speaker&amp;quot;||type of sound driver to be used by SDL&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mus_card&#039;&#039;&#039;||int||-1 to 0 or &amp;quot;SDL mixer&amp;quot;, none||MIDI driver used by SDL&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;detect_voices&#039;&#039;&#039;||int||0 to 1 or yes, no||Unused.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;snd_spcpreamp&#039;&#039;&#039;||int||1 to 6||amplification factor for SPC music&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;snd_spcbassboost&#039;&#039;&#039;||int||0 to 31||logarithmic bass boost scale for SPC music&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;snd_mididevice&#039;&#039;&#039;||int||-1 to 0 or Default, ADLMIDI||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;snd_numchips&#039;&#039;&#039;||int||1 to 8||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;snd_bank&#039;&#039;&#039;||int||0 to bank count||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;snd_oplemulator&#039;&#039;&#039;||int||0 to 4 or &amp;quot;Nuked 1.8&amp;quot;, &amp;quot;Nuked 1.7.4&amp;quot;, Dosbox, Opal, Java||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;s_lowfreq&#039;&#039;&#039;||float||minimum 0||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;s_highfreq&#039;&#039;&#039;||float||minimum 0||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;s_eqpreamp&#039;&#039;&#039;||float||0 to 1||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;s_lowgain&#039;&#039;&#039;||float||0 to 3||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;s_midgain&#039;&#039;&#039;||float||0 to 3||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;s_highgain&#039;&#039;&#039;||float||0 to 3||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_ledsoff&#039;&#039;&#039;||bool||yes/no||Whether to keep keyboard LEDs off regardless of lock states.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_waitatexit&#039;&#039;&#039;||bool||yes/no||whether game will wait for input after exiting (&#039;&#039;&#039;yes&#039;&#039;&#039;), or shut down immediately (&#039;&#039;&#039;no&#039;&#039;&#039;).&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_showendoom&#039;&#039;&#039;||bool||yes/no||whether to show ENDOOM on exit.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;i_endoomdelay&#039;&#039;&#039;||int||35 to 3500||how long is ENDOOM shown&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;com&#039;&#039;&#039;||int||1 to 4||COM port to use for serial connections&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;ammo_red&#039;&#039;&#039;||int||0 to 100||ammo amount at which status bar numbers turn red&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;ammo_yellow&#039;&#039;&#039;||int||0 to 100||ammo amount at which status bar numbers turn yellow&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;health_red&#039;&#039;&#039;||int||0 to 200||health amount at which status bar numbers turn red&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;health_yellow&#039;&#039;&#039;||int||0 to 200||health amount at which status bar numbers turn yellow&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;health_green&#039;&#039;&#039;||int||0 to 200||health amount at which status bar numbers turn green&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;armor_red&#039;&#039;&#039;||int||0 to 200||armor amount at which status bar numbers turn red&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;armor_yellow&#039;&#039;&#039;||int||0 to 200||armor amount at which status bar numbers turn yellow&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;armor_green&#039;&#039;&#039;||int||0 to 200||armor amount at which status bar numbers turn green&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;armor_byclass&#039;&#039;&#039;||toggle||yes/no||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;st_graypct&#039;&#039;&#039;||bool||yes/no||whether to keep % sign grey or to make it change colour with the numbers (if that&#039;s enabled).&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;st_rednum&#039;&#039;&#039;||bool||yes/no||whether status bar numbers are always red, or coloured like in Boom.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;st_singlekey&#039;&#039;&#039;||bool||yes/no||Whether to show just the skull keys when both are picked, like in vanilla Doom.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;st_fsalpha&#039;&#039;&#039;||int||0 to 100||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;s_enviro_volume&#039;&#039;&#039;||int||0 to 16||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;s_precache&#039;&#039;&#039;||bool||on/off||whether to precache sounds at the beginning of the game&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;s_pitched&#039;&#039;&#039;||bool||on/off||whether to have variable pitched sounds like in old Doom and new Doom re-releases.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;snd_channels&#039;&#039;&#039;||int||1 to 32||number of software sound channels to maintain.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;sfx_volume&#039;&#039;&#039;||int||0 to 15||base volume for digital sound effects&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;music_volume&#039;&#039;&#039;||int||0 to 15||base volume for MIDI synthesis&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;s_flippan&#039;&#039;&#039;||bool||on/off||whether to reverse stereo channels&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;s_hidefmusic&#039;&#039;&#039;||bool||on/off||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;s_randmusic&#039;&#039;&#039;||toggle||on/off||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;v_ticker&#039;&#039;&#039;||int||0 to 3 or off, chart, classic, text||FPS ticker display&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;bobbing&#039;&#039;&#039;||bool||on/off netvar||&#039;&#039;&#039;on&#039;&#039;&#039;: players see themselves bob about like chickens. &#039;&#039;&#039;off&#039;&#039;&#039;: players see themselves scoot around like robots on wheels.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;name&#039;&#039;&#039;||string||length 20 netvar||Name of player.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;dogjumping&#039;&#039;&#039;||bool||on/off netvar||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;dmflags&#039;&#039;&#039;||int||minimum 0 netvar||deathmatch flags bitmask -- add the values below together to set individual flags; values are as follows:&lt;br /&gt;
* 1 (0x1): items respawn&lt;br /&gt;
* 2 (0x2): weapons stay&lt;br /&gt;
* 4 (0x4): barrels respawn&lt;br /&gt;
* 8 (0x8): players drop backpacks&lt;br /&gt;
* 16 (0x10): super powerups respawn&lt;br /&gt;
* 32 (0x20): instagib, any damage gibs players&lt;br /&gt;
* 64 (0x40): keep items when player respawns&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;colour&#039;&#039;&#039;||int||netvar 0 to 14 or green, indigo, brown, red, tomato, dirt, blue, gold, sea, black, purple, orange, pink, cream, white||Player&#039;s uniform color.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;gametype&#039;&#039;&#039;||int||netvar 0 to 2 or single, coop, deathmatch||determines rules used for gameplay; cannot set single if more than one player is present&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;skill&#039;&#039;&#039;||int||netvar 0 to 4 or &amp;quot;im too young to die&amp;quot;, &amp;quot;hey not too rough&amp;quot;, &amp;quot;hurt me plenty&amp;quot;, &amp;quot;ultra violence&amp;quot;, &amp;quot;nightmare&amp;quot;||game skill level&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;allowmlook&#039;&#039;&#039;||bool||on/off netvar||Whether to allow looking up and down.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;bfgtype&#039;&#039;&#039;||int||netvar 0 to 4 or bfg9000, &amp;quot;press release&amp;quot;, bfg11k, bouncing, &amp;quot;plasma burst&amp;quot;||Choose between one of the various port-implemented BFG variants.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;autoaim&#039;&#039;&#039;||bool||on/off netvar||Autoaim enabled.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;recoil&#039;&#039;&#039;||bool||on/off netvar||Boom-style recoil enabled.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;pushers&#039;&#039;&#039;||bool||on/off netvar||Whether objects are affected by wind and current.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;varfriction&#039;&#039;&#039;||bool||on/off netvar||Whether players (and possibly monsters) experience variable friction.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;nukage&#039;&#039;&#039;||bool||on/off netvar||Whether damaging sectors hurt players as normal.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;p_pitchedflight&#039;&#039;&#039;||toggle||on/off netvar||Whether flying in a pitched direction follows that direction (unlike vanilla Heretic).&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;timelimit&#039;&#039;&#039;||int||0 to 100 netvar||Time limit for deathmatch.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;fraglimit&#039;&#039;&#039;||int||0 to 100 netvar||Frag limit for deathmatch.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;fast&#039;&#039;&#039;||toggle||on/off netvar||Fast monsters.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;nomonsters&#039;&#039;&#039;||toggle||on/off netvar||No monsters spawned.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;respawn&#039;&#039;&#039;||toggle||on/off netvar||Respawning enabled.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mon_remember&#039;&#039;&#039;||bool||on/off netvar||Monsters remember target.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mon_infight&#039;&#039;&#039;||bool||on/off netvar||Monster infighting.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mon_backing&#039;&#039;&#039;||bool||on/off netvar||Monsters backing out from melee attackers.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mon_avoid&#039;&#039;&#039;||bool||on/off netvar||Monsters avoiding hazards such as crushing ceilings.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mon_friction&#039;&#039;&#039;||bool||on/off netvar||Monsters affected by friction.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mon_climb&#039;&#039;&#039;||bool||on/off netvar||Monsters can walk steep stairs.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mon_helpfriends&#039;&#039;&#039;||bool||on/off netvar||&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;mon_distfriend&#039;&#039;&#039;||int||0 to 1024 netvar||Distance friends stay away.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;skin&#039;&#039;&#039;||string||length 256 netvar||Player skin setting.&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;comp_*&#039;&#039;&#039;||bool||on/off netvar||These are the various compatibility options. See the equivalent &#039;&#039;&#039;comp_*&#039;&#039;&#039; fields from the [[OPTIONS]] lump for a full list of variables.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[category:console]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=SetLineActivation&amp;diff=6368</id>
		<title>SetLineActivation</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=SetLineActivation&amp;diff=6368"/>
		<updated>2025-08-23T16:21:49Z</updated>

		<summary type="html">&lt;p&gt;Printz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ACSFunction|&lt;br /&gt;
description=Modifies a line&#039;s activation type, if it has a special set: who can activate it, from which side, whether it is repeatable.&lt;br /&gt;
|usage=&#039;&#039;void&#039;&#039; &#039;&#039;&#039;SetLineActivation&#039;&#039;&#039;(&#039;&#039;int lineid&#039;&#039;, &#039;&#039;int activation&#039;&#039;[, &#039;&#039;int repeat&#039;&#039;])&lt;br /&gt;
|parameters=&lt;br /&gt;
*&#039;&#039;lineid&#039;&#039;: ID (tag) of line to modify&lt;br /&gt;
*&#039;&#039;activation&#039;&#039;: activation type. Can be:&lt;br /&gt;
**&#039;&#039;&#039;SPAC_None&#039;&#039;&#039; or 0: disable the activation&lt;br /&gt;
**a combination (sum or OR-operation) of the following:&lt;br /&gt;
***&#039;&#039;&#039;SPAC_Cross&#039;&#039;&#039; (1): on player crossing&lt;br /&gt;
***&#039;&#039;&#039;SPAC_Use&#039;&#039;&#039; (2): on player using from first side&lt;br /&gt;
***&#039;&#039;&#039;SPAC_MCross&#039;&#039;&#039; (4): on monster crossing&lt;br /&gt;
***&#039;&#039;&#039;SPAC_Impact&#039;&#039;&#039; (8): on player or monster shooting bullets (hitscans) on line&lt;br /&gt;
***&#039;&#039;&#039;SPAC_Push&#039;&#039;&#039; (16): on player bumping into line&lt;br /&gt;
***&#039;&#039;&#039;SPAC_PCross&#039;&#039;&#039; (32): on projectile crossing line&lt;br /&gt;
***&#039;&#039;&#039;SPAC_UseThrough&#039;&#039;&#039; (64): when player uses it from front side + allow &#039;passthru&#039; effect&lt;br /&gt;
***&#039;&#039;&#039;SPAC_AnyCross&#039;&#039;&#039; (128): when any of player, monster, projectile or polyobject crosses it&lt;br /&gt;
***&#039;&#039;&#039;SPAC_MUse&#039;&#039;&#039; (256): when monster uses it from front side&lt;br /&gt;
***&#039;&#039;&#039;SPAC_MPush&#039;&#039;&#039; (512): when monster bumps into line&lt;br /&gt;
***&#039;&#039;&#039;SPAC_UseBack&#039;&#039;&#039; (1024): allow using from back side&lt;br /&gt;
*&#039;&#039;repeat&#039;&#039;: if greater than 0, then it allows the activation to be repeated. Otherwise, if 0, it removed the &amp;quot;repeatable&amp;quot; attribute.&lt;br /&gt;
|id=-76}}&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=SetLineActivation&amp;diff=6367</id>
		<title>SetLineActivation</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=SetLineActivation&amp;diff=6367"/>
		<updated>2025-08-23T16:21:11Z</updated>

		<summary type="html">&lt;p&gt;Printz: Created page with &amp;quot;{{ACSFunction| description=Modifies a line&amp;#039;s activation type, if it has a special set: who can activate it, from which side, whether it is repeatable. |usage=&amp;#039;&amp;#039;void&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;SetLineActivation&amp;#039;&amp;#039;&amp;#039;(&amp;#039;&amp;#039;int lineid&amp;#039;&amp;#039;, &amp;#039;&amp;#039;int activation&amp;#039;&amp;#039;[, &amp;#039;&amp;#039;int repeat&amp;#039;&amp;#039;]) |parameters= *&amp;#039;&amp;#039;lineid&amp;#039;&amp;#039;: ID (tag) of line to modify *&amp;#039;&amp;#039;activation&amp;#039;&amp;#039;: activation type. Can be: **&amp;#039;&amp;#039;&amp;#039;SPAC_None&amp;#039;&amp;#039;&amp;#039; or 0: disable the activation **a combination (sum or OR-operation) of the following: ***&amp;#039;&amp;#039;&amp;#039;SPAC_Cross&amp;#039;&amp;#039;&amp;#039; (1): on play...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ACSFunction|&lt;br /&gt;
description=Modifies a line&#039;s activation type, if it has a special set: who can activate it, from which side, whether it is repeatable.&lt;br /&gt;
|usage=&#039;&#039;void&#039;&#039; &#039;&#039;&#039;SetLineActivation&#039;&#039;&#039;(&#039;&#039;int lineid&#039;&#039;, &#039;&#039;int activation&#039;&#039;[, &#039;&#039;int repeat&#039;&#039;])&lt;br /&gt;
|parameters=&lt;br /&gt;
*&#039;&#039;lineid&#039;&#039;: ID (tag) of line to modify&lt;br /&gt;
*&#039;&#039;activation&#039;&#039;: activation type. Can be:&lt;br /&gt;
**&#039;&#039;&#039;SPAC_None&#039;&#039;&#039; or 0: disable the activation&lt;br /&gt;
**a combination (sum or OR-operation) of the following:&lt;br /&gt;
***&#039;&#039;&#039;SPAC_Cross&#039;&#039;&#039; (1): on player crossing&lt;br /&gt;
***&#039;&#039;&#039;SPAC_Use&#039;&#039;&#039; (2): on player using from first side&lt;br /&gt;
***&#039;&#039;&#039;SPAC_MCross&#039;&#039;&#039; (4): on monster crossing&lt;br /&gt;
***&#039;&#039;&#039;SPAC_Impact&#039;&#039;&#039; (8): on player or monster shooting bullets (hitscans) on line&lt;br /&gt;
***&#039;&#039;&#039;SPAC_Push&#039;&#039;&#039; (16): on player bumping into line&lt;br /&gt;
***&#039;&#039;&#039;SPAC_PCross&#039;&#039;&#039; (32): on projectile crossing line&lt;br /&gt;
***&#039;&#039;&#039;SPAC_UseThrough&#039;&#039;&#039; (64): when player uses it from front side + allow &#039;passthru&#039; effect&lt;br /&gt;
***&#039;&#039;&#039;SPAC_AnyCross&#039;&#039;&#039; (128): when any of player, monster, projectile or polyobject crosses it&lt;br /&gt;
***&#039;&#039;&#039;SPAC_MUse&#039;&#039;&#039; (256): when monster uses it from front side&lt;br /&gt;
***&#039;&#039;&#039;SPAC_MPush&#039;&#039;&#039; (512): when monster bumps into line&lt;br /&gt;
***&#039;&#039;&#039;SPAC_UseBack&#039;&#039;&#039; (1024): allow using from back side&lt;br /&gt;
*&#039;&#039;repeat&#039;&#039;: if greater than 0, then it allows the activation to be repeated. Otherwise, if 0, it removed the &amp;quot;repeatable&amp;quot; attribute.}}&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=ACS_built-in_functions&amp;diff=6366</id>
		<title>ACS built-in functions</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=ACS_built-in_functions&amp;diff=6366"/>
		<updated>2025-08-23T16:13:33Z</updated>

		<summary type="html">&lt;p&gt;Printz: /* Linedefs and sidedefs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are predefined ACS functions with no [[parameterized linedef specials|parameterized linedef special]] equivalents, accessible only through ACS scripts.&lt;br /&gt;
&lt;br /&gt;
NOTE: most of these functions are meant to be compatible with those from ZDoom. For any ones not yet documented on this wiki, you can check the ZDoom wiki. A few of them may be incompletely implemented in Eternity. Don&#039;t hesitate to update the wiki in case of any mistakes. &lt;br /&gt;
==Special TID info==&lt;br /&gt;
For functions affecting things, some TIDs (thing tags) carry special meaning. TID 0 means the activator, and TIDs -1 ... -4 mean each of the four players in the game -- this is an Eternity extension&lt;br /&gt;
==Data type info==&lt;br /&gt;
You may see specifiers such as &#039;&#039;void&#039;&#039;, &#039;&#039;str&#039;&#039;, &#039;&#039;int&#039;&#039; and others in ACS function signatures. They act as a guide on what kinds of values are expected, but in ACS there really are only two types: &#039;&#039;&#039;str&#039;&#039;&#039; and &#039;&#039;&#039;int&#039;&#039;&#039; (and &#039;&#039;&#039;str&#039;&#039;&#039; internally is merely a string ID number). Most importantly: &lt;br /&gt;
*&#039;&#039;void&#039;&#039; means that a function should be used as a procedure (command) without returning anything,&lt;br /&gt;
*&#039;&#039;fixed&#039;&#039; means you can use the decimal point notation: 1.0 is equivalent to 65536, 1.5 to 98304 etc. In ACS, such values are still of &#039;&#039;&#039;int&#039;&#039;&#039; type, but whether you use the decimal point or not is quite relevant. A value such as 128.0 is &#039;&#039;not&#039;&#039; the same as 128: it&#039;s actually equal to 8388608 (no decimal point).&lt;br /&gt;
==Function list==&lt;br /&gt;
===Sound and music===&lt;br /&gt;
*[[ActivatorSound]]&lt;br /&gt;
*[[AmbientSound]]&lt;br /&gt;
*[[LocalAmbientSound]]&lt;br /&gt;
*[[PlayActorSound]]&lt;br /&gt;
*[[PlaySound]]&lt;br /&gt;
*[[SectorSound]]&lt;br /&gt;
*[[SetMusic]]&lt;br /&gt;
*[[LocalSetMusic]]&lt;br /&gt;
*[[SoundSequence]]&lt;br /&gt;
*[[SoundSequenceOnActor]]&lt;br /&gt;
*[[StopSound]]&lt;br /&gt;
*[[ThingSound]]&lt;br /&gt;
&lt;br /&gt;
===Sectors===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
||[[ChangeCeiling]]||Changes the ceiling texture.&lt;br /&gt;
|-&lt;br /&gt;
||[[ChangeFloor]]||Changes the floor texture.&lt;br /&gt;
|-&lt;br /&gt;
||[[GetSectorCeilingZ]]||Gets the ceiling height.&lt;br /&gt;
|-&lt;br /&gt;
||[[GetSectorFloorZ]]||Gets the floor height.&lt;br /&gt;
|-&lt;br /&gt;
||[[GetSectorLightLevel]]||Gets the light level.&lt;br /&gt;
|-&lt;br /&gt;
||[[SectorDamage]]||Damages things in sector.&lt;br /&gt;
|-&lt;br /&gt;
||[[SetSectorDamage]]||Modifies the damaging floor status.&lt;br /&gt;
|-&lt;br /&gt;
||[[TagWait]]||Waits for sectors to stop movement.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Things===&lt;br /&gt;
*[[ActivatorTID]]&lt;br /&gt;
*[[ChangeActorAngle]]&lt;br /&gt;
*[[ChangeActorPitch]]&lt;br /&gt;
*[[CheckActorCeilingTexture]]&lt;br /&gt;
*[[CheckActorClass]]&lt;br /&gt;
*[[CheckActorFloorTexture]]&lt;br /&gt;
*[[CheckActorProperty]]&lt;br /&gt;
*bool [[CheckFlag]](int tid, str flag)&lt;br /&gt;
:Returns true if the first thing with the given tid has the given flag enabled.&lt;br /&gt;
*[[CheckProximity]]&lt;br /&gt;
*bool CheckSight(int source, int dest, int flags)&lt;br /&gt;
:Returns true if there&#039;s a line of sight between at least one thing tagged as source and one thing tagged as dest. Currently flags is reserved and must be 0.&lt;br /&gt;
*int [[ClassifyActor]](int tid)&lt;br /&gt;
:Checks the kind of thing tagged tid. It returns a set of flags, possibly combined:&lt;br /&gt;
:*ACTOR_PLAYER (2): it&#039;s player-controlled&lt;br /&gt;
:*ACTOR_VOODOODOLL (8): it&#039;s a duplicate player start, not controlled by the player but still linked to it. Used in Boom maps for advanced mapping tricks&lt;br /&gt;
:*ACTOR_MONSTER (16): it&#039;s a monster (has COUNTKILL or KILLABLE thing type flag set)&lt;br /&gt;
:*ACTOR_MISSILE (128): it&#039;s a projectile in flight (has MISSILE thing type flag set)&lt;br /&gt;
:*ACTOR_GENERIC (256): neither a monster, nor a projectile&lt;br /&gt;
:*ACTOR_ALIVE (32): has positive health&lt;br /&gt;
:*ACTOR_DEAD (64): has health &amp;lt;= 0&lt;br /&gt;
:*ACTOR_NONE (0): no thing found with this TID&lt;br /&gt;
:*ACTOR_WORLD (1): TID is 0 but activator isn&#039;t a thing&lt;br /&gt;
*[[GetActorAngle]]&lt;br /&gt;
*[[GetActorCeilingZ]]&lt;br /&gt;
*[[GetActorFloorZ]]&lt;br /&gt;
*[[GetActorLightLevel]]&lt;br /&gt;
*[[GetActorPitch]]&lt;br /&gt;
*[[GetActorProperty]]&lt;br /&gt;
*[[GetActorVelX]]&lt;br /&gt;
*[[GetActorVelY]]&lt;br /&gt;
*[[GetActorVelZ]]&lt;br /&gt;
*[[GetActorX]]&lt;br /&gt;
*[[GetActorY]]&lt;br /&gt;
*[[GetActorZ]]&lt;br /&gt;
*[[IsTIDUsed]]&lt;br /&gt;
*[[SetActivator]]&lt;br /&gt;
*[[SetActivatorToTarget]]&lt;br /&gt;
*void SetActorAngle (int tid, fixed angle)&lt;br /&gt;
*[[SetActorVelocity]]&lt;br /&gt;
*void SetActorPitch (int tid, int pitch)&lt;br /&gt;
*[[SetActorPosition]]&lt;br /&gt;
*void SetThingSpecial (int tid, int special [, int arg0 [, int arg1 [, int arg2 [, int arg3 [, int arg4]]]]])&lt;br /&gt;
*int SetActorState(int tid, str statename[, bool exact]);&lt;br /&gt;
*[[SetActorProperty]]&lt;br /&gt;
*int Spawn (str classname, fixed x, fixed y, fixed z [, int tid [, int angle]])&lt;br /&gt;
*int SpawnForced (str classname, fixed x, fixed y, fixed z [, int tid [, int angle]])&lt;br /&gt;
*[[SpawnProjectile]]&lt;br /&gt;
*[[SpawnSpot]]&lt;br /&gt;
*int SpawnSpotFacing (str classname, int spottid [, int tid])&lt;br /&gt;
*[[SpawnSpotFacingForced]]&lt;br /&gt;
*[[SpawnSpotForced]]&lt;br /&gt;
*int ThingCount (int type, int tid)&lt;br /&gt;
*int ThingCountName (str classname, int tid)&lt;br /&gt;
*int ThingCountSector (int type, int tid, int tag)&lt;br /&gt;
*int ThingCountNameSector (str classname, int tid, int tag)&lt;br /&gt;
*int Thing_Damage2 (int tid, int amount, str type);&lt;br /&gt;
*void Thing_Projectile2 (int tid, int type, int angle, int speed, int vspeed, int gravity, int newtid)&lt;br /&gt;
*int UniqueTID ([int tid[, int limit]])&lt;br /&gt;
&lt;br /&gt;
===Player===&lt;br /&gt;
*[[CheckInventory]]&lt;br /&gt;
*[[CheckWeapon]]&lt;br /&gt;
*[[GetWeapon]]&lt;br /&gt;
*[[GetSigilPieces]]&lt;br /&gt;
*[[PlayerArmorPoints]]&lt;br /&gt;
*[[PlayerCount]]&lt;br /&gt;
*[[PlayerFrags]]&lt;br /&gt;
*[[PlayerHealth]]&lt;br /&gt;
*[[PlayerNumber]]&lt;br /&gt;
*[[SetWeapon]]&lt;br /&gt;
*[[TakeInventory]]&lt;br /&gt;
&lt;br /&gt;
===Linedefs and sidedefs===&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! zspecial.acs index&lt;br /&gt;
! Name&lt;br /&gt;
! Return type&lt;br /&gt;
! Parameters&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
||internal|| [[ClearLineSpecial]] || nothing || nothing || Clears the trigger linedef&#039;s special.&lt;br /&gt;
|-&lt;br /&gt;
|| || [[GetLineRowOffset]] || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| || [[GetLineX]] || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| || [[GetLineY]] || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| || [[LineSide]] || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| || [[ReplaceTextures]] || nothing || str old_texture_name, str new_texture_name[, int flags] ||&lt;br /&gt;
|-&lt;br /&gt;
|| || [[SetLineBlocking]] || || ||&lt;br /&gt;
|-&lt;br /&gt;
||internal|| [[SetLineMonsterBlocking]] || || || Makes a linedef block or not block monsters.&lt;br /&gt;
|-&lt;br /&gt;
|| || [[SetLineActivation]] || nothing || int lineid, int activation[, int repeat] ||&lt;br /&gt;
|-&lt;br /&gt;
|| || [[SetLineSpecial]] || || ||&lt;br /&gt;
|-&lt;br /&gt;
|| || [[SetLineTexture]] || nothing || int line_id, int line_side, int sidedef_texture, str texture_name ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Sky===&lt;br /&gt;
*[[SetSkyScrollSpeed]]&lt;br /&gt;
&lt;br /&gt;
===Scripts===&lt;br /&gt;
*bool ACS_NamedExecuteAlways(str script, int map, int arg1, int arg2, int arg3)&lt;br /&gt;
:*Executes a named script, starting a new instance if one already exists. Returns true if successfully started.&lt;br /&gt;
*bool ACS_NamedExecute(str script, int map, int arg1, int arg2, int arg3)&lt;br /&gt;
:*Executes a named script. Returns true if successfully started.&lt;br /&gt;
*int ACS_NamedExecuteWithResult (string script, int s_arg1, int s_arg2, int s_arg3, int s_arg4)&lt;br /&gt;
*bool ACS_NamedSuspend (string script, int map)&lt;br /&gt;
*bool ACS_NamedTerminate (string script, int map)&lt;br /&gt;
&lt;br /&gt;
===Console===&lt;br /&gt;
*int [[GetCVar]] (str cvar)&lt;br /&gt;
*string [[GetCVarString]] (str cvar)&lt;br /&gt;
*int GetPlayerInput (int player, int input)&lt;br /&gt;
&lt;br /&gt;
===Polyobjects===&lt;br /&gt;
*[[GetPolyobjX]]&lt;br /&gt;
*[[GetPolyobjY]]&lt;br /&gt;
*[[PolyWait]]&lt;br /&gt;
&lt;br /&gt;
===Quake===&lt;br /&gt;
*[[Radius_Quake2]]&lt;br /&gt;
&lt;br /&gt;
===Math===&lt;br /&gt;
*[[Cos]]&lt;br /&gt;
*fixed [[FixedSqrt]] (fixed number)&lt;br /&gt;
*int [[Random]] (int min, int max)&lt;br /&gt;
*int [[Sqrt]] (int number)&lt;br /&gt;
*[[Sin]]&lt;br /&gt;
*[[VectorAngle]]&lt;br /&gt;
*int [[VectorLength]] (int x, int y)&lt;br /&gt;
&lt;br /&gt;
===Strings===&lt;br /&gt;
*str StrLeft (str string, int length)&lt;br /&gt;
*str StrMid (str string, int start, int length)&lt;br /&gt;
*str StrRight (str string, int length)&lt;br /&gt;
&lt;br /&gt;
===Level state===&lt;br /&gt;
*[[GameSkill]]&lt;br /&gt;
*[[GameType]]&lt;br /&gt;
*[[GetLevelInfo]]&lt;br /&gt;
*[[SetAirControl]]&lt;br /&gt;
*[[SetAirFriction]]&lt;br /&gt;
*[[SetGravity]]&lt;br /&gt;
*[[SinglePlayer]]&lt;br /&gt;
*[[Timer]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Parameterized linedef specials]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ACS]]&lt;br /&gt;
[[Category:Editing reference]]&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=ThrustThing&amp;diff=6365</id>
		<title>ThrustThing</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=ThrustThing&amp;diff=6365"/>
		<updated>2025-08-23T16:11:56Z</updated>

		<summary type="html">&lt;p&gt;Printz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;72:&#039;&#039;&#039;ThrustThing&#039;&#039;&#039;(&#039;&#039;angle&#039;&#039;, &#039;&#039;speed&#039;&#039;, &#039;&#039;nolimit&#039;&#039;, &#039;&#039;tid&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Pushes a thing or more in a horizontal direction.&lt;br /&gt;
&lt;br /&gt;
==Arguments==&lt;br /&gt;
*&#039;&#039;angle&#039;&#039;: [[byte angle]] of direction to push things by.&lt;br /&gt;
*&#039;&#039;speed&#039;&#039;: starting speed by which to push things.&lt;br /&gt;
*&#039;&#039;nolimit&#039;&#039;: if 1, it will allow thrusting at speeds greater than the usual limit in DOOM of plasma projectiles. Otherwise, if 0, the velocity will be capped.&lt;br /&gt;
*&#039;&#039;tid&#039;&#039;: [[TID]] optional tag of things to push. As usual, 0 means activator.&lt;br /&gt;
&lt;br /&gt;
==Remarks==&lt;br /&gt;
In Hexen, from where this special was inherited, it can only be triggered from the front side. In Eternity however it can be triggered from any side, unless you set a [[UDMF]] or [[ExtraData]] flag to limit activation from front side.&lt;br /&gt;
&lt;br /&gt;
See also [[ThrustThingZ]] for vertical thrusting.&lt;/div&gt;</summary>
		<author><name>Printz</name></author>
	</entry>
</feed>