<?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=Quasar</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=Quasar"/>
	<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/wiki/Special:Contributions/Quasar"/>
	<updated>2026-08-16T12:31:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.2</generator>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_item_effects_and_inventory&amp;diff=4146</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=4146"/>
		<updated>2017-08-13T16:46:11Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Change style&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;margin-left: 1.6em; margin-bottom: 0.5em&amp;quot;&amp;gt;&#039;&#039;For information on current development progress, see [[{{PAGENAME}}/Weapons-branch|weapons-branch]]&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Define what happens when an item is picked up (and eventually, used or dropped from the inventory - this is not complete yet).&lt;br /&gt;
&lt;br /&gt;
There are many different types of item effect definitions:&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 (currently unused)&lt;br /&gt;
  usesound       &amp;lt;str&amp;gt; // sound made when item is used (currently unused)&lt;br /&gt;
  useeffect      &amp;lt;str&amp;gt; // name of item effect to use for activation (unused)&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;
  &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;
===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; if player has greater&lt;br /&gt;
                   // health, the item cannot be picked up at all.&lt;br /&gt;
  lowmessage &amp;lt;str&amp;gt; // alternate message to give instead of pickupfx message when&lt;br /&gt;
                   // health is &amp;lt; amount; if starts with $, is a BEX mnemonic.&lt;br /&gt;
  &lt;br /&gt;
  [+-]alwayspickup  // if +, item is picked up even when unneeded (ie Health Bonus)&lt;br /&gt;
  [+-]sethealth     // if +, item SETS health rather than adding to it (ie Megasphere)&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 (ie Armor Bonus)&lt;br /&gt;
  [+-]bonus           // if +, is a bonus (adds to current armor type without&lt;br /&gt;
                      // changing the protective qualities)&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;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_item_effects_and_inventory/Weapons-branch&amp;diff=4144</id>
		<title>EDF item effects and inventory/Weapons-branch</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_item_effects_and_inventory/Weapons-branch&amp;diff=4144"/>
		<updated>2017-08-13T16:39:32Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Quasar moved page EDF item effects and inventory/Weaopns-branch to EDF item effects and inventory/Weapons-branch without leaving a redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;REMOVE THIS WARNING AT A LATER DATE: Much of this page is in-development features, from inventory-branch-2016, and its successor: weapons-branch. This exists solely for the purpose of easily moving this article back over when weapons-branch is to be merged back into master, and should under no circumstances be used as a reference.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Define what happens when an item is picked up and used (and eventually, dropped from the inventory - this is not complete yet).&lt;br /&gt;
&lt;br /&gt;
There are many different types of item effect definitions:&lt;br /&gt;
&lt;br /&gt;
{{Backto|EDF item effects and inventory}}&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;
  &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;
  &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;
===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; if player has greater&lt;br /&gt;
                   // health, the item cannot be picked up at all.&lt;br /&gt;
  lowmessage &amp;lt;str&amp;gt; // alternate message to give instead of pickupfx message when&lt;br /&gt;
                   // health is &amp;lt; amount; if starts with $, is a BEX mnemonic.&lt;br /&gt;
  &lt;br /&gt;
  [+-]alwayspickup  // if +, item is picked up even when unneeded (ie Health Bonus)&lt;br /&gt;
  [+-]sethealth     // if +, item SETS health rather than adding to it (ie Megasphere)&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;
  [+-]bonus           // if +, is a bonus (adds to current armor type without&lt;br /&gt;
                      // changing the protective qualities)&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 give a power to the player.&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;
===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;
  ammogiven  &amp;lt;ammo&amp;gt;, &amp;lt;amount&amp;gt; [, &amp;lt;dropammount&amp;gt; [, &amp;lt;dmammount&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;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Talk:List_of_codepointers&amp;diff=3849</id>
		<title>Talk:List of codepointers</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Talk:List_of_codepointers&amp;diff=3849"/>
		<updated>2016-10-02T08:19:26Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Reverted edits by 89.178.207.116 (talk) to last revision by Bloodshedder&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I noticed some codepointers, mainly the ones with parameters, have been documented here with type specifiers in them (int, float, string...). While I know they&#039;re there for information purposes, do they actually have this form in the source? Normally all misc1, misc2 and args[] are of type int in the source, so this type naming I think it&#039;s pseudocode at most.--[[User:Printz|Printz]] 05:57, 29 May 2009 (EDT)&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Cardboard_engine&amp;diff=3848</id>
		<title>Cardboard engine</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Cardboard_engine&amp;diff=3848"/>
		<updated>2016-10-02T08:16:02Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Reverted edits by 89.178.207.116 (talk) to last revision by Bloodshedder&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Cardboard&#039;&#039;&#039; is the floating-point renderer which debuted in version 3.35.90 of the [[Eternity Engine]]. Cardboard was created by programmer &#039;&#039;&#039;Stephen &amp;quot;[[SoM]]&amp;quot; McGranahan&#039;&#039;&#039; to address deep-seated problems inherent in the Doom engine&#039;s method of projecting and rendering lines and flats.&lt;br /&gt;
&lt;br /&gt;
Advantages of the Cardboard renderer include greatly improved behavior of anisotropic two-sided lines, giving a clean-scaled appearance to textures even when the camera is looking down a line that it is practically on, and even when mlook is engaged to the minimum or maximum of its vertical range. Long wall error is reduced, allowing maps to contain much longer linedefs without numeric instability causing the walls to appear to &amp;quot;wobble&amp;quot;. Behavior of the engine with respect to extreme height differences is also improved, retaining earlier repairs of crashes and eliminating most remaining rendering glitches associated with tall areas. Rendering of flats is now pixel-perfect in most circumstances.&lt;br /&gt;
&lt;br /&gt;
Cardboard also includes optimizations. Flat drawing has been sped up significantly, and two-sided lines have also been improved via tweaks to the main seg-drawing loop and the ability to treat closed lines as one-sided for rendering purposes.&lt;br /&gt;
&lt;br /&gt;
Unlike previous attempts by the Boom team and other source ports, Cardboard manages to allow the game engine to retain full compatibility by creating an optimum interface between fixed-point level geometry and the floating-point renderer. For example, floating-point vertex coordinates and sector heights are cached on a per-frame basis, minimizing integer-to-float conversions. As a result, frame rates under Cardboard are in most cases superior to the original renderer.&lt;br /&gt;
&lt;br /&gt;
Cardboard includes some qualities which will improve the ability to later add true color support. It was originally developed outside of the Eternity Engine as a stand-alone program which could draw Doom textures and flats in 32-bit color with dynamically calculated light fading.&lt;br /&gt;
{{backto|Eternity Engine}}&lt;br /&gt;
&lt;br /&gt;
==Enhancements provided==&lt;br /&gt;
* 2S lines remain firmly in place even when the player is directly above them and between the two vertices. No more &amp;quot;wobbly&amp;quot; lines.&lt;br /&gt;
* Long wall error is drastically reduced.&lt;br /&gt;
* 2S line texturing remains stable even with the player&#039;s view point inside the texture.&lt;br /&gt;
* Artificial limitations on area height are completely removed.&lt;br /&gt;
* Flat rendering accuracy is greatly improved; visplanes no longer dance when light levels change, and flats line up perfectly with wall textures.&lt;br /&gt;
* No more &amp;quot;sparklies&amp;quot; at the bottom of line textures.&lt;br /&gt;
* Speed improvements.&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Category:Templates&amp;diff=3846</id>
		<title>Category:Templates</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Category:Templates&amp;diff=3846"/>
		<updated>2016-10-02T07:59:40Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Category for all templates. Most templates should be placed in a subcategory.&lt;br /&gt;
&lt;br /&gt;
[[Category:Categories]]&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Category:External_link_templates&amp;diff=3845</id>
		<title>Category:External link templates</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Category:External_link_templates&amp;diff=3845"/>
		<updated>2016-10-02T07:59:10Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Templates for linking to external sites&lt;br /&gt;
&lt;br /&gt;
[[Category:Templates]]&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Template:Doomwiki&amp;diff=3844</id>
		<title>Template:Doomwiki</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Template:Doomwiki&amp;diff=3844"/>
		<updated>2016-10-02T07:58:43Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Doom Wiki linking template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[doom_wiki:{{{1}}}|{{{2|{{{1}}}}}}]]&amp;lt;noinclude&amp;gt;&lt;br /&gt;
==Purpose==&lt;br /&gt;
Create a link to the [[doom_wiki:Doom Wiki|Doom Wiki]].&lt;br /&gt;
&lt;br /&gt;
===Args===&lt;br /&gt;
# Article name on the Doom Wiki&lt;br /&gt;
# Optional; Text to display instead of the exact article name.&lt;br /&gt;
&lt;br /&gt;
[[Category:External link templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Creating_a_projectile&amp;diff=3843</id>
		<title>Creating a projectile</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Creating_a_projectile&amp;diff=3843"/>
		<updated>2016-10-02T07:49:29Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Use interwiki&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial, we will look at the projectile we made during [[creating a monster]] in greater detail.&lt;br /&gt;
&lt;br /&gt;
First off we need to define two files, EDFROOT and EPRJCTLS (or any other name of your choosing). EDFROOT should look like this.&lt;br /&gt;
 stdinclude(&amp;quot;root.edf&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 // New projectiles:&lt;br /&gt;
 lumpinclude(&amp;quot;EPRJCTLS&amp;quot;) // Change this based on whatever you&#039;re calling your equivalent of EPRJCTLS.&lt;br /&gt;
&lt;br /&gt;
Now we&#039;ll create a new projectile that replaces the rockets entirely, using solely IWAD assets, within EPRJCTLS.&lt;br /&gt;
&lt;br /&gt;
 thingtype DriftingEnergyNuke        // This name is given due to it lazily drifting along before exploding.&lt;br /&gt;
 {&lt;br /&gt;
    basictype PlayerProjectile       // Flags: NOBLOCKMAP | NOGRAVITY | DROPOFF | MISSILE | NOCROSS | SPACMISSILE&lt;br /&gt;
    dehackednum 34                   // This tells the engine that this thing type has the same dehackednum as the rocket,&lt;br /&gt;
                                     // meaning that players and Cyberdemons will shoot this instead. You can still access&lt;br /&gt;
                                     // RocketShot by summoning it though.&lt;br /&gt;
    radius 13.0&lt;br /&gt;
    height 8.0&lt;br /&gt;
    speed 4.0                        // As this is a projectile, this value is used as a constant speed.&lt;br /&gt;
    damage 10                        // Damage dealt uses the formula damage*random(1,8).&lt;br /&gt;
    seesound keenpn                  // Keen pain sound.&lt;br /&gt;
    deathsound keendt                // Keen death sound.&lt;br /&gt;
    addflags TRANSLUCENT             // Makes the projectile translucent.&lt;br /&gt;
 &lt;br /&gt;
    States&lt;br /&gt;
    @&amp;quot;&lt;br /&gt;
    Spawn:&lt;br /&gt;
       BAL1 AB 1 Bright A_Tracer    // The projectile doesn&#039;t have the SEEKERMISSILE flag set so it can&#039;t actually&lt;br /&gt;
       BAL2 AB 1 Bright A_Tracer    // trace our target, but we&#039;re only placing it here for the trail anyways.&lt;br /&gt;
       APLS AB 1 Bright A_Tracer&lt;br /&gt;
       PLSS AB 1 Bright A_Tracer&lt;br /&gt;
       Loop&lt;br /&gt;
    Death:&lt;br /&gt;
       BAL1 CDE 5 Bright A_Mushroom // A_Mushroom is what gives the explosive property of our projectile.&lt;br /&gt;
                                    // It spawns an explosion, and then a number of MancubusShot projectiles.&lt;br /&gt;
       Stop                         // As the previous frame has a finite duration, this function is called and&lt;br /&gt;
                                    // the projectile will disappear.&lt;br /&gt;
    &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Simply going into the game and firing a rocket launcher, being fired at by a Cyberdemon, or using &amp;quot;summon DriftingEnergyNuke&amp;quot; will create this new projectile that we&#039;ve created.&lt;br /&gt;
For the projectile we will be using new assets. Like the prior tutorial, we want to import the entries from SS_START to SS_END from [http://www.realm667.com/index.php/en/component/docman/?task=doc_download&amp;amp;gid=285 the aracnorb] from the Realm667 bestiary by [[doom_wiki:James Paddock (Jimmy)|James Paddock (Jimmy)]].&lt;br /&gt;
&lt;br /&gt;
 thingtype AracnorbBall&lt;br /&gt;
 {&lt;br /&gt;
    basictype Seeker // This uses a predefined set of flags for this object. basictype FlyingMonster is equivalent&lt;br /&gt;
                     // to setting cflags as NOBLOCKMAP | NOGRAVITY | DROPOFF | MISSILE | NOCROSS | SEEKERMISSILE.&lt;br /&gt;
                     // SEEKERMISSILE is the flag that allows this to trace targets.&lt;br /&gt;
    radius 13.0&lt;br /&gt;
    height 8.0&lt;br /&gt;
    speed 8.0&lt;br /&gt;
    damage 3&lt;br /&gt;
    seesound plasma&lt;br /&gt;
    deathsound firxpl&lt;br /&gt;
    addflags TRANSLUCENT|SPACMISSILE  // This adds the flags so that the projectile is translucent and can activate&lt;br /&gt;
                                      // generalised linedefs marked with the MISSILE special activation flag.&lt;br /&gt;
    States&lt;br /&gt;
    @&amp;quot;&lt;br /&gt;
    Spawn:&lt;br /&gt;
       ACNF AABB 1 Bright A_GenTracer // This causes the projectile to trace its target. Not calling this would mean that&lt;br /&gt;
                                      // the projectile travels in a straight line.&lt;br /&gt;
       Loop&lt;br /&gt;
    Death:&lt;br /&gt;
       ACNF CDEFG 5 Bright&lt;br /&gt;
       Stop&lt;br /&gt;
    &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
We can now put &amp;quot;summon AracnorbBall&amp;quot; in the console to create this projectile, and if we were to create a monster that uses this (which we did in [[Creating a monster]], we would find that it traces our movement.&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Creating_a_monster&amp;diff=3842</id>
		<title>Creating a monster</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Creating_a_monster&amp;diff=3842"/>
		<updated>2016-10-02T07:48:30Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Use interwiki&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Though not quite as easy as [[creating a simple decoration]], creating a monster is still a relatively basic task. In this tutorial we will define two monsters: one which only uses IWAD assets, and one that uses brand new sprites. We will also start using [[includes]] in order to keep both these monsters in separate EDF lumps.&lt;br /&gt;
&lt;br /&gt;
Much like creating a simple decoration, we will start by creating a text lump named EDFROOT, but for this tutorial we will also make another two text lumps called EZOMBIE and EARACORB. We will include these lumps in EDFROOT so that the monsters defined in the files can be used.&lt;br /&gt;
&lt;br /&gt;
 stdinclude(&amp;quot;root.edf&amp;quot;) // Includes the file base/root.edf, which in turns includes the other files&lt;br /&gt;
                        // that are required for definition of all sprites, sounds, things etc.&lt;br /&gt;
 &lt;br /&gt;
 // New monsters:&lt;br /&gt;
 lumpinclude(&amp;quot;EZOMBIE&amp;quot;)  // A new monster using already defined assets&lt;br /&gt;
 lumpinclude(&amp;quot;EARACORB&amp;quot;) // A new monster using brand new sprites&lt;br /&gt;
&lt;br /&gt;
Now we will start editing EZOMBIE to define on of our new monsters. For this tutorial we will start using [[DECORATE state syntax]].&lt;br /&gt;
&lt;br /&gt;
 thingtype MutatedZombie&lt;br /&gt;
 {&lt;br /&gt;
    doomednum   30001    // This is the thing number used to place the object in a map.&lt;br /&gt;
 &lt;br /&gt;
    basictype   Monster  // This uses a predefined set of flags for this object. basictype Monster is equivalent&lt;br /&gt;
                         // to setting cflags as SOLID | SHOOTABLE | COUNTKILL | FOOTCLIP | SPACMONSTER | PASSMOBJ.&lt;br /&gt;
 &lt;br /&gt;
    spawnhealth 30       // The amount of health the monster spawns with.&lt;br /&gt;
    painchance  128      // The likelihood that the monster goes to a pain state if it is hit.&lt;br /&gt;
                         // Percentage chance is (painchance/255)*100, so for this monster it would be roughly 50%.&lt;br /&gt;
 &lt;br /&gt;
    speed       8        // The monster moves an amount relative to this value each time it uses the Chase codepointer.&lt;br /&gt;
 &lt;br /&gt;
    radius      20.0     // The radius and height set the physical size&lt;br /&gt;
    height      56.0     // of the object, for collision detection.&lt;br /&gt;
 &lt;br /&gt;
    droptype    AmmoClip // The thingtype dropped by the monster when it dies.&lt;br /&gt;
 &lt;br /&gt;
    seesound    sawup    // The sounds made when the monster sees, attacks, is put in pain state, dies,&lt;br /&gt;
    attacksound sawhit   // and makes ambient noise respectively. These particular sounds are defined by sounds.edf&lt;br /&gt;
    painsound   sawful   // and are the DeHackEd names for the chainsaw noises.&lt;br /&gt;
    deathsound  sawidl&lt;br /&gt;
    activesound sawhit&lt;br /&gt;
 &lt;br /&gt;
    obituary_normal &amp;quot;was turned to goo by a mutated zombie&amp;quot; // The message displayed when the player is killed by this&lt;br /&gt;
                                                            // monster, using a projectile or other miscellaneous attack.&lt;br /&gt;
 &lt;br /&gt;
    acs_spawndata        // The identification number used by various parameterised specials, like Thing_Spawn.&lt;br /&gt;
    {                    // it also limits the number to a game namespace. Heretic objects use &amp;quot;modes heretic&amp;quot;&lt;br /&gt;
       num   255         // instead of &amp;quot;modes doom&amp;quot;. Do note that the number must be &amp;lt;256.&lt;br /&gt;
       modes doom&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    states                                       // This declares that the following block is the thingtype&#039;s states.&lt;br /&gt;
    @&amp;quot;                                           // The equivalent to an opening curly brace.&lt;br /&gt;
    Spawn:                                       // State the thing is spawned at.&lt;br /&gt;
       POSS AB 10 A_Look                         // Call the function A_Look, using sprites POSSA and POSSB, each for 10 frames.&lt;br /&gt;
       loop                                      // Loop back to the start of this label.&lt;br /&gt;
    See:                                         // State the monster goes into after seeing a target.&lt;br /&gt;
       POSS AABBCCDD 4 A_Chase                   // Call the function A_Chase, calling it twice for sprites POSSA-D, each time for 4 frames.&lt;br /&gt;
       loop&lt;br /&gt;
    Missile:                                     // State the monster goes into when deciding to shoot its target.&lt;br /&gt;
       POSS E 10 A_FaceTarget                    // Call the action function A_FaceTarget.&lt;br /&gt;
       POSS F  8 A_MissileAttack(MBFBetaPlasma1) // Call the action function A_MissileAttack with parameter MBFBetaPlasma1,&lt;br /&gt;
                                                 // and leave the rest of the parameters as default (all 0 in this case).&lt;br /&gt;
       POSS E  8 &lt;br /&gt;
       goto See                                  // Jump to state See. Note that the next line after a goto MUST be labelled,&lt;br /&gt;
                                                 // unlike ZDoom.&lt;br /&gt;
    Pain:                                        // State it goes into when hit by attack that successfully triggers this pain state.&lt;br /&gt;
       POSS G 3&lt;br /&gt;
       POSS G 3 A_Pain&lt;br /&gt;
       goto See&lt;br /&gt;
    Death:                                       // State it goes into when killed or otherwise destroyed.&lt;br /&gt;
       POSS H 5&lt;br /&gt;
       POSS I 5 A_Scream&lt;br /&gt;
       POSS J 5 A_Fall&lt;br /&gt;
       POSS K 5&lt;br /&gt;
       POSS L -1&lt;br /&gt;
       stop&lt;br /&gt;
    XDeath:                                      // Optional state it goes into when killed with very high damage.&lt;br /&gt;
       POSS M      5&lt;br /&gt;
       POSS N      5 A_XScream&lt;br /&gt;
       POSS O      5 A_Fall&lt;br /&gt;
       POSS PQRST  5&lt;br /&gt;
       POSS U     -1                             // This frame has infinite duration as it has been given a length of -1.&lt;br /&gt;
       stop                                      // This is the equivalent of setting the next frame to 0. If the last frame&lt;br /&gt;
                                                 // has a finite duration (not -1), then it will disappear. otherwise it&#039;s often&lt;br /&gt;
                                                 // used after -1 duration frames when nothing is expected to follow.&lt;br /&gt;
    Raise:                                       // Optional state that the corpse goes into when revived by an Arch-vile.&lt;br /&gt;
       POSS KJIH 5&lt;br /&gt;
       goto See&lt;br /&gt;
    &amp;quot;@                                           // The equivalent to a closing brace.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon MutatedZombie&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30001 in the map, and we should have a Mutated Zombie walking around the map, making chainsaw noises and firing beta plasma balls at you. With this out of the way we can move on to defining a new monster that doesn&#039;t use IWAD assets. For the purposes of this tutorial we will be using [http://www.realm667.com/index.php/en/component/docman/?task=doc_download&amp;amp;gid=285 the aracnorb] from the Realm667 bestiary by [[doom_wiki:James Paddock (Jimmy)|James Paddock (Jimmy)]].&lt;br /&gt;
&lt;br /&gt;
Start by copying over the contents of the wad from SS_START to SS_END inclusive into whatever wad you were previously working in. To follow this up you will need to convert the three sound files provided into Doom Sound Format, and place them in the wad. Now we will start by editing EARACORB. This example won&#039;t use comments in areas already covered by the previous one. The ACNFI states will need to be changed so that all I&#039;s are replaced with H&#039;s and ACNF is replaced with ACNB. Don&#039;t focus too much on the AracnorbBall thingtype, as we will look further into that in [[Creating a projectile]].&lt;br /&gt;
&lt;br /&gt;
 thingtype Aracnorb&lt;br /&gt;
 {&lt;br /&gt;
    doomednum   30002 &lt;br /&gt;
    basictype   FlyingMonster // This uses a predefined set of flags for this object. basictype FlyingMonster is equivalent&lt;br /&gt;
                              // to setting cflags as SOLID | SHOOTABLE | COUNTKILL | NOGRAVITY | FLOAT | SPACMONSTER | PASSMOBJ.&lt;br /&gt;
    addflags    FLOATBOB      // This makes it so that on top of the already defined flags, this thingtype also has the flag FLOATBOB.&lt;br /&gt;
 &lt;br /&gt;
    spawnhealth 170&lt;br /&gt;
    painchance  150&lt;br /&gt;
 &lt;br /&gt;
    speed       12&lt;br /&gt;
    radius      24.0&lt;br /&gt;
    height      56.0 &lt;br /&gt;
    mass        400      // Represents mass factor for the thingtype. This determines thrust when damaged, or how much an&lt;br /&gt;
                         // Arch-vile&#039;s attack will affect it.&lt;br /&gt;
    xscale      0.85     // How much the horizontal component of this sprite is to be scaled.&lt;br /&gt;
    yscale      0.85     // How much the vertical component of this sprite is to be scaled.&lt;br /&gt;
 &lt;br /&gt;
    // This thingtype drops nothing when it dies, so no droptype is defined and it uses the default value (nothing).&lt;br /&gt;
 &lt;br /&gt;
    seesound    &amp;quot;aracnorb/sight&amp;quot; // This uses sound mnemonics defined at the bottom of this EDF file, as well as pre-defined&lt;br /&gt;
    attacksound &amp;quot;aracnorb/melee&amp;quot; // Arachnotron sounds from the IWAD.&lt;br /&gt;
    painsound   dmpain&lt;br /&gt;
    deathsound  &amp;quot;aracnorb/death&amp;quot;&lt;br /&gt;
    activesound bspact&lt;br /&gt;
 &lt;br /&gt;
    obituary_normal &amp;quot;suffered psychic trauma from an aracnorb&#039;s brainwaves.&amp;quot;&lt;br /&gt;
    obituary_melee &amp;quot;had their skull chewed by an aracnorb.&amp;quot; // The message displayed when killed by the thingtype&#039;s melee attack.&lt;br /&gt;
 &lt;br /&gt;
    acs_spawndata&lt;br /&gt;
    {&lt;br /&gt;
       num   254&lt;br /&gt;
       modes doom&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    States&lt;br /&gt;
    @&amp;quot;&lt;br /&gt;
    Spawn:&lt;br /&gt;
       ACNB A 1 A_Look&lt;br /&gt;
       Loop                                               // Note that you can capitalise keywords if you so wish.&lt;br /&gt;
    See:&lt;br /&gt;
       ACNB A 2 A_Chase&lt;br /&gt;
       Loop&lt;br /&gt;
    Melee:&lt;br /&gt;
       ACNB AB 5&lt;br /&gt;
       ACNB C 6 A_Scratch(3, 6, &amp;quot;aracnorb/melee&amp;quot;)         // This calls a generalised melee function. The parameters tell it to use the&lt;br /&gt;
                                                          // 2nd parameter as damage, do 6 damage, and call the sound &amp;quot;aracnorb/melee&amp;quot;.&lt;br /&gt;
       Goto See&lt;br /&gt;
    Missile:&lt;br /&gt;
       ACNB B 12 Bright A_FaceTarget                      // The &amp;quot;Bright&amp;quot; keyword causes this thing to light up when performing this action.&lt;br /&gt;
       ACNB C 2 Bright A_MissileAttack(&amp;quot;AracnorbBall&amp;quot;, 1) // Attack spawning a projectile &amp;quot;AracnorbBall&amp;quot;, and allow&lt;br /&gt;
                                                          // ball to trace (home in on) its target.&lt;br /&gt;
       ACNB B 2 Bright&lt;br /&gt;
       ACNB D 0 A_Jump(32,&amp;quot;See&amp;quot;)                          // Have a 32/255 chance to jump to the state &amp;quot;See&amp;quot;.&lt;br /&gt;
       ACNB D 0 A_SpidRefire&lt;br /&gt;
       Goto Missile+1                                     // This skips the first line of Missile, and goes straight to attacking.&lt;br /&gt;
    Pain:&lt;br /&gt;
       ACNB I 2&lt;br /&gt;
       ACNB I 2 A_Pain&lt;br /&gt;
       Goto See&lt;br /&gt;
    Death:&lt;br /&gt;
       ACNB D 0 A_UnSetFlags(0, &amp;quot;FLOATBOB&amp;quot;)               // Set the flag FLOATBOB to false, so that once it dies it stops bobbing.&lt;br /&gt;
       ACNB D 0 A_Scream&lt;br /&gt;
       ACNB D 6 A_Fall&lt;br /&gt;
       ACNB D 1&lt;br /&gt;
       Wait&lt;br /&gt;
    Crash:                                                // Optional state that is called when the corpse falls and hits the floor.&lt;br /&gt;
       ACNB EFG 6&lt;br /&gt;
       ACNB H -1&lt;br /&gt;
       Stop&lt;br /&gt;
    Raise:&lt;br /&gt;
       ACNB HGFEDA 8&lt;br /&gt;
       ACNB A 0 A_SetFlags(0, &amp;quot;FLOATBOB&amp;quot;)                 // Set the flag FLOATBOB back to true, so that it bobs once resurrected.&lt;br /&gt;
       Goto See&lt;br /&gt;
    &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 thingtype AracnorbBall&lt;br /&gt;
 {&lt;br /&gt;
    basictype Seeker // This uses a predefined set of flags for this object. basictype FlyingMonster is equivalent&lt;br /&gt;
                     // to setting cflags as NOBLOCKMAP | NOGRAVITY | DROPOFF | MISSILE | NOCROSS | SEEKERMISSILE.&lt;br /&gt;
    radius 13.0&lt;br /&gt;
    height 8.0&lt;br /&gt;
    speed 8.0&lt;br /&gt;
    damage 3&lt;br /&gt;
    seesound plasma&lt;br /&gt;
    deathsound firxpl&lt;br /&gt;
    addflags TRANSLUCENT|SPACMISSILE  // This adds the flags so that the projectile is translucent and can activate&lt;br /&gt;
                                      // generalised linedefs marked with the MISSILE special activation flag&lt;br /&gt;
    States&lt;br /&gt;
    @&amp;quot;&lt;br /&gt;
    Spawn:&lt;br /&gt;
       ACNF AABB 1 Bright A_GenTracer // This causes the projectile to trace its target.&lt;br /&gt;
       Loop&lt;br /&gt;
    Death:&lt;br /&gt;
       ACNF CDEFG 5 Bright&lt;br /&gt;
       Stop&lt;br /&gt;
    &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 sound &amp;quot;aracnorb/sight&amp;quot;  { lump = &amp;quot;DSARACST&amp;quot;; } // Define the sound &amp;quot;aracnorb/sight&amp;quot; as the lump DSARACST. &lt;br /&gt;
 sound &amp;quot;aracnorb/death&amp;quot;  { lump = &amp;quot;DSARACDT&amp;quot;; }&lt;br /&gt;
 sound &amp;quot;aracnorb/attack&amp;quot; { lump = &amp;quot;DSARACFR&amp;quot;; }&lt;br /&gt;
 sound &amp;quot;aracnorb/melee&amp;quot;  { lump = &amp;quot;DSARACML&amp;quot;; }&lt;br /&gt;
&lt;br /&gt;
Now just type &amp;quot;summon Aracnorb&amp;quot; into the console or place a thing with doomednum 30002 on the map and you should see your brand new monster that fires a custom homing projectile.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Doom_Wiki&amp;diff=3841</id>
		<title>Doom Wiki</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Doom_Wiki&amp;diff=3841"/>
		<updated>2016-10-02T07:46:45Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Update link to use https&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Doom Wiki&#039;&#039;&#039; at [https://doomwiki.org DoomWiki.org] is a project to document everything related to id Software&#039;s classic games Doom and Doom II.&lt;br /&gt;
&lt;br /&gt;
Articles that are more closely related to Doom in general, other source ports, or non-[[Eternity]] specific editing aspects should be placed there. Interwiki links to the Doom Wiki are created like this: &amp;lt;nowiki&amp;gt;[[Doom Wiki:Doom|Doom]]&amp;lt;/nowiki&amp;gt;, creating [[Doom Wiki:Doom|Doom]].&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=User:Quasar&amp;diff=3840</id>
		<title>User:Quasar</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=User:Quasar&amp;diff=3840"/>
		<updated>2016-10-02T07:45:44Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Update link to use https&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello, I&#039;m Quasar, founder of [[Team Eternity]] and one of the principal programmers of the [[Eternity Engine]]. I am a mod on the Wiki, naturally, and I&#039;ll soon be adding tons of material here.&lt;br /&gt;
&lt;br /&gt;
Some of my websites:&lt;br /&gt;
* [[doom_wiki:User:Quasar|My user page]] on [https://doomwiki.org DoomWiki.org], the &#039;&#039;real&#039;&#039; Doom Wiki. Anything else is not blessed or maintained by me.&lt;br /&gt;
* [[zdoom:User:Quasar|My user page]] at the ZDoom Wiki.&lt;br /&gt;
* http://dk.youfailit.net - Dungeon Keeper Millennium&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=MediaWiki:Common.css&amp;diff=3800</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=MediaWiki:Common.css&amp;diff=3800"/>
		<updated>2016-08-22T12:28:54Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Import padding adjustment from DoomWiki&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
/* Default wikitable padding is terrible; left/right increased to 0.5em to move text away from borders. */&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; th, table.wikitable &amp;gt; tr &amp;gt; td, table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; th, table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; td {&lt;br /&gt;
  padding: 0.2em 0.5em 0.2em 0.5em;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_sound_reference&amp;diff=3563</id>
		<title>EDF sound reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_sound_reference&amp;diff=3563"/>
		<updated>2016-02-24T20:30:50Z</updated>

		<summary type="html">&lt;p&gt;Quasar: grr&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sounds==&lt;br /&gt;
The [[EDF]] &#039;&#039;&#039;Sound&#039;&#039;&#039; block defines sounds to be used in the game. They are linked to the sound lumps included in wads, and the default Doom and Heretic entries have the same names as the lumps, minus the DS prefix (for Doom).&lt;br /&gt;
{{backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
 sound &amp;lt;mnemonic&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   lump           &amp;lt;string&amp;gt;&lt;br /&gt;
   prefix         &amp;lt;boolean&amp;gt;&lt;br /&gt;
   singularity    &amp;lt;singularity class&amp;gt;&lt;br /&gt;
   priority       &amp;lt;number&amp;gt;&lt;br /&gt;
   link           &amp;lt;sound mnemonic&amp;gt;&lt;br /&gt;
   alias          &amp;lt;sound mnemonic&amp;gt;&lt;br /&gt;
   random         &amp;lt;sound mnemonic list&amp;gt;&lt;br /&gt;
   skinindex      &amp;lt;skin index type&amp;gt;&lt;br /&gt;
   linkvol        &amp;lt;number&amp;gt;&lt;br /&gt;
   linkpitch      &amp;lt;number&amp;gt;&lt;br /&gt;
   clipping_dist  &amp;lt;number&amp;gt;&lt;br /&gt;
   close_dist     &amp;lt;number&amp;gt;&lt;br /&gt;
   pitchvariance  &amp;lt;pitch variance type&amp;gt;&lt;br /&gt;
   subchannel     &amp;lt;subchannel class&amp;gt;&lt;br /&gt;
   pcslump        &amp;lt;string&amp;gt;&lt;br /&gt;
   nopcsound      &amp;lt;boolean&amp;gt;&lt;br /&gt;
   dehackednum    &amp;lt;number&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Fields===&lt;br /&gt;
*&#039;&#039;&#039;lump&#039;&#039;&#039;&lt;br /&gt;
:Default: If a value is not provided to this field, then this sound&#039;s mnemonic will be copied directly to this field. In this case, the default value for the prefix field becomes &amp;quot;true&amp;quot;. This means that the mnemonic will be prefixed with the &amp;quot;DS&amp;quot; prefix to construct the final sound lump name. If an explicit value is provided to this field, then the default value of the prefix field becomes &amp;quot;false&amp;quot;. This means the lump name, as provided, becomes the final sound lump name and will not be prefixed in any way. &lt;br /&gt;
:The lump field indicates the lump name that this sound resource will have in WAD files. If the prefix field below is true, the prefix &amp;quot;DS&amp;quot; will be appended to this name when looking for the sound. Otherwise, this name will be used exactly as it is provided. In the event a sound is not found, a default sound for the current game mode (DSPISTOL in DOOM, GLDHIT in Heretic) will be played instead.&lt;br /&gt;
*&#039;&#039;&#039;prefix&#039;&#039;&#039;&lt;br /&gt;
:Default = Depends on presence of lump field&lt;br /&gt;
:This boolean field indicates whether to prefix the lump name with DS when searching for this sound&#039;s lump. Values of false/no/off mean that the lump will not be prefixed. Values of true/yes/on mean that it should be prefixed. If the lump field is provided, the default value of this field changes from true to false.&lt;br /&gt;
*&#039;&#039;&#039;singularity&#039;&#039;&#039;&lt;br /&gt;
:Default = &#039;&#039;sg_none&#039;&#039;&lt;br /&gt;
:This field indicates a singularity class for this sound. If another sound of the same singularity class is playing when this sound is played, the former will be stopped. This is used to implement appropriate player sound behavior in an extensible and modifiable manner. The possible values for the singularity class are as follows: &lt;br /&gt;
:*sg_none&lt;br /&gt;
:*sg_itemup&lt;br /&gt;
:*sg_wpnup&lt;br /&gt;
:*sg_oof&lt;br /&gt;
:*sg_getpow&lt;br /&gt;
*&#039;&#039;&#039;priority&#039;&#039;&#039;&lt;br /&gt;
:Default = 64&lt;br /&gt;
:This field establishes a relative priority for this sound. When sounds must be stopped in order to start new ones, those with the lowest priority will be replaced first. Priority scales down with distance, so sounds playing at higher volume or closer to the player have priority over quieter and more distant sounds. Please note carefully that a higher value in this field means a lower priority. So 0 is the highest priority possible, and 255 is the lowest priority (priorities lower than 255 will be capped into range).&lt;br /&gt;
*&#039;&#039;&#039;link&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;none&amp;quot;&lt;br /&gt;
:This field links this sound definition to another existing sound definition. Its value must either be &amp;quot;none,&amp;quot; or another valid sound mnemonic. When a linked sound is played, the sound that is linked to will be played instead, using the linkvol and linkpitch parameters provided in this sound entry. All parameters for playing the sound, including priority, singularity, pitch variance, and clipping distances come from this sound definition, and not from the sound to which this one is linked.&lt;br /&gt;
*&#039;&#039;&#039;alias&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;none&amp;quot;&lt;br /&gt;
:This field causes this sound definition to become an alias for another existing sound. Its value must either be &amp;quot;none,&amp;quot; or another valid sound mnemonic. When this sound is played, the aliased sound will be played instead, using all the data defined in the aliased sound (when an alias references another alias, the resolution is done recursively until a non- aliased sound is found).&lt;br /&gt;
*&#039;&#039;&#039;random&#039;&#039;&#039;&lt;br /&gt;
:Default = no list&lt;br /&gt;
:This fields allows this sound to have random alternatives when it&#039;s played. Include the list of sound mnemonics, separated by commas, within curly braces.&lt;br /&gt;
*&#039;&#039;&#039;skinindex&#039;&#039;&#039;&lt;br /&gt;
:Default = &#039;&#039;sk_none&#039;&#039;&lt;br /&gt;
:This field indicates a player skin sound index for this sound. If the player object plays this sound, it will become subject to remapping through the player&#039;s skin. The following values are possible for skin index, and each corresponds to one of the fields in the extended Legacy skin format: &lt;br /&gt;
:*sk_none&lt;br /&gt;
:*sk_plpain&lt;br /&gt;
:*sk_pdiehi&lt;br /&gt;
:*sk_oof&lt;br /&gt;
:*sk_slop&lt;br /&gt;
:*sk_punch&lt;br /&gt;
:*sk_radio&lt;br /&gt;
:*sk_pldeth&lt;br /&gt;
:*sk_plfall&lt;br /&gt;
:*sk_plfeet&lt;br /&gt;
:*sk_fallht&lt;br /&gt;
*&#039;&#039;&#039;linkvol&#039;&#039;&#039;&lt;br /&gt;
:Default = 127 (full volume)&lt;br /&gt;
:This field provides a value to be added to the sound&#039;s volume when a linked sound is played through this sound definition. Volume range is from 0 to 127, but this field may be any value. The resulting value when added to the base volume will be capped into range. For example, if a sound normally plays at full volume, specifying a negative value in this field will reduce the volume.&lt;br /&gt;
*&#039;&#039;&#039;linkpitch&#039;&#039;&#039;&lt;br /&gt;
:Default = 127 (normal)&lt;br /&gt;
:This field provides a pitch value to be used when a linked sound is played through this sound definition. Pitch values should be between 0 and 255 when provided.&lt;br /&gt;
*&#039;&#039;&#039;clipping_dist&#039;&#039;&#039;&lt;br /&gt;
:Default = 1200&lt;br /&gt;
:This value specifies the distance from the origin at which this sound will be completely clipped out; that is, reduced to zero volume and therefore killed completely. The sound engine currently only considers an approximate distance on the X-Y plane, so this behavior may be slightly more rough than expected. The value of this field should be greater than the value of the close_dist field below. If not, the sound will always be played at full volume (this can be intentionally exploited).&lt;br /&gt;
*&#039;&#039;&#039;close_dist&#039;&#039;&#039;&lt;br /&gt;
:Default = 200&lt;br /&gt;
:This value specifies the distance from the origin at which this sound will be at full volume. Attenuation between the clipping_dist and close_dist values is currently always linear. The sound engine currently only considers an approximate distance on the X-Y plane, so this behavior may be slightly more rough than expected. The value of this field should be less than the value of the clipping_dist field above. If not, the sound will always be played at full volume (this can be intentionally exploited).&lt;br /&gt;
*&#039;&#039;&#039;pitchvariance&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:This field allows specification of the type of pitch variation this sound plays with when pitched sounds are enabled. The following values are allowed: &lt;br /&gt;
:*none            -- No pitch variation&lt;br /&gt;
:*Doom            -- Pitch variation similar to that used in DOOM v1.1 for most sounds&lt;br /&gt;
:*DoomSaw         -- Pitch variation similar to that used for saw sounds in DOOM v1.1.&lt;br /&gt;
:*Heretic         -- Pitch variation similar to that used in Heretic&lt;br /&gt;
:*HereticAmbience -- Pitch variation similar to that used in Heretic for global ambience.&lt;br /&gt;
:In general, DOOM types provide less variation than Heretic types. Note that Eternity has now repaired some bugs in the BOOM sound pitch variation code, and so the effect works much better than it did previously.&lt;br /&gt;
*&#039;&#039;&#039;subchannel&#039;&#039;&#039;&lt;br /&gt;
:Default = Auto&lt;br /&gt;
:This field allows allocating a sound to a specific subchannel, so that an actor can play several sounds at once, unlike vanilla Doom behavior. Possible values are:&lt;br /&gt;
:*Auto - default sound channel&lt;br /&gt;
:*Weapon&lt;br /&gt;
:*Voice&lt;br /&gt;
:*Item&lt;br /&gt;
:*Body&lt;br /&gt;
:*SoundSlot5&lt;br /&gt;
:*SoundSlot6&lt;br /&gt;
:*SoundSlot7&lt;br /&gt;
*&#039;&#039;&#039;pcslump&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Allows associating a PC speaker sound lump with this sound definition. Required if the sound does not use a DS or DP &#039;&#039;&#039;prefix&#039;&#039;&#039; or if the DP* version of the lump is missing.&lt;br /&gt;
*&#039;&#039;&#039;nopcsound&#039;&#039;&#039;&lt;br /&gt;
:Default = false&lt;br /&gt;
:If set to true, forces the PC sound to NOT be played even if a valid lump exists for this entry. Default Doom monster pain and active sounds have this flag set to true.&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:In order to be accessible to Dehacked patches, a sound definition must be given a unique DeHackEd number. The value zero is reserved and cannot be used. In order to avoid conflict, and to remain compatible with future versions of the Eternity Engine, user sounds should either use DeHackEd numbers between 10000 and 32768, or simply use the value -1 if no thing/frame or DeHackEd access is necessary.&lt;br /&gt;
===Example===&lt;br /&gt;
 # Define some new sounds&lt;br /&gt;
 # This one is only accessible via scripting because it doesn&#039;t have a DeHackEd number.&lt;br /&gt;
 # (Although a DeHackEd number may be auto-assigned to it if something in EDF attempts&lt;br /&gt;
 #  to use its DeHackEd number...)&lt;br /&gt;
 &lt;br /&gt;
 sound MySound&lt;br /&gt;
 {&lt;br /&gt;
   lump = foo    # this will play FOO, since prefix defaults to false when&lt;br /&gt;
                 # a lump name is explicitly provided. Note that this case is&lt;br /&gt;
                 # affected by the change in EDF v1.7. Previously, this would have&lt;br /&gt;
                 # played the sound DSFOO, even though the lump name is specified&lt;br /&gt;
                 # as &amp;quot;foo&amp;quot;. Automatic prefixing now ONLY applies to sounds which&lt;br /&gt;
                 # copy their mnemonic to the lumpname and allow prefix to default.&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # This entry uses its mnemonic to double as the sound lump name, but already provides&lt;br /&gt;
 # the standard DS prefix in the mnemonic.&lt;br /&gt;
 &lt;br /&gt;
 sound dsblah&lt;br /&gt;
 {&lt;br /&gt;
   prefix = false  # Because we did not explicitly specify a lump name, the&lt;br /&gt;
                   # lump name has become &amp;quot;dsblah&amp;quot;, and the default value of&lt;br /&gt;
                   # prefix is true. That means we have to change it to false,&lt;br /&gt;
                   # or else the game would try to play DSDSBLAH, which is&lt;br /&gt;
                   # wrong. This has not changed.&lt;br /&gt;
                   &lt;br /&gt;
   dehackednum = 10000&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # This entry also uses the mnemonic as the sound name, but with prefixing.&lt;br /&gt;
 # Since prefix defaults to true when the lump name is not explicitly provided, &lt;br /&gt;
 # the sound lump played will be &amp;quot;DSEXPLOD&amp;quot;. This has also not changed.&lt;br /&gt;
 &lt;br /&gt;
 sound explod&lt;br /&gt;
 {&lt;br /&gt;
   priority = 128&lt;br /&gt;
   dehackednum = 10001&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # This entry links to another sound.&lt;br /&gt;
 sound BlahLink&lt;br /&gt;
 {&lt;br /&gt;
   link = dsblah   # we&#039;ve linked this entry to the dsblah sound&lt;br /&gt;
   linkvol = 64    # use some suitable values for these (must experiment)&lt;br /&gt;
   linkpitch = 72&lt;br /&gt;
   dehackednum = 10002&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # This entry overrides a previously defined sound.&lt;br /&gt;
 sound explod&lt;br /&gt;
 {&lt;br /&gt;
   priority = 96        # Maybe we like 96 better than 128...&lt;br /&gt;
   dehackednum = 10001  # We can reuse the same DeHackEd number, since it overwrites&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # This sound is just an alias for explod. It will play using all the parameters&lt;br /&gt;
 # as they are defined in explod. Anything else we defined in this sound would be&lt;br /&gt;
 # totally ignored.&lt;br /&gt;
 &lt;br /&gt;
 sound Explosion { alias = explod }&lt;br /&gt;
&lt;br /&gt;
==Sound sequences==&lt;br /&gt;
Sound sequences are effects that play while a sector is moving, a polyobject is moving, or when a Heretic-style (environmental) ambient sound is under way. Similar to things, frames or individual sounds, sequences are defined in EDF by using the &#039;&#039;&#039;soundsequence&#039;&#039;&#039; block. The mnemonic must be at most 32 characters long. Sound sequence definitions can be cascaded, and the latter ones will overwrite other identically named sequences.&lt;br /&gt;
&lt;br /&gt;
Sector movement sequences are used by placing thing types #1400 to #1500 on the map, inside the designated sectors. The ones numbered from #1400 to #1499 will play the sequence with the &#039;&#039;&#039;id&#039;&#039;&#039; between 0 and 99, while #1500 will use its first argument in the [[ExtraData]] definition.&lt;br /&gt;
&lt;br /&gt;
Polyobject sequences are set up from the [[Polyobject_linedef_types|Polyobj_StartLine and Polyobj_ExplicitLine]] ExtraData linedef specials. &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039; uses the 3rd argument for this, while &#039;&#039;&#039;Polyobj_ExplicitLine&#039;&#039;&#039; uses the 4th.&lt;br /&gt;
&lt;br /&gt;
Environmental sequences are set up similarly with sector sequences, by placing thing types #1200 to #1300 anywhere inside the map. #1200 to #1299 use the last two digits to designate the number, while #1300 uses the first ExtraData argument.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; You can include all &#039;&#039;&#039;soundsequence&#039;&#039;&#039; blocks inside a &#039;&#039;&#039;ESNDSEQ&#039;&#039;&#039; lump. It will be loaded automatically at game startup, independent of &#039;&#039;&#039;EDFROOT&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
 soundsequence &amp;lt;mnemonic&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   id              &amp;lt;number&amp;gt;&lt;br /&gt;
   cmds            { &amp;lt;string&amp;gt;, ... }&lt;br /&gt;
   commands        &amp;lt;heredoc string&amp;gt;&lt;br /&gt;
   type            &amp;lt;sequence type&amp;gt;&lt;br /&gt;
   stopsound       &amp;lt;sound mnemonic&amp;gt;&lt;br /&gt;
   attenuation     &amp;lt;attenuation type&amp;gt;&lt;br /&gt;
   randomplayvol   &amp;lt;boolean&amp;gt;&lt;br /&gt;
   volume          &amp;lt;number&amp;gt;&lt;br /&gt;
   minvolume       &amp;lt;number&amp;gt;&lt;br /&gt;
   nostopcutoff    &amp;lt;boolean&amp;gt;&lt;br /&gt;
   doorsequence    &amp;lt;sound sequence mnemonic&amp;gt;&lt;br /&gt;
   platsequence    &amp;lt;sound sequence mnemonic&amp;gt;&lt;br /&gt;
   floorsequence   &amp;lt;sound sequence mnemonic&amp;gt;&lt;br /&gt;
   ceilingsequence &amp;lt;sound sequence mnemonic&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
The fields are as follows:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;id&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; -1&lt;br /&gt;
:Sets up the sound sequence number to recognize it in maps. Environmental sequences use a different namespace from sector ones, and sector sequences can be separated in door, platform and general sequences (see below)&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;cmds&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; { &amp;quot;end&amp;quot; }&lt;br /&gt;
:&#039;&#039;&#039;(Deprecated)&#039;&#039;&#039; The list of Hexen-style commands to control the playing of sounds. Each command is written as a string, separated with a comma from the others. While this syntax will continue to be supported, it is recommended that new modifications use the heredoc-enabled syntax via the &#039;&#039;&#039;commands&#039;&#039;&#039; field instead.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;commands&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default&#039;&#039;: @&amp;quot; end &amp;quot;@&lt;br /&gt;
:The commands field allows specification of sound sequences in the natural Hexen-derived syntax, without quotations or commas, by embedding the commands one per line inside an EDF heredoc (a literally interpreted string delimited by @&amp;quot; and &amp;quot;@ sequences). This is the recommended method of specification. &#039;&#039;&#039;SVN r1420+&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;type&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; &amp;quot;sector&amp;quot;&lt;br /&gt;
:There are four separate namespaces: sector, door, plat and environment. The second is restricted to doors and polys; the third to general moving floors/ceilings and lifts.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;stopsound&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; &amp;quot;none&amp;quot;&lt;br /&gt;
:The sound mnemonic to play when the sector stops. Will never happen if this is an environmental sequence.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;attenuation&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; &amp;quot;normal&amp;quot;&lt;br /&gt;
:Can be: normal, idle, static, none.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;randomplayvol&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; false&lt;br /&gt;
:If set to true, every normal &amp;quot;play&amp;quot; command which doesn&#039;t specify a volume will begin at a randomized volume level which may be modified by the user&#039;s s_enviro_volume setting. This property exists to support Heretic-compatible global environmental sequence behavior. &#039;&#039;&#039;SVN r1420+&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;volume&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default&#039;&#039;: 127&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;minvolume&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; -1&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;nostopcutoff&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default&#039;&#039;: false&lt;br /&gt;
&lt;br /&gt;
===Sequence commands===&lt;br /&gt;
*play &amp;lt;sound&amp;gt;&lt;br /&gt;
: The indicated sound will be played but the sequence will not delay in moving to the next command. If this is the last sound in the sequence, the sound might be cutoff unless other properties prevent this.&lt;br /&gt;
*playuntildone &amp;lt;sound&amp;gt;&lt;br /&gt;
: The indicated sound will be played, and the sequence will not move on to the next command or terminate until the sound has finished playing.&lt;br /&gt;
*playtime &amp;lt;sound&amp;gt; &amp;lt;time&amp;gt;&lt;br /&gt;
: The indicated sound will be played and the sequence will pause for the number of gametics (35 per second) before moving on to the next command.&lt;br /&gt;
*playrepeat &amp;lt;sound&amp;gt; &lt;br /&gt;
: The indicated sound will be played continuously without interruption. This command never ends, so the sequence will not terminate unless something such as a sector action stops it externally. This command should not be used in global environmental sequences.&lt;br /&gt;
*playloop &amp;lt;sound&amp;gt; &amp;lt;time&amp;gt;&lt;br /&gt;
: The indicated sound will be played in a loop every &amp;quot;time&amp;quot; gametics. As above, this command will never end.&lt;br /&gt;
*playabsvol &amp;lt;sound&amp;gt; &amp;lt;vol&amp;gt;&lt;br /&gt;
: Like the play command, but allows specification of the sound&#039;s base volume from 0 to 127.&lt;br /&gt;
*playrelvol &amp;lt;sound&amp;gt; &amp;lt;vol&amp;gt;&lt;br /&gt;
: Like the play command, but specifies a volume which is relative to the sound sequence&#039;s previous volume setting.&lt;br /&gt;
*delay &amp;lt;tics&amp;gt;&lt;br /&gt;
: Stop the sound sequence from progressing for the indicated number of gametics.&lt;br /&gt;
*delayrand &amp;lt;min&amp;gt; &amp;lt;max&amp;gt;&lt;br /&gt;
: Delay the sound sequence from progressing for a random number of gametics between and including &amp;quot;min&amp;quot; and &amp;quot;max&amp;quot;.&lt;br /&gt;
*volume &amp;lt;vol&amp;gt;&lt;br /&gt;
: Set the sequence&#039;s current absolute volume level to the indicated value between 0 and 127.&lt;br /&gt;
*relvolume &amp;lt;vol&amp;gt;&lt;br /&gt;
: Modify the sequence&#039;s current absolute volume level by the indicated amount. The number specified should be negative to make the sequence more quiet.&lt;br /&gt;
*attenuation &amp;lt;attn&amp;gt;&lt;br /&gt;
: Set the sequence&#039;s attenuation value. This command is executed at game startup and therefore the last one specified is the only one that will take effect.&lt;br /&gt;
*stopsound &amp;lt;snd&amp;gt;&lt;br /&gt;
: Set the sequence&#039;s stopsound attribute. This command is executed at game startup and therefore the last one specified is the only one that will take effect.&lt;br /&gt;
*nostopcutoff&lt;br /&gt;
: Set the sequence&#039;s nostopcutoff attribute. This command is executed at game startup and therefore the last one specified is the only one that will take effect.&lt;br /&gt;
*restart&lt;br /&gt;
: Restart the current sound sequence. This command should not be used in global environmental sequences.&lt;br /&gt;
*end&lt;br /&gt;
: End the sequence. This command is not required by the Eternity Engine, and exists for Hexen compatibility.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
 // This is a sequence playable by name only. It is one of the default sector sequences&lt;br /&gt;
 // defined in sounds.edf, and is used by Heretic doors when they close.&lt;br /&gt;
 soundsequence EEDoorCloseNormal&lt;br /&gt;
 {&lt;br /&gt;
   cmds =&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;play EE_DoorOpen&amp;quot;,&lt;br /&gt;
      &amp;quot;stopsound EE_DoorClose&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // This is an environmental sequence for Heretic, which is used by placing a thing of&lt;br /&gt;
 // type 1200 anywhere on the map. It is started by the environmental sequence manager&lt;br /&gt;
 // at random, with the probability of it being played being determined by the proportion&lt;br /&gt;
 // of 1200 objects to other environmental sequence spots on the map.&lt;br /&gt;
 soundsequence EEHticAmbScream&lt;br /&gt;
 {&lt;br /&gt;
   type = environment&lt;br /&gt;
   id = 0&lt;br /&gt;
   cmds = { &amp;quot;playuntildone ht_amb1&amp;quot; }&lt;br /&gt;
   &lt;br /&gt;
   volume = 96&lt;br /&gt;
   minvolume = 32&lt;br /&gt;
   attenuation = none&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // This is a sound sequence meant to be played by a PolyObject. It could also use&lt;br /&gt;
 // type sector and would still work, but using type door is more explicit. PolyObjects&lt;br /&gt;
 // always use door-type actions when starting sequences, so they check the door lookup&lt;br /&gt;
 // first for id numbers between 0 and 63.&lt;br /&gt;
 soundsequence PolyDoor&lt;br /&gt;
 {&lt;br /&gt;
   type = door&lt;br /&gt;
   id   = 0&lt;br /&gt;
   cmds =&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;play EE_BDoorOpen&amp;quot;,&lt;br /&gt;
      &amp;quot;stopsound EE_PlatStop&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // This is one of the more complicated environmental sequences from sounds.edf.&lt;br /&gt;
 // It plays two alternating footstep sounds every 15 gametics at a constantly&lt;br /&gt;
 // decreasing volume level.&lt;br /&gt;
 soundsequence EEHticSlowFootSteps&lt;br /&gt;
 {&lt;br /&gt;
   type = environment&lt;br /&gt;
   id = 3&lt;br /&gt;
   cmds =&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;playtime ht_amb4 15&amp;quot;,&lt;br /&gt;
      &amp;quot;playrelvol ht_amb11 -3&amp;quot;,&lt;br /&gt;
      &amp;quot;delay 15&amp;quot;,&lt;br /&gt;
      &amp;quot;playrelvol ht_amb4  -3&amp;quot;,&lt;br /&gt;
      &amp;quot;delay 15&amp;quot;,&lt;br /&gt;
      &amp;quot;playrelvol ht_amb11 -3&amp;quot;,&lt;br /&gt;
      &amp;quot;delay 15&amp;quot;,&lt;br /&gt;
      &amp;quot;playrelvol ht_amb4  -3&amp;quot;,&lt;br /&gt;
      &amp;quot;delay 15&amp;quot;,&lt;br /&gt;
      &amp;quot;playrelvol ht_amb11 -3&amp;quot;,&lt;br /&gt;
      &amp;quot;delay 15&amp;quot;,&lt;br /&gt;
      &amp;quot;playrelvol ht_amb4  -3&amp;quot;,&lt;br /&gt;
      &amp;quot;delay 15&amp;quot;,&lt;br /&gt;
      &amp;quot;playrelvol ht_amb11 -3&amp;quot;,&lt;br /&gt;
      &amp;quot;nostopcutoff&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   volume = 96&lt;br /&gt;
   minvolume = 32&lt;br /&gt;
   attenuation = none&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Yes, sound sequences can be completely silent :) All fields are defaulting, and&lt;br /&gt;
 // the only command in the command list is &amp;quot;end&amp;quot;.&lt;br /&gt;
 soundsequence EEPlatSilent&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Ambience==&lt;br /&gt;
&#039;&#039;&#039;Ambience&#039;&#039;&#039; sections allow the user to define the behavior of ambient sound spots, which can be placed on maps using DoomEd numbers 14001 through 14065. The first 64 of these objects automatically use the ambience sections with numeric indexes 1 through 64. Object 14065 accepts the index number in its first argument field, which may be specified either through the use of ExtraData via the Hexen map format or via the upcoming UDMF format.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
 ambience&lt;br /&gt;
 {&lt;br /&gt;
   sound       = &amp;lt;sound mnemonic&amp;gt;&lt;br /&gt;
   index       = &amp;lt;number&amp;gt;&lt;br /&gt;
   volume      = &amp;lt;number&amp;gt;&lt;br /&gt;
   attenuation = &amp;lt;attenuation type&amp;gt;&lt;br /&gt;
   type        = &amp;lt;ambience behavior type&amp;gt;&lt;br /&gt;
   period      = &amp;lt;number&amp;gt;&lt;br /&gt;
   minperiod   = &amp;lt;number&amp;gt;&lt;br /&gt;
   maxperiod   = &amp;lt;number&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Usage===&lt;br /&gt;
*&#039;&#039;&#039;sound&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;none&amp;quot;&lt;br /&gt;
:This field specifies the sound to be played by an ambience object using this definition. If the value provided to this field is invalid, no sound will be played. &lt;br /&gt;
*&#039;&#039;&#039;index&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:Defines the index of this ambience definition. This may be an integer of any value zero or greater, although only the first 256 ambience definitions are usable via the Hexen map format. When an ambience definition has the same index as a previously defined ambience definition, it will overwrite that previous definition. Note that if a thing placed on a map references an invalid ambience sequence, that object will do nothing. &lt;br /&gt;
*&#039;&#039;&#039;volume&#039;&#039;&#039;&lt;br /&gt;
:Default = 127&lt;br /&gt;
:The relative volume of this ambient sound, ranging from 0 to 127. This is multiplied by the user&#039;s volume setting so that the true range of volume is from 0 to the user&#039;s setting. For all attenuation types except &amp;quot;none&amp;quot;, the volume is additionally decreased by the user&#039;s distance from the ambience object. &lt;br /&gt;
*&#039;&#039;&#039;attenuation&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;normal&amp;quot;&lt;br /&gt;
:This field defines the attenuation behavior of the ambience object. Attenuation is how the sound changes with distance between the listener and the ambience object. The following values are available for this field: &lt;br /&gt;
:*normal -- Use the close_dist and clipping_dist fields defined in the sound definition.&lt;br /&gt;
:*idle   -- Use DOOM&#039;s normal default sound attenuation behavior.&lt;br /&gt;
:*static -- Fades quickly (inaudible from 512 units).&lt;br /&gt;
:*none   -- Plays at this ambience definition&#039;s volume level regardless of distance.&lt;br /&gt;
    &lt;br /&gt;
*&#039;&#039;&#039;type&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;continuous&amp;quot;&lt;br /&gt;
:This field defines the repetition behavior of this ambience definition. The following values are available for this field: &lt;br /&gt;
:*continuous -- loops the sound seamlessly&lt;br /&gt;
:*periodic   -- restarts the sound every &amp;quot;period&amp;quot; number of gametics&lt;br /&gt;
:*random     -- restarts the sound after a randomized wait period determined by the minperiod and maxperiod fields&lt;br /&gt;
    &lt;br /&gt;
*&#039;&#039;&#039;period&#039;&#039;&#039;&lt;br /&gt;
:Default = 35&lt;br /&gt;
:For periodic ambience definitions, this field defines how frequently the sound is restarted in gametics (1/35 of a second). &lt;br /&gt;
*&#039;&#039;&#039;minperiod&#039;&#039;&#039;&lt;br /&gt;
:Default = 35&lt;br /&gt;
:For random ambience definitions, this field defines the shortest wait period before the sound will be restarted. &lt;br /&gt;
*&#039;&#039;&#039;maxperiod&#039;&#039;&#039;&lt;br /&gt;
:Default = 35&lt;br /&gt;
:For random ambience definitions, this field defines the longest wait period before the sound will be restarted. The ambience object will wait a period of time somewhere between minperiod and maxperiod gametics, inclusive. For proper behavior, maxperiod should be a number greater than minperiod.&lt;br /&gt;
===Example===&lt;br /&gt;
 ambience&lt;br /&gt;
 {&lt;br /&gt;
   index       = 0&lt;br /&gt;
   sound       = ht_waterfl&lt;br /&gt;
   type        = continuous&lt;br /&gt;
   volume      = 127&lt;br /&gt;
   attenuation = static&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ambience&lt;br /&gt;
 {&lt;br /&gt;
   index       = 1&lt;br /&gt;
   sound       = ht_bstsit&lt;br /&gt;
   type        = periodic&lt;br /&gt;
   volume      = 64&lt;br /&gt;
   attenuation = none&lt;br /&gt;
   period      = 70&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ambience&lt;br /&gt;
 {&lt;br /&gt;
   index       = 2&lt;br /&gt;
   sound       = ht_bstatk&lt;br /&gt;
   type        = random&lt;br /&gt;
   volume      = 127&lt;br /&gt;
   attenuation = idle&lt;br /&gt;
   minperiod   = 35&lt;br /&gt;
   maxperiod   = 105&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Environmental Sequence Manager==&lt;br /&gt;
EDF can alter basic properties of the environmental ambience sound sequence manager. This system runs in every level and randomly chooses environmental sequences to play based on what objects with DoomEd numbers 1200 through 1300 are present on the level (these objects are collected in much the same way as Boss Brain spots or D&#039;Sparil&#039;s teleport landings). The probability of a given sequence playing on any particular event is determined solely by how many objects on the level specify that sequence as compared to the total number of objects. &lt;br /&gt;
&lt;br /&gt;
There can be any number of enviromanager blocks specified, but only the values in the last one parsed will be used. &lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
 enviromanager&lt;br /&gt;
 {&lt;br /&gt;
   minstartwait = &amp;lt;number&amp;gt; // minimum wait time at level start in tics&lt;br /&gt;
   maxstartwait = &amp;lt;number&amp;gt; // maximum wait time at level start in tics&lt;br /&gt;
   minwait      = &amp;lt;number&amp;gt; // minimum wait time between sequences in tics&lt;br /&gt;
   maxwait      = &amp;lt;number&amp;gt; // maximum wait time between sequences in tics&lt;br /&gt;
 }&lt;br /&gt;
In all cases, the minimum wait times should be less than the maximum. The engine will adjust the values to make this true if it is not.&lt;br /&gt;
&lt;br /&gt;
==Sound environments==&lt;br /&gt;
Use of sound environments allows addition of reverberation effects to areas within levels called &amp;quot;sound zones.&amp;quot; Sound zones are sets of contiguous sectors which connect to each other by two-sided lines which are not marked with a new ExtraData linedef flag, ZONEBOUNDARY.&lt;br /&gt;
&lt;br /&gt;
To assign a specific sound environment to a zone, use ExtraData to create an EESoundEnvironment object in one of the sectors inside that zone with its first two map arguments set to the two ID numbers of the EDF reverb definition you want to apply while a player is inside that area.&lt;br /&gt;
&lt;br /&gt;
 // Defines a reverb sound environment. ID1 and ID2 are required and must be&lt;br /&gt;
 // numbers between 0 and 255. &lt;br /&gt;
 reverb &amp;lt;name&amp;gt; : &amp;lt;id1&amp;gt;, &amp;lt;id2&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  // Roomsize defines the decay time and &amp;quot;volume&amp;quot; of reverberation; the larger&lt;br /&gt;
  // the value, the bigger the space.&lt;br /&gt;
  // Range 0.0 to 1.07143; default 0.5&lt;br /&gt;
  roomsize &amp;lt;float&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
  // Damping defines the amount of high-frequency rolloff in the reverb filters.&lt;br /&gt;
  // A higher value is analogous to a space filled with fewer reflective objects.&lt;br /&gt;
  // Range 0.0 to 1.0; default 0.5&lt;br /&gt;
  damping  &amp;lt;float&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
  // Wet scale defines the amount of reverberated signal in the reverb output.&lt;br /&gt;
  // Range 0.0 to 1.0; default 0.333...&lt;br /&gt;
  wetscale &amp;lt;float&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  // Dry scale defines the amount of dry (input) signal in the reverb output.&lt;br /&gt;
  // Range 0.0 to 1.0; default 0.0&lt;br /&gt;
  dryscale &amp;lt;float&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  // Width defines the amount of stereo phasing/cross-over in the reverberation.&lt;br /&gt;
  // Range 0.0 to 1.0; default 1.0&lt;br /&gt;
  width &amp;lt;float&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  // Predelay defines the amount of time between sound emission and the first&lt;br /&gt;
  // reverb response. Defined in milliseconds; Range 0 to 250; default 0.&lt;br /&gt;
  predelay &amp;lt;int&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  // The equalized flag, if specified as +equalized, will turn on a three-band&lt;br /&gt;
  // equalization pass after the reverb filters. This allows tweaking the amount&lt;br /&gt;
  // of low- and high-frequency sound for adjusting the &amp;quot;luminosity&amp;quot; of the&lt;br /&gt;
  // effect. Default is -equalized.&lt;br /&gt;
  [+-]equalized&lt;br /&gt;
  &lt;br /&gt;
  // These parameters apply when +equalized is specified:&lt;br /&gt;
  &lt;br /&gt;
  eq.lowfreq  &amp;lt;float&amp;gt; // Low band upper edge in Hz;  20-20000; default = 250.0&lt;br /&gt;
  eq.highfreq &amp;lt;float&amp;gt; // High band lower edge in Hz; 20-20000; default = 4000.0&lt;br /&gt;
  eq.lowgain  &amp;lt;float&amp;gt; // Volume factor for low freqs; 0.0-1.0; default 1.0&lt;br /&gt;
  eq.midgain  &amp;lt;float&amp;gt; // Volume factor for mid freqs; 0.0-1.0; default 1.0&lt;br /&gt;
  eq.highgain &amp;lt;float&amp;gt; // Volume factor for hi  freqs; 0.0-1.0; default 1.0&lt;br /&gt;
 }&lt;br /&gt;
Adjustments have also been made to EDF ambience and soundsequence definitions which allow either to exclude themselves from application of sound zones. To exclude either type of definition from environmental effects, use the -reverb flag as such:&lt;br /&gt;
 ambience &amp;lt;name&amp;gt; &lt;br /&gt;
 {&lt;br /&gt;
  ...&lt;br /&gt;
  -reverb&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 soundsequence &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  ...&lt;br /&gt;
  -reverb&lt;br /&gt;
 }&lt;br /&gt;
By default, environments apply to all ambience and soundsequence definitions.&lt;br /&gt;
&lt;br /&gt;
[[category:EDF]]&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_sound_reference&amp;diff=3562</id>
		<title>EDF sound reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_sound_reference&amp;diff=3562"/>
		<updated>2016-02-24T20:30:12Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Fix header levels&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sounds==&lt;br /&gt;
The [[EDF]] &#039;&#039;&#039;Sound&#039;&#039;&#039; block defines sounds to be used in the game. They are linked to the sound lumps included in wads, and the default Doom and Heretic entries have the same names as the lumps, minus the DS prefix (for Doom).&lt;br /&gt;
{{backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
 sound &amp;lt;mnemonic&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   lump           &amp;lt;string&amp;gt;&lt;br /&gt;
   prefix         &amp;lt;boolean&amp;gt;&lt;br /&gt;
   singularity    &amp;lt;singularity class&amp;gt;&lt;br /&gt;
   priority       &amp;lt;number&amp;gt;&lt;br /&gt;
   link           &amp;lt;sound mnemonic&amp;gt;&lt;br /&gt;
   alias          &amp;lt;sound mnemonic&amp;gt;&lt;br /&gt;
   random         &amp;lt;sound mnemonic list&amp;gt;&lt;br /&gt;
   skinindex      &amp;lt;skin index type&amp;gt;&lt;br /&gt;
   linkvol        &amp;lt;number&amp;gt;&lt;br /&gt;
   linkpitch      &amp;lt;number&amp;gt;&lt;br /&gt;
   clipping_dist  &amp;lt;number&amp;gt;&lt;br /&gt;
   close_dist     &amp;lt;number&amp;gt;&lt;br /&gt;
   pitchvariance  &amp;lt;pitch variance type&amp;gt;&lt;br /&gt;
   subchannel     &amp;lt;subchannel class&amp;gt;&lt;br /&gt;
   pcslump        &amp;lt;string&amp;gt;&lt;br /&gt;
   nopcsound      &amp;lt;boolean&amp;gt;&lt;br /&gt;
   dehackednum    &amp;lt;number&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Fields===&lt;br /&gt;
*&#039;&#039;&#039;lump&#039;&#039;&#039;&lt;br /&gt;
:Default: If a value is not provided to this field, then this sound&#039;s mnemonic will be copied directly to this field. In this case, the default value for the prefix field becomes &amp;quot;true&amp;quot;. This means that the mnemonic will be prefixed with the &amp;quot;DS&amp;quot; prefix to construct the final sound lump name. If an explicit value is provided to this field, then the default value of the prefix field becomes &amp;quot;false&amp;quot;. This means the lump name, as provided, becomes the final sound lump name and will not be prefixed in any way. &lt;br /&gt;
:The lump field indicates the lump name that this sound resource will have in WAD files. If the prefix field below is true, the prefix &amp;quot;DS&amp;quot; will be appended to this name when looking for the sound. Otherwise, this name will be used exactly as it is provided. In the event a sound is not found, a default sound for the current game mode (DSPISTOL in DOOM, GLDHIT in Heretic) will be played instead.&lt;br /&gt;
*&#039;&#039;&#039;prefix&#039;&#039;&#039;&lt;br /&gt;
:Default = Depends on presence of lump field&lt;br /&gt;
:This boolean field indicates whether to prefix the lump name with DS when searching for this sound&#039;s lump. Values of false/no/off mean that the lump will not be prefixed. Values of true/yes/on mean that it should be prefixed. If the lump field is provided, the default value of this field changes from true to false.&lt;br /&gt;
*&#039;&#039;&#039;singularity&#039;&#039;&#039;&lt;br /&gt;
:Default = &#039;&#039;sg_none&#039;&#039;&lt;br /&gt;
:This field indicates a singularity class for this sound. If another sound of the same singularity class is playing when this sound is played, the former will be stopped. This is used to implement appropriate player sound behavior in an extensible and modifiable manner. The possible values for the singularity class are as follows: &lt;br /&gt;
:*sg_none&lt;br /&gt;
:*sg_itemup&lt;br /&gt;
:*sg_wpnup&lt;br /&gt;
:*sg_oof&lt;br /&gt;
:*sg_getpow&lt;br /&gt;
*&#039;&#039;&#039;priority&#039;&#039;&#039;&lt;br /&gt;
:Default = 64&lt;br /&gt;
:This field establishes a relative priority for this sound. When sounds must be stopped in order to start new ones, those with the lowest priority will be replaced first. Priority scales down with distance, so sounds playing at higher volume or closer to the player have priority over quieter and more distant sounds. Please note carefully that a higher value in this field means a lower priority. So 0 is the highest priority possible, and 255 is the lowest priority (priorities lower than 255 will be capped into range).&lt;br /&gt;
*&#039;&#039;&#039;link&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;none&amp;quot;&lt;br /&gt;
:This field links this sound definition to another existing sound definition. Its value must either be &amp;quot;none,&amp;quot; or another valid sound mnemonic. When a linked sound is played, the sound that is linked to will be played instead, using the linkvol and linkpitch parameters provided in this sound entry. All parameters for playing the sound, including priority, singularity, pitch variance, and clipping distances come from this sound definition, and not from the sound to which this one is linked.&lt;br /&gt;
*&#039;&#039;&#039;alias&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;none&amp;quot;&lt;br /&gt;
:This field causes this sound definition to become an alias for another existing sound. Its value must either be &amp;quot;none,&amp;quot; or another valid sound mnemonic. When this sound is played, the aliased sound will be played instead, using all the data defined in the aliased sound (when an alias references another alias, the resolution is done recursively until a non- aliased sound is found).&lt;br /&gt;
*&#039;&#039;&#039;random&#039;&#039;&#039;&lt;br /&gt;
:Default = no list&lt;br /&gt;
:This fields allows this sound to have random alternatives when it&#039;s played. Include the list of sound mnemonics, separated by commas, within curly braces.&lt;br /&gt;
*&#039;&#039;&#039;skinindex&#039;&#039;&#039;&lt;br /&gt;
:Default = &#039;&#039;sk_none&#039;&#039;&lt;br /&gt;
:This field indicates a player skin sound index for this sound. If the player object plays this sound, it will become subject to remapping through the player&#039;s skin. The following values are possible for skin index, and each corresponds to one of the fields in the extended Legacy skin format: &lt;br /&gt;
:*sk_none&lt;br /&gt;
:*sk_plpain&lt;br /&gt;
:*sk_pdiehi&lt;br /&gt;
:*sk_oof&lt;br /&gt;
:*sk_slop&lt;br /&gt;
:*sk_punch&lt;br /&gt;
:*sk_radio&lt;br /&gt;
:*sk_pldeth&lt;br /&gt;
:*sk_plfall&lt;br /&gt;
:*sk_plfeet&lt;br /&gt;
:*sk_fallht&lt;br /&gt;
*&#039;&#039;&#039;linkvol&#039;&#039;&#039;&lt;br /&gt;
:Default = 127 (full volume)&lt;br /&gt;
:This field provides a value to be added to the sound&#039;s volume when a linked sound is played through this sound definition. Volume range is from 0 to 127, but this field may be any value. The resulting value when added to the base volume will be capped into range. For example, if a sound normally plays at full volume, specifying a negative value in this field will reduce the volume.&lt;br /&gt;
*&#039;&#039;&#039;linkpitch&#039;&#039;&#039;&lt;br /&gt;
:Default = 127 (normal)&lt;br /&gt;
:This field provides a pitch value to be used when a linked sound is played through this sound definition. Pitch values should be between 0 and 255 when provided.&lt;br /&gt;
*&#039;&#039;&#039;clipping_dist&#039;&#039;&#039;&lt;br /&gt;
:Default = 1200&lt;br /&gt;
:This value specifies the distance from the origin at which this sound will be completely clipped out; that is, reduced to zero volume and therefore killed completely. The sound engine currently only considers an approximate distance on the X-Y plane, so this behavior may be slightly more rough than expected. The value of this field should be greater than the value of the close_dist field below. If not, the sound will always be played at full volume (this can be intentionally exploited).&lt;br /&gt;
*&#039;&#039;&#039;close_dist&#039;&#039;&#039;&lt;br /&gt;
:Default = 200&lt;br /&gt;
:This value specifies the distance from the origin at which this sound will be at full volume. Attenuation between the clipping_dist and close_dist values is currently always linear. The sound engine currently only considers an approximate distance on the X-Y plane, so this behavior may be slightly more rough than expected. The value of this field should be less than the value of the clipping_dist field above. If not, the sound will always be played at full volume (this can be intentionally exploited).&lt;br /&gt;
*&#039;&#039;&#039;pitchvariance&#039;&#039;&#039;&lt;br /&gt;
:Default = none&lt;br /&gt;
:This field allows specification of the type of pitch variation this sound plays with when pitched sounds are enabled. The following values are allowed: &lt;br /&gt;
:*none            -- No pitch variation&lt;br /&gt;
:*Doom            -- Pitch variation similar to that used in DOOM v1.1 for most sounds&lt;br /&gt;
:*DoomSaw         -- Pitch variation similar to that used for saw sounds in DOOM v1.1.&lt;br /&gt;
:*Heretic         -- Pitch variation similar to that used in Heretic&lt;br /&gt;
:*HereticAmbience -- Pitch variation similar to that used in Heretic for global ambience.&lt;br /&gt;
:In general, DOOM types provide less variation than Heretic types. Note that Eternity has now repaired some bugs in the BOOM sound pitch variation code, and so the effect works much better than it did previously.&lt;br /&gt;
*&#039;&#039;&#039;subchannel&#039;&#039;&#039;&lt;br /&gt;
:Default = Auto&lt;br /&gt;
:This field allows allocating a sound to a specific subchannel, so that an actor can play several sounds at once, unlike vanilla Doom behavior. Possible values are:&lt;br /&gt;
:*Auto - default sound channel&lt;br /&gt;
:*Weapon&lt;br /&gt;
:*Voice&lt;br /&gt;
:*Item&lt;br /&gt;
:*Body&lt;br /&gt;
:*SoundSlot5&lt;br /&gt;
:*SoundSlot6&lt;br /&gt;
:*SoundSlot7&lt;br /&gt;
*&#039;&#039;&#039;pcslump&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Allows associating a PC speaker sound lump with this sound definition. Required if the sound does not use a DS or DP &#039;&#039;&#039;prefix&#039;&#039;&#039; or if the DP* version of the lump is missing.&lt;br /&gt;
*&#039;&#039;&#039;nopcsound&#039;&#039;&#039;&lt;br /&gt;
:Default = false&lt;br /&gt;
:If set to true, forces the PC sound to NOT be played even if a valid lump exists for this entry. Default Doom monster pain and active sounds have this flag set to true.&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:In order to be accessible to Dehacked patches, a sound definition must be given a unique DeHackEd number. The value zero is reserved and cannot be used. In order to avoid conflict, and to remain compatible with future versions of the Eternity Engine, user sounds should either use DeHackEd numbers between 10000 and 32768, or simply use the value -1 if no thing/frame or DeHackEd access is necessary.&lt;br /&gt;
===Example===&lt;br /&gt;
 # Define some new sounds&lt;br /&gt;
 # This one is only accessible via scripting because it doesn&#039;t have a DeHackEd number.&lt;br /&gt;
 # (Although a DeHackEd number may be auto-assigned to it if something in EDF attempts&lt;br /&gt;
 #  to use its DeHackEd number...)&lt;br /&gt;
 &lt;br /&gt;
 sound MySound&lt;br /&gt;
 {&lt;br /&gt;
   lump = foo    # this will play FOO, since prefix defaults to false when&lt;br /&gt;
                 # a lump name is explicitly provided. Note that this case is&lt;br /&gt;
                 # affected by the change in EDF v1.7. Previously, this would have&lt;br /&gt;
                 # played the sound DSFOO, even though the lump name is specified&lt;br /&gt;
                 # as &amp;quot;foo&amp;quot;. Automatic prefixing now ONLY applies to sounds which&lt;br /&gt;
                 # copy their mnemonic to the lumpname and allow prefix to default.&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # This entry uses its mnemonic to double as the sound lump name, but already provides&lt;br /&gt;
 # the standard DS prefix in the mnemonic.&lt;br /&gt;
 &lt;br /&gt;
 sound dsblah&lt;br /&gt;
 {&lt;br /&gt;
   prefix = false  # Because we did not explicitly specify a lump name, the&lt;br /&gt;
                   # lump name has become &amp;quot;dsblah&amp;quot;, and the default value of&lt;br /&gt;
                   # prefix is true. That means we have to change it to false,&lt;br /&gt;
                   # or else the game would try to play DSDSBLAH, which is&lt;br /&gt;
                   # wrong. This has not changed.&lt;br /&gt;
                   &lt;br /&gt;
   dehackednum = 10000&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # This entry also uses the mnemonic as the sound name, but with prefixing.&lt;br /&gt;
 # Since prefix defaults to true when the lump name is not explicitly provided, &lt;br /&gt;
 # the sound lump played will be &amp;quot;DSEXPLOD&amp;quot;. This has also not changed.&lt;br /&gt;
 &lt;br /&gt;
 sound explod&lt;br /&gt;
 {&lt;br /&gt;
   priority = 128&lt;br /&gt;
   dehackednum = 10001&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # This entry links to another sound.&lt;br /&gt;
 sound BlahLink&lt;br /&gt;
 {&lt;br /&gt;
   link = dsblah   # we&#039;ve linked this entry to the dsblah sound&lt;br /&gt;
   linkvol = 64    # use some suitable values for these (must experiment)&lt;br /&gt;
   linkpitch = 72&lt;br /&gt;
   dehackednum = 10002&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # This entry overrides a previously defined sound.&lt;br /&gt;
 sound explod&lt;br /&gt;
 {&lt;br /&gt;
   priority = 96        # Maybe we like 96 better than 128...&lt;br /&gt;
   dehackednum = 10001  # We can reuse the same DeHackEd number, since it overwrites&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # This sound is just an alias for explod. It will play using all the parameters&lt;br /&gt;
 # as they are defined in explod. Anything else we defined in this sound would be&lt;br /&gt;
 # totally ignored.&lt;br /&gt;
 &lt;br /&gt;
 sound Explosion { alias = explod }&lt;br /&gt;
&lt;br /&gt;
==Sound sequences==&lt;br /&gt;
Sound sequences are effects that play while a sector is moving, a polyobject is moving, or when a Heretic-style (environmental) ambient sound is under way. Similar to things, frames or individual sounds, sequences are defined in EDF by using the &#039;&#039;&#039;soundsequence&#039;&#039;&#039; block. The mnemonic must be at most 32 characters long. Sound sequence definitions can be cascaded, and the latter ones will overwrite other identically named sequences.&lt;br /&gt;
&lt;br /&gt;
Sector movement sequences are used by placing thing types #1400 to #1500 on the map, inside the designated sectors. The ones numbered from #1400 to #1499 will play the sequence with the &#039;&#039;&#039;id&#039;&#039;&#039; between 0 and 99, while #1500 will use its first argument in the [[ExtraData]] definition.&lt;br /&gt;
&lt;br /&gt;
Polyobject sequences are set up from the [[Polyobject_linedef_types|Polyobj_StartLine and Polyobj_ExplicitLine]] ExtraData linedef specials. &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039; uses the 3rd argument for this, while &#039;&#039;&#039;Polyobj_ExplicitLine&#039;&#039;&#039; uses the 4th.&lt;br /&gt;
&lt;br /&gt;
Environmental sequences are set up similarly with sector sequences, by placing thing types #1200 to #1300 anywhere inside the map. #1200 to #1299 use the last two digits to designate the number, while #1300 uses the first ExtraData argument.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; You can include all &#039;&#039;&#039;soundsequence&#039;&#039;&#039; blocks inside a &#039;&#039;&#039;ESNDSEQ&#039;&#039;&#039; lump. It will be loaded automatically at game startup, independent of &#039;&#039;&#039;EDFROOT&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
 soundsequence &amp;lt;mnemonic&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   id              &amp;lt;number&amp;gt;&lt;br /&gt;
   cmds            { &amp;lt;string&amp;gt;, ... }&lt;br /&gt;
   commands        &amp;lt;heredoc string&amp;gt;&lt;br /&gt;
   type            &amp;lt;sequence type&amp;gt;&lt;br /&gt;
   stopsound       &amp;lt;sound mnemonic&amp;gt;&lt;br /&gt;
   attenuation     &amp;lt;attenuation type&amp;gt;&lt;br /&gt;
   randomplayvol   &amp;lt;boolean&amp;gt;&lt;br /&gt;
   volume          &amp;lt;number&amp;gt;&lt;br /&gt;
   minvolume       &amp;lt;number&amp;gt;&lt;br /&gt;
   nostopcutoff    &amp;lt;boolean&amp;gt;&lt;br /&gt;
   doorsequence    &amp;lt;sound sequence mnemonic&amp;gt;&lt;br /&gt;
   platsequence    &amp;lt;sound sequence mnemonic&amp;gt;&lt;br /&gt;
   floorsequence   &amp;lt;sound sequence mnemonic&amp;gt;&lt;br /&gt;
   ceilingsequence &amp;lt;sound sequence mnemonic&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
The fields are as follows:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;id&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; -1&lt;br /&gt;
:Sets up the sound sequence number to recognize it in maps. Environmental sequences use a different namespace from sector ones, and sector sequences can be separated in door, platform and general sequences (see below)&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;cmds&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; { &amp;quot;end&amp;quot; }&lt;br /&gt;
:&#039;&#039;&#039;(Deprecated)&#039;&#039;&#039; The list of Hexen-style commands to control the playing of sounds. Each command is written as a string, separated with a comma from the others. While this syntax will continue to be supported, it is recommended that new modifications use the heredoc-enabled syntax via the &#039;&#039;&#039;commands&#039;&#039;&#039; field instead.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;commands&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default&#039;&#039;: @&amp;quot; end &amp;quot;@&lt;br /&gt;
:The commands field allows specification of sound sequences in the natural Hexen-derived syntax, without quotations or commas, by embedding the commands one per line inside an EDF heredoc (a literally interpreted string delimited by @&amp;quot; and &amp;quot;@ sequences). This is the recommended method of specification. &#039;&#039;&#039;SVN r1420+&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;type&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; &amp;quot;sector&amp;quot;&lt;br /&gt;
:There are four separate namespaces: sector, door, plat and environment. The second is restricted to doors and polys; the third to general moving floors/ceilings and lifts.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;stopsound&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; &amp;quot;none&amp;quot;&lt;br /&gt;
:The sound mnemonic to play when the sector stops. Will never happen if this is an environmental sequence.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;attenuation&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; &amp;quot;normal&amp;quot;&lt;br /&gt;
:Can be: normal, idle, static, none.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;randomplayvol&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; false&lt;br /&gt;
:If set to true, every normal &amp;quot;play&amp;quot; command which doesn&#039;t specify a volume will begin at a randomized volume level which may be modified by the user&#039;s s_enviro_volume setting. This property exists to support Heretic-compatible global environmental sequence behavior. &#039;&#039;&#039;SVN r1420+&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;volume&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default&#039;&#039;: 127&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;minvolume&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; -1&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;nostopcutoff&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default&#039;&#039;: false&lt;br /&gt;
&lt;br /&gt;
===Sequence commands===&lt;br /&gt;
*play &amp;lt;sound&amp;gt;&lt;br /&gt;
: The indicated sound will be played but the sequence will not delay in moving to the next command. If this is the last sound in the sequence, the sound might be cutoff unless other properties prevent this.&lt;br /&gt;
*playuntildone &amp;lt;sound&amp;gt;&lt;br /&gt;
: The indicated sound will be played, and the sequence will not move on to the next command or terminate until the sound has finished playing.&lt;br /&gt;
*playtime &amp;lt;sound&amp;gt; &amp;lt;time&amp;gt;&lt;br /&gt;
: The indicated sound will be played and the sequence will pause for the number of gametics (35 per second) before moving on to the next command.&lt;br /&gt;
*playrepeat &amp;lt;sound&amp;gt; &lt;br /&gt;
: The indicated sound will be played continuously without interruption. This command never ends, so the sequence will not terminate unless something such as a sector action stops it externally. This command should not be used in global environmental sequences.&lt;br /&gt;
*playloop &amp;lt;sound&amp;gt; &amp;lt;time&amp;gt;&lt;br /&gt;
: The indicated sound will be played in a loop every &amp;quot;time&amp;quot; gametics. As above, this command will never end.&lt;br /&gt;
*playabsvol &amp;lt;sound&amp;gt; &amp;lt;vol&amp;gt;&lt;br /&gt;
: Like the play command, but allows specification of the sound&#039;s base volume from 0 to 127.&lt;br /&gt;
*playrelvol &amp;lt;sound&amp;gt; &amp;lt;vol&amp;gt;&lt;br /&gt;
: Like the play command, but specifies a volume which is relative to the sound sequence&#039;s previous volume setting.&lt;br /&gt;
*delay &amp;lt;tics&amp;gt;&lt;br /&gt;
: Stop the sound sequence from progressing for the indicated number of gametics.&lt;br /&gt;
*delayrand &amp;lt;min&amp;gt; &amp;lt;max&amp;gt;&lt;br /&gt;
: Delay the sound sequence from progressing for a random number of gametics between and including &amp;quot;min&amp;quot; and &amp;quot;max&amp;quot;.&lt;br /&gt;
*volume &amp;lt;vol&amp;gt;&lt;br /&gt;
: Set the sequence&#039;s current absolute volume level to the indicated value between 0 and 127.&lt;br /&gt;
*relvolume &amp;lt;vol&amp;gt;&lt;br /&gt;
: Modify the sequence&#039;s current absolute volume level by the indicated amount. The number specified should be negative to make the sequence more quiet.&lt;br /&gt;
*attenuation &amp;lt;attn&amp;gt;&lt;br /&gt;
: Set the sequence&#039;s attenuation value. This command is executed at game startup and therefore the last one specified is the only one that will take effect.&lt;br /&gt;
*stopsound &amp;lt;snd&amp;gt;&lt;br /&gt;
: Set the sequence&#039;s stopsound attribute. This command is executed at game startup and therefore the last one specified is the only one that will take effect.&lt;br /&gt;
*nostopcutoff&lt;br /&gt;
: Set the sequence&#039;s nostopcutoff attribute. This command is executed at game startup and therefore the last one specified is the only one that will take effect.&lt;br /&gt;
*restart&lt;br /&gt;
: Restart the current sound sequence. This command should not be used in global environmental sequences.&lt;br /&gt;
*end&lt;br /&gt;
: End the sequence. This command is not required by the Eternity Engine, and exists for Hexen compatibility.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
 // This is a sequence playable by name only. It is one of the default sector sequences&lt;br /&gt;
 // defined in sounds.edf, and is used by Heretic doors when they close.&lt;br /&gt;
 soundsequence EEDoorCloseNormal&lt;br /&gt;
 {&lt;br /&gt;
   cmds =&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;play EE_DoorOpen&amp;quot;,&lt;br /&gt;
      &amp;quot;stopsound EE_DoorClose&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // This is an environmental sequence for Heretic, which is used by placing a thing of&lt;br /&gt;
 // type 1200 anywhere on the map. It is started by the environmental sequence manager&lt;br /&gt;
 // at random, with the probability of it being played being determined by the proportion&lt;br /&gt;
 // of 1200 objects to other environmental sequence spots on the map.&lt;br /&gt;
 soundsequence EEHticAmbScream&lt;br /&gt;
 {&lt;br /&gt;
   type = environment&lt;br /&gt;
   id = 0&lt;br /&gt;
   cmds = { &amp;quot;playuntildone ht_amb1&amp;quot; }&lt;br /&gt;
   &lt;br /&gt;
   volume = 96&lt;br /&gt;
   minvolume = 32&lt;br /&gt;
   attenuation = none&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // This is a sound sequence meant to be played by a PolyObject. It could also use&lt;br /&gt;
 // type sector and would still work, but using type door is more explicit. PolyObjects&lt;br /&gt;
 // always use door-type actions when starting sequences, so they check the door lookup&lt;br /&gt;
 // first for id numbers between 0 and 63.&lt;br /&gt;
 soundsequence PolyDoor&lt;br /&gt;
 {&lt;br /&gt;
   type = door&lt;br /&gt;
   id   = 0&lt;br /&gt;
   cmds =&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;play EE_BDoorOpen&amp;quot;,&lt;br /&gt;
      &amp;quot;stopsound EE_PlatStop&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // This is one of the more complicated environmental sequences from sounds.edf.&lt;br /&gt;
 // It plays two alternating footstep sounds every 15 gametics at a constantly&lt;br /&gt;
 // decreasing volume level.&lt;br /&gt;
 soundsequence EEHticSlowFootSteps&lt;br /&gt;
 {&lt;br /&gt;
   type = environment&lt;br /&gt;
   id = 3&lt;br /&gt;
   cmds =&lt;br /&gt;
   {&lt;br /&gt;
      &amp;quot;playtime ht_amb4 15&amp;quot;,&lt;br /&gt;
      &amp;quot;playrelvol ht_amb11 -3&amp;quot;,&lt;br /&gt;
      &amp;quot;delay 15&amp;quot;,&lt;br /&gt;
      &amp;quot;playrelvol ht_amb4  -3&amp;quot;,&lt;br /&gt;
      &amp;quot;delay 15&amp;quot;,&lt;br /&gt;
      &amp;quot;playrelvol ht_amb11 -3&amp;quot;,&lt;br /&gt;
      &amp;quot;delay 15&amp;quot;,&lt;br /&gt;
      &amp;quot;playrelvol ht_amb4  -3&amp;quot;,&lt;br /&gt;
      &amp;quot;delay 15&amp;quot;,&lt;br /&gt;
      &amp;quot;playrelvol ht_amb11 -3&amp;quot;,&lt;br /&gt;
      &amp;quot;delay 15&amp;quot;,&lt;br /&gt;
      &amp;quot;playrelvol ht_amb4  -3&amp;quot;,&lt;br /&gt;
      &amp;quot;delay 15&amp;quot;,&lt;br /&gt;
      &amp;quot;playrelvol ht_amb11 -3&amp;quot;,&lt;br /&gt;
      &amp;quot;nostopcutoff&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   volume = 96&lt;br /&gt;
   minvolume = 32&lt;br /&gt;
   attenuation = none&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Yes, sound sequences can be completely silent :) All fields are defaulting, and&lt;br /&gt;
 // the only command in the command list is &amp;quot;end&amp;quot;.&lt;br /&gt;
 soundsequence EEPlatSilent&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Ambience==&lt;br /&gt;
&#039;&#039;&#039;Ambience&#039;&#039;&#039; sections allow the user to define the behavior of ambient sound spots, which can be placed on maps using DoomEd numbers 14001 through 14065. The first 64 of these objects automatically use the ambience sections with numeric indexes 1 through 64. Object 14065 accepts the index number in its first argument field, which may be specified either through the use of ExtraData via the Hexen map format or via the upcoming UDMF format.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
 ambience&lt;br /&gt;
 {&lt;br /&gt;
   sound       = &amp;lt;sound mnemonic&amp;gt;&lt;br /&gt;
   index       = &amp;lt;number&amp;gt;&lt;br /&gt;
   volume      = &amp;lt;number&amp;gt;&lt;br /&gt;
   attenuation = &amp;lt;attenuation type&amp;gt;&lt;br /&gt;
   type        = &amp;lt;ambience behavior type&amp;gt;&lt;br /&gt;
   period      = &amp;lt;number&amp;gt;&lt;br /&gt;
   minperiod   = &amp;lt;number&amp;gt;&lt;br /&gt;
   maxperiod   = &amp;lt;number&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Usage==&lt;br /&gt;
*&#039;&#039;&#039;sound&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;none&amp;quot;&lt;br /&gt;
:This field specifies the sound to be played by an ambience object using this definition. If the value provided to this field is invalid, no sound will be played. &lt;br /&gt;
*&#039;&#039;&#039;index&#039;&#039;&#039;&lt;br /&gt;
:Default = 0&lt;br /&gt;
:Defines the index of this ambience definition. This may be an integer of any value zero or greater, although only the first 256 ambience definitions are usable via the Hexen map format. When an ambience definition has the same index as a previously defined ambience definition, it will overwrite that previous definition. Note that if a thing placed on a map references an invalid ambience sequence, that object will do nothing. &lt;br /&gt;
*&#039;&#039;&#039;volume&#039;&#039;&#039;&lt;br /&gt;
:Default = 127&lt;br /&gt;
:The relative volume of this ambient sound, ranging from 0 to 127. This is multiplied by the user&#039;s volume setting so that the true range of volume is from 0 to the user&#039;s setting. For all attenuation types except &amp;quot;none&amp;quot;, the volume is additionally decreased by the user&#039;s distance from the ambience object. &lt;br /&gt;
*&#039;&#039;&#039;attenuation&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;normal&amp;quot;&lt;br /&gt;
:This field defines the attenuation behavior of the ambience object. Attenuation is how the sound changes with distance between the listener and the ambience object. The following values are available for this field: &lt;br /&gt;
:*normal -- Use the close_dist and clipping_dist fields defined in the sound definition.&lt;br /&gt;
:*idle   -- Use DOOM&#039;s normal default sound attenuation behavior.&lt;br /&gt;
:*static -- Fades quickly (inaudible from 512 units).&lt;br /&gt;
:*none   -- Plays at this ambience definition&#039;s volume level regardless of distance.&lt;br /&gt;
    &lt;br /&gt;
*&#039;&#039;&#039;type&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;continuous&amp;quot;&lt;br /&gt;
:This field defines the repetition behavior of this ambience definition. The following values are available for this field: &lt;br /&gt;
:*continuous -- loops the sound seamlessly&lt;br /&gt;
:*periodic   -- restarts the sound every &amp;quot;period&amp;quot; number of gametics&lt;br /&gt;
:*random     -- restarts the sound after a randomized wait period determined by the minperiod and maxperiod fields&lt;br /&gt;
    &lt;br /&gt;
*&#039;&#039;&#039;period&#039;&#039;&#039;&lt;br /&gt;
:Default = 35&lt;br /&gt;
:For periodic ambience definitions, this field defines how frequently the sound is restarted in gametics (1/35 of a second). &lt;br /&gt;
*&#039;&#039;&#039;minperiod&#039;&#039;&#039;&lt;br /&gt;
:Default = 35&lt;br /&gt;
:For random ambience definitions, this field defines the shortest wait period before the sound will be restarted. &lt;br /&gt;
*&#039;&#039;&#039;maxperiod&#039;&#039;&#039;&lt;br /&gt;
:Default = 35&lt;br /&gt;
:For random ambience definitions, this field defines the longest wait period before the sound will be restarted. The ambience object will wait a period of time somewhere between minperiod and maxperiod gametics, inclusive. For proper behavior, maxperiod should be a number greater than minperiod.&lt;br /&gt;
===Example===&lt;br /&gt;
 ambience&lt;br /&gt;
 {&lt;br /&gt;
   index       = 0&lt;br /&gt;
   sound       = ht_waterfl&lt;br /&gt;
   type        = continuous&lt;br /&gt;
   volume      = 127&lt;br /&gt;
   attenuation = static&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ambience&lt;br /&gt;
 {&lt;br /&gt;
   index       = 1&lt;br /&gt;
   sound       = ht_bstsit&lt;br /&gt;
   type        = periodic&lt;br /&gt;
   volume      = 64&lt;br /&gt;
   attenuation = none&lt;br /&gt;
   period      = 70&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ambience&lt;br /&gt;
 {&lt;br /&gt;
   index       = 2&lt;br /&gt;
   sound       = ht_bstatk&lt;br /&gt;
   type        = random&lt;br /&gt;
   volume      = 127&lt;br /&gt;
   attenuation = idle&lt;br /&gt;
   minperiod   = 35&lt;br /&gt;
   maxperiod   = 105&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Environmental Sequence Manager==&lt;br /&gt;
EDF can alter basic properties of the environmental ambience sound sequence manager. This system runs in every level and randomly chooses environmental sequences to play based on what objects with DoomEd numbers 1200 through 1300 are present on the level (these objects are collected in much the same way as Boss Brain spots or D&#039;Sparil&#039;s teleport landings). The probability of a given sequence playing on any particular event is determined solely by how many objects on the level specify that sequence as compared to the total number of objects. &lt;br /&gt;
&lt;br /&gt;
There can be any number of enviromanager blocks specified, but only the values in the last one parsed will be used. &lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
 enviromanager&lt;br /&gt;
 {&lt;br /&gt;
   minstartwait = &amp;lt;number&amp;gt; // minimum wait time at level start in tics&lt;br /&gt;
   maxstartwait = &amp;lt;number&amp;gt; // maximum wait time at level start in tics&lt;br /&gt;
   minwait      = &amp;lt;number&amp;gt; // minimum wait time between sequences in tics&lt;br /&gt;
   maxwait      = &amp;lt;number&amp;gt; // maximum wait time between sequences in tics&lt;br /&gt;
 }&lt;br /&gt;
In all cases, the minimum wait times should be less than the maximum. The engine will adjust the values to make this true if it is not.&lt;br /&gt;
&lt;br /&gt;
==Sound environments==&lt;br /&gt;
Use of sound environments allows addition of reverberation effects to areas within levels called &amp;quot;sound zones.&amp;quot; Sound zones are sets of contiguous sectors which connect to each other by two-sided lines which are not marked with a new ExtraData linedef flag, ZONEBOUNDARY.&lt;br /&gt;
&lt;br /&gt;
To assign a specific sound environment to a zone, use ExtraData to create an EESoundEnvironment object in one of the sectors inside that zone with its first two map arguments set to the two ID numbers of the EDF reverb definition you want to apply while a player is inside that area.&lt;br /&gt;
&lt;br /&gt;
 // Defines a reverb sound environment. ID1 and ID2 are required and must be&lt;br /&gt;
 // numbers between 0 and 255. &lt;br /&gt;
 reverb &amp;lt;name&amp;gt; : &amp;lt;id1&amp;gt;, &amp;lt;id2&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  // Roomsize defines the decay time and &amp;quot;volume&amp;quot; of reverberation; the larger&lt;br /&gt;
  // the value, the bigger the space.&lt;br /&gt;
  // Range 0.0 to 1.07143; default 0.5&lt;br /&gt;
  roomsize &amp;lt;float&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
  // Damping defines the amount of high-frequency rolloff in the reverb filters.&lt;br /&gt;
  // A higher value is analogous to a space filled with fewer reflective objects.&lt;br /&gt;
  // Range 0.0 to 1.0; default 0.5&lt;br /&gt;
  damping  &amp;lt;float&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
  // Wet scale defines the amount of reverberated signal in the reverb output.&lt;br /&gt;
  // Range 0.0 to 1.0; default 0.333...&lt;br /&gt;
  wetscale &amp;lt;float&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  // Dry scale defines the amount of dry (input) signal in the reverb output.&lt;br /&gt;
  // Range 0.0 to 1.0; default 0.0&lt;br /&gt;
  dryscale &amp;lt;float&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  // Width defines the amount of stereo phasing/cross-over in the reverberation.&lt;br /&gt;
  // Range 0.0 to 1.0; default 1.0&lt;br /&gt;
  width &amp;lt;float&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  // Predelay defines the amount of time between sound emission and the first&lt;br /&gt;
  // reverb response. Defined in milliseconds; Range 0 to 250; default 0.&lt;br /&gt;
  predelay &amp;lt;int&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  // The equalized flag, if specified as +equalized, will turn on a three-band&lt;br /&gt;
  // equalization pass after the reverb filters. This allows tweaking the amount&lt;br /&gt;
  // of low- and high-frequency sound for adjusting the &amp;quot;luminosity&amp;quot; of the&lt;br /&gt;
  // effect. Default is -equalized.&lt;br /&gt;
  [+-]equalized&lt;br /&gt;
  &lt;br /&gt;
  // These parameters apply when +equalized is specified:&lt;br /&gt;
  &lt;br /&gt;
  eq.lowfreq  &amp;lt;float&amp;gt; // Low band upper edge in Hz;  20-20000; default = 250.0&lt;br /&gt;
  eq.highfreq &amp;lt;float&amp;gt; // High band lower edge in Hz; 20-20000; default = 4000.0&lt;br /&gt;
  eq.lowgain  &amp;lt;float&amp;gt; // Volume factor for low freqs; 0.0-1.0; default 1.0&lt;br /&gt;
  eq.midgain  &amp;lt;float&amp;gt; // Volume factor for mid freqs; 0.0-1.0; default 1.0&lt;br /&gt;
  eq.highgain &amp;lt;float&amp;gt; // Volume factor for hi  freqs; 0.0-1.0; default 1.0&lt;br /&gt;
 }&lt;br /&gt;
Adjustments have also been made to EDF ambience and soundsequence definitions which allow either to exclude themselves from application of sound zones. To exclude either type of definition from environmental effects, use the -reverb flag as such:&lt;br /&gt;
 ambience &amp;lt;name&amp;gt; &lt;br /&gt;
 {&lt;br /&gt;
  ...&lt;br /&gt;
  -reverb&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 soundsequence &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  ...&lt;br /&gt;
  -reverb&lt;br /&gt;
 }&lt;br /&gt;
By default, environments apply to all ambience and soundsequence definitions.&lt;br /&gt;
&lt;br /&gt;
[[category:EDF]]&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=User:Quasar&amp;diff=3553</id>
		<title>User:Quasar</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=User:Quasar&amp;diff=3553"/>
		<updated>2016-02-17T01:29:12Z</updated>

		<summary type="html">&lt;p&gt;Quasar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello, I&#039;m Quasar, founder of [[Team Eternity]] and one of the principal programmers of the [[Eternity Engine]]. I am a mod on the Wiki, naturally, and I&#039;ll soon be adding tons of material here.&lt;br /&gt;
&lt;br /&gt;
Some of my websites:&lt;br /&gt;
* [[doom_wiki:User:Quasar|My user page]] on [http://doomwiki.org DoomWiki.org], the &#039;&#039;real&#039;&#039; Doom Wiki. Anything else is not blessed or maintained by me.&lt;br /&gt;
* [[zdoom:User:Quasar|My user page]] at the ZDoom Wiki.&lt;br /&gt;
* http://dk.youfailit.net - Dungeon Keeper Millennium&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Doom_Wiki&amp;diff=3505</id>
		<title>Doom Wiki</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Doom_Wiki&amp;diff=3505"/>
		<updated>2015-06-19T21:17:55Z</updated>

		<summary type="html">&lt;p&gt;Quasar: tag line&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Doom Wiki&#039;&#039;&#039; at [http://doomwiki.org DoomWiki.org] is a project to document everything related to id Software&#039;s classic games Doom and Doom II.&lt;br /&gt;
&lt;br /&gt;
Articles that are more closely related to Doom in general, other source ports, or non-[[Eternity]] specific editing aspects should be placed there. Interwiki links to the Doom Wiki are created like this: &amp;lt;nowiki&amp;gt;[[Doom Wiki:Doom|Doom]]&amp;lt;/nowiki&amp;gt;, creating [[Doom Wiki:Doom|Doom]].&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Doom_Wiki&amp;diff=3504</id>
		<title>Doom Wiki</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Doom_Wiki&amp;diff=3504"/>
		<updated>2015-06-19T21:17:07Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Holy fuck :P&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Doom Wiki&#039;&#039;&#039; is a project to document everything related to id Software&#039;s classic games Doom and Doom II.&lt;br /&gt;
&lt;br /&gt;
Articles that are more closely related to Doom in general, other source ports, or non-[[Eternity]] specific editing aspects should be placed there. Interwiki links to the Doom Wiki are created like this: &amp;lt;nowiki&amp;gt;[[Doom Wiki:Doom|Doom]]&amp;lt;/nowiki&amp;gt;, creating [[Doom Wiki:Doom|Doom]].&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Eternity_Engine&amp;diff=3486</id>
		<title>Eternity Engine</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Eternity_Engine&amp;diff=3486"/>
		<updated>2015-02-26T22:40:43Z</updated>

		<summary type="html">&lt;p&gt;Quasar: /* Linked portals */ LOS do work through line portals now.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Eternity Engine is [[Team Eternity]]&#039;s advanced [[Doom Wiki:Doom|Doom]] [[Doom Wiki:Source port|source port]] and the primary subject of this Wiki.&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 Eternity TC, which was at that time a new and active project. When [[Doom Wiki:Lee Killough|Lee Killough]] began the [[MBF]] project, [[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 [[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 [[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, [[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;
Current major goals for the engine include completing support for [[Doom Wiki:Heretic|Heretic]], a dynamic weapon and inventory system, and [[Universal Doom Map Format|UDMF]] support.&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 [[SoM]] that fixes several problems inherent with the classic fixed-point 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 thing types, 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. Note that while they have been implemented in the official releases, linked portals don&#039;t yet support certain gameplay features: hitscan weapons, line-of-sight checks through floors or ceilings, seamless sprite rendering or actor physics.&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 listing of Eternity&#039;s release history follows.&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;
* {{latest}} &amp;quot;Bifröst&amp;quot; - January 19, 2014&lt;br /&gt;
&lt;br /&gt;
==Cross-platform==&lt;br /&gt;
Eternity can be compiled on other operating systems than Windows by using the CMake utility. You can download the source code and execute CMake on its top-level folder.&lt;br /&gt;
&lt;br /&gt;
==Development builds==&lt;br /&gt;
SVN builds (&amp;quot;beta&amp;quot; releases) for Eternity are available for Windows at [http://devbuilds.drdteam.org/eternity/ DRDTeam&#039;s website]. For OS X they can be downloaded from [http://www.doomworld.com/vb/post/1083196 this Doomworld thread]. 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.&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>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=User:Quasar&amp;diff=3485</id>
		<title>User:Quasar</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=User:Quasar&amp;diff=3485"/>
		<updated>2015-02-26T20:44:07Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Update user page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello, I&#039;m Quasar, founder of [[Team Eternity]] and one of the principal programmers of the [[Eternity Engine]]. I am a mod on the Wiki, naturally, and I&#039;ll soon be adding tons of material here.&lt;br /&gt;
&lt;br /&gt;
Some of my websites:&lt;br /&gt;
* [[doom_wiki:User:Quasar|My user page]] on [http://doomwiki.org DoomWiki.org], the &#039;&#039;real&#039;&#039; Doom Wiki. Anything else is not blessed or maintained by me.&lt;br /&gt;
* http://dk.youfailit.net - Dungeon Keeper Millennium&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Geom_string&amp;diff=3477</id>
		<title>Geom string</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Geom_string&amp;diff=3477"/>
		<updated>2014-03-19T15:32:31Z</updated>

		<summary type="html">&lt;p&gt;Quasar: /* Syntax */ Resolution no longer limited&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;geom string&#039;&#039;&#039; is a special configuration setting in [[Eternity]] which allows specification of all of the characteristics of a video mode in a single string.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
The syntax of a geom string is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
WWWWxHHHH[flags]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where WWWW is the width, between 320 and the maximum supported system window width; HHHH is the height, between 200 and the maximum supported system window height; and [flags] is an optional valid combination of the following single-letter specifiers:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 85%&amp;quot;; text-align: center; width: auto&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Flag&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Description&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| w&lt;br /&gt;
| Selects windowed mode.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| f&lt;br /&gt;
| Selects fullscreen mode.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| a&lt;br /&gt;
| Selects &amp;quot;asynchronous&amp;quot; or non-page-flipped updating.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| v&lt;br /&gt;
| Selects page-flipped updating.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| s&lt;br /&gt;
| Selects &amp;quot;software&amp;quot; surface.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| h&lt;br /&gt;
| Selects &amp;quot;hardware&amp;quot; surface (eg. DirectDraw acceleration)&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| n&lt;br /&gt;
| Creates primary window without a window frame, where supported.&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Flag&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
The following are examples of valid geom strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
 320x200w&lt;br /&gt;
 640x480f&lt;br /&gt;
 1024x768wan&lt;br /&gt;
 1280x800fvh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=ZIP&amp;diff=3468</id>
		<title>ZIP</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=ZIP&amp;diff=3468"/>
		<updated>2013-12-08T08:08:02Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Wrong ordering.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Instead of using the WAD format, Eternity mods can use ZIP archives. The extension .PKE or .PK3 instead of .ZIP is recommended to make it clear that the content should not be extracted.&lt;br /&gt;
&lt;br /&gt;
Certain resources must be placed into special directories according to their type. The rest must go in the &amp;quot;global&amp;quot; namespace, which is the root folder of the ZIP. The optional directories allow compatibility with ZDoom but are treated as being part of the global namespace by Eternity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Directory !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;acs/&#039;&#039;&#039; || contains ACS libraries normally found between &#039;&#039;&#039;A_START&#039;&#039;&#039; and &#039;&#039;&#039;A_END&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;colormaps/&#039;&#039;&#039; || contains Boom colormaps normally found between &#039;&#039;&#039;C_START&#039;&#039;&#039; and &#039;&#039;&#039;C_END&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;demos/&#039;&#039;&#039; || contains demos.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;flats/&#039;&#039;&#039; || contains flats normally found between &#039;&#039;&#039;FF_START&#039;&#039;&#039; and &#039;&#039;&#039;FF_END&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;sprites/&#039;&#039;&#039; || contains sprites normally found between &#039;&#039;&#039;S_START&#039;&#039;&#039; and &#039;&#039;&#039;S_END&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;textures/&#039;&#039;&#039; || contains PNG, patch, or linear images which can be used directly as textures, normally found between &#039;&#039;&#039;TX_START&#039;&#039;&#039; and &#039;&#039;&#039;TX_END&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;translations/&#039;&#039;&#039; || contains translations.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Optional directories&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;graphics/&#039;&#039;&#039; || contains graphics other than sprites, textures, and flats.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;sounds/&#039;&#039;&#039; || contains all sound files.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;music/&#039;&#039;&#039; || contains all data that is used as music.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=ZIP&amp;diff=3467</id>
		<title>ZIP</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=ZIP&amp;diff=3467"/>
		<updated>2013-12-08T08:07:23Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Add textures namespace now available as of r2736&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Instead of using the WAD format, Eternity mods can use ZIP archives. The extension .PKE or .PK3 instead of .ZIP is recommended to make it clear that the content should not be extracted.&lt;br /&gt;
&lt;br /&gt;
Certain resources must be placed into special directories according to their type. The rest must go in the &amp;quot;global&amp;quot; namespace, which is the root folder of the ZIP. The optional directories allow compatibility with ZDoom but are treated as being part of the global namespace by Eternity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Directory !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;acs/&#039;&#039;&#039; || contains ACS libraries normally found between &#039;&#039;&#039;A_START&#039;&#039;&#039; and &#039;&#039;&#039;A_END&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;colormaps/&#039;&#039;&#039; || contains Boom colormaps normally found between &#039;&#039;&#039;C_START&#039;&#039;&#039; and &#039;&#039;&#039;C_END&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;demos/&#039;&#039;&#039; || contains demos.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;flats/&#039;&#039;&#039; || contains flats normally found between &#039;&#039;&#039;FF_START&#039;&#039;&#039; and &#039;&#039;&#039;FF_END&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;sprites/&#039;&#039;&#039; || contains sprites normally found between &#039;&#039;&#039;S_START&#039;&#039;&#039; and &#039;&#039;&#039;S_END&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;translations/&#039;&#039;&#039; || contains translations.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;textures/&#039;&#039;&#039; || contains PNG, patch, or linear images which can be used directly as textures, normally found between &#039;&#039;&#039;TX_START&#039;&#039;&#039; and &#039;&#039;&#039;TX_END&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Optional directories&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;graphics/&#039;&#039;&#039; || contains graphics other than sprites, textures, and flats.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;sounds/&#039;&#039;&#039; || contains all sound files.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;music/&#039;&#039;&#039; || contains all data that is used as music.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=List_of_command_line_parameters&amp;diff=2976</id>
		<title>List of command line parameters</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=List_of_command_line_parameters&amp;diff=2976"/>
		<updated>2012-01-15T21:50:26Z</updated>

		<summary type="html">&lt;p&gt;Quasar: /* Miscellaneous */ Removed -cdrom, which does not exist any longer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of all &#039;&#039;&#039;command line parameters&#039;&#039;&#039; that are supported by the Eternity Engine, along with detail about their functions. Most of the options available through the command line are also settable with the [[Eternity Frontend]].&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;See also: [[Doom_Wiki:Command line arguments|Command line arguments]] on the [[Doom Wiki]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Console==&lt;br /&gt;
* -exec &amp;amp;lt;filename&amp;amp;gt; : Executes the indicated file as a console script at game startup.&lt;br /&gt;
* -nocscload : Disables autoloaded console scripts for this play session only.&lt;br /&gt;
&lt;br /&gt;
==Debugging==&lt;br /&gt;
* -devparm : Enables FPS ticker and screenshots with F1 key (id development mode)&lt;br /&gt;
&lt;br /&gt;
==DeHackEd/BEX==&lt;br /&gt;
* -bex &amp;amp;lt;filename&amp;amp;gt; ... : Alias for -deh.&lt;br /&gt;
* -bexout &amp;amp;lt;filename&amp;amp;gt; : Alias for -dehout.&lt;br /&gt;
* -deh &amp;amp;lt;filename&amp;amp;gt; ... : Loads one or more DeHackEd/BEX patch files.&lt;br /&gt;
* -dehout &amp;amp;lt;filename&amp;amp;gt; : Enables verbose DeHackEd parser logging.&lt;br /&gt;
&lt;br /&gt;
==EDF==&lt;br /&gt;
* -edf &amp;amp;lt;filename&amp;amp;gt; : Specifies the root EDF file.&lt;br /&gt;
* -edfenables : Causes all gamemode&#039;s definitions to be enabled. For compatibility with older projects.&lt;br /&gt;
* -edfout : Enables verbose EDF logging to edfout##.txt&lt;br /&gt;
* -edf-show-warnings : Displays verbose EDF warning information on the system console at startup.&lt;br /&gt;
&lt;br /&gt;
==Gameplay==&lt;br /&gt;
* -dog : Enables a single MBF helper dog.&lt;br /&gt;
* -dogs &amp;amp;lt;n&amp;amp;gt; : Enables from one to three MBF helper dogs, depending on the number specified.&lt;br /&gt;
* -episode &amp;amp;lt;n&amp;amp;gt; : Start a new game on episode n. For DOOM and Heretic only.&lt;br /&gt;
* -fast : Enables Nightmare-mode monster speed in any difficulty.&lt;br /&gt;
* -nomonsters : Removes all monsters except Lost Souls from all levels.&lt;br /&gt;
* -respawn : Enables Nightmare-mode monster respawning in any difficulty.&lt;br /&gt;
* -skill &amp;amp;lt;n&amp;amp;gt; : Sets skill to level 1 through 5.&lt;br /&gt;
* -solo-net : Starts the game as single-player cooperative &#039;&#039;&#039;(SVN revision 1071+)&#039;&#039;&#039;&lt;br /&gt;
* -spechit &amp;amp;lt;n&amp;amp;gt; : Sets spechit emulation magic number to n. Spechit emulation must be enabled separately.&lt;br /&gt;
* -turbo &amp;amp;lt;n&amp;amp;gt; : Sets player turbo factor to n.&lt;br /&gt;
* -warp &amp;amp;lt;x&amp;amp;gt; &amp;amp;lt;y&amp;amp;gt; : Warps to level x in DOOM 2, or ExMy for DOOM or Heretic.&lt;br /&gt;
* -wart : Alias for -warp.&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
* -affinity &amp;amp;lt;num&amp;amp;gt; : Enables processor affinity mask to stop SDL_mixer crashes on multicore processors. Expert setting only.&lt;br /&gt;
* -blockmap : Enables MBF blockmap builder for all levels.&lt;br /&gt;
* -grabmouse : Enables mouse input grabbing.&lt;br /&gt;
* -nograbmouse : Disables mouse input grabbing.&lt;br /&gt;
* -numparticles &amp;amp;lt;n&amp;amp;gt; : Sets the static particle limit to n.&lt;br /&gt;
* -speed &amp;amp;lt;n&amp;amp;gt; : Sets game speed to n% of normal speed. Range is 10 to 1000.&lt;br /&gt;
* -statcopy : Does nothing. Enabled external statistics driver in Vanilla Doom.&lt;br /&gt;
&lt;br /&gt;
==Multiplayer==&lt;br /&gt;
* -altdeath : Enables Deathmatch 2.0 (items respawn, weapons stay).&lt;br /&gt;
* -avg : Austin Virtual Gaming. Deathmatch levels end after 20 minutes.&lt;br /&gt;
* -deathmatch : Enables original Deathmatch mode.&lt;br /&gt;
* -dmflags &amp;amp;lt;n&amp;amp;gt; : Sets the dmflags variable to value n.&lt;br /&gt;
* -dup&lt;br /&gt;
* -extratic&lt;br /&gt;
* -frags &amp;amp;lt;n&amp;amp;gt; : Sets fraglimit for Deathmatch. Levels end when the fraglimit is reached.&lt;br /&gt;
* -net : Specifies the peer-to-peer player node to use and the IP addresses of the other players.&lt;br /&gt;
* -timer &amp;amp;lt;n&amp;amp;gt; : Sets timelimit for Deathmatch to n minutes.&lt;br /&gt;
* -trideath : Enables SMMU Deathmatch 3.0 (barrels respawn, players drop backpacks [currently broken]).&lt;br /&gt;
&lt;br /&gt;
===Multiplayer Example===&lt;br /&gt;
&lt;br /&gt;
Eternity supports up to 4 player multiplayer.  For example:&lt;br /&gt;
&lt;br /&gt;
* Player 1&#039;s IP Address: 192.168.1.12&lt;br /&gt;
* Player 2&#039;s IP Address: 192.168.1.13&lt;br /&gt;
* Player 3&#039;s IP Address: 192.168.1.28&lt;br /&gt;
* Player 4&#039;s IP Address: 192.168.1.8&lt;br /&gt;
&lt;br /&gt;
Player 1&#039;s command-line:&lt;br /&gt;
 eternity.exe -iwad C:\Doom\WADs\doom2.wad -net 1 192.168.1.13 192.168.1.28 192.168.1.8&lt;br /&gt;
&lt;br /&gt;
Player 2&#039;s command-line:&lt;br /&gt;
 eternity.exe -iwad C:\Doom\WADs\doom2.wad -net 2 192.168.1.12 192.168.1.28 192.168.1.8&lt;br /&gt;
&lt;br /&gt;
Player 3&#039;s command-line:&lt;br /&gt;
 eternity.exe -iwad C:\Doom\WADs\doom2.wad -net 3 192.168.1.12 192.168.1.13 192.168.1.8&lt;br /&gt;
&lt;br /&gt;
Player 4&#039;s command-line:&lt;br /&gt;
 eternity.exe -iwad C:\Doom\WADs\doom2.wad -net 4 192.168.1.12 192.168.1.13 192.168.1.28&lt;br /&gt;
&lt;br /&gt;
Once all players have connected, the game will start.&lt;br /&gt;
&lt;br /&gt;
==Savegames==&lt;br /&gt;
* -loadgame &amp;amp;lt;n&amp;amp;gt; : Loads the savegame in slot n (0-7).&lt;br /&gt;
* -save &amp;amp;lt;path&amp;amp;gt; : Sets the directory from/to which savegames are loaded and saved.&lt;br /&gt;
&lt;br /&gt;
==Sound engine==&lt;br /&gt;
* -nomusic : Disables the music engine.&lt;br /&gt;
* -nosfx : Disables the digital sound engine.&lt;br /&gt;
* -nosound : Disables sound and music.&lt;br /&gt;
&lt;br /&gt;
==Video==&lt;br /&gt;
* -8in32 : Runs Eternity in a 32-bit video mode and crossblits the 8-bit framebuffer to the screen. Circumvents some SDL palette issues, but is slower.&lt;br /&gt;
* -directx : Windows only. Selects the DirectX 5.0 SDL video driver.&lt;br /&gt;
* -frame : Creates a main window with a frame (this is on by default for windowed modes and off for fullscreen).&lt;br /&gt;
* -fullscreen : Toggles fullscreen mode.&lt;br /&gt;
* -gdi : Windows only. Selects the Win32 GDI SDL video driver.&lt;br /&gt;
* -geom &amp;amp;lt;geomstring&amp;amp;gt; : Sets the video mode using a [[Geom string]].&lt;br /&gt;
* -noblit : Disables blitting for benchmark testing. &lt;br /&gt;
* -nodraw : Disables all screen drawing.&lt;br /&gt;
* -noframe : Opposite of -frame, creates a frameless window, if possible on the current platform.&lt;br /&gt;
* -nofullscreen : Alias for -window.&lt;br /&gt;
* -novsync : Disables waiting for vsync.&lt;br /&gt;
* -vheight &amp;amp;lt;n&amp;amp;gt; : Sets screen height to n; current limits are 200 to 1600.&lt;br /&gt;
* -vsync : Enables waiting for vsync.&lt;br /&gt;
* -vwidth &amp;amp;lt;n&amp;amp;gt; : Sets screen width to n; current limits are 320 to 2560.&lt;br /&gt;
* -window : Toggles windowed mode.&lt;br /&gt;
&lt;br /&gt;
==Wads and other files==&lt;br /&gt;
* -base &amp;amp;lt;path&amp;amp;gt; : Sets the base path to the indicated path. The path must be a directory, not a file.&lt;br /&gt;
* -config &amp;amp;lt;filename&amp;amp;gt; : Game will use the given configuration file.&lt;br /&gt;
* -file &amp;amp;lt;filename&amp;amp;gt; ... : Loads one or more WAD or lump files. Lump file names must be 8 characters or less with .lmp extension added.&lt;br /&gt;
* -game &amp;amp;lt;name&amp;amp;gt; : Causes Eternity to use the named game folder under its current base path.&lt;br /&gt;
* -gfs &amp;amp;lt;filename&amp;amp;gt; : Loads the given GFS script. GFS scripts may load WADs, DEH/BEX files, EDF, and console scripts.&lt;br /&gt;
* -iwad &amp;amp;lt;filename&amp;amp;gt; : Specifies the given WAD file as the IWAD.&lt;br /&gt;
* -noload : Disables autoloaded WADs and DEH/BEX patches during this play session only.&lt;br /&gt;
* -nowadhacks : Disables automatic application of wad directory hacks to known broken WAD files, such as Gothic DM 2.&lt;br /&gt;
* -showhashes : Enables display of WAD header/directory SHA-1 hashes on the system console.&lt;br /&gt;
&lt;br /&gt;
==Demos==&lt;br /&gt;
* -donut &amp;amp;lt;height&amp;amp;gt; &amp;amp;lt;pic&amp;amp;gt; : Enables donut overflow emulation using the specified parameters.&lt;br /&gt;
* -fastdemo &amp;amp;lt;filename&amp;amp;gt; : Plays the given demo as fast as possible.&lt;br /&gt;
* -longtics : Enables v1.91 longtics demo recording when used with -vanilla.&lt;br /&gt;
* -maxdemo &amp;amp;lt;n&amp;amp;gt; : Sets the initial size of the demo recording buffer. This is no longer a hard limit, and the buffer will expand if the given limit is exceeded.&lt;br /&gt;
* -play : Alias for -playdemo.&lt;br /&gt;
* -playdemo &amp;amp;lt;filename&amp;amp;gt; : Plays the given demo.&lt;br /&gt;
* -record &amp;amp;lt;filename&amp;amp;gt; : Records this play session as a demo named &amp;quot;filename&amp;quot;.&lt;br /&gt;
* -recorddemo : Alias for -record.&lt;br /&gt;
* -recordfrom &lt;br /&gt;
* -spechit &amp;amp;lt;number&amp;amp;gt; : Enables spechits overflow emulation with the given magic number.&lt;br /&gt;
* -timedemo &amp;amp;lt;filename&amp;amp;gt; : Plays the given demo normally and reports FPS information at exit.&lt;br /&gt;
* -vanilla : Enables recording of v1.9-compatible demo files.&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=List_of_command_line_parameters&amp;diff=2975</id>
		<title>List of command line parameters</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=List_of_command_line_parameters&amp;diff=2975"/>
		<updated>2012-01-15T21:46:34Z</updated>

		<summary type="html">&lt;p&gt;Quasar: /* EDF */ Added -edf-show-warnings&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of all &#039;&#039;&#039;command line parameters&#039;&#039;&#039; that are supported by the Eternity Engine, along with detail about their functions. Most of the options available through the command line are also settable with the [[Eternity Frontend]].&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;See also: [[Doom_Wiki:Command line arguments|Command line arguments]] on the [[Doom Wiki]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Console==&lt;br /&gt;
* -exec &amp;amp;lt;filename&amp;amp;gt; : Executes the indicated file as a console script at game startup.&lt;br /&gt;
* -nocscload : Disables autoloaded console scripts for this play session only.&lt;br /&gt;
&lt;br /&gt;
==Debugging==&lt;br /&gt;
* -devparm : Enables FPS ticker and screenshots with F1 key (id development mode)&lt;br /&gt;
&lt;br /&gt;
==DeHackEd/BEX==&lt;br /&gt;
* -bex &amp;amp;lt;filename&amp;amp;gt; ... : Alias for -deh.&lt;br /&gt;
* -bexout &amp;amp;lt;filename&amp;amp;gt; : Alias for -dehout.&lt;br /&gt;
* -deh &amp;amp;lt;filename&amp;amp;gt; ... : Loads one or more DeHackEd/BEX patch files.&lt;br /&gt;
* -dehout &amp;amp;lt;filename&amp;amp;gt; : Enables verbose DeHackEd parser logging.&lt;br /&gt;
&lt;br /&gt;
==EDF==&lt;br /&gt;
* -edf &amp;amp;lt;filename&amp;amp;gt; : Specifies the root EDF file.&lt;br /&gt;
* -edfenables : Causes all gamemode&#039;s definitions to be enabled. For compatibility with older projects.&lt;br /&gt;
* -edfout : Enables verbose EDF logging to edfout##.txt&lt;br /&gt;
* -edf-show-warnings : Displays verbose EDF warning information on the system console at startup.&lt;br /&gt;
&lt;br /&gt;
==Gameplay==&lt;br /&gt;
* -dog : Enables a single MBF helper dog.&lt;br /&gt;
* -dogs &amp;amp;lt;n&amp;amp;gt; : Enables from one to three MBF helper dogs, depending on the number specified.&lt;br /&gt;
* -episode &amp;amp;lt;n&amp;amp;gt; : Start a new game on episode n. For DOOM and Heretic only.&lt;br /&gt;
* -fast : Enables Nightmare-mode monster speed in any difficulty.&lt;br /&gt;
* -nomonsters : Removes all monsters except Lost Souls from all levels.&lt;br /&gt;
* -respawn : Enables Nightmare-mode monster respawning in any difficulty.&lt;br /&gt;
* -skill &amp;amp;lt;n&amp;amp;gt; : Sets skill to level 1 through 5.&lt;br /&gt;
* -solo-net : Starts the game as single-player cooperative &#039;&#039;&#039;(SVN revision 1071+)&#039;&#039;&#039;&lt;br /&gt;
* -spechit &amp;amp;lt;n&amp;amp;gt; : Sets spechit emulation magic number to n. Spechit emulation must be enabled separately.&lt;br /&gt;
* -turbo &amp;amp;lt;n&amp;amp;gt; : Sets player turbo factor to n.&lt;br /&gt;
* -warp &amp;amp;lt;x&amp;amp;gt; &amp;amp;lt;y&amp;amp;gt; : Warps to level x in DOOM 2, or ExMy for DOOM or Heretic.&lt;br /&gt;
* -wart : Alias for -warp.&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
* -affinity &amp;amp;lt;num&amp;amp;gt; : Enables processor affinity mask to stop SDL_mixer crashes on multicore processors. Expert setting only.&lt;br /&gt;
* -blockmap : Enables MBF blockmap builder for all levels.&lt;br /&gt;
* -cdrom : Game is running from a cd-rom. Data is written to C:\DOOMDATA. Does not work in Linux.&lt;br /&gt;
* -grabmouse : Enables mouse input grabbing.&lt;br /&gt;
* -nograbmouse : Disables mouse input grabbing.&lt;br /&gt;
* -numparticles &amp;amp;lt;n&amp;amp;gt; : Sets the static particle limit to n.&lt;br /&gt;
* -speed &amp;amp;lt;n&amp;amp;gt; : Sets game speed to n% of normal speed. Range is 10 to 1000.&lt;br /&gt;
* -statcopy : Does nothing. Enabled external statistics driver in Vanilla Doom.&lt;br /&gt;
&lt;br /&gt;
==Multiplayer==&lt;br /&gt;
* -altdeath : Enables Deathmatch 2.0 (items respawn, weapons stay).&lt;br /&gt;
* -avg : Austin Virtual Gaming. Deathmatch levels end after 20 minutes.&lt;br /&gt;
* -deathmatch : Enables original Deathmatch mode.&lt;br /&gt;
* -dmflags &amp;amp;lt;n&amp;amp;gt; : Sets the dmflags variable to value n.&lt;br /&gt;
* -dup&lt;br /&gt;
* -extratic&lt;br /&gt;
* -frags &amp;amp;lt;n&amp;amp;gt; : Sets fraglimit for Deathmatch. Levels end when the fraglimit is reached.&lt;br /&gt;
* -net : Specifies the peer-to-peer player node to use and the IP addresses of the other players.&lt;br /&gt;
* -timer &amp;amp;lt;n&amp;amp;gt; : Sets timelimit for Deathmatch to n minutes.&lt;br /&gt;
* -trideath : Enables SMMU Deathmatch 3.0 (barrels respawn, players drop backpacks [currently broken]).&lt;br /&gt;
&lt;br /&gt;
===Multiplayer Example===&lt;br /&gt;
&lt;br /&gt;
Eternity supports up to 4 player multiplayer.  For example:&lt;br /&gt;
&lt;br /&gt;
* Player 1&#039;s IP Address: 192.168.1.12&lt;br /&gt;
* Player 2&#039;s IP Address: 192.168.1.13&lt;br /&gt;
* Player 3&#039;s IP Address: 192.168.1.28&lt;br /&gt;
* Player 4&#039;s IP Address: 192.168.1.8&lt;br /&gt;
&lt;br /&gt;
Player 1&#039;s command-line:&lt;br /&gt;
 eternity.exe -iwad C:\Doom\WADs\doom2.wad -net 1 192.168.1.13 192.168.1.28 192.168.1.8&lt;br /&gt;
&lt;br /&gt;
Player 2&#039;s command-line:&lt;br /&gt;
 eternity.exe -iwad C:\Doom\WADs\doom2.wad -net 2 192.168.1.12 192.168.1.28 192.168.1.8&lt;br /&gt;
&lt;br /&gt;
Player 3&#039;s command-line:&lt;br /&gt;
 eternity.exe -iwad C:\Doom\WADs\doom2.wad -net 3 192.168.1.12 192.168.1.13 192.168.1.8&lt;br /&gt;
&lt;br /&gt;
Player 4&#039;s command-line:&lt;br /&gt;
 eternity.exe -iwad C:\Doom\WADs\doom2.wad -net 4 192.168.1.12 192.168.1.13 192.168.1.28&lt;br /&gt;
&lt;br /&gt;
Once all players have connected, the game will start.&lt;br /&gt;
&lt;br /&gt;
==Savegames==&lt;br /&gt;
* -loadgame &amp;amp;lt;n&amp;amp;gt; : Loads the savegame in slot n (0-7).&lt;br /&gt;
* -save &amp;amp;lt;path&amp;amp;gt; : Sets the directory from/to which savegames are loaded and saved.&lt;br /&gt;
&lt;br /&gt;
==Sound engine==&lt;br /&gt;
* -nomusic : Disables the music engine.&lt;br /&gt;
* -nosfx : Disables the digital sound engine.&lt;br /&gt;
* -nosound : Disables sound and music.&lt;br /&gt;
&lt;br /&gt;
==Video==&lt;br /&gt;
* -8in32 : Runs Eternity in a 32-bit video mode and crossblits the 8-bit framebuffer to the screen. Circumvents some SDL palette issues, but is slower.&lt;br /&gt;
* -directx : Windows only. Selects the DirectX 5.0 SDL video driver.&lt;br /&gt;
* -frame : Creates a main window with a frame (this is on by default for windowed modes and off for fullscreen).&lt;br /&gt;
* -fullscreen : Toggles fullscreen mode.&lt;br /&gt;
* -gdi : Windows only. Selects the Win32 GDI SDL video driver.&lt;br /&gt;
* -geom &amp;amp;lt;geomstring&amp;amp;gt; : Sets the video mode using a [[Geom string]].&lt;br /&gt;
* -noblit : Disables blitting for benchmark testing. &lt;br /&gt;
* -nodraw : Disables all screen drawing.&lt;br /&gt;
* -noframe : Opposite of -frame, creates a frameless window, if possible on the current platform.&lt;br /&gt;
* -nofullscreen : Alias for -window.&lt;br /&gt;
* -novsync : Disables waiting for vsync.&lt;br /&gt;
* -vheight &amp;amp;lt;n&amp;amp;gt; : Sets screen height to n; current limits are 200 to 1600.&lt;br /&gt;
* -vsync : Enables waiting for vsync.&lt;br /&gt;
* -vwidth &amp;amp;lt;n&amp;amp;gt; : Sets screen width to n; current limits are 320 to 2560.&lt;br /&gt;
* -window : Toggles windowed mode.&lt;br /&gt;
&lt;br /&gt;
==Wads and other files==&lt;br /&gt;
* -base &amp;amp;lt;path&amp;amp;gt; : Sets the base path to the indicated path. The path must be a directory, not a file.&lt;br /&gt;
* -config &amp;amp;lt;filename&amp;amp;gt; : Game will use the given configuration file.&lt;br /&gt;
* -file &amp;amp;lt;filename&amp;amp;gt; ... : Loads one or more WAD or lump files. Lump file names must be 8 characters or less with .lmp extension added.&lt;br /&gt;
* -game &amp;amp;lt;name&amp;amp;gt; : Causes Eternity to use the named game folder under its current base path.&lt;br /&gt;
* -gfs &amp;amp;lt;filename&amp;amp;gt; : Loads the given GFS script. GFS scripts may load WADs, DEH/BEX files, EDF, and console scripts.&lt;br /&gt;
* -iwad &amp;amp;lt;filename&amp;amp;gt; : Specifies the given WAD file as the IWAD.&lt;br /&gt;
* -noload : Disables autoloaded WADs and DEH/BEX patches during this play session only.&lt;br /&gt;
* -nowadhacks : Disables automatic application of wad directory hacks to known broken WAD files, such as Gothic DM 2.&lt;br /&gt;
* -showhashes : Enables display of WAD header/directory SHA-1 hashes on the system console.&lt;br /&gt;
&lt;br /&gt;
==Demos==&lt;br /&gt;
* -donut &amp;amp;lt;height&amp;amp;gt; &amp;amp;lt;pic&amp;amp;gt; : Enables donut overflow emulation using the specified parameters.&lt;br /&gt;
* -fastdemo &amp;amp;lt;filename&amp;amp;gt; : Plays the given demo as fast as possible.&lt;br /&gt;
* -longtics : Enables v1.91 longtics demo recording when used with -vanilla.&lt;br /&gt;
* -maxdemo &amp;amp;lt;n&amp;amp;gt; : Sets the initial size of the demo recording buffer. This is no longer a hard limit, and the buffer will expand if the given limit is exceeded.&lt;br /&gt;
* -play : Alias for -playdemo.&lt;br /&gt;
* -playdemo &amp;amp;lt;filename&amp;amp;gt; : Plays the given demo.&lt;br /&gt;
* -record &amp;amp;lt;filename&amp;amp;gt; : Records this play session as a demo named &amp;quot;filename&amp;quot;.&lt;br /&gt;
* -recorddemo : Alias for -record.&lt;br /&gt;
* -recordfrom &lt;br /&gt;
* -spechit &amp;amp;lt;number&amp;amp;gt; : Enables spechits overflow emulation with the given magic number.&lt;br /&gt;
* -timedemo &amp;amp;lt;filename&amp;amp;gt; : Plays the given demo normally and reports FPS information at exit.&lt;br /&gt;
* -vanilla : Enables recording of v1.9-compatible demo files.&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF&amp;diff=2625</id>
		<title>EDF</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF&amp;diff=2625"/>
		<updated>2011-05-08T22:09:29Z</updated>

		<summary type="html">&lt;p&gt;Quasar: /* Implementation */ Eternity never loads modules as &amp;quot;default fallbacks&amp;quot; any longer so that section has been removed.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;EDF&#039;&#039;&#039;, Eternity Definition File, is a language used to define and modify monsters, decorations, sounds, text strings, menus, terrain types, and other data in Eternity Engine.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
===EDF is Free-form===&lt;br /&gt;
&lt;br /&gt;
Whitespace and token positioning are totally free-form in EDF. In addition, semicolons are discarded as whitespace and can therefore be used to terminate field assignments, lists, etc. as in C or C++. Also, the equal sign (as a standalone operator) used to connect keywords with values is no longer required. As an example, all of the following are strictly equivalent:&lt;br /&gt;
&lt;br /&gt;
     thingtype w00t { mass = 1000 }&lt;br /&gt;
&lt;br /&gt;
     thingtype w00t&lt;br /&gt;
     {&lt;br /&gt;
        mass    1000;&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     thingtype&lt;br /&gt;
                      w00t&lt;br /&gt;
                 {&lt;br /&gt;
        mass     =&lt;br /&gt;
             1000     ;;;;;;&lt;br /&gt;
                     }&lt;br /&gt;
&lt;br /&gt;
The usage of a clean and consistent format is encouraged, even though it is not required. To reduce cluttering, examples and definitions throughout this wiki will be written without the equal operator.&lt;br /&gt;
===Value types===&lt;br /&gt;
Fields in EDF can take character string, heredoc, numeric values or lists of values.&lt;br /&gt;
====Strings====&lt;br /&gt;
Many fields in EDF take strings. Strings, if they do not contain whitespace or any character that needs to be escaped, may be unquoted. Unquoted strings additionally cannot contain any of the following characters: &amp;quot; &#039; = { } ( ) + , # / ;&lt;br /&gt;
&lt;br /&gt;
If any of those characters are found, the unquoted string will be terminated at the last valid character.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
     spritenames += { SPR1, SPR2, SPR3 }&lt;br /&gt;
&lt;br /&gt;
The items SPR1, SPR2, and SPR3 are unquoted strings. Note how the commas serve to separate the items in a list, and therefore do not become part of the strings.&lt;br /&gt;
&lt;br /&gt;
Many fields more or less require quoted strings. Quoted strings must start and end with either single or double quotes (the beginning and ending quote types must match). Quoted strings may contain any character except a line break, including those not allowed in unquoted strings. In addition, quoted strings also support the following escape codes for non-typable characters:&lt;br /&gt;
&lt;br /&gt;
* \n : Hard line break&lt;br /&gt;
* \t : Tab&lt;br /&gt;
* \b : Backspace&lt;br /&gt;
* \a : Beep (causes a sound when printed to the console)&lt;br /&gt;
* \\ : Literal \ character.&lt;br /&gt;
* \&amp;quot; : Literal &amp;quot;, necessary to use in double-quoted strings only&lt;br /&gt;
* \&#039; : Literal &#039;, necessary to use in single-quoted strings only&lt;br /&gt;
* \0 : Null character&lt;br /&gt;
* \K : Changes text color to &amp;quot;brick&amp;quot; range where supported.&lt;br /&gt;
* \1 : Changes text color to &amp;quot;tan&amp;quot; range where supported.&lt;br /&gt;
* \2 : Changes text color to &amp;quot;gray&amp;quot; range where supported.&lt;br /&gt;
* \3 : Changes text color to &amp;quot;green&amp;quot; range where supported.&lt;br /&gt;
* \4 : Changes text color to &amp;quot;brown&amp;quot; range where supported.&lt;br /&gt;
* \5 : Changes text color to &amp;quot;gold&amp;quot; range where supported.&lt;br /&gt;
* \6 : Changes text color to &amp;quot;red&amp;quot; range where supported.&lt;br /&gt;
* \7 : Changes text color to &amp;quot;blue&amp;quot; range where supported.&lt;br /&gt;
* \8 : Changes text color to &amp;quot;orange&amp;quot; range where supported.&lt;br /&gt;
* \9 : Changes text color to &amp;quot;yellow&amp;quot; range where supported.&lt;br /&gt;
* \N : Changes text color to gamemode &amp;quot;normal&amp;quot; range where supported.&lt;br /&gt;
* \H : Changes text color to gamemode &amp;quot;hilite&amp;quot; range where supported.&lt;br /&gt;
* \E : Changes text color to gamemode &amp;quot;error&amp;quot; range where supported.&lt;br /&gt;
* \S : Toggles text shadowing where supported.&lt;br /&gt;
* \C : Toggles absolute centering of text where supported. &lt;br /&gt;
&lt;br /&gt;
If \ is followed by any other character, the slash is discarded and the next character is treated normally (ie, \d becomes d). Avoid doing this, however, to maintain forward compatibility.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
     thingtype w00t&lt;br /&gt;
     {&lt;br /&gt;
        obituary_normal = &amp;quot;w00ts&amp;quot;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;obituary_melee  = &#039;says \&#039;w00t\&#039;&#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
Line Continuation:&lt;br /&gt;
&lt;br /&gt;
Starting with Eternity Engine v3.31 Delta, line continuation can be used to split quoted strings across multiple lines. The syntax for doing this is demonstrated in the following example:&lt;br /&gt;
&lt;br /&gt;
     frame S_MYFRAME&lt;br /&gt;
     {&lt;br /&gt;
        cmp = &amp;quot;TROO|A|*|6 \&lt;br /&gt;
               TroopAttack|@next&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;\&amp;quot; character, when followed immediately by a line break, signifies that line continuation should be triggered. Whitespace before the line continuation will be included in the string, but any spaces or tabs at the beginning of the next line will NOT be included (this is the same as line continuation in BEX files). This allows the following continued parts of the string to be arbitrarily indented for purposes of beautification. A string can be split across any number of lines in this fashion.&lt;br /&gt;
&lt;br /&gt;
NOTE: Simply adding &amp;quot;\&amp;quot; will not result in a newline character even if the continued string appears multiline in the EDF file. For text that is supposed to be multiline, use heredocs instead.&lt;br /&gt;
&lt;br /&gt;
====Heredocs====&lt;br /&gt;
EDF supports heredocs, which are multi-line strings. A heredoc is delimited by @&amp;quot; and &amp;quot;@, and can be placed interchangeably with a string, especially where more lines are needed. Heredocs are commonly used where non-EDF code is implemented, such as in DECORATE-style state definition or sound sequencing. Note: in heredocs, &#039;&#039;any&#039;&#039; character is taken into account, such as whitespaces at the beginning of a line. It is up to the interpreter reading the contents of the heredoc to remove extraneous whitespaces, and such characters &#039;&#039;will&#039;&#039; appear where literal text is to be written.&lt;br /&gt;
&lt;br /&gt;
====Numbers====&lt;br /&gt;
&lt;br /&gt;
Most non-string fields in EDF are numbers, either integer or floating-point. Starting with EDF 1.1, decimal, octal, and hexadecimal integers will be accepted in all number fields. Octal numbers start with a zero, and hexadecimal numbers start with the sequence 0x -- Examples:&lt;br /&gt;
&lt;br /&gt;
     # this is a normal, decimal number (base 10)&lt;br /&gt;
     spriteframe = 16&lt;br /&gt;
     ...&lt;br /&gt;
     # this is an octal number (base 8)&lt;br /&gt;
     spriteframe = 020&lt;br /&gt;
     ...&lt;br /&gt;
     # this is a hexadecimal number (base 16)&lt;br /&gt;
     spriteframe = 0x10&lt;br /&gt;
&lt;br /&gt;
Floating-point numbers must have a decimal point in them, as in &amp;quot;20.0&amp;quot;. Floating-point numbers are always base 10.&lt;br /&gt;
&lt;br /&gt;
====Value lists====&lt;br /&gt;
Fields can take multiple values, enclosed in curly braces and separates by commas. The &#039;&#039;&#039;spritenames&#039;&#039;&#039; block includes such an example, or other situations such as non-heredoc sound sequences.&lt;br /&gt;
&lt;br /&gt;
Note: commas are &#039;&#039;not&#039;&#039; interchangeable with semicolons, and are used only to separate values inside lists, whereas semicolons are simple substitutes to white space in general parts of the code.&lt;br /&gt;
&lt;br /&gt;
===Comments===&lt;br /&gt;
&lt;br /&gt;
EDF files can use three forms of comments:&lt;br /&gt;
&lt;br /&gt;
* # Comments: Like in DeHackEd, this comment type extends to the end of the line.&lt;br /&gt;
* // Comments: An alternate form of single-line comment, equivalent to #.&lt;br /&gt;
* /* */ Comments: This type of comment is multiline, and extends from the opening /* to the first */ found. This type of comment CANNOT be nested. Nested multiline comments will cause a syntax error. &lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
     # Single line comment&lt;br /&gt;
 &lt;br /&gt;
     // Another single line comment&lt;br /&gt;
 &lt;br /&gt;
     /*&lt;br /&gt;
     &lt;br /&gt;
        This is a multiline comment&lt;br /&gt;
        &lt;br /&gt;
     */&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
===Loading EDF===&lt;br /&gt;
&lt;br /&gt;
By default, Eternity loads the EDF file from the relative path: &#039;&#039;base\root.edf&#039;&#039;. The root file can be substituted as follows, either from an external file or a WAD lump:&lt;br /&gt;
&lt;br /&gt;
* To load an EDF root from a WAD file, the name of the root EDF lump must be &amp;quot;EDFROOT&amp;quot;.&lt;br /&gt;
* To include an EDF file from the command line, use the -edf parameter. For example: &#039;&#039;eternity -edf c:\blah\root.edf&#039;&#039;&lt;br /&gt;
* A [[GFS]] file can specify the root EDF file with the &#039;&#039;&#039;edffile&#039;&#039;&#039; keyword. Only one EDF file can be specified in a GFS. If -edf is used when a GFS is loaded, the command-line parameter will take precedence. See the GFS documentation for further information.&lt;br /&gt;
&lt;br /&gt;
Unless the intention is to redefine the entire game structure, the overriding root EDF file must contain a command at the top to include the &#039;&#039;base\root.edf&#039;&#039; file, by using this function: &#039;&#039;stdinclude(&amp;quot;root.edf&amp;quot;)&#039;&#039;. Note that it is possible to load several wads containing EDFROOT; they will be processed additively.&lt;br /&gt;
&lt;br /&gt;
===Including files===&lt;br /&gt;
Use of include files is critical for several purposes. First, it&#039;s unorganized and difficult to maintain EDF files when everything is put haphazardly into one file.&lt;br /&gt;
&lt;br /&gt;
To include a file or wad lump normally, with a path relative to the current file doing the inclusion, use the include function, like in these examples:&lt;br /&gt;
&lt;br /&gt;
 # include examples&lt;br /&gt;
 &lt;br /&gt;
 include(&amp;quot;myfile.edf&amp;quot;)&lt;br /&gt;
 include(&amp;quot;../prevdir.edf&amp;quot;);  # remember, semicolons are purely optional&lt;br /&gt;
&lt;br /&gt;
This example would include &amp;quot;myfile.edf&amp;quot; from the same directory that the current file is in, and &amp;quot;prevdir.edf&amp;quot; from the parent directory. It is important to note that this function can only include files when called from within a file, and it can only include WAD lumps when called from within a WAD lump. This restriction is necessary due to how the complete path of the included file must be formed.&lt;br /&gt;
&lt;br /&gt;
In order to remain compatible with future versions of Eternity, and to greatly reduce EDF file sizes, include the standard, default EDF files into your own. To include the files from Eternity&#039;s &#039;&#039;base&#039;&#039; directory, use the &#039;&#039;&#039;stdinclude&#039;&#039;&#039; function:&lt;br /&gt;
&lt;br /&gt;
 stdinclude(&amp;quot;root.edf&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Note: to ensure backward and forward compatibility, do not include other EDF files from the &#039;&#039;base&#039;&#039; directory than &#039;&#039;root.edf&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Include statements may only be located at the topmost level of an EDF file, and not inside any section.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;userinclude&#039;&#039;&#039; function allows the optional inclusion of a file from Eternity&#039;s &#039;&#039;base&#039;&#039; folder. This function is identical to &#039;&#039;&#039;stdinclude&#039;&#039;&#039;, except that it will test to see if the file exists beforehand, and if it does not, no error will occur. This function is NOT for use by EDF editors in projects. This function is intended for end-user modification of EDF settings, including but not limited to the custom user menu. Example:&lt;br /&gt;
&lt;br /&gt;
 userinclude(&amp;quot;user.edf&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
This example can be found in Eternity&#039;s root.edf, where it exists to include the optional user-defined &amp;quot;user.edf&amp;quot; file. You should never attempt to overwrite the user.edf file with one from your own project, as this is outside the scope of its purpose and will be offensive to the end user.&lt;br /&gt;
&lt;br /&gt;
===Including lumps===&lt;br /&gt;
&lt;br /&gt;
This &#039;&#039;&#039;lumpinclude&#039;&#039;&#039; function includes a wad lump when called from either a file or a lump. The lump named must exist, or an error will occur. The name must also be no longer than eight characters. Case of the lump name will be ignored as usual.&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;MYEDFLMP&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Another function, &#039;&#039;include_prev()&#039;&#039; may be encountered in EDF files or lumps for older versions of Eternity. It has been deprecated and has no effect.&lt;br /&gt;
&lt;br /&gt;
Note: including a lump or file several times is safe.&lt;br /&gt;
&lt;br /&gt;
===Including BEX files{{deprecated}}===&lt;br /&gt;
It is possible to include BEX files by using:&lt;br /&gt;
&lt;br /&gt;
 bexinclude(&amp;quot;file.bex&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
but it is recommended to use the DEHACKED lump or GFS files rather than EDF.&lt;br /&gt;
&lt;br /&gt;
===Base EDF files===&lt;br /&gt;
This section explains the contents of each of the standard default EDF modules. Note that some are game-dependent and are in consequence included in their respective folders, as well as the base folder for the common features.&lt;br /&gt;
&lt;br /&gt;
* cast.edf -- contains &#039;&#039;&#039;castinfo&#039;&#039;&#039; (Doom 2 cast call) definitions&lt;br /&gt;
* fonts.edf -- contains &#039;&#039;&#039;font&#039;&#039;&#039; definitions -- game dependent&lt;br /&gt;
* frames.edf -- contains &#039;&#039;&#039;frame&#039;&#039;&#039; definitions -- game dependent&lt;br /&gt;
* misc.edf -- contains &#039;&#039;&#039;boss_spawner_types&#039;&#039;&#039; and some Heretic-specific &#039;&#039;&#039;string&#039;&#039;&#039; blocks&lt;br /&gt;
* player.edf -- contains &#039;&#039;&#039;skin&#039;&#039;&#039; and &#039;&#039;&#039;playerclass&#039;&#039;&#039; definitions&lt;br /&gt;
* root.edf -- includes all other modules&lt;br /&gt;
* sounds.edf -- contains &#039;&#039;&#039;sound&#039;&#039;&#039; and &#039;&#039;&#039;soundsequence&#039;&#039;&#039; definitions -- game dependent&lt;br /&gt;
* sprites.edf -- contains &#039;&#039;&#039;spritenames&#039;&#039;&#039; and &#039;&#039;&#039;pickupitem&#039;&#039;&#039; definitions&lt;br /&gt;
* sounds.edf -- contains sound definitions&lt;br /&gt;
* terrain.edf -- contains &#039;&#039;&#039;splash&#039;&#039;&#039;, &#039;&#039;&#039;terrain&#039;&#039;&#039;, &#039;&#039;&#039;floor&#039;&#039;&#039; definitions&lt;br /&gt;
* things.edf -- contains &#039;&#039;&#039;thingtype&#039;&#039;&#039; and &#039;&#039;&#039;damagetype&#039;&#039;&#039; definitions&lt;br /&gt;
* user.edf -- optional user-defined EDF file which may contain any definitions&lt;br /&gt;
&lt;br /&gt;
Click on any of the links for reference on how to use the specific blocks.&lt;br /&gt;
&lt;br /&gt;
===Lumps besides EDFROOT that are automatically loaded===&lt;br /&gt;
Eternity can load other EDF lumps, besides EDFROOT. Previously, they were dedicated to specific blocks, but now can be used for any purpose. They don&#039;t need to be explicitly included from EDFROOT, but it is no danger in doing so.&lt;br /&gt;
&lt;br /&gt;
*ESTRINGS&lt;br /&gt;
*ETERRAIN&lt;br /&gt;
*EMENUS&lt;br /&gt;
*ESNDSEQ&lt;br /&gt;
*ESNDINFO&lt;br /&gt;
*EFONTS&lt;br /&gt;
&lt;br /&gt;
===Reserved identifiers===&lt;br /&gt;
&lt;br /&gt;
This section describes classes of identifiers (such as thing, frame, and sound mnemonics) which are considered reserved by the Eternity Engine. You should avoid using any identifier in the following classes for objects which you define yourself. Failure to do so could result in incompatibility of your project with future versions of the Eternity Engine due to conflicts with newly added game engine features.&lt;br /&gt;
&lt;br /&gt;
* All identifiers beginning with _ (underscore)&lt;br /&gt;
* All identifiers beginning with EE or ee (this prefix means &amp;quot;Eternity Engine&amp;quot; and is therefore reserved for use by the source port&#039;s authors only).&lt;br /&gt;
* All identifiers containing ANY non-alphanumeric character excepting non-leading underscores (ex: $ is reserved). &lt;br /&gt;
&lt;br /&gt;
For maximum safety, it is recommended that you develop a consistent and unique naming scheme for objects you create yourself. This has the positive side effect, of improving the ability of your EDF patches to combine with those of others.&lt;br /&gt;
&lt;br /&gt;
==Verbose EDF logging==&lt;br /&gt;
Eternity includes a verbose logging feature in the EDF processor that allows a view of more detailed information on what is occuring while EDF is being processed. This can help nail down the location of any errors or omissions. To enable verbose EDF logging, use the command-line parameter -edfout. This will cause Eternity to write an &amp;quot;edfout##.txt&amp;quot; log file in its current working directory, where ## is a unique number from 0 to 99.&lt;br /&gt;
&lt;br /&gt;
==Tutorials==&lt;br /&gt;
* [[Creating a simple decoration]]&lt;br /&gt;
* [[Creating a monster]]&lt;br /&gt;
* [[Creating a projectile]]&lt;br /&gt;
* [[Creating a pickup]]&lt;br /&gt;
* [[Creating terrain types]]&lt;br /&gt;
* [[Using inheritance]]&lt;br /&gt;
* [[Using deltas to modify existing definitions]]&lt;br /&gt;
&lt;br /&gt;
==Editing Reference==&lt;br /&gt;
{{EDF_REF}}&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=List_of_command_line_parameters&amp;diff=2562</id>
		<title>List of command line parameters</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=List_of_command_line_parameters&amp;diff=2562"/>
		<updated>2011-05-06T18:21:23Z</updated>

		<summary type="html">&lt;p&gt;Quasar: /* Demos */ Added new -play and -recorddemo aliases from 3.40.10&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of all &#039;&#039;&#039;command line parameters&#039;&#039;&#039; that are supported by the Eternity Engine, along with detail about their functions. Most of the options available through the command line are also settable with the [[Eternity Frontend]].&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;See also: [[Doom_Wiki:Command line arguments|Command line arguments]] on the [[Doom Wiki]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Console==&lt;br /&gt;
* -exec &amp;amp;lt;filename&amp;amp;gt; : Executes the indicated file as a console script at game startup.&lt;br /&gt;
* -nocscload : Disables autoloaded console scripts for this play session only.&lt;br /&gt;
&lt;br /&gt;
==Debugging==&lt;br /&gt;
* -devparm : Enables FPS ticker and screenshots with F1 key (id development mode)&lt;br /&gt;
&lt;br /&gt;
==DeHackEd/BEX==&lt;br /&gt;
* -bex &amp;amp;lt;filename&amp;amp;gt; ... : Alias for -deh.&lt;br /&gt;
* -bexout &amp;amp;lt;filename&amp;amp;gt; : Alias for -dehout.&lt;br /&gt;
* -deh &amp;amp;lt;filename&amp;amp;gt; ... : Loads one or more DeHackEd/BEX patch files.&lt;br /&gt;
* -dehout &amp;amp;lt;filename&amp;amp;gt; : Enables verbose DeHackEd parser logging.&lt;br /&gt;
&lt;br /&gt;
==EDF==&lt;br /&gt;
* -edf &amp;amp;lt;filename&amp;amp;gt; : Specifies the root EDF file.&lt;br /&gt;
* -edfenables : Causes all gamemode&#039;s definitions to be enabled. For compatibility with older projects.&lt;br /&gt;
* -edfout : Enables verbose EDF logging to edfout##.txt&lt;br /&gt;
&lt;br /&gt;
==Gameplay==&lt;br /&gt;
* -dog : Enables a single MBF helper dog.&lt;br /&gt;
* -dogs &amp;amp;lt;n&amp;amp;gt; : Enables from one to three MBF helper dogs, depending on the number specified.&lt;br /&gt;
* -episode &amp;amp;lt;n&amp;amp;gt; : Start a new game on episode n. For DOOM and Heretic only.&lt;br /&gt;
* -fast : Enables Nightmare-mode monster speed in any difficulty.&lt;br /&gt;
* -nomonsters : Removes all monsters except Lost Souls from all levels.&lt;br /&gt;
* -respawn : Enables Nightmare-mode monster respawning in any difficulty.&lt;br /&gt;
* -skill &amp;amp;lt;n&amp;amp;gt; : Sets skill to level 1 through 5.&lt;br /&gt;
* -solo-net : Starts the game as single-player cooperative &#039;&#039;&#039;(SVN revision 1071+)&#039;&#039;&#039;&lt;br /&gt;
* -spechit &amp;amp;lt;n&amp;amp;gt; : Sets spechit emulation magic number to n. Spechit emulation must be enabled separately.&lt;br /&gt;
* -turbo &amp;amp;lt;n&amp;amp;gt; : Sets player turbo factor to n.&lt;br /&gt;
* -warp &amp;amp;lt;x&amp;amp;gt; &amp;amp;lt;y&amp;amp;gt; : Warps to level x in DOOM 2, or ExMy for DOOM or Heretic.&lt;br /&gt;
* -wart : Alias for -warp.&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
* -affinity &amp;amp;lt;num&amp;amp;gt; : Enables processor affinity mask to stop SDL_mixer crashes on multicore processors. Expert setting only.&lt;br /&gt;
* -blockmap : Enables MBF blockmap builder for all levels.&lt;br /&gt;
* -cdrom : Game is running from a cd-rom. Data is written to C:\DOOMDATA. Does not work in Linux.&lt;br /&gt;
* -grabmouse : Enables mouse input grabbing.&lt;br /&gt;
* -nograbmouse : Disables mouse input grabbing.&lt;br /&gt;
* -numparticles &amp;amp;lt;n&amp;amp;gt; : Sets the static particle limit to n.&lt;br /&gt;
* -speed &amp;amp;lt;n&amp;amp;gt; : Sets game speed to n% of normal speed. Range is 10 to 1000.&lt;br /&gt;
* -statcopy : Does nothing. Enabled external statistics driver in Vanilla Doom.&lt;br /&gt;
&lt;br /&gt;
==Multiplayer==&lt;br /&gt;
* -altdeath : Enables Deathmatch 2.0 (items respawn, weapons stay).&lt;br /&gt;
* -avg : Austin Virtual Gaming. Deathmatch levels end after 20 minutes.&lt;br /&gt;
* -deathmatch : Enables original Deathmatch mode.&lt;br /&gt;
* -dmflags &amp;amp;lt;n&amp;amp;gt; : Sets the dmflags variable to value n.&lt;br /&gt;
* -dup&lt;br /&gt;
* -extratic&lt;br /&gt;
* -frags &amp;amp;lt;n&amp;amp;gt; : Sets fraglimit for Deathmatch. Levels end when the fraglimit is reached.&lt;br /&gt;
* -net&lt;br /&gt;
* -timer &amp;amp;lt;n&amp;amp;gt; : Sets timelimit for Deathmatch to n minutes.&lt;br /&gt;
* -trideath : Enables SMMU Deathmatch 3.0 (barrels respawn, players drop backpacks [currently broken]).&lt;br /&gt;
&lt;br /&gt;
==Savegames==&lt;br /&gt;
* -loadgame &amp;amp;lt;n&amp;amp;gt; : Loads the savegame in slot n (0-7).&lt;br /&gt;
* -save &amp;amp;lt;path&amp;amp;gt; : Sets the directory from/to which savegames are loaded and saved.&lt;br /&gt;
&lt;br /&gt;
==Sound engine==&lt;br /&gt;
* -nomusic : Disables the music engine.&lt;br /&gt;
* -nosfx : Disables the digital sound engine.&lt;br /&gt;
* -nosound : Disables sound and music.&lt;br /&gt;
&lt;br /&gt;
==Video==&lt;br /&gt;
* -8in32 : Runs Eternity in a 32-bit video mode and crossblits the 8-bit framebuffer to the screen. Circumvents some SDL palette issues, but is slower.&lt;br /&gt;
* -directx : Windows only. Selects the DirectX 5.0 SDL video driver.&lt;br /&gt;
* -frame : Creates a main window with a frame (this is on by default for windowed modes and off for fullscreen).&lt;br /&gt;
* -fullscreen : Toggles fullscreen mode.&lt;br /&gt;
* -gdi : Windows only. Selects the Win32 GDI SDL video driver.&lt;br /&gt;
* -geom &amp;amp;lt;geomstring&amp;amp;gt; : Sets the video mode using a [[Geom string]].&lt;br /&gt;
* -noblit : Disables blitting for benchmark testing. &lt;br /&gt;
* -nodraw : Disables all screen drawing.&lt;br /&gt;
* -noframe : Opposite of -frame, creates a frameless window, if possible on the current platform.&lt;br /&gt;
* -nofullscreen : Alias for -window.&lt;br /&gt;
* -novsync : Disables waiting for vsync.&lt;br /&gt;
* -vheight &amp;amp;lt;n&amp;amp;gt; : Sets screen height to n; current limits are 200 to 1600.&lt;br /&gt;
* -vsync : Enables waiting for vsync.&lt;br /&gt;
* -vwidth &amp;amp;lt;n&amp;amp;gt; : Sets screen width to n; current limits are 320 to 2560.&lt;br /&gt;
* -window : Toggles windowed mode.&lt;br /&gt;
&lt;br /&gt;
==Wads and other files==&lt;br /&gt;
* -base &amp;amp;lt;path&amp;amp;gt; : Sets the base path to the indicated path. The path must be a directory, not a file.&lt;br /&gt;
* -config &amp;amp;lt;filename&amp;amp;gt; : Game will use the given configuration file.&lt;br /&gt;
* -file &amp;amp;lt;filename&amp;amp;gt; ... : Loads one or more WAD or lump files. Lump file names must be 8 characters or less with .lmp extension added.&lt;br /&gt;
* -game &amp;amp;lt;name&amp;amp;gt; : Causes Eternity to use the named game folder under its current base path.&lt;br /&gt;
* -gfs &amp;amp;lt;filename&amp;amp;gt; : Loads the given GFS script. GFS scripts may load WADs, DEH/BEX files, EDF, and console scripts.&lt;br /&gt;
* -iwad &amp;amp;lt;filename&amp;amp;gt; : Specifies the given WAD file as the IWAD.&lt;br /&gt;
* -noload : Disables autoloaded WADs and DEH/BEX patches during this play session only.&lt;br /&gt;
* -nowadhacks : Disables automatic application of wad directory hacks to known broken WAD files, such as Gothic DM 2.&lt;br /&gt;
* -showhashes : Enables display of WAD header/directory SHA-1 hashes on the system console.&lt;br /&gt;
&lt;br /&gt;
==Demos==&lt;br /&gt;
* -donut &amp;amp;lt;height&amp;amp;gt; &amp;amp;lt;pic&amp;amp;gt; : Enables donut overflow emulation using the specified parameters.&lt;br /&gt;
* -fastdemo &amp;amp;lt;filename&amp;amp;gt; : Plays the given demo as fast as possible.&lt;br /&gt;
* -longtics : Enables v1.91 longtics demo recording when used with -vanilla.&lt;br /&gt;
* -maxdemo &amp;amp;lt;n&amp;amp;gt; : Sets the initial size of the demo recording buffer. This is no longer a hard limit, and the buffer will expand if the given limit is exceeded.&lt;br /&gt;
* -play : Alias for -playdemo.&lt;br /&gt;
* -playdemo &amp;amp;lt;filename&amp;amp;gt; : Plays the given demo.&lt;br /&gt;
* -record &amp;amp;lt;filename&amp;amp;gt; : Records this play session as a demo named &amp;quot;filename&amp;quot;.&lt;br /&gt;
* -recorddemo : Alias for -record.&lt;br /&gt;
* -recordfrom &lt;br /&gt;
* -spechit &amp;amp;lt;number&amp;amp;gt; : Enables spechits overflow emulation with the given magic number.&lt;br /&gt;
* -timedemo &amp;amp;lt;filename&amp;amp;gt; : Plays the given demo normally and reports FPS information at exit.&lt;br /&gt;
* -vanilla : Enables recording of v1.9-compatible demo files.&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=List_of_command_line_parameters&amp;diff=2561</id>
		<title>List of command line parameters</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=List_of_command_line_parameters&amp;diff=2561"/>
		<updated>2011-05-06T18:17:54Z</updated>

		<summary type="html">&lt;p&gt;Quasar: /* Wads and other files */ New wad-related command-line parameters added in 3.40.10&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of all &#039;&#039;&#039;command line parameters&#039;&#039;&#039; that are supported by the Eternity Engine, along with detail about their functions. Most of the options available through the command line are also settable with the [[Eternity Frontend]].&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;See also: [[Doom_Wiki:Command line arguments|Command line arguments]] on the [[Doom Wiki]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Console==&lt;br /&gt;
* -exec &amp;amp;lt;filename&amp;amp;gt; : Executes the indicated file as a console script at game startup.&lt;br /&gt;
* -nocscload : Disables autoloaded console scripts for this play session only.&lt;br /&gt;
&lt;br /&gt;
==Debugging==&lt;br /&gt;
* -devparm : Enables FPS ticker and screenshots with F1 key (id development mode)&lt;br /&gt;
&lt;br /&gt;
==DeHackEd/BEX==&lt;br /&gt;
* -bex &amp;amp;lt;filename&amp;amp;gt; ... : Alias for -deh.&lt;br /&gt;
* -bexout &amp;amp;lt;filename&amp;amp;gt; : Alias for -dehout.&lt;br /&gt;
* -deh &amp;amp;lt;filename&amp;amp;gt; ... : Loads one or more DeHackEd/BEX patch files.&lt;br /&gt;
* -dehout &amp;amp;lt;filename&amp;amp;gt; : Enables verbose DeHackEd parser logging.&lt;br /&gt;
&lt;br /&gt;
==EDF==&lt;br /&gt;
* -edf &amp;amp;lt;filename&amp;amp;gt; : Specifies the root EDF file.&lt;br /&gt;
* -edfenables : Causes all gamemode&#039;s definitions to be enabled. For compatibility with older projects.&lt;br /&gt;
* -edfout : Enables verbose EDF logging to edfout##.txt&lt;br /&gt;
&lt;br /&gt;
==Gameplay==&lt;br /&gt;
* -dog : Enables a single MBF helper dog.&lt;br /&gt;
* -dogs &amp;amp;lt;n&amp;amp;gt; : Enables from one to three MBF helper dogs, depending on the number specified.&lt;br /&gt;
* -episode &amp;amp;lt;n&amp;amp;gt; : Start a new game on episode n. For DOOM and Heretic only.&lt;br /&gt;
* -fast : Enables Nightmare-mode monster speed in any difficulty.&lt;br /&gt;
* -nomonsters : Removes all monsters except Lost Souls from all levels.&lt;br /&gt;
* -respawn : Enables Nightmare-mode monster respawning in any difficulty.&lt;br /&gt;
* -skill &amp;amp;lt;n&amp;amp;gt; : Sets skill to level 1 through 5.&lt;br /&gt;
* -solo-net : Starts the game as single-player cooperative &#039;&#039;&#039;(SVN revision 1071+)&#039;&#039;&#039;&lt;br /&gt;
* -spechit &amp;amp;lt;n&amp;amp;gt; : Sets spechit emulation magic number to n. Spechit emulation must be enabled separately.&lt;br /&gt;
* -turbo &amp;amp;lt;n&amp;amp;gt; : Sets player turbo factor to n.&lt;br /&gt;
* -warp &amp;amp;lt;x&amp;amp;gt; &amp;amp;lt;y&amp;amp;gt; : Warps to level x in DOOM 2, or ExMy for DOOM or Heretic.&lt;br /&gt;
* -wart : Alias for -warp.&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
* -affinity &amp;amp;lt;num&amp;amp;gt; : Enables processor affinity mask to stop SDL_mixer crashes on multicore processors. Expert setting only.&lt;br /&gt;
* -blockmap : Enables MBF blockmap builder for all levels.&lt;br /&gt;
* -cdrom : Game is running from a cd-rom. Data is written to C:\DOOMDATA. Does not work in Linux.&lt;br /&gt;
* -grabmouse : Enables mouse input grabbing.&lt;br /&gt;
* -nograbmouse : Disables mouse input grabbing.&lt;br /&gt;
* -numparticles &amp;amp;lt;n&amp;amp;gt; : Sets the static particle limit to n.&lt;br /&gt;
* -speed &amp;amp;lt;n&amp;amp;gt; : Sets game speed to n% of normal speed. Range is 10 to 1000.&lt;br /&gt;
* -statcopy : Does nothing. Enabled external statistics driver in Vanilla Doom.&lt;br /&gt;
&lt;br /&gt;
==Multiplayer==&lt;br /&gt;
* -altdeath : Enables Deathmatch 2.0 (items respawn, weapons stay).&lt;br /&gt;
* -avg : Austin Virtual Gaming. Deathmatch levels end after 20 minutes.&lt;br /&gt;
* -deathmatch : Enables original Deathmatch mode.&lt;br /&gt;
* -dmflags &amp;amp;lt;n&amp;amp;gt; : Sets the dmflags variable to value n.&lt;br /&gt;
* -dup&lt;br /&gt;
* -extratic&lt;br /&gt;
* -frags &amp;amp;lt;n&amp;amp;gt; : Sets fraglimit for Deathmatch. Levels end when the fraglimit is reached.&lt;br /&gt;
* -net&lt;br /&gt;
* -timer &amp;amp;lt;n&amp;amp;gt; : Sets timelimit for Deathmatch to n minutes.&lt;br /&gt;
* -trideath : Enables SMMU Deathmatch 3.0 (barrels respawn, players drop backpacks [currently broken]).&lt;br /&gt;
&lt;br /&gt;
==Savegames==&lt;br /&gt;
* -loadgame &amp;amp;lt;n&amp;amp;gt; : Loads the savegame in slot n (0-7).&lt;br /&gt;
* -save &amp;amp;lt;path&amp;amp;gt; : Sets the directory from/to which savegames are loaded and saved.&lt;br /&gt;
&lt;br /&gt;
==Sound engine==&lt;br /&gt;
* -nomusic : Disables the music engine.&lt;br /&gt;
* -nosfx : Disables the digital sound engine.&lt;br /&gt;
* -nosound : Disables sound and music.&lt;br /&gt;
&lt;br /&gt;
==Video==&lt;br /&gt;
* -8in32 : Runs Eternity in a 32-bit video mode and crossblits the 8-bit framebuffer to the screen. Circumvents some SDL palette issues, but is slower.&lt;br /&gt;
* -directx : Windows only. Selects the DirectX 5.0 SDL video driver.&lt;br /&gt;
* -frame : Creates a main window with a frame (this is on by default for windowed modes and off for fullscreen).&lt;br /&gt;
* -fullscreen : Toggles fullscreen mode.&lt;br /&gt;
* -gdi : Windows only. Selects the Win32 GDI SDL video driver.&lt;br /&gt;
* -geom &amp;amp;lt;geomstring&amp;amp;gt; : Sets the video mode using a [[Geom string]].&lt;br /&gt;
* -noblit : Disables blitting for benchmark testing. &lt;br /&gt;
* -nodraw : Disables all screen drawing.&lt;br /&gt;
* -noframe : Opposite of -frame, creates a frameless window, if possible on the current platform.&lt;br /&gt;
* -nofullscreen : Alias for -window.&lt;br /&gt;
* -novsync : Disables waiting for vsync.&lt;br /&gt;
* -vheight &amp;amp;lt;n&amp;amp;gt; : Sets screen height to n; current limits are 200 to 1600.&lt;br /&gt;
* -vsync : Enables waiting for vsync.&lt;br /&gt;
* -vwidth &amp;amp;lt;n&amp;amp;gt; : Sets screen width to n; current limits are 320 to 2560.&lt;br /&gt;
* -window : Toggles windowed mode.&lt;br /&gt;
&lt;br /&gt;
==Wads and other files==&lt;br /&gt;
* -base &amp;amp;lt;path&amp;amp;gt; : Sets the base path to the indicated path. The path must be a directory, not a file.&lt;br /&gt;
* -config &amp;amp;lt;filename&amp;amp;gt; : Game will use the given configuration file.&lt;br /&gt;
* -file &amp;amp;lt;filename&amp;amp;gt; ... : Loads one or more WAD or lump files. Lump file names must be 8 characters or less with .lmp extension added.&lt;br /&gt;
* -game &amp;amp;lt;name&amp;amp;gt; : Causes Eternity to use the named game folder under its current base path.&lt;br /&gt;
* -gfs &amp;amp;lt;filename&amp;amp;gt; : Loads the given GFS script. GFS scripts may load WADs, DEH/BEX files, EDF, and console scripts.&lt;br /&gt;
* -iwad &amp;amp;lt;filename&amp;amp;gt; : Specifies the given WAD file as the IWAD.&lt;br /&gt;
* -noload : Disables autoloaded WADs and DEH/BEX patches during this play session only.&lt;br /&gt;
* -nowadhacks : Disables automatic application of wad directory hacks to known broken WAD files, such as Gothic DM 2.&lt;br /&gt;
* -showhashes : Enables display of WAD header/directory SHA-1 hashes on the system console.&lt;br /&gt;
&lt;br /&gt;
==Demos==&lt;br /&gt;
* -donut &amp;amp;lt;height&amp;amp;gt; &amp;amp;lt;pic&amp;amp;gt; : Enables donut overflow emulation using the specified parameters.&lt;br /&gt;
* -fastdemo &amp;amp;lt;filename&amp;amp;gt; : Plays the given demo as fast as possible.&lt;br /&gt;
* -longtics : Enables v1.91 longtics demo recording when used with -vanilla.&lt;br /&gt;
* -maxdemo &amp;amp;lt;n&amp;amp;gt; : Sets the initial size of the demo recording buffer. This is no longer a hard limit, and the buffer will expand if the given limit is exceeded.&lt;br /&gt;
* -playdemo &amp;amp;lt;filename&amp;amp;gt; : Plays the given demo.&lt;br /&gt;
* -record &amp;amp;lt;filename&amp;amp;gt; : Records this play session as a demo named &amp;quot;filename&amp;quot;.&lt;br /&gt;
* -recordfrom &lt;br /&gt;
* -spechit &amp;amp;lt;number&amp;amp;gt; : Enables spechits overflow emulation with the given magic number.&lt;br /&gt;
* -timedemo &amp;amp;lt;filename&amp;amp;gt; : Plays the given demo normally and reports FPS information at exit.&lt;br /&gt;
* -vanilla : Enables recording of v1.9-compatible demo files.&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=User_talk:Mithran_Denizen&amp;diff=2560</id>
		<title>User talk:Mithran Denizen</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=User_talk:Mithran_Denizen&amp;diff=2560"/>
		<updated>2011-05-06T18:09:39Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Hi&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Thanks for registering, and welcome to the wiki. --[[User:Quasar|Quasar]] 18:09, 6 May 2011 (UTC)&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=ExtraData&amp;diff=2559</id>
		<title>ExtraData</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=ExtraData&amp;diff=2559"/>
		<updated>2011-05-06T18:08:16Z</updated>

		<summary type="html">&lt;p&gt;Quasar: /* extflags */ Added BLOCKALL linedef extflag&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ExtraData is a new data specification language for the [[Eternity Engine]] that allows arbitrary extension of mapthings, lines, and sectors with any number of new fields, with data provided in more or less any format. The use of a textual input language forever removes any future problems caused by binary format limitations. The ExtraData parser is based on the libConfuse configuration file parser library by Martin Hedenfalk, which is also used by GFS and EDF. &lt;br /&gt;
&lt;br /&gt;
Each section in this document deals with one of the ExtraData constructs, as well as how to embed ExtraData in a WAD and how to associate it with a given map. &lt;br /&gt;
&lt;br /&gt;
ExtraData will continue to be supported in future versions of Eternity, even though it will soon be superceded by support for the [[Universal Doom Map Format]].&lt;br /&gt;
&lt;br /&gt;
=General Syntax=&lt;br /&gt;
&#039;&#039;See [[EDF#Syntax|EDF Syntax]], as it is the same.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Embedding and Associating ExtraData =&lt;br /&gt;
&lt;br /&gt;
ExtraData is embedded directly as a text script into a lump of any name. This can be done with any number of wad file management tools, such as SLumpEd, SLADE 3, or XWE. &lt;br /&gt;
&lt;br /&gt;
An ExtraData script is associated with a map via use of the [[MapInfo]] variable &#039;&#039;&#039;extradata&#039;&#039;&#039;. A map can only have one ExtraData script, but it is possible for multiple maps to share the same script. &lt;br /&gt;
&lt;br /&gt;
Example of ExtraData specification via EMAPINFO: &lt;br /&gt;
   [MAP01]&lt;br /&gt;
   extradata = EDLUMP01&lt;br /&gt;
&lt;br /&gt;
=Mapthings =&lt;br /&gt;
&lt;br /&gt;
Mapthings define monsters, lamps, control points, items, etc -- anything that is spawned on the map at level start. &lt;br /&gt;
&lt;br /&gt;
Each field in the mapthing definition, with the exception of the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field, is optional. If a field is not provided, it takes on the default value indicated below the syntax information. Fields may also be provided in any order. &lt;br /&gt;
&lt;br /&gt;
Note that the order of mapthing definitions in ExtraData is not important. The &#039;&#039;&#039;recordnum&#039;&#039;&#039; field serves to identify mapthing records. &lt;br /&gt;
&lt;br /&gt;
==Creating ExtraData Control Objects ==&lt;br /&gt;
&lt;br /&gt;
Mapthing records in ExtraData are only associated with a special control object that must be placed on the map in the usual manner. &lt;br /&gt;
&lt;br /&gt;
The ExtraData control object has a &#039;&#039;&#039;doomednum&#039;&#039;&#039; of 5004. Each control object specifies its corresponding ExtraData mapthing record number as an integer value in its mapthing &#039;&#039;&#039;options&#039;&#039;&#039; field. If your editor does not allow entering arbitrary values into the options field of mapthings, you will need to use the BOOM command-line editor, CLED. As of the initial writing time of this document, both DETH and Doom Builder support entering arbitrary integer values for the options field. Check your editor&#039;s documentation or user interface to verify if it supports this. &lt;br /&gt;
&lt;br /&gt;
The x, y, and angle fields of the ExtraData control object are passed on to the thing which will be spawned at the control point&#039;s location, so those fields of the control object should be set normally. The true type and options fields of the thing to be spawned, along with any extended fields, are specified in the ExtraData record. &lt;br /&gt;
&lt;br /&gt;
Any number of ExtraData control objects can reference the same ExtraData record. In the event that a control object references a non-existent ExtraData record, the ExtraData script for a level is missing, or the thing type referenced by an ExtraData record isn&#039;t valid, an [[Unknown]] thing will be spawned at the control point&#039;s location.  Note that you cannot spawn ExtraData control objects using ExtraData. Attempting this will also result in an Unknown thing. &lt;br /&gt;
&lt;br /&gt;
==Mapthing Syntax and Fields ==&lt;br /&gt;
&lt;br /&gt;
The syntax of the ExtraData mapthing record is as follows. Remember that all fields except the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field are optional and can be specified in any order. &lt;br /&gt;
 mapthing&lt;br /&gt;
 {&lt;br /&gt;
   recordnum &amp;lt;unique number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are normal mapthing fields&lt;br /&gt;
   type      &amp;lt;doomednum&amp;gt; OR &amp;lt;EDF thingtype mnemonic&amp;gt;&lt;br /&gt;
   options   &amp;lt;options flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are ExtraData extensions&lt;br /&gt;
   tid       &amp;lt;number&amp;gt;&lt;br /&gt;
   args      { &amp;lt;special field&amp;gt;, ... }&lt;br /&gt;
   height    &amp;lt;number&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields:=== &lt;br /&gt;
====recordnum====&lt;br /&gt;
The recordnum serves to identify this record, and is the number which ExtraData control objects must use to associate themselves with a mapthing record. Every ExtraData mapthing record must have a unique record number. If a duplicate record number is detected, the engine will currently exit with an error message. The record number is limited to values between 0 and 65535 inclusive. Some editors may only allow input of numbers up to 32767 in the mapthing options field, or may treat values above 32767 as negative numbers. Beware of this. &lt;br /&gt;
&lt;br /&gt;
====type====&lt;br /&gt;
Default: No meaningful default value; an Unknown thing will be spawned if not valid.&lt;br /&gt;
&lt;br /&gt;
This field specifies the type of object to spawn at the location and angle of ExtraData control objects using this record. This field can accept one of two types of values. The first is a normal thingtype doomednum as specified via [[EDF]] and used by all editors. For example, the DOOM Imp&#039;s doomednum is 3001. &lt;br /&gt;
&lt;br /&gt;
This field can also accept EDF thingtype mnemonics. EDF thingtype mnemonics must be prefixed with &#039;&#039;thing:&#039;&#039; -- this allows the parser to know it is dealing with a string instead of a number. EDF thingtypes must have a unique doomednum to be specified in an ExtraData mapthing record. If the specified EDF thingtype doesn&#039;t exist or has a doomednum of -1, an Unknown object will be spawned instead. &lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
    mapthing { type 3001 }          // This record specifies an Imp via its doomednum&lt;br /&gt;
    &lt;br /&gt;
    mapthing { type DoomImp } // This record specifies an Imp by its EDF mnemonic&lt;br /&gt;
    &lt;br /&gt;
====options====&lt;br /&gt;
Default: No flags are set by default. &lt;br /&gt;
&lt;br /&gt;
This field specifies the options (also known as mapthing flags). This field uses the same syntax as BEX/EDF flag strings, but the syntax will be reviewed here for completeness. &lt;br /&gt;
&lt;br /&gt;
A BEX flag list is a string of flag names separated by whitespace, pipe characters, commas, or plus characters. In ExtraData, if a flag list contains whitespace, commas, or plus signs, it must be enclosed in double or single quotations. Flags are combined using bitwise-OR logic, so a flag name can be specified more than once. Specifying a flag name causes that flag to be turned on. The default state of all flags is off. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
    Flag name   Meaning&lt;br /&gt;
    ------------------------------------------------------------------------------&lt;br /&gt;
    EASY        Thing appears in easy difficulties&lt;br /&gt;
    NORMAL      Thing appears in &amp;quot;Hurt Me Plenty&amp;quot;&lt;br /&gt;
    HARD        Thing appears in Ultra-Violence and Nightmare&lt;br /&gt;
    AMBUSH      Thing is &amp;quot;deaf&amp;quot;, will not wake up via sound&lt;br /&gt;
    NOTSINGLE   Thing doesn&#039;t appear in single-player mode&lt;br /&gt;
    NOTDM       Thing doesn&#039;t appear in deathmatch&lt;br /&gt;
    NOTCOOP     Thing doesn&#039;t appear in cooperative multiplayer&lt;br /&gt;
    FRIEND      Thing uses MBF friendly logic&lt;br /&gt;
    DORMANT     Thing is dormant at map startup (script feature)&lt;br /&gt;
    ------------------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
The mapthing options value 256 (0x0100) is reserved. If this bit is set, all BOOM, MBF, and Eternity extended mapthing bits will be cleared. This is to guard against editors like Hellmaker which set all bits they do not understand, instead of leaving them zero. &lt;br /&gt;
&lt;br /&gt;
Example options fields -- All of these are equivalent: &lt;br /&gt;
    // This is the only syntax that does not require quotations.&lt;br /&gt;
    &lt;br /&gt;
    mapthing { options EASY|NORMAL|HARD }&lt;br /&gt;
    &lt;br /&gt;
    // All of these syntaxes must be quoted, because unquoted strings in &lt;br /&gt;
    // ExtraData cannot contain spaces, commas, or plus signs.&lt;br /&gt;
    &lt;br /&gt;
    mapthing { options &amp;quot;EASY NORMAL HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY | NORMAL | HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY+NORMAL+HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY + NORMAL + HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY,NORMAL,HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY, NORMAL, HARD&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
====tid====&lt;br /&gt;
Default: 0 &lt;br /&gt;
&lt;br /&gt;
The TID, or &amp;quot;Thing ID&amp;quot;, is a tag for mapthings which is used for identification in [[Small]] scripts. TID values must be positive numbers between 1 and 65535. The TID value zero means no TID. Negative TID values are reserved and are used to indicate special things within the engine. TIDs are not required to be unique, and most Small functions that accept TIDs will perform an action on all mapthings which bear the same TID. Things spawned within Small scripts can also be given TIDs. &lt;br /&gt;
&lt;br /&gt;
====args====&lt;br /&gt;
Default: All args values default to zero. &lt;br /&gt;
&lt;br /&gt;
The args field is a list of up to five special values which can have a broad range of meanings. Any values not provided in the args list will default, and if more than five values are provided, only the first five will be used. Currently, all args values are interpreted as integers (a non-number string evaluates to zero). This may change in the future. &lt;br /&gt;
&lt;br /&gt;
Example args list: &lt;br /&gt;
    mapthing { args { 0, 1, 2, 3, 4 } }&lt;br /&gt;
    &lt;br /&gt;
====height====&lt;br /&gt;
Default: 0 &lt;br /&gt;
&lt;br /&gt;
For normal objects, this field indicates a distance above the floor that the thing will spawn at level start. For objects with the SPAWNCEILING flag, this field indicates a distance below the ceiling instead. This field will have no effect on objects which spawn at a randomized height.&lt;br /&gt;
&lt;br /&gt;
=Linedefs =&lt;br /&gt;
&lt;br /&gt;
Linedefs define walls, two-sided textures, and provide action triggers within maps. &lt;br /&gt;
&lt;br /&gt;
Each field in the linedef definition, with the exception of the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field, is optional. If a field is not provided, it takes on the default value indicated below the syntax information. Fields may also be provided in any order. &lt;br /&gt;
&lt;br /&gt;
Note that the order of linedef definitions in ExtraData is not important. The &#039;&#039;&#039;recordnum&#039;&#039;&#039; field serves to identify linedef records. &lt;br /&gt;
&lt;br /&gt;
==Creating ExtraData Linedefs ==&lt;br /&gt;
&lt;br /&gt;
Linedef records in ExtraData are associated either with lines which bear the ExtraData Control Line Special (270), or with any linedef in a DOOM-format map which uses a parameterized line special. You can place the 270 special, as well as parameterized special numbers, into the normal &amp;quot;special&amp;quot; field of a line using virtually any map editor. Editors with Eternity-specific configurations should support these specials natively.&lt;br /&gt;
&lt;br /&gt;
Each control linedef (or directly-used parameterized special) specifies its corresponding ExtraData linedef record number as an integer value in its linedef tag field. If your editor does not allow entering arbitrary values up to 32767 into the tag field of linedefs, you will need to use the BOOM command-line editor, CLED. As of the initial writing time of this document, both DETH and Doom Builder support entering arbitrary integer values for the tag field. Check your editor&#039;s documentation or user interface to verify if it supports this. &lt;br /&gt;
&lt;br /&gt;
The flags, sidedefs, textures, and location of the ExtraData control linedef are used normally by the line and cannot be altered from within ExtraData. The true special (if 270 is used) and tag fields of the linedef, along with any extended fields, are specified in the ExtraData record which the control linedef references. &lt;br /&gt;
&lt;br /&gt;
Any number of linedefs can reference the same ExtraData record. In the event that a control linedef references a non-existent ExtraData record or the ExtraData script for a level is missing, the special and tag of the ExtraData control linedef will both be set to zero. &lt;br /&gt;
&lt;br /&gt;
==Linedef Syntax and Fields ==&lt;br /&gt;
&lt;br /&gt;
The syntax of the ExtraData linedef record is as follows. Remember that all fields except the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field are optional and can be specified in any order. &lt;br /&gt;
 linedef&lt;br /&gt;
 {&lt;br /&gt;
   recordnum &amp;lt;unique number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are normal linedef fields&lt;br /&gt;
   special &amp;lt;number&amp;gt; OR &amp;lt;special name&amp;gt;&lt;br /&gt;
   tag &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are ExtraData extensions&lt;br /&gt;
   extflags &amp;lt;extended line flags list&amp;gt;&lt;br /&gt;
   args { &amp;lt;special field&amp;gt;, ... }&lt;br /&gt;
   alpha &amp;lt;number&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields: ===&lt;br /&gt;
====recordnum====&lt;br /&gt;
The recordnum serves to identify this record, and is the number which ExtraData control linedefs must use to associate themselves with a linedef record. Every ExtraData linedef record must have a unique record number. If a duplicate record number is detected, the engine will currently exit with an error message. The record number is limited to values between 0 and 32767 inclusive. Some editors may only allow input of numbers up to 255 in the linedef tag field. Beware of this. &lt;br /&gt;
&lt;br /&gt;
====special====&lt;br /&gt;
:&#039;&#039;Default: 0 &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The special field determines what [[Linedef_types|type of action]] may be taken when a line is crossed, used, shot, etc. There are three types of linedef specials in Eternity: normal, generalized, and parameterized. Parameterized specials use the &#039;&#039;&#039;args&#039;&#039;&#039; field documented below to provide complete customization of line actions. &lt;br /&gt;
&lt;br /&gt;
This field can accept numbers for any special type, including generalized and parameterized, but it can also accept special names for parameterized line types. See the [[Detailed parameterized linedef specification]] for a complete list of the available names.&lt;br /&gt;
&lt;br /&gt;
====tag====&lt;br /&gt;
:&#039;&#039;Default: 0 &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The tag of the linedef, used by DOOM-style line specials and sector effects.&lt;br /&gt;
&lt;br /&gt;
====extflags====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This field specifies extended linedef flag values which impact the functionality of parameterized linedef specials. This field uses the same syntax as BEX/EDF flag strings, but the syntax will be reviewed here for completeness. &lt;br /&gt;
&lt;br /&gt;
A BEX flag list is a string of flag names separated by whitespace, pipe characters, commas, or plus characters. In ExtraData, if a flag list contains whitespace, commas, or plus signs, it must be enclosed in double or single quotations. Flags are combined using bitwise-OR logic, so a flag name can be specified more than once. Specifying a flag name causes that flag to be turned on. The default state of all flags is off. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
    Flag name   Meaning&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    CROSS       Linedef can be activated by being crossed.&lt;br /&gt;
    USE         Linedef can be activated by being used.&lt;br /&gt;
    IMPACT      Linedef can be activated by being shot.&lt;br /&gt;
    PUSH        Linedef can be activated by being pushed.&lt;br /&gt;
    PLAYER      Linedef can be activated by players.&lt;br /&gt;
    MONSTER     Linedef can be activated by objects with SPACMONSTER flag.&lt;br /&gt;
    MISSILE     Linedef can be activated by objects with SPACMISSILE flag.&lt;br /&gt;
    REPEAT      Linedef action is repeatable.&lt;br /&gt;
    1SONLY      Linedef can only be activated from first side.&lt;br /&gt;
    ADDITIVE    Linedef&#039;s midtexture is drawn with additive blending.&lt;br /&gt;
    BLOCKALL    Linedef will block everything that can be clipped.&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
Notes: IMPACT is currently only implemented for bullet weapons. The ability to use IMPACT with MISSILE will be added in the near future. The PUSH style of activation is not implemented at all yet, so this flag currently does nothing. &lt;br /&gt;
&lt;br /&gt;
Example flags fields -- All of these are equivalent: &lt;br /&gt;
    // This is the only syntax that does not require quotations.&lt;br /&gt;
    &lt;br /&gt;
    linedef { extflags CROSS|PLAYER|MISSILE|REPEAT }&lt;br /&gt;
    &lt;br /&gt;
    // All of these syntaxes must be quoted, because unquoted strings in &lt;br /&gt;
    // ExtraData cannot contain spaces, commas, or plus signs.&lt;br /&gt;
    &lt;br /&gt;
    linedef { extflags &amp;quot;CROSS PLAYER MISSILE REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS | PLAYER | MISSILE | REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS+PLAYER+MISSILE+REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS + PLAYER + MISSILE + REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS,PLAYER,MISSILE,REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS, PLAYER, MISSILE, REPEAT&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
====args====&lt;br /&gt;
:&#039;&#039;Default: All args values default to zero. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The args field is a list of up to five special values which can have a broad range of meanings. Any values not provided in the args list will default, and if more than five values are provided, only the first five will be used. Currently, all args values are interpreted as integers (a non-number string evaluates to zero). This may change in the future. The args list is used by parameterized linedef specials. &lt;br /&gt;
&lt;br /&gt;
Example args list: &lt;br /&gt;
    linedef { args { 0, 1, 2, 3, 4 } }&lt;br /&gt;
&lt;br /&gt;
====alpha====&lt;br /&gt;
:&amp;quot;Default: Alpha defaults to 1.0.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The alpha field takes a value from 0.0 to 1.0 to set the opacity at which this linedef&#039;s midtexture is drawn. When combined with the ADDITIVE extflag, this can be used for additive-blended translucency as well.&lt;br /&gt;
&lt;br /&gt;
=Sectors=&lt;br /&gt;
&lt;br /&gt;
Sectors define distinct areas of the map that are bordered by linedefs, with floor and ceiling properties, lighting data, and specials. &lt;br /&gt;
&lt;br /&gt;
Each field in the sector definition, with the exception of the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field, is optional. If a field is not provided, it takes on the default value indicated below the syntax information. Fields may also be provided in any order. &lt;br /&gt;
&lt;br /&gt;
Note that the order of sector definitions in ExtraData is not important. The &#039;&#039;&#039;recordnum&#039;&#039;&#039; field serves to identify sector records. &lt;br /&gt;
&lt;br /&gt;
==Creating ExtraData Sectors==&lt;br /&gt;
&lt;br /&gt;
Sector records in ExtraData are associated with lines which bear the ExtraData Sector Control Special (401). The linedef&#039;s front side sector is the map sector that will receive properties from the ExtraData record which is specified by number in the linedef&#039;s tag.&lt;br /&gt;
&lt;br /&gt;
Since ExtraData is attached to sectors via linedefs and not through overriding any of the sectors&#039; native fields, you specify all of the normal data for a sector in the map itself, and overriding that data through ExtraData sector records is not supported.&lt;br /&gt;
&lt;br /&gt;
Any number of linedefs can reference the same ExtraData sector record. In the event that a control linedef references a non-existent ExtraData record or the ExtraData script for a level is missing, the tag of the ExtraData sector control linedef will be set to zero and will otherwise be ignored.&lt;br /&gt;
&lt;br /&gt;
==Sector Syntax and Fields ==&lt;br /&gt;
&lt;br /&gt;
The syntax of the ExtraData sector record is as follows. Remember that all fields except the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field are optional and can be specified in any order. &lt;br /&gt;
 sector&lt;br /&gt;
 {&lt;br /&gt;
   recordnum &amp;lt;unique number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are ExtraData extensions to sector data&lt;br /&gt;
   flags &amp;lt;sector flag list&amp;gt;&lt;br /&gt;
   flags.add &amp;lt;sector flag list&amp;gt;&lt;br /&gt;
   flags.remove &amp;lt;sector flag list&amp;gt;&lt;br /&gt;
   damage &amp;lt;integer&amp;gt;&lt;br /&gt;
   damagemask &amp;lt;integer&amp;gt;&lt;br /&gt;
   damagemod &amp;lt;method of damage type&amp;gt;&lt;br /&gt;
   damageflags &amp;lt;sector damage flags list&amp;gt;&lt;br /&gt;
   damageflags.add &amp;lt;sector damage flags list&amp;gt;&lt;br /&gt;
   damageflags.remove &amp;lt;sector damage flags list&amp;gt;&lt;br /&gt;
   floorterrain &amp;lt;terrain name&amp;gt;&lt;br /&gt;
   floorangle &amp;lt;float&amp;gt;  &lt;br /&gt;
   flooroffsetx &amp;lt;float&amp;gt;&lt;br /&gt;
   flooroffsety &amp;lt;float&amp;gt;&lt;br /&gt;
   ceilingterrain &amp;lt;terrain name&amp;gt;&lt;br /&gt;
   ceilingangle &amp;lt;float&amp;gt;&lt;br /&gt;
   ceilingoffsetx &amp;lt;float&amp;gt;&lt;br /&gt;
   ceilingoffsety &amp;lt;float&amp;gt;&lt;br /&gt;
   colormaptop &amp;lt;lump name&amp;gt;&lt;br /&gt;
   colormapmid &amp;lt;lump name&amp;gt;&lt;br /&gt;
   colormapbottom &amp;lt;lump name&amp;gt;&lt;br /&gt;
   portalflags.floor &amp;lt;portal flags list&amp;gt;&lt;br /&gt;
   portalflags.ceiling &amp;lt;portal flags list&amp;gt;&lt;br /&gt;
   overlayalpha.floor &amp;lt;percentage or value from 0 to 255&amp;gt;&lt;br /&gt;
   overlayalpha.ceiling &amp;lt;percentage or value from 0 to 255&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields: ===&lt;br /&gt;
====recordnum====&lt;br /&gt;
The recordnum serves to identify this record, and is the number which ExtraData sector control linedefs must use to associate themselves with a sector record. Every ExtraData sector record must have a unique record number. If a duplicate record number is detected, the engine will currently exit with an error message. The record number is limited to values between 0 and 32767 inclusive. Some editors may only allow input of numbers up to 255 in the linedef tag field. Beware of this. &lt;br /&gt;
&lt;br /&gt;
====flags====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This field specifies sector flag values which specify various properties of sectors. This field uses the same syntax as BEX/EDF flag strings. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
&lt;br /&gt;
    Flag name     Meaning&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    SECRET        Sector is secret&lt;br /&gt;
    FRICTION      Sector has friction enabled, if targeted by a BOOM friction transfer line&lt;br /&gt;
    PUSH          Sector has BOOM push effects enabled&lt;br /&gt;
    KILLSOUND     Objects in sector cannot make sounds.&lt;br /&gt;
    KILLMOVESOUND Sector makes no movement sounds, even if it has a special sound sequence&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
Example flags fields -- All of these are equivalent: &lt;br /&gt;
    // This is the only syntax that does not require quotations.&lt;br /&gt;
    &lt;br /&gt;
    sector { flags SECRET|FRICTION|KILLMOVESOUND }&lt;br /&gt;
    &lt;br /&gt;
    // All of these syntaxes must be quoted, because unquoted strings in &lt;br /&gt;
    // ExtraData cannot contain spaces, commas, or plus signs.&lt;br /&gt;
    &lt;br /&gt;
    sector { flags &amp;quot;SECRET FRICTION KILLMOVESOUND&amp;quot; }&lt;br /&gt;
    sector { flags &amp;quot;SECRET | FRICTION | KILLMOVESOUND&amp;quot; }&lt;br /&gt;
    sector { flags &amp;quot;SECRET+FRICTION+KILLMOVESOUND&amp;quot; }&lt;br /&gt;
    sector { flags &amp;quot;SECRET + FRICTION + KILLMOVESOUND&amp;quot; }&lt;br /&gt;
    sector { flags &amp;quot;SECRET,FRICTION,KILLMOVESOUND&amp;quot; }&lt;br /&gt;
    sector { flags &amp;quot;SECRET, FRICTION, KILLMOVESOUND&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
====flags.add====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is a list of sector flags to add to the sector. This is supported because some sector specials (such as sector special 9, &amp;quot;Secret&amp;quot;) imply that certain sector flags will be set on the sector before ExtraData is applied. If you wish to only add flags and not override any that may have been set by sector specials, use this field to specify only the flags that you wish to be added to the sector.&lt;br /&gt;
&lt;br /&gt;
====flags.remove====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is a list of sector flags to remove from the sector. If you wish to only remove flags and not override any that may have been set by sector specials, use this field to specify only the flags that you wish to be removed from the sector.&lt;br /&gt;
&lt;br /&gt;
====damage====&lt;br /&gt;
:&#039;&#039;Default: 0&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the amount of damage this sector does to players if the players are standing inside the sector and do not meet any special exemption criteria, such as wearing a Radiation Suit. This amount is done at each damage opportunity, which is determined by the &#039;&#039;&#039;damagemask&#039;&#039;&#039; field.&lt;br /&gt;
&lt;br /&gt;
====damagemask====&lt;br /&gt;
:&#039;&#039;Default: 0&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the interval in gametics between damage opportunities for a player standing in this sector. The default value of 0 will cause the sector to do constant and instantaneous damage every gametic. Setting this value to an integer greater than 0 will cause damage to be done every Nth gametic, with N being the value of this field. The default DOOM nukage types all use a damagemask of 32, which is roughly once per in-game second (there are 35 gametics per second).&lt;br /&gt;
&lt;br /&gt;
====damagemod====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;Unknown&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the type of damage done by this sector. If &amp;quot;Unknown&amp;quot; is specified, the damage done is generic. The value specified should be a valid EDF damagetype mnemonic. If it is not, &amp;quot;Unknown&amp;quot; will be used. This can be used to have a sector type trigger special pain and death states when it deals damage.&lt;br /&gt;
&lt;br /&gt;
====damageflags====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This field specifies sector damage flag values which affect the manner in which a sector does damage. This field uses the same syntax as BEX/EDF flag strings. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
&lt;br /&gt;
    Flag name     Meaning&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    LEAKYSUIT     The player may take damage at random even if he has the radsuit powerup&lt;br /&gt;
    IGNORESUIT    Radiation suit powerups are ignored entirely&lt;br /&gt;
    ENDGODMODE    God mode will be disabled when the player enters this sector&lt;br /&gt;
    EXITLEVEL     The player will exit if has &amp;lt; 11 health and this sector tries to do damage&lt;br /&gt;
    TERRAINHIT    A TerrainTypes hit will occur when this sector does damage&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
====damageflags.add====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because some sector types imply the activation of various sector damageflags (for example, DOOM sector type 11 sets sector damageflags ENDGODMODE and EXITLEVEL), this field is supported to add additional damageflags to any that may have been set by the  map itself. Simply specify whatever flags you wish to have added to those that are already set.&lt;br /&gt;
&lt;br /&gt;
====damageflags.remove====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
As with damageflags.add, it may be desirable to turn off some flags that were set by sector specials or other portions of the map data. Use this field to specify any sector damage flags you want to remove from sectors.&lt;br /&gt;
&lt;br /&gt;
====floorterrain====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;@flat&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies an EDF TerrainTypes mnemonic for the type of terrain this sector should exhibit on its floor. If left to default or specified with an invalid name, the terrain of the sector will be determined by its floorpic as usual.&lt;br /&gt;
&lt;br /&gt;
====floorangle====&lt;br /&gt;
:&#039;&#039;Default: 0 (East, or upper edge to the north)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the angle of the floor flat in floating-point degrees from 0 to 359. Note that for compatibility with ZDoom, the angle specified advances in a &#039;&#039;&#039;clockwise&#039;&#039;&#039; fashion, contrary to most other angles in the DOOM engine.&lt;br /&gt;
&lt;br /&gt;
====flooroffsetx/flooroffsety====&lt;br /&gt;
:&#039;&#039;Default: 0&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the x and y offsets of the floor flat, relative to the normal floor grid, in floating point units.&lt;br /&gt;
&lt;br /&gt;
====ceilingterrain====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;@flat&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies an EDF TerrainTypes mnemonic for the type of terrain this sector should exhibit on its ceiling. If left to default or specified with an invalid name, the terrain of the sector will be determined by its floorpic as usual. This currently only affects the behavior of bullet puffs when particles are enabled.&lt;br /&gt;
&lt;br /&gt;
====ceilingangle====&lt;br /&gt;
:&#039;&#039;Default: 0 (East, or upper edge to the north)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the angle of the ceiling flat in floating-point degrees from 0 to 359. Note that for compatibility with ZDoom, the angle specified advances in a &#039;&#039;&#039;clockwise&#039;&#039;&#039; fashion, contrary to most other angles in the DOOM engine.&lt;br /&gt;
&lt;br /&gt;
====flooroffsetx/flooroffsety====&lt;br /&gt;
:&#039;&#039;Default: 0&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the x and y offsets of the ceiling flat, relative to the normal ceiling grid, in floating point units.&lt;br /&gt;
&lt;br /&gt;
====colormaptop====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;@default&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the colormap lump to use when a player&#039;s viewpoint is above the fake ceiling of a BOOM 242 &amp;quot;deep water&amp;quot; effect applying to this sector. If left to default, the global colormap from MapInfo will be used as normal, unless one is specified by the 242 effect.&lt;br /&gt;
&lt;br /&gt;
====colormapmid====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;@default&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the colormap lump to use when a player&#039;s viewpoint is between the normal floor and ceiling for an ordinary sector, or between the fake floor and ceiling for a BOOM 242 &amp;quot;deep water&amp;quot; sector. If left to default, the global colormap from MapInfo will be used as normal, unless one is specified by a 242 effect.&lt;br /&gt;
&lt;br /&gt;
====colormapbottom====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;@default&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the colormap lump to use when a player&#039;s viewpoint is below the fake floor of a BOOM 242 &amp;quot;deep water&amp;quot; effect applying to this sector. If left to default, the global colormap from MapInfo will be used as normal, unless one is specified by the 242 effect.&lt;br /&gt;
&lt;br /&gt;
====portalflags====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These two fields (portalflags.floor and portalflags.ceiling) specify portal property flag values which affect the rendering and behavior of portals attached to this sector&#039;s surfaces. These fields use the same syntax as BEX/EDF flag strings. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
&lt;br /&gt;
    Flag name     Meaning&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    DISABLED      Portal is completely disabled&lt;br /&gt;
    NORENDER      Portal will not be rendered, but may still be interactive&lt;br /&gt;
    NOPASS        Objects cannot pass through the portal even if it is a linked portal&lt;br /&gt;
    BLOCKSOUND    Sound will not traverse through a linked portal&lt;br /&gt;
    OVERLAY       The portal will render the sector&#039;s flat as a blended overlay&lt;br /&gt;
    ADDITIVE      If OVERLAY is also specified, the overlay will use additive blending&lt;br /&gt;
    USEGLOBALTEX  Reserved for future per-portal texture specification&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
====overlayalpha====&lt;br /&gt;
:&#039;&#039;Default&#039;&#039;: 100%&lt;br /&gt;
&lt;br /&gt;
These two fields (overlayalpha.floor and overlayalpha.ceiling) specify the opacity of the corresponding portal overlay, if any exists. You can specify either a percentage value from 0% to 100%, or a plain integer number from 0 to 255. 100%/255 are completely solid, while 0% is invisible.&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=User_talk:46.33.241.237&amp;diff=2550</id>
		<title>User talk:46.33.241.237</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=User_talk:46.33.241.237&amp;diff=2550"/>
		<updated>2011-05-04T04:44:20Z</updated>

		<summary type="html">&lt;p&gt;Quasar: /* Blocked for two weeks */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Frames ==&lt;br /&gt;
I appreciate your initiative in trying to help out, but in editing pages, please make sure that you are not reverting updates. The information which you removed from the Frames article was correct and up-to-date, and I have restored it. Also, when others revert your edits, please do not edit-war. Instead open a discussion on the article&#039;s Talk page. --[[User:Quasar|Quasar]] 00:22, 22 March 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Blocked for two weeks ==&lt;br /&gt;
&lt;br /&gt;
You have been blocked for two weeks since you failed to accept my advice and destructively reversed my revisions to the Frame article. --[[User:Quasar|Quasar]] 04:44, 4 May 2011 (UTC)&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_state_reference&amp;diff=2535</id>
		<title>EDF state reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_state_reference&amp;diff=2535"/>
		<updated>2011-03-22T00:49:46Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Restored some beneficial portions of the previous edit and made a few of my own.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Frame EDF block allows definition of each individual actor frame in Eternity, independent from the thing types. Frames are commonly referred to by name in the [[thingtype]] definitions. Their data structure resembles the Dehacked &amp;quot;Frame&amp;quot; block, but is expanded upon, and uses different keywords.&lt;br /&gt;
=Syntax=&lt;br /&gt;
==Expanded form==&lt;br /&gt;
The following is the expanded, uncompressed frame definition. It is seldom needed to be specified this way in Eternity, unless [[delta structures]] are employed, which use these keywords. Instead, the compressed frame definitions are preferred.&lt;br /&gt;
&lt;br /&gt;
Any field may be omitted, resulting in Eternity assigning them default values.&lt;br /&gt;
 frame &amp;lt;unique mnemonic&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   sprite         &amp;lt;four-letter name&amp;gt;&lt;br /&gt;
   spriteframe    &amp;lt;one-letter index, or number&amp;gt;&lt;br /&gt;
   fullbright     &amp;lt;true/false or yes/no or on/off&amp;gt;&lt;br /&gt;
   tics           &amp;lt;integer number&amp;gt;&lt;br /&gt;
   action         &amp;lt;[[List of codepointers|codepointer]] name&amp;gt; [(arg, ...)]&lt;br /&gt;
   nextframe      &amp;lt;frame mnemonic or &#039;@&#039; keyword&amp;gt;&lt;br /&gt;
   misc1          &amp;lt;numeric or identifier data&amp;gt;&lt;br /&gt;
   misc2          &amp;lt;numeric or identifier data&amp;gt;&lt;br /&gt;
   particle_event &amp;lt;particle event identifier&amp;gt;&lt;br /&gt;
   args           { &amp;lt;argument value&amp;gt;, ... }&lt;br /&gt;
   dehackednum    &amp;lt;integer unique number&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
==Compressed form==&lt;br /&gt;
This form allows frames to be conveniently written on one line without becoming difficult to read.&lt;br /&gt;
 frame &amp;lt;unique mnemonic&amp;gt; {cmp &amp;quot;sprite|frame|bright|tics|action(arg, ...)|nextframe|p_event|misc1|misc2&amp;quot;}&lt;br /&gt;
Defaulted fields &#039;&#039;which are in the middle&#039;&#039; may &#039;&#039;&#039;not&#039;&#039;&#039; be simply omitted, they must use the &#039;&#039;&#039;*&#039;&#039;&#039; character in their place. Trailing fields may be omitted.&lt;br /&gt;
&lt;br /&gt;
Previous versions of Eternity supported specification of args at the end of the cmp frame, but this is now deprecated. Any arguments placed in a compressed frame definition should be put inside parentheses immediately after the action.&lt;br /&gt;
&lt;br /&gt;
Note that dehackednum is not supported inside the &#039;&#039;&#039;cmp&#039;&#039;&#039; field, but unless Dehacked patch support is intended, it&#039;s not required.&lt;br /&gt;
&lt;br /&gt;
===Examples===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;These frames do not exist in the original game and are only referenced for example purposes&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 frame killerimp_fire6 {cmp &amp;quot;KILL|6|*|6|[[MissileAttack]](killerfire,homing,8,5,killerimp_claw)|@next&amp;quot;}&lt;br /&gt;
In this case, the frame will use sprite KILL, frame number 6 from a 0-based index (which is G, which could have as well been written in the &#039;&#039;&#039;cmp&#039;&#039;&#039; definition), non-fullbright (default being F, specified in this case with a defaulting &#039;&#039;&#039;*&#039;&#039;&#039;), taking 6 tics, and calling a parameterized MissileAttack, then going to the next frame defined in the file, whichever that may be. All the subsequent fields are left at their null defaults.&lt;br /&gt;
 frame monster_thinkdecide {cmp &amp;quot;MONS|D|*|0|[[RandomJump]]|monster_withdraw|*|monster_engage|100&amp;quot;}&lt;br /&gt;
Here, the frame takes 0 tics, as it uses a frame-scripting action (see the &#039;&#039;&#039;tics&#039;&#039;&#039; description), the next frame is explicitly named (so this definition can be placed anywhere in the file), and the &#039;&#039;&#039;misc1&#039;&#039;&#039;, &#039;&#039;&#039;misc2&#039;&#039;&#039; parameters of RandomJump are specified individually - see below.&lt;br /&gt;
==Fields==&lt;br /&gt;
*&#039;&#039;&#039;sprite&#039;&#039;&#039;&lt;br /&gt;
:Default: BLANK&lt;br /&gt;
:Specifies the four-letter part of the sprite lump to be used by the calling actor, or the special word BLANK, which results in not drawing anything. If the name contains special characters or spaces, it has to be enclosed in quotation marks. Make sure to write the sprite name exactly as the four-letter lump stem, because it&#039;s case sensitive.&lt;br /&gt;
*&#039;&#039;&#039;spriteframe&#039;&#039;&#039;&lt;br /&gt;
:Default: 0&lt;br /&gt;
:Specifies the sprite frame letter or 0-based index. For example, C is equivalent to 2, A to 0 and so on. In Doom-engine games the sprite lump is named of a four letter stem (specified by the &#039;&#039;&#039;sprite&#039;&#039;&#039; field) followed by one or two pairs of a letter (specified by &#039;&#039;&#039;spriteframe&#039;&#039;&#039;) and a rotation number. In-game the sprite will be viewed normally when the actor gets the first letter from the name, at the designated rotation, or viewed flipped when it gets the second letter, also at the designated rotation. Possible rotations are numbered from 0 to 8. 0 means that the lump name will be used no matter how the actor is oriented against the viewport, while 1-8 mean face-to-face rotated progressively by 45 degrees. There may be more lumps for the same letter (such as Zombieman&#039;s POSSA1, POSSA2A8 etc.) and single lumps servicing two letters (SPIDA1D1, SPIDB1E1...)&lt;br /&gt;
*&#039;&#039;&#039;fullbright&#039;&#039;&#039;&lt;br /&gt;
:Default: false&lt;br /&gt;
:If true, the sprite will always be seen full bright in the map, even in pitch darkness. Technically the brightness is achieved by using [[colormap]] 0 over the sprite, which in normal games is an identity function.&lt;br /&gt;
*&#039;&#039;&#039;tics&#039;&#039;&#039;&lt;br /&gt;
:Default: 1&lt;br /&gt;
:Specifies how many gametics (units of 1/35 second each) this frame lasts. In frame loops, at least one of the frames has to take longer than 0 tics, otherwise the game will hang. For certain types of frames, whose purpose includes scripting and random or controlled frame jumping, this value is usually set to 0, because the engine jumps to target frames instantly if a condition is met, regardless of &#039;&#039;&#039;tics&#039;&#039;&#039;. For static, non-animated things, as well as all non-disintegrating corpses, the &#039;&#039;&#039;tics&#039;&#039;&#039; value is usually -1 (forever), and is required to be this way if the corpse in question is supposed to be resurrectable by a monster with [[VileChase]] walking frames.&lt;br /&gt;
*&#039;&#039;&#039;action&#039;&#039;&#039;&lt;br /&gt;
:Default: NULL&lt;br /&gt;
:Specifies the action [[List of codepointers|pointer]] that this frame will call when accessed by the actor. Action functions which use the &#039;&#039;&#039;args&#039;&#039;&#039; field otherwise, can also be implemented by including the arguments in parantheses on the same line as the &#039;&#039;&#039;action&#039;&#039;&#039; field, removing the need for the &#039;&#039;&#039;args&#039;&#039;&#039; property. Note that &#039;&#039;&#039;misc1&#039;&#039;&#039;, &#039;&#039;&#039;misc2&#039;&#039;&#039; requiring actions are NOT subject to this and must be used separately with their fields. These include a few pointers which were inherited from [[MBF]], before the &#039;&#039;&#039;args&#039;&#039;&#039; field was introduced: [[Face]], [[Mushroom]], [[PlaySound]], [[RandomJump]], [[Spawn]] and [[Turn]].&lt;br /&gt;
*&#039;&#039;&#039;nextframe&#039;&#039;&#039;&lt;br /&gt;
:Default: S_NULL&lt;br /&gt;
:Specifies the frame to go to after the &#039;&#039;&#039;tics&#039;&#039;&#039; duration expires. It can be a frame mnemonic just like this frame&#039;s name, or one of these four keywords:&lt;br /&gt;
:*&#039;&#039;&#039;@next&#039;&#039;&#039; - go to the next frame in the EDF file.&lt;br /&gt;
:*&#039;&#039;&#039;@prev&#039;&#039;&#039; - go to the previous frame in the EDF file.&lt;br /&gt;
:*&#039;&#039;&#039;@this&#039;&#039;&#039; - loop to this same frame.&lt;br /&gt;
:*&#039;&#039;&#039;@null&#039;&#039;&#039; - go to the S_NULL frame. In effect, it removes the actor from the game.&lt;br /&gt;
*&#039;&#039;&#039;misc1&#039;&#039;&#039;&lt;br /&gt;
:Default: 0&lt;br /&gt;
:This is the first argument, used by certain [[list of codepointers|codepointers]] which were inherited from MBF, see their enumeration above.&lt;br /&gt;
*&#039;&#039;&#039;misc2&#039;&#039;&#039;&lt;br /&gt;
:Default: 0&lt;br /&gt;
:This is the second argument used by some MBF inherited codepointers.&lt;br /&gt;
*&#039;&#039;&#039;particle_event&#039;&#039;&#039;&lt;br /&gt;
:Default: pevt_none&lt;br /&gt;
:Specifies a special particle effect to occur when the actor enters this frame. Possible values are:&lt;br /&gt;
:*&#039;&#039;&#039;pevt_none&#039;&#039;&#039; - No effect. The default.&lt;br /&gt;
:*&#039;&#039;&#039;pevt_rexpl&#039;&#039;&#039; - Rocket explosion effect. Orange dots exploding in all directions from the thing&#039;s origin.&lt;br /&gt;
:*&#039;&#039;&#039;pevt_bfgexpl&#039;&#039;&#039; - BFG explosion effect. Same as rocket explosion, except green.&lt;br /&gt;
:For other particle effects, which continuously affect the actor, see the [[Thingtype]] definition.&lt;br /&gt;
*&#039;&#039;&#039;args&#039;&#039;&#039;&lt;br /&gt;
:Default: all arguments default to 0.&lt;br /&gt;
:This is a comma-separated list of codepointer arguments, in the form of numbers or identifiers. As of Eternity Engine v3.35.92, frames support any number of arguments, and argument evaluation is performed at runtime and is specific to each action function.&lt;br /&gt;
:For normal frame definitions, setting the arguments from the &#039;&#039;&#039;args&#039;&#039;&#039; field is no longer required. It is instead preferred to include them in the &#039;&#039;&#039;action&#039;&#039;&#039; property, inside parentheses, appended to the action name. &#039;&#039;&#039;args&#039;&#039;&#039; may still be useful for frame [[delta structures]], however.&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default: -1&lt;br /&gt;
:Specifies what number to be used if Dehacked patches are used to tweak the gameplay defined by an EDF code. Safe user values are greater than or equal to 10000.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Back to [[Editing reference]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=User_talk:46.33.241.237&amp;diff=2534</id>
		<title>User talk:46.33.241.237</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=User_talk:46.33.241.237&amp;diff=2534"/>
		<updated>2011-03-22T00:22:29Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Created page with &amp;#039;== Frames == I appreciate your initiative in trying to help out, but in editing pages, please make sure that you are not reverting updates. The information which you removed from…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Frames ==&lt;br /&gt;
I appreciate your initiative in trying to help out, but in editing pages, please make sure that you are not reverting updates. The information which you removed from the Frames article was correct and up-to-date, and I have restored it. Also, when others revert your edits, please do not edit-war. Instead open a discussion on the article&#039;s Talk page. --[[User:Quasar|Quasar]] 00:22, 22 March 2011 (UTC)&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_state_reference&amp;diff=2533</id>
		<title>EDF state reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_state_reference&amp;diff=2533"/>
		<updated>2011-03-22T00:19:29Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Undo revision 2530 by 46.33.241.237 (Talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Frame EDF block allows definition of each individual actor frame in Eternity, independent from the thing types. Frames are commonly referred to by name in the [[thingtype]] definitions. Their data structure resembles the Dehacked &amp;quot;Frame&amp;quot; block, but is expanded upon, and uses different keywords.&lt;br /&gt;
=Syntax=&lt;br /&gt;
==Expanded form==&lt;br /&gt;
The following is the expanded, uncompressed frame definition. It is seldom needed to be specified this way in Eternity, unless [[delta structures]] are employed, which use these keywords. Instead, the compressed frame definitions are preferred.&lt;br /&gt;
&lt;br /&gt;
Any field may be omitted, resulting in Eternity assigning them default values.&lt;br /&gt;
 frame &amp;lt;unique mnemonic&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   sprite         &amp;lt;four-letter name&amp;gt;&lt;br /&gt;
   spriteframe    &amp;lt;one-letter index, or number&amp;gt;&lt;br /&gt;
   fullbright     &amp;lt;true/false or yes/no or on/off&amp;gt;&lt;br /&gt;
   tics           &amp;lt;integer number&amp;gt;&lt;br /&gt;
   action         &amp;lt;[[List of codepointers|codepointer]] name&amp;gt; [(arg, ...)]&lt;br /&gt;
   nextframe      &amp;lt;frame mnemonic or &#039;@&#039; keyword&amp;gt;&lt;br /&gt;
   misc1          &amp;lt;numeric or identifier data&amp;gt;&lt;br /&gt;
   misc2          &amp;lt;numeric or identifier data&amp;gt;&lt;br /&gt;
   particle_event &amp;lt;particle event identifier&amp;gt;&lt;br /&gt;
   args           { &amp;lt;argument value&amp;gt;, ... }&lt;br /&gt;
   dehackednum    &amp;lt;integer unique number&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
==Compressed form==&lt;br /&gt;
This form allows frames to be conveniently written on one line without becoming difficult to read.&lt;br /&gt;
 frame &amp;lt;unique mnemonic&amp;gt; {cmp &amp;quot;sprite|frame|bright|tics|action(arg, ...)|nextframe|p_event|misc1|misc2&amp;quot;}&lt;br /&gt;
Defaulted fields &#039;&#039;which are in the middle&#039;&#039; may &#039;&#039;&#039;not&#039;&#039;&#039; be simply omitted, they must use the &#039;&#039;&#039;*&#039;&#039;&#039; character in their place. Trailing fields may be omitted.&lt;br /&gt;
&lt;br /&gt;
Previous versions of Eternity supported specification of args at the end of the cmp frame, but this is now deprecated. Any arguments placed in a compressed frame definition should be put inside parentheses immediately after the action.&lt;br /&gt;
&lt;br /&gt;
Note that dehackednum is not supported inside the &#039;&#039;&#039;cmp&#039;&#039;&#039; field, but unless Dehacked patch support is intended, it&#039;s not required.&lt;br /&gt;
&lt;br /&gt;
===Examples===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;These frames do not exist in the original game and are only referenced for example purposes&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 frame killerimp_fire6 {cmp &amp;quot;KILL|6|*|6|[[MissileAttack]](killerfire,homing,8,5,killerimp_claw)|@next&amp;quot;}&lt;br /&gt;
In this case, the frame will use sprite KILL, frame number 6 from a 0-based index (which is G, which could have as well been written in the &#039;&#039;&#039;cmp&#039;&#039;&#039; definition), non-fullbright (default being F, specified in this case with a defaulting &#039;&#039;&#039;*&#039;&#039;&#039;), taking 6 tics, and calling a parameterized MissileAttack, then going to the next frame defined in the file, whichever that may be. All the subsequent fields are left at their null defaults.&lt;br /&gt;
 frame monster_thinkdecide {cmp &amp;quot;MONS|D|*|0|[[RandomJump]]|monster_withdraw|*|monster_engage|100&amp;quot;}&lt;br /&gt;
Here, the frame takes 0 tics, as it uses a frame-scripting action (see the &#039;&#039;&#039;tics&#039;&#039;&#039; description), the next frame is explicitly named (so this definition can be placed anywhere in the file), and the &#039;&#039;&#039;misc1&#039;&#039;&#039;, &#039;&#039;&#039;misc2&#039;&#039;&#039; parameters of RandomJump are specified individually - see below.&lt;br /&gt;
==Fields==&lt;br /&gt;
*&#039;&#039;&#039;sprite&#039;&#039;&#039;&lt;br /&gt;
:Default: BLANK&lt;br /&gt;
:Specifies the four-letter part of the sprite lump to be used by the calling actor, or the special word BLANK, which results in not drawing anything. If the name contains special characters or spaces, it has to be enclosed in quotation marks. Make sure to write the sprite name exactly as the four-letter lump step, because it&#039;s case sensitive.&lt;br /&gt;
*&#039;&#039;&#039;spriteframe&#039;&#039;&#039;&lt;br /&gt;
:Default: 0&lt;br /&gt;
:Specifies the sprite frame letter or 0-based index. For example, C is equivalent to 2, A to 0 and so on. In Doom-engine games the sprite lump is named of a four letter stem (specified by the &#039;&#039;&#039;sprite&#039;&#039;&#039; field) followed by one or two pairs of letter (specified by &#039;&#039;&#039;spriteframe&#039;&#039;&#039;) and rotation number. In-game the sprite will be viewed normally when the actor gets the first letter from the name, at the designated rotation, or viewed flipped when it gets the second letter, also at the designated rotation. Possible rotations are numbered from 0 to 8. 0 means that the lump name will be used no matter how the actor is oriented against the viewport, while 1-8 mean face-to-face rotated progressively by 45 degrees. There may be more lumps for the same letter (such as Zombieman&#039;s POSSA1, POSSA2A8 etc.) and single lumps servicing two letters (SPIDA1D1, SPIDB1E1...)&lt;br /&gt;
*&#039;&#039;&#039;fullbright&#039;&#039;&#039;&lt;br /&gt;
:Default: false&lt;br /&gt;
:If true, the sprite will always be seen full bright in the map, even in pitch darkness. Technically the brightness is achieved by using [[colormap]] 0 over the sprite, which in normal games is an identity function.&lt;br /&gt;
*&#039;&#039;&#039;tics&#039;&#039;&#039;&lt;br /&gt;
:Default: 1&lt;br /&gt;
:Specifies how many gametics (units of 1/35 second each) this frame lasts. In frame loops, at least one of the frames has to take longer than 0 tics, otherwise the game will hang. For certain types of frames, whose purpose includes scripting and random or controlled frame jumping, this value is usually set to 0, because the engine jumps to target frames instantly if a condition is met, regardless of &#039;&#039;&#039;tics&#039;&#039;&#039;. For static, non-animated things, as well as all non-disintegrating corpses, the &#039;&#039;&#039;tics&#039;&#039;&#039; value is usually -1 (forever), and is required to be this way if the corpse in question is supposed to be resurrectable by a monster with [[VileChase]] walking frames.&lt;br /&gt;
*&#039;&#039;&#039;action&#039;&#039;&#039;&lt;br /&gt;
:Default: NULL&lt;br /&gt;
:Specifies the action [[List of codepointers|pointer]] that this frame will call when accessed by the actor. Action functions which use the &#039;&#039;&#039;args&#039;&#039;&#039; field otherwise, can also be implemented by including the arguments in parantheses on the same line as the &#039;&#039;&#039;action&#039;&#039;&#039; field, removing the need for the &#039;&#039;&#039;args&#039;&#039;&#039; property. Note that &#039;&#039;&#039;misc1&#039;&#039;&#039;, &#039;&#039;&#039;misc2&#039;&#039;&#039; requiring actions are NOT subject to this and must be used separately with their fields. These include a few pointers which were inherited from [[MBF]], before the &#039;&#039;&#039;args&#039;&#039;&#039; field was introduced: [[Face]], [[Mushroom]], [[PlaySound]], [[RandomJump]], [[Spawn]] and [[Turn]].&lt;br /&gt;
*&#039;&#039;&#039;nextframe&#039;&#039;&#039;&lt;br /&gt;
:Default: S_NULL&lt;br /&gt;
:Specifies the frame to go to after the &#039;&#039;&#039;tics&#039;&#039;&#039; duration expires. It can be a frame mnemonic just like this frame&#039;s name, or one of these four keywords:&lt;br /&gt;
:*&#039;&#039;&#039;@next&#039;&#039;&#039; - go to the next frame in the EDF file.&lt;br /&gt;
:*&#039;&#039;&#039;@prev&#039;&#039;&#039; - go to the previous frame in the EDF file.&lt;br /&gt;
:*&#039;&#039;&#039;@this&#039;&#039;&#039; - loop to this same frame.&lt;br /&gt;
:*&#039;&#039;&#039;@null&#039;&#039;&#039; - go to the S_NULL frame. In effect, it removes the actor from the game.&lt;br /&gt;
*&#039;&#039;&#039;misc1&#039;&#039;&#039;&lt;br /&gt;
:Default: 0&lt;br /&gt;
:This is the first argument, used by certain [[list of codepointers|codepointers]] which were inherited from MBF, see their list above.&lt;br /&gt;
*&#039;&#039;&#039;misc2&#039;&#039;&#039;&lt;br /&gt;
:Default: 0&lt;br /&gt;
:This is the second argument used by some MBF inherited codepointers.&lt;br /&gt;
*&#039;&#039;&#039;particle_event&#039;&#039;&#039;&lt;br /&gt;
:Default: pevt_none&lt;br /&gt;
:Specifies a special particle effect to occur when the actor enters this frame. Possible values are:&lt;br /&gt;
:*&#039;&#039;&#039;pevt_none&#039;&#039;&#039; - No effect. The default.&lt;br /&gt;
:*&#039;&#039;&#039;pevt_rexpl&#039;&#039;&#039; - Rocket explosion effect. Orange dots exploding in all directions from the thing&#039;s origin.&lt;br /&gt;
:*&#039;&#039;&#039;pevt_bfgexpl&#039;&#039;&#039; - BFG explosion effect. Same as rocket explosion, except green.&lt;br /&gt;
:For other particle effects, which continuously affect the actor, see the [[Thingtype]] definition.&lt;br /&gt;
*&#039;&#039;&#039;args&#039;&#039;&#039;&lt;br /&gt;
:Default: all arguments default to 0.&lt;br /&gt;
:This is a comma-separated list of codepointer arguments, in the form of numbers or identifiers. As of Eternity Engine v3.35.92, frames support any number of arguments, and argument evaluation is performed at runtime and is specific to each action function.&lt;br /&gt;
:For normal frame definitions, setting the arguments from the &#039;&#039;&#039;args&#039;&#039;&#039; field is no longer required, preferring to include them in the &#039;&#039;&#039;action&#039;&#039;&#039; property, inside parentheses, appended to the action name. &#039;&#039;&#039;args&#039;&#039;&#039; may still be useful for frame [[delta structures]], however.&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default: -1&lt;br /&gt;
:Specifies what number to be used if Dehacked patches are used to tweak the gameplay defined by an EDF code. Safe user values are greater than or equal to 10000.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Back to [[Editing reference]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_state_reference&amp;diff=2532</id>
		<title>EDF state reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_state_reference&amp;diff=2532"/>
		<updated>2011-03-22T00:17:21Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Reverted edits by Quasar (Talk) to last revision by 46.33.241.237&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Frame EDF block allows definition of each individual actor frame in Eternity, independent from the thing types. Frames are commonly referred to by name in the [[thingtype]] definitions. Their data structure resembles the Dehacked &amp;quot;Frame&amp;quot; block, but is expanded upon, and uses different keywords.&lt;br /&gt;
=Syntax=&lt;br /&gt;
==Expanded form==&lt;br /&gt;
The following is the expanded, uncompressed frame definition. It is seldom needed to be specified this way in Eternity, unless [[delta structures]] are employed, which use these keywords. Instead, the compressed frame definitions are preferred.&lt;br /&gt;
&lt;br /&gt;
Any field may be omitted, resulting in Eternity assigning them default values.&lt;br /&gt;
 frame &amp;lt;unique mnemonic&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   sprite         &amp;lt;four-letter name&amp;gt;&lt;br /&gt;
   spriteframe    &amp;lt;one-letter index, or number&amp;gt;&lt;br /&gt;
   fullbright     &amp;lt;true/false or yes/no or on/off&amp;gt;&lt;br /&gt;
   tics           &amp;lt;integer number&amp;gt;&lt;br /&gt;
   action         &amp;lt;[[List of codepointers|codepointer]] name&amp;gt;&lt;br /&gt;
   nextframe      &amp;lt;frame mnemonic or &#039;@&#039; keyword&amp;gt;&lt;br /&gt;
   misc1          &amp;lt;numeric or identifier data&amp;gt;&lt;br /&gt;
   misc2          &amp;lt;numeric or identifier data&amp;gt;&lt;br /&gt;
   particle_event &amp;lt;particle event identifier&amp;gt;&lt;br /&gt;
   args          {&amp;lt;data1&amp;gt;, &amp;lt;data2&amp;gt;, &amp;lt;data3&amp;gt;, &amp;lt;data4&amp;gt;, &amp;lt;data5&amp;gt;}&lt;br /&gt;
   dehackednum    &amp;lt;integer unique number&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
==Compressed form==&lt;br /&gt;
This form allows frames to be conveniently written on one line without becoming difficult to read.&lt;br /&gt;
 frame &amp;lt;unique mnemonic&amp;gt; {cmp &amp;quot;sprite|frame|bright|tics|action|nextframe|p_event|misc1|misc2|args1|args2|args3|args4|args5&amp;quot;}&lt;br /&gt;
Defaulted fields &#039;&#039;which are in the middle&#039;&#039; may &#039;&#039;&#039;not&#039;&#039;&#039; be simply omitted, they must use the &#039;&#039;&#039;*&#039;&#039;&#039; character in their place. Trailing fields may be omitted.&lt;br /&gt;
&lt;br /&gt;
Note that dehackednum is not supported inside the &#039;&#039;&#039;cmp&#039;&#039;&#039; field, but unless Dehacked patch support is intended, it&#039;s not required.&lt;br /&gt;
&lt;br /&gt;
===Examples===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;These frames do not exist in the original game and are only referenced for example purposes&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 frame killerimp_fire6 {cmp &amp;quot;KILL|6|*|6|[[MissileAttack]](killerfire,homing,8,5,killerimp_claw)|@next&amp;quot;}&lt;br /&gt;
In this case, the frame will use sprite KILL, frame number 6 from a 0-based index (which is G, which could have as well been written in the &#039;&#039;&#039;cmp&#039;&#039;&#039; definition), non-fullbright (default being F, specified in this case with a defaulting &#039;&#039;&#039;*&#039;&#039;&#039;), taking 6 tics, and calling a parameterized MissileAttack, then going to the next frame defined in the file, whichever that may be. All the subsequent fields are left at their null defaults.&lt;br /&gt;
 frame monster_thinkdecide {cmp &amp;quot;MONS|D|*|0|[[RandomJump]]|monster_withdraw|*|monster_engage|100&amp;quot;}&lt;br /&gt;
Here, the frame takes 0 tics, as it uses a frame-scripting action (see the &#039;&#039;&#039;tics&#039;&#039;&#039; description), the next frame is explicitly named (so this definition can be placed anywhere in the file), and the &#039;&#039;&#039;misc1&#039;&#039;&#039;, &#039;&#039;&#039;misc2&#039;&#039;&#039; parameters of RandomJump are specified individually - see below.&lt;br /&gt;
==Fields==&lt;br /&gt;
*&#039;&#039;&#039;sprite&#039;&#039;&#039;&lt;br /&gt;
:Default: BLANK&lt;br /&gt;
:Specifies the four-letter part of the sprite lump to be used by the calling actor, or the special word BLANK, which results in not drawing anything. If the name contains special characters or spaces, it has to be enclosed in quotation marks. Make sure to write the sprite name exactly as the lump name, because it&#039;s case sensitive.&lt;br /&gt;
*&#039;&#039;&#039;spriteframe&#039;&#039;&#039;&lt;br /&gt;
:Default: 0&lt;br /&gt;
:Specifies the sprite frame letter or 0-based index. For example, C is equivalent to 2, A to 0 and so on. In Doom-engine games the sprite lump is named of a four letter word (specified by the &#039;&#039;&#039;sprite&#039;&#039;&#039; field) followed by one or two pairs of letter (specified by &#039;&#039;&#039;spriteframe&#039;&#039;&#039;) and rotation number. In-game the sprite will be viewed normally when the actor gets the first letter from the name, at the designated rotation, or viewed flipped when it gets the second letter, also at the designated rotation. Possible rotations are numbered from 0 to 8. 0 means that the lump name will be used no matter how the actor is oriented against the viewport, while 1-8 mean face-to-face rotated progressively by 45 degrees. There may be more lumps for the same letter (such as Zombieman&#039;s POSSA1, POSSA2A8 etc.) and single lumps servicing two letters (SPIDA1D1, SPIDB1E1...)&lt;br /&gt;
*&#039;&#039;&#039;fullbright&#039;&#039;&#039;&lt;br /&gt;
:Default: false&lt;br /&gt;
:If true, the sprite will always be seen full bright in the map, even in pitch darkness. Technically the brightness is achieved by using [[colormap]] 0 over the sprite, which in normal games is an identity function.&lt;br /&gt;
*&#039;&#039;&#039;tics&#039;&#039;&#039;&lt;br /&gt;
:Default: 1&lt;br /&gt;
:Specifies how many tics (units of 1/35 second each) this frame lasts. In frame loops, at least one of the frames has to take longer than 0 tics, otherwise the game will hang. For certain types of frames, whose purpose includes scripting and random or controlled frame jumping, this value is usually set to 0, because the engine jumps to target frames instantly if a condition is met, regardless of &#039;&#039;&#039;tics&#039;&#039;&#039;. For static, non-animated things, as well as all non-disintegrating corpses, the &#039;&#039;&#039;tics&#039;&#039;&#039; value is usually -1, and is required to be this way if the corpse in question is supposed to be resurrectable by a monster with [[VileChase]] walking frames.&lt;br /&gt;
*&#039;&#039;&#039;action&#039;&#039;&#039;&lt;br /&gt;
:Default: NULL&lt;br /&gt;
:Specifies the action [[List of codepointers|pointer]] that this frame will call when accessed by the actor. Action functions which use the &#039;&#039;&#039;args&#039;&#039;&#039; field otherwise, can also be implemented by including the arguments in parantheses on the same line as the &#039;&#039;&#039;action&#039;&#039;&#039; field, removing the need for the &#039;&#039;&#039;args&#039;&#039;&#039; property. Note that &#039;&#039;&#039;misc1&#039;&#039;&#039;, &#039;&#039;&#039;misc2&#039;&#039;&#039; requiring actions are NOT subject to this and must be used separately with their fields. These include a few pointers which were inherited from [[MBF]], before the &#039;&#039;&#039;args&#039;&#039;&#039; field was introduced: [[Face]], [[Mushroom]], [[PlaySound]], [[RandomJump]], [[Spawn]] and [[Turn]].&lt;br /&gt;
*&#039;&#039;&#039;nextframe&#039;&#039;&#039;&lt;br /&gt;
:Default: S_NULL&lt;br /&gt;
:Specifies the frame to go to after the &#039;&#039;&#039;tics&#039;&#039;&#039; duration expires. It can be a frame mnemonic just like this frame&#039;s name, or one of these four keywords:&lt;br /&gt;
:*&#039;&#039;&#039;@next&#039;&#039;&#039; - go to the next frame in the EDF file.&lt;br /&gt;
:*&#039;&#039;&#039;@prev&#039;&#039;&#039; - go to the previous frame in the EDF file.&lt;br /&gt;
:*&#039;&#039;&#039;@this&#039;&#039;&#039; - loop to this same frame.&lt;br /&gt;
:*&#039;&#039;&#039;@null&#039;&#039;&#039; - go to the S_NULL frame. In effect, it removes the actor from the game.&lt;br /&gt;
*&#039;&#039;&#039;misc1&#039;&#039;&#039;&lt;br /&gt;
:Default: 0&lt;br /&gt;
:This is the first argument, used by certain [[list of codepointers|codepointers]] which were inherited from MBF, see their enumeration above.&lt;br /&gt;
*&#039;&#039;&#039;misc2&#039;&#039;&#039;&lt;br /&gt;
:Default: 0&lt;br /&gt;
:This is the second argument used by some MBF inherited codepointers.&lt;br /&gt;
*&#039;&#039;&#039;particle_event&#039;&#039;&#039;&lt;br /&gt;
:Default: pevt_none&lt;br /&gt;
:Specifies a special particle effect to occur when the actor enters this frame. Possible values are:&lt;br /&gt;
:*&#039;&#039;&#039;pevt_none&#039;&#039;&#039; - no effect. The default.&lt;br /&gt;
:*&#039;&#039;&#039;pevt_rexpl&#039;&#039;&#039; - rocket explosion effect. Yellow dots exploding in all directions from the thing&#039;s origin.&lt;br /&gt;
:*&#039;&#039;&#039;pevt_bfgexpl&#039;&#039;&#039; - similar to the rocket explosion, but using green dots.&lt;br /&gt;
:For other particle effects, which continuously affect the actor, see the [[Thingtype]] definition.&lt;br /&gt;
*&#039;&#039;&#039;args&#039;&#039;&#039;&lt;br /&gt;
:Default: {0,0,0,0,0}&lt;br /&gt;
:This is a list of codepointer arguments, in the form of numbers or identifiers. If the called codepointer uses fewer than 5 arguments, it is safe to write less than 5 in the EDF file. Any omitted argument will default to 0. They have to be separated by commas.&lt;br /&gt;
:For normal frame definitions, setting the arguments from the &#039;&#039;&#039;args&#039;&#039;&#039; field is no longer required, preferring to include them in the &#039;&#039;&#039;action&#039;&#039;&#039; property, inside parantheses, appending the pointer name. &#039;&#039;&#039;Args&#039;&#039;&#039; may still be useful for frame [[delta structures]].&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default: -1&lt;br /&gt;
:Specifies what number to be used if Dehacked patches are used to tweak the gameplay originally defined by an EDF code. Safe values are greater than or equal to 10000, others may be used by Eternity subsequent versions.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Back to [[Editing reference]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_state_reference&amp;diff=2531</id>
		<title>EDF state reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_state_reference&amp;diff=2531"/>
		<updated>2011-03-22T00:16:12Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Added back optional argument list after action. Why was this removed?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Frame EDF block allows definition of each individual actor frame in Eternity, independent from the thing types. Frames are commonly referred to by name in the [[thingtype]] definitions. Their data structure resembles the Dehacked &amp;quot;Frame&amp;quot; block, but is expanded upon, and uses different keywords.&lt;br /&gt;
=Syntax=&lt;br /&gt;
==Expanded form==&lt;br /&gt;
The following is the expanded, uncompressed frame definition. It is seldom needed to be specified this way in Eternity, unless [[delta structures]] are employed, which use these keywords. Instead, the compressed frame definitions are preferred.&lt;br /&gt;
&lt;br /&gt;
Any field may be omitted, resulting in Eternity assigning them default values.&lt;br /&gt;
 frame &amp;lt;unique mnemonic&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   sprite         &amp;lt;four-letter name&amp;gt;&lt;br /&gt;
   spriteframe    &amp;lt;one-letter index, or number&amp;gt;&lt;br /&gt;
   fullbright     &amp;lt;true/false or yes/no or on/off&amp;gt;&lt;br /&gt;
   tics           &amp;lt;integer number&amp;gt;&lt;br /&gt;
   action         &amp;lt;[[List of codepointers|codepointer]] name&amp;gt; &amp;amp;lt;(&#039;&#039;optional arg list&#039;&#039;)&amp;amp;gt;&lt;br /&gt;
   nextframe      &amp;lt;frame mnemonic or &#039;@&#039; keyword&amp;gt;&lt;br /&gt;
   misc1          &amp;lt;numeric or identifier data&amp;gt;&lt;br /&gt;
   misc2          &amp;lt;numeric or identifier data&amp;gt;&lt;br /&gt;
   particle_event &amp;lt;particle event identifier&amp;gt;&lt;br /&gt;
   args          {&amp;lt;data1&amp;gt;, &amp;lt;data2&amp;gt;, &amp;lt;data3&amp;gt;, &amp;lt;data4&amp;gt;, &amp;lt;data5&amp;gt;}&lt;br /&gt;
   dehackednum    &amp;lt;integer unique number&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
==Compressed form==&lt;br /&gt;
This form allows frames to be conveniently written on one line without becoming difficult to read.&lt;br /&gt;
 frame &amp;lt;unique mnemonic&amp;gt; {cmp &amp;quot;sprite|frame|bright|tics|action|nextframe|p_event|misc1|misc2|args1|args2|args3|args4|args5&amp;quot;}&lt;br /&gt;
Defaulted fields &#039;&#039;which are in the middle&#039;&#039; may &#039;&#039;&#039;not&#039;&#039;&#039; be simply omitted, they must use the &#039;&#039;&#039;*&#039;&#039;&#039; character in their place. Trailing fields may be omitted.&lt;br /&gt;
&lt;br /&gt;
Note that dehackednum is not supported inside the &#039;&#039;&#039;cmp&#039;&#039;&#039; field, but unless Dehacked patch support is intended, it&#039;s not required.&lt;br /&gt;
&lt;br /&gt;
===Examples===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;These frames do not exist in the original game and are only referenced for example purposes&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 frame killerimp_fire6 {cmp &amp;quot;KILL|6|*|6|[[MissileAttack]](killerfire,homing,8,5,killerimp_claw)|@next&amp;quot;}&lt;br /&gt;
In this case, the frame will use sprite KILL, frame number 6 from a 0-based index (which is G, which could have as well been written in the &#039;&#039;&#039;cmp&#039;&#039;&#039; definition), non-fullbright (default being F, specified in this case with a defaulting &#039;&#039;&#039;*&#039;&#039;&#039;), taking 6 tics, and calling a parameterized MissileAttack, then going to the next frame defined in the file, whichever that may be. All the subsequent fields are left at their null defaults.&lt;br /&gt;
 frame monster_thinkdecide {cmp &amp;quot;MONS|D|*|0|[[RandomJump]]|monster_withdraw|*|monster_engage|100&amp;quot;}&lt;br /&gt;
Here, the frame takes 0 tics, as it uses a frame-scripting action (see the &#039;&#039;&#039;tics&#039;&#039;&#039; description), the next frame is explicitly named (so this definition can be placed anywhere in the file), and the &#039;&#039;&#039;misc1&#039;&#039;&#039;, &#039;&#039;&#039;misc2&#039;&#039;&#039; parameters of RandomJump are specified individually - see below.&lt;br /&gt;
==Fields==&lt;br /&gt;
*&#039;&#039;&#039;sprite&#039;&#039;&#039;&lt;br /&gt;
:Default: BLANK&lt;br /&gt;
:Specifies the four-letter part of the sprite lump to be used by the calling actor, or the special word BLANK, which results in not drawing anything. If the name contains special characters or spaces, it has to be enclosed in quotation marks. Make sure to write the sprite name exactly as the lump name, because it&#039;s case sensitive.&lt;br /&gt;
*&#039;&#039;&#039;spriteframe&#039;&#039;&#039;&lt;br /&gt;
:Default: 0&lt;br /&gt;
:Specifies the sprite frame letter or 0-based index. For example, C is equivalent to 2, A to 0 and so on. In Doom-engine games the sprite lump is named of a four letter word (specified by the &#039;&#039;&#039;sprite&#039;&#039;&#039; field) followed by one or two pairs of letter (specified by &#039;&#039;&#039;spriteframe&#039;&#039;&#039;) and rotation number. In-game the sprite will be viewed normally when the actor gets the first letter from the name, at the designated rotation, or viewed flipped when it gets the second letter, also at the designated rotation. Possible rotations are numbered from 0 to 8. 0 means that the lump name will be used no matter how the actor is oriented against the viewport, while 1-8 mean face-to-face rotated progressively by 45 degrees. There may be more lumps for the same letter (such as Zombieman&#039;s POSSA1, POSSA2A8 etc.) and single lumps servicing two letters (SPIDA1D1, SPIDB1E1...)&lt;br /&gt;
*&#039;&#039;&#039;fullbright&#039;&#039;&#039;&lt;br /&gt;
:Default: false&lt;br /&gt;
:If true, the sprite will always be seen full bright in the map, even in pitch darkness. Technically the brightness is achieved by using [[colormap]] 0 over the sprite, which in normal games is an identity function.&lt;br /&gt;
*&#039;&#039;&#039;tics&#039;&#039;&#039;&lt;br /&gt;
:Default: 1&lt;br /&gt;
:Specifies how many tics (units of 1/35 second each) this frame lasts. In frame loops, at least one of the frames has to take longer than 0 tics, otherwise the game will hang. For certain types of frames, whose purpose includes scripting and random or controlled frame jumping, this value is usually set to 0, because the engine jumps to target frames instantly if a condition is met, regardless of &#039;&#039;&#039;tics&#039;&#039;&#039;. For static, non-animated things, as well as all non-disintegrating corpses, the &#039;&#039;&#039;tics&#039;&#039;&#039; value is usually -1, and is required to be this way if the corpse in question is supposed to be resurrectable by a monster with [[VileChase]] walking frames.&lt;br /&gt;
*&#039;&#039;&#039;action&#039;&#039;&#039;&lt;br /&gt;
:Default: NULL&lt;br /&gt;
:Specifies the action [[List of codepointers|pointer]] that this frame will call when accessed by the actor. Action functions which use the &#039;&#039;&#039;args&#039;&#039;&#039; field otherwise, can also be implemented by including the arguments in parantheses on the same line as the &#039;&#039;&#039;action&#039;&#039;&#039; field, removing the need for the &#039;&#039;&#039;args&#039;&#039;&#039; property. Note that &#039;&#039;&#039;misc1&#039;&#039;&#039;, &#039;&#039;&#039;misc2&#039;&#039;&#039; requiring actions are NOT subject to this and must be used separately with their fields. These include a few pointers which were inherited from [[MBF]], before the &#039;&#039;&#039;args&#039;&#039;&#039; field was introduced: [[Face]], [[Mushroom]], [[PlaySound]], [[RandomJump]], [[Spawn]] and [[Turn]].&lt;br /&gt;
*&#039;&#039;&#039;nextframe&#039;&#039;&#039;&lt;br /&gt;
:Default: S_NULL&lt;br /&gt;
:Specifies the frame to go to after the &#039;&#039;&#039;tics&#039;&#039;&#039; duration expires. It can be a frame mnemonic just like this frame&#039;s name, or one of these four keywords:&lt;br /&gt;
:*&#039;&#039;&#039;@next&#039;&#039;&#039; - go to the next frame in the EDF file.&lt;br /&gt;
:*&#039;&#039;&#039;@prev&#039;&#039;&#039; - go to the previous frame in the EDF file.&lt;br /&gt;
:*&#039;&#039;&#039;@this&#039;&#039;&#039; - loop to this same frame.&lt;br /&gt;
:*&#039;&#039;&#039;@null&#039;&#039;&#039; - go to the S_NULL frame. In effect, it removes the actor from the game.&lt;br /&gt;
*&#039;&#039;&#039;misc1&#039;&#039;&#039;&lt;br /&gt;
:Default: 0&lt;br /&gt;
:This is the first argument, used by certain [[list of codepointers|codepointers]] which were inherited from MBF, see their enumeration above.&lt;br /&gt;
*&#039;&#039;&#039;misc2&#039;&#039;&#039;&lt;br /&gt;
:Default: 0&lt;br /&gt;
:This is the second argument used by some MBF inherited codepointers.&lt;br /&gt;
*&#039;&#039;&#039;particle_event&#039;&#039;&#039;&lt;br /&gt;
:Default: pevt_none&lt;br /&gt;
:Specifies a special particle effect to occur when the actor enters this frame. Possible values are:&lt;br /&gt;
:*&#039;&#039;&#039;pevt_none&#039;&#039;&#039; - no effect. The default.&lt;br /&gt;
:*&#039;&#039;&#039;pevt_rexpl&#039;&#039;&#039; - rocket explosion effect. Yellow dots exploding in all directions from the thing&#039;s origin.&lt;br /&gt;
:*&#039;&#039;&#039;pevt_bfgexpl&#039;&#039;&#039; - similar to the rocket explosion, but using green dots.&lt;br /&gt;
:For other particle effects, which continuously affect the actor, see the [[Thingtype]] definition.&lt;br /&gt;
*&#039;&#039;&#039;args&#039;&#039;&#039;&lt;br /&gt;
:Default: {0,0,0,0,0}&lt;br /&gt;
:This is a list of codepointer arguments, in the form of numbers or identifiers. If the called codepointer uses fewer than 5 arguments, it is safe to write less than 5 in the EDF file. Any omitted argument will default to 0. They have to be separated by commas.&lt;br /&gt;
:For normal frame definitions, setting the arguments from the &#039;&#039;&#039;args&#039;&#039;&#039; field is no longer required, preferring to include them in the &#039;&#039;&#039;action&#039;&#039;&#039; property, inside parantheses, appending the pointer name. &#039;&#039;&#039;Args&#039;&#039;&#039; may still be useful for frame [[delta structures]].&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default: -1&lt;br /&gt;
:Specifies what number to be used if Dehacked patches are used to tweak the gameplay originally defined by an EDF code. Safe values are greater than or equal to 10000, others may be used by Eternity subsequent versions.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Back to [[Editing reference]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Soundsequence&amp;diff=2496</id>
		<title>Soundsequence</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Soundsequence&amp;diff=2496"/>
		<updated>2011-01-13T00:25:54Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Added documentation for all commands, and documentation of features new to SVN r1420.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sound sequences are effects that play while a sector is moving, a polyobject is moving, or when a Heretic-style (environmental) ambient sound is under way. Similar to things, frames or individual sounds, sequences are defined in EDF by using the &#039;&#039;&#039;soundsequence&#039;&#039;&#039; block. The mnemonic must be at most 32 characters long. Sound sequence definitions can be cascaded, and the latter ones will overwrite other identically named sequences.&lt;br /&gt;
&lt;br /&gt;
Sector movement sequences are used by placing thing types #1400 to #1411 on the map, inside the designated sectors. The ones numbered from #1400 to #1410 will play the sequence with the &#039;&#039;&#039;id&#039;&#039;&#039; between 0 and 10, while #1411 will use its first argument in the [[ExtraData]] definition.&lt;br /&gt;
&lt;br /&gt;
Polyobject sequences are set up from the [[Polyobject_linedef_types|Polyobj_StartLine and Polyobj_ExplicitLine]] ExtraData linedef specials. &#039;&#039;&#039;Polyobj_StartLine&#039;&#039;&#039; uses the 3rd argument for this, while &#039;&#039;&#039;Polyobj_ExplicitLine&#039;&#039;&#039; uses the 4th.&lt;br /&gt;
&lt;br /&gt;
Environmental sequences are set up similarly with sector sequences, by placing thing types #1200 to #1300 anywhere inside the map. #1200 to #1299 use the last two digits to designate the number, while #1300 uses the first ExtraData argument.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; You can include all &#039;&#039;&#039;soundsequence&#039;&#039;&#039; blocks inside a &#039;&#039;&#039;ESNDSEQ&#039;&#039;&#039; lump. It will be loaded automatically at game startup, independent of &#039;&#039;&#039;EDFROOT&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&lt;br /&gt;
 soundsequence &amp;lt;mnemonic&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   id              &amp;lt;number&amp;gt;&lt;br /&gt;
   cmds            { &amp;lt;string&amp;gt;, ... }&lt;br /&gt;
   commands        &amp;lt;heredoc string&amp;gt;&lt;br /&gt;
   type            &amp;lt;sequence type&amp;gt;&lt;br /&gt;
   stopsound       &amp;lt;sound mnemonic&amp;gt;&lt;br /&gt;
   attenuation     &amp;lt;attenuation type&amp;gt;&lt;br /&gt;
   randomplayvol   &amp;lt;boolean&amp;gt;&lt;br /&gt;
   volume          &amp;lt;number&amp;gt;&lt;br /&gt;
   minvolume       &amp;lt;number&amp;gt;&lt;br /&gt;
   nostopcutoff    &amp;lt;boolean&amp;gt;&lt;br /&gt;
   doorsequence    &amp;lt;sound sequence mnemonic&amp;gt;&lt;br /&gt;
   platsequence    &amp;lt;sound sequence mnemonic&amp;gt;&lt;br /&gt;
   floorsequence   &amp;lt;sound sequence mnemonic&amp;gt;&lt;br /&gt;
   ceilingsequence &amp;lt;sound sequence mnemonic&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
The fields are as follows:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;id&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; -1&lt;br /&gt;
:Sets up the sound sequence number to recognize it in maps. Environmental sequences use a different namespace from sector ones, and sector sequences can be separated in door, platform and general sequences (see below)&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;cmds&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; { &amp;quot;end&amp;quot; }&lt;br /&gt;
:&#039;&#039;&#039;(Deprecated)&#039;&#039;&#039; The list of Hexen-style commands to control the playing of sounds. Each command is written as a string, separated with a comma from the others. While this syntax will continue to be supported, it is recommended that new modifications use the heredoc-enabled syntax via the &#039;&#039;&#039;commands&#039;&#039;&#039; field instead.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;commands&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default&#039;&#039;: @&amp;quot; end &amp;quot;@&lt;br /&gt;
:The commands field allows specification of sound sequences in the natural Hexen-derived syntax, without quotations or commas, by embedding the commands one per line inside an EDF heredoc (a literally interpreted string delimited by @&amp;quot; and &amp;quot;@ sequences). This is the recommended method of specification. &#039;&#039;&#039;SVN r1420+&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;type&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; &amp;quot;sector&amp;quot;&lt;br /&gt;
:There are four separate namespaces: sector, door, plat and environment. The second is restricted to doors and polys; the third to general moving floors/ceilings and lifts.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;stopsound&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; &amp;quot;none&amp;quot;&lt;br /&gt;
:The sound mnemonic to play when the sector stops. Will never happen if this is an environmental sequence.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;attenuation&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; &amp;quot;normal&amp;quot;&lt;br /&gt;
:Can be: normal, idle, static, none.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;randomplayvol&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; false&lt;br /&gt;
:If set to true, every normal &amp;quot;play&amp;quot; command which doesn&#039;t specify a volume will begin at a randomized volume level which may be modified by the user&#039;s s_enviro_volume setting. This property exists to support Heretic-compatible global environmental sequence behavior. &#039;&#039;&#039;SVN r1420+&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;volume&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default&#039;&#039;: 127&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;minvolume&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default:&#039;&#039; -1&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;nostopcutoff&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;Default&#039;&#039;: false&lt;br /&gt;
&lt;br /&gt;
==Sequence commands==&lt;br /&gt;
*play &amp;lt;sound&amp;gt;&lt;br /&gt;
: The indicated sound will be played but the sequence will not delay in moving to the next command. If this is the last sound in the sequence, the sound might be cutoff unless other properties prevent this.&lt;br /&gt;
*playuntildone &amp;lt;sound&amp;gt;&lt;br /&gt;
: The indicated sound will be played, and the sequence will not move on to the next command or terminate until the sound has finished playing.&lt;br /&gt;
*playtime &amp;lt;sound&amp;gt; &amp;lt;time&amp;gt;&lt;br /&gt;
: The indicated sound will be played and the sequence will pause for the number of gametics (35 per second) before moving on to the next command.&lt;br /&gt;
*playrepeat &amp;lt;sound&amp;gt; &lt;br /&gt;
: The indicated sound will be played continuously without interruption. This command never ends, so the sequence will not terminate unless something such as a sector action stops it externally. This command should not be used in global environmental sequences.&lt;br /&gt;
*playloop &amp;lt;sound&amp;gt; &amp;lt;time&amp;gt;&lt;br /&gt;
: The indicated sound will be played in a loop every &amp;quot;time&amp;quot; gametics. As above, this command will never end.&lt;br /&gt;
*playabsvol &amp;lt;sound&amp;gt; &amp;lt;vol&amp;gt;&lt;br /&gt;
: Like the play command, but allows specification of the sound&#039;s base volume from 0 to 127.&lt;br /&gt;
*playrelvol &amp;lt;sound&amp;gt; &amp;lt;vol&amp;gt;&lt;br /&gt;
: Like the play command, but specifies a volume which is relative to the sound sequence&#039;s previous volume setting.&lt;br /&gt;
*delay &amp;lt;tics&amp;gt;&lt;br /&gt;
: Stop the sound sequence from progressing for the indicated number of gametics.&lt;br /&gt;
*delayrand &amp;lt;min&amp;gt; &amp;lt;max&amp;gt;&lt;br /&gt;
: Delay the sound sequence from progressing for a random number of gametics between and including &amp;quot;min&amp;quot; and &amp;quot;max&amp;quot;.&lt;br /&gt;
*volume &amp;lt;vol&amp;gt;&lt;br /&gt;
: Set the sequence&#039;s current absolute volume level to the indicated value between 0 and 127.&lt;br /&gt;
*relvolume &amp;lt;vol&amp;gt;&lt;br /&gt;
: Modify the sequence&#039;s current absolute volume level by the indicated amount. The number specified should be negative to make the sequence more quiet.&lt;br /&gt;
*attenuation &amp;lt;attn&amp;gt;&lt;br /&gt;
: Set the sequence&#039;s attenuation value. This command is executed at game startup and therefore the last one specified is the only one that will take effect.&lt;br /&gt;
*stopsound &amp;lt;snd&amp;gt;&lt;br /&gt;
: Set the sequence&#039;s stopsound attribute. This command is executed at game startup and therefore the last one specified is the only one that will take effect.&lt;br /&gt;
*nostopcutoff&lt;br /&gt;
: Set the sequence&#039;s nostopcutoff attribute. This command is executed at game startup and therefore the last one specified is the only one that will take effect.&lt;br /&gt;
*restart&lt;br /&gt;
: Restart the current sound sequence. This command should not be used in global environmental sequences.&lt;br /&gt;
*end&lt;br /&gt;
: End the sequence. This command is not required by the Eternity Engine, and exists for Hexen compatibility.&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=ExtraData&amp;diff=2495</id>
		<title>ExtraData</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=ExtraData&amp;diff=2495"/>
		<updated>2011-01-13T00:03:09Z</updated>

		<summary type="html">&lt;p&gt;Quasar: /* Sectors */ Added documentation of portal flags and overlays.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ExtraData is a new data specification language for the [[Eternity Engine]] that allows arbitrary extension of mapthings, lines, and sectors with any number of new fields, with data provided in more or less any format. The use of a textual input language forever removes any future problems caused by binary format limitations. The ExtraData parser is based on the libConfuse configuration file parser library by Martin Hedenfalk, which is also used by GFS and EDF. &lt;br /&gt;
&lt;br /&gt;
Each section in this document deals with one of the ExtraData constructs, as well as how to embed ExtraData in a WAD and how to associate it with a given map. &lt;br /&gt;
&lt;br /&gt;
ExtraData will continue to be supported in future versions of Eternity, even though it will soon be superceded by support for the [[Universal Doom Map Format]].&lt;br /&gt;
&lt;br /&gt;
=General Syntax=&lt;br /&gt;
&#039;&#039;See [[EDF#Syntax|EDF Syntax]], as it is the same.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Embedding and Associating ExtraData =&lt;br /&gt;
&lt;br /&gt;
ExtraData is embedded directly as a text script into a lump of any name. This can be done with any number of wad file management tools, such as SLumpEd, SLADE 3, or XWE. &lt;br /&gt;
&lt;br /&gt;
An ExtraData script is associated with a map via use of the [[MapInfo]] variable &#039;&#039;&#039;extradata&#039;&#039;&#039;. A map can only have one ExtraData script, but it is possible for multiple maps to share the same script. &lt;br /&gt;
&lt;br /&gt;
Example of ExtraData specification via EMAPINFO: &lt;br /&gt;
   [MAP01]&lt;br /&gt;
   extradata = EDLUMP01&lt;br /&gt;
&lt;br /&gt;
=Mapthings =&lt;br /&gt;
&lt;br /&gt;
Mapthings define monsters, lamps, control points, items, etc -- anything that is spawned on the map at level start. &lt;br /&gt;
&lt;br /&gt;
Each field in the mapthing definition, with the exception of the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field, is optional. If a field is not provided, it takes on the default value indicated below the syntax information. Fields may also be provided in any order. &lt;br /&gt;
&lt;br /&gt;
Note that the order of mapthing definitions in ExtraData is not important. The &#039;&#039;&#039;recordnum&#039;&#039;&#039; field serves to identify mapthing records. &lt;br /&gt;
&lt;br /&gt;
==Creating ExtraData Control Objects ==&lt;br /&gt;
&lt;br /&gt;
Mapthing records in ExtraData are only associated with a special control object that must be placed on the map in the usual manner. &lt;br /&gt;
&lt;br /&gt;
The ExtraData control object has a &#039;&#039;&#039;doomednum&#039;&#039;&#039; of 5004. Each control object specifies its corresponding ExtraData mapthing record number as an integer value in its mapthing &#039;&#039;&#039;options&#039;&#039;&#039; field. If your editor does not allow entering arbitrary values into the options field of mapthings, you will need to use the BOOM command-line editor, CLED. As of the initial writing time of this document, both DETH and Doom Builder support entering arbitrary integer values for the options field. Check your editor&#039;s documentation or user interface to verify if it supports this. &lt;br /&gt;
&lt;br /&gt;
The x, y, and angle fields of the ExtraData control object are passed on to the thing which will be spawned at the control point&#039;s location, so those fields of the control object should be set normally. The true type and options fields of the thing to be spawned, along with any extended fields, are specified in the ExtraData record. &lt;br /&gt;
&lt;br /&gt;
Any number of ExtraData control objects can reference the same ExtraData record. In the event that a control object references a non-existent ExtraData record, the ExtraData script for a level is missing, or the thing type referenced by an ExtraData record isn&#039;t valid, an [[Unknown]] thing will be spawned at the control point&#039;s location.  Note that you cannot spawn ExtraData control objects using ExtraData. Attempting this will also result in an Unknown thing. &lt;br /&gt;
&lt;br /&gt;
==Mapthing Syntax and Fields ==&lt;br /&gt;
&lt;br /&gt;
The syntax of the ExtraData mapthing record is as follows. Remember that all fields except the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field are optional and can be specified in any order. &lt;br /&gt;
 mapthing&lt;br /&gt;
 {&lt;br /&gt;
   recordnum &amp;lt;unique number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are normal mapthing fields&lt;br /&gt;
   type      &amp;lt;doomednum&amp;gt; OR &amp;lt;EDF thingtype mnemonic&amp;gt;&lt;br /&gt;
   options   &amp;lt;options flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are ExtraData extensions&lt;br /&gt;
   tid       &amp;lt;number&amp;gt;&lt;br /&gt;
   args      { &amp;lt;special field&amp;gt;, ... }&lt;br /&gt;
   height    &amp;lt;number&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields:=== &lt;br /&gt;
====recordnum====&lt;br /&gt;
The recordnum serves to identify this record, and is the number which ExtraData control objects must use to associate themselves with a mapthing record. Every ExtraData mapthing record must have a unique record number. If a duplicate record number is detected, the engine will currently exit with an error message. The record number is limited to values between 0 and 65535 inclusive. Some editors may only allow input of numbers up to 32767 in the mapthing options field, or may treat values above 32767 as negative numbers. Beware of this. &lt;br /&gt;
&lt;br /&gt;
====type====&lt;br /&gt;
Default: No meaningful default value; an Unknown thing will be spawned if not valid.&lt;br /&gt;
&lt;br /&gt;
This field specifies the type of object to spawn at the location and angle of ExtraData control objects using this record. This field can accept one of two types of values. The first is a normal thingtype doomednum as specified via [[EDF]] and used by all editors. For example, the DOOM Imp&#039;s doomednum is 3001. &lt;br /&gt;
&lt;br /&gt;
This field can also accept EDF thingtype mnemonics. EDF thingtype mnemonics must be prefixed with &#039;&#039;thing:&#039;&#039; -- this allows the parser to know it is dealing with a string instead of a number. EDF thingtypes must have a unique doomednum to be specified in an ExtraData mapthing record. If the specified EDF thingtype doesn&#039;t exist or has a doomednum of -1, an Unknown object will be spawned instead. &lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
    mapthing { type 3001 }          // This record specifies an Imp via its doomednum&lt;br /&gt;
    &lt;br /&gt;
    mapthing { type DoomImp } // This record specifies an Imp by its EDF mnemonic&lt;br /&gt;
    &lt;br /&gt;
====options====&lt;br /&gt;
Default: No flags are set by default. &lt;br /&gt;
&lt;br /&gt;
This field specifies the options (also known as mapthing flags). This field uses the same syntax as BEX/EDF flag strings, but the syntax will be reviewed here for completeness. &lt;br /&gt;
&lt;br /&gt;
A BEX flag list is a string of flag names separated by whitespace, pipe characters, commas, or plus characters. In ExtraData, if a flag list contains whitespace, commas, or plus signs, it must be enclosed in double or single quotations. Flags are combined using bitwise-OR logic, so a flag name can be specified more than once. Specifying a flag name causes that flag to be turned on. The default state of all flags is off. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
    Flag name   Meaning&lt;br /&gt;
    ------------------------------------------------------------------------------&lt;br /&gt;
    EASY        Thing appears in easy difficulties&lt;br /&gt;
    NORMAL      Thing appears in &amp;quot;Hurt Me Plenty&amp;quot;&lt;br /&gt;
    HARD        Thing appears in Ultra-Violence and Nightmare&lt;br /&gt;
    AMBUSH      Thing is &amp;quot;deaf&amp;quot;, will not wake up via sound&lt;br /&gt;
    NOTSINGLE   Thing doesn&#039;t appear in single-player mode&lt;br /&gt;
    NOTDM       Thing doesn&#039;t appear in deathmatch&lt;br /&gt;
    NOTCOOP     Thing doesn&#039;t appear in cooperative multiplayer&lt;br /&gt;
    FRIEND      Thing uses MBF friendly logic&lt;br /&gt;
    DORMANT     Thing is dormant at map startup (script feature)&lt;br /&gt;
    ------------------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
The mapthing options value 256 (0x0100) is reserved. If this bit is set, all BOOM, MBF, and Eternity extended mapthing bits will be cleared. This is to guard against editors like Hellmaker which set all bits they do not understand, instead of leaving them zero. &lt;br /&gt;
&lt;br /&gt;
Example options fields -- All of these are equivalent: &lt;br /&gt;
    // This is the only syntax that does not require quotations.&lt;br /&gt;
    &lt;br /&gt;
    mapthing { options EASY|NORMAL|HARD }&lt;br /&gt;
    &lt;br /&gt;
    // All of these syntaxes must be quoted, because unquoted strings in &lt;br /&gt;
    // ExtraData cannot contain spaces, commas, or plus signs.&lt;br /&gt;
    &lt;br /&gt;
    mapthing { options &amp;quot;EASY NORMAL HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY | NORMAL | HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY+NORMAL+HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY + NORMAL + HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY,NORMAL,HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY, NORMAL, HARD&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
====tid====&lt;br /&gt;
Default: 0 &lt;br /&gt;
&lt;br /&gt;
The TID, or &amp;quot;Thing ID&amp;quot;, is a tag for mapthings which is used for identification in [[Small]] scripts. TID values must be positive numbers between 1 and 65535. The TID value zero means no TID. Negative TID values are reserved and are used to indicate special things within the engine. TIDs are not required to be unique, and most Small functions that accept TIDs will perform an action on all mapthings which bear the same TID. Things spawned within Small scripts can also be given TIDs. &lt;br /&gt;
&lt;br /&gt;
====args====&lt;br /&gt;
Default: All args values default to zero. &lt;br /&gt;
&lt;br /&gt;
The args field is a list of up to five special values which can have a broad range of meanings. Any values not provided in the args list will default, and if more than five values are provided, only the first five will be used. Currently, all args values are interpreted as integers (a non-number string evaluates to zero). This may change in the future. &lt;br /&gt;
&lt;br /&gt;
Example args list: &lt;br /&gt;
    mapthing { args { 0, 1, 2, 3, 4 } }&lt;br /&gt;
    &lt;br /&gt;
====height====&lt;br /&gt;
Default: 0 &lt;br /&gt;
&lt;br /&gt;
For normal objects, this field indicates a distance above the floor that the thing will spawn at level start. For objects with the SPAWNCEILING flag, this field indicates a distance below the ceiling instead. This field will have no effect on objects which spawn at a randomized height.&lt;br /&gt;
&lt;br /&gt;
=Linedefs =&lt;br /&gt;
&lt;br /&gt;
Linedefs define walls, two-sided textures, and provide action triggers within maps. &lt;br /&gt;
&lt;br /&gt;
Each field in the linedef definition, with the exception of the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field, is optional. If a field is not provided, it takes on the default value indicated below the syntax information. Fields may also be provided in any order. &lt;br /&gt;
&lt;br /&gt;
Note that the order of linedef definitions in ExtraData is not important. The &#039;&#039;&#039;recordnum&#039;&#039;&#039; field serves to identify linedef records. &lt;br /&gt;
&lt;br /&gt;
==Creating ExtraData Linedefs ==&lt;br /&gt;
&lt;br /&gt;
Linedef records in ExtraData are associated either with lines which bear the ExtraData Control Line Special (270), or with any linedef in a DOOM-format map which uses a parameterized line special. You can place the 270 special, as well as parameterized special numbers, into the normal &amp;quot;special&amp;quot; field of a line using virtually any map editor. Editors with Eternity-specific configurations should support these specials natively.&lt;br /&gt;
&lt;br /&gt;
Each control linedef (or directly-used parameterized special) specifies its corresponding ExtraData linedef record number as an integer value in its linedef tag field. If your editor does not allow entering arbitrary values up to 32767 into the tag field of linedefs, you will need to use the BOOM command-line editor, CLED. As of the initial writing time of this document, both DETH and Doom Builder support entering arbitrary integer values for the tag field. Check your editor&#039;s documentation or user interface to verify if it supports this. &lt;br /&gt;
&lt;br /&gt;
The flags, sidedefs, textures, and location of the ExtraData control linedef are used normally by the line and cannot be altered from within ExtraData. The true special (if 270 is used) and tag fields of the linedef, along with any extended fields, are specified in the ExtraData record which the control linedef references. &lt;br /&gt;
&lt;br /&gt;
Any number of linedefs can reference the same ExtraData record. In the event that a control linedef references a non-existent ExtraData record or the ExtraData script for a level is missing, the special and tag of the ExtraData control linedef will both be set to zero. &lt;br /&gt;
&lt;br /&gt;
==Linedef Syntax and Fields ==&lt;br /&gt;
&lt;br /&gt;
The syntax of the ExtraData linedef record is as follows. Remember that all fields except the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field are optional and can be specified in any order. &lt;br /&gt;
 linedef&lt;br /&gt;
 {&lt;br /&gt;
   recordnum &amp;lt;unique number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are normal linedef fields&lt;br /&gt;
   special &amp;lt;number&amp;gt; OR &amp;lt;special name&amp;gt;&lt;br /&gt;
   tag &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are ExtraData extensions&lt;br /&gt;
   extflags &amp;lt;extended line flags list&amp;gt;&lt;br /&gt;
   args { &amp;lt;special field&amp;gt;, ... }&lt;br /&gt;
   alpha &amp;lt;number&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields: ===&lt;br /&gt;
====recordnum====&lt;br /&gt;
The recordnum serves to identify this record, and is the number which ExtraData control linedefs must use to associate themselves with a linedef record. Every ExtraData linedef record must have a unique record number. If a duplicate record number is detected, the engine will currently exit with an error message. The record number is limited to values between 0 and 32767 inclusive. Some editors may only allow input of numbers up to 255 in the linedef tag field. Beware of this. &lt;br /&gt;
&lt;br /&gt;
====special====&lt;br /&gt;
:&#039;&#039;Default: 0 &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The special field determines what [[Linedef_types|type of action]] may be taken when a line is crossed, used, shot, etc. There are three types of linedef specials in Eternity: normal, generalized, and parameterized. Parameterized specials use the &#039;&#039;&#039;args&#039;&#039;&#039; field documented below to provide complete customization of line actions. &lt;br /&gt;
&lt;br /&gt;
This field can accept numbers for any special type, including generalized and parameterized, but it can also accept special names for parameterized line types. See the [[Detailed parameterized linedef specification]] for a complete list of the available names.&lt;br /&gt;
&lt;br /&gt;
====tag====&lt;br /&gt;
:&#039;&#039;Default: 0 &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The tag of the linedef, used by DOOM-style line specials and sector effects.&lt;br /&gt;
&lt;br /&gt;
====extflags====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This field specifies extended linedef flag values which impact the functionality of parameterized linedef specials. This field uses the same syntax as BEX/EDF flag strings, but the syntax will be reviewed here for completeness. &lt;br /&gt;
&lt;br /&gt;
A BEX flag list is a string of flag names separated by whitespace, pipe characters, commas, or plus characters. In ExtraData, if a flag list contains whitespace, commas, or plus signs, it must be enclosed in double or single quotations. Flags are combined using bitwise-OR logic, so a flag name can be specified more than once. Specifying a flag name causes that flag to be turned on. The default state of all flags is off. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
    Flag name   Meaning&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    CROSS       Linedef can be activated by being crossed.&lt;br /&gt;
    USE         Linedef can be activated by being used.&lt;br /&gt;
    IMPACT      Linedef can be activated by being shot.&lt;br /&gt;
    PUSH        Linedef can be activated by being pushed.&lt;br /&gt;
    PLAYER      Linedef can be activated by players.&lt;br /&gt;
    MONSTER     Linedef can be activated by objects with SPACMONSTER flag.&lt;br /&gt;
    MISSILE     Linedef can be activated by objects with SPACMISSILE flag.&lt;br /&gt;
    REPEAT      Linedef action is repeatable.&lt;br /&gt;
    1SONLY      Linedef can only be activated from first side.&lt;br /&gt;
    ADDITIVE    Linedef&#039;s midtexture is drawn with additive blending.&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
Notes: IMPACT is currently only implemented for bullet weapons. The ability to use IMPACT with MISSILE will be added in the near future. The PUSH style of activation is not implemented at all yet, so this flag currently does nothing. &lt;br /&gt;
&lt;br /&gt;
Example flags fields -- All of these are equivalent: &lt;br /&gt;
    // This is the only syntax that does not require quotations.&lt;br /&gt;
    &lt;br /&gt;
    linedef { extflags CROSS|PLAYER|MISSILE|REPEAT }&lt;br /&gt;
    &lt;br /&gt;
    // All of these syntaxes must be quoted, because unquoted strings in &lt;br /&gt;
    // ExtraData cannot contain spaces, commas, or plus signs.&lt;br /&gt;
    &lt;br /&gt;
    linedef { extflags &amp;quot;CROSS PLAYER MISSILE REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS | PLAYER | MISSILE | REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS+PLAYER+MISSILE+REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS + PLAYER + MISSILE + REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS,PLAYER,MISSILE,REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS, PLAYER, MISSILE, REPEAT&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
====args====&lt;br /&gt;
:&#039;&#039;Default: All args values default to zero. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The args field is a list of up to five special values which can have a broad range of meanings. Any values not provided in the args list will default, and if more than five values are provided, only the first five will be used. Currently, all args values are interpreted as integers (a non-number string evaluates to zero). This may change in the future. The args list is used by parameterized linedef specials. &lt;br /&gt;
&lt;br /&gt;
Example args list: &lt;br /&gt;
    linedef { args { 0, 1, 2, 3, 4 } }&lt;br /&gt;
&lt;br /&gt;
====alpha====&lt;br /&gt;
:&amp;quot;Default: Alpha defaults to 1.0.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The alpha field takes a value from 0.0 to 1.0 to set the opacity at which this linedef&#039;s midtexture is drawn. When combined with the ADDITIVE extflag, this can be used for additive-blended translucency as well.&lt;br /&gt;
&lt;br /&gt;
=Sectors=&lt;br /&gt;
&lt;br /&gt;
Sectors define distinct areas of the map that are bordered by linedefs, with floor and ceiling properties, lighting data, and specials. &lt;br /&gt;
&lt;br /&gt;
Each field in the sector definition, with the exception of the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field, is optional. If a field is not provided, it takes on the default value indicated below the syntax information. Fields may also be provided in any order. &lt;br /&gt;
&lt;br /&gt;
Note that the order of sector definitions in ExtraData is not important. The &#039;&#039;&#039;recordnum&#039;&#039;&#039; field serves to identify sector records. &lt;br /&gt;
&lt;br /&gt;
==Creating ExtraData Sectors==&lt;br /&gt;
&lt;br /&gt;
Sector records in ExtraData are associated with lines which bear the ExtraData Sector Control Special (401). The linedef&#039;s front side sector is the map sector that will receive properties from the ExtraData record which is specified by number in the linedef&#039;s tag.&lt;br /&gt;
&lt;br /&gt;
Since ExtraData is attached to sectors via linedefs and not through overriding any of the sectors&#039; native fields, you specify all of the normal data for a sector in the map itself, and overriding that data through ExtraData sector records is not supported.&lt;br /&gt;
&lt;br /&gt;
Any number of linedefs can reference the same ExtraData sector record. In the event that a control linedef references a non-existent ExtraData record or the ExtraData script for a level is missing, the tag of the ExtraData sector control linedef will be set to zero and will otherwise be ignored.&lt;br /&gt;
&lt;br /&gt;
==Sector Syntax and Fields ==&lt;br /&gt;
&lt;br /&gt;
The syntax of the ExtraData sector record is as follows. Remember that all fields except the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field are optional and can be specified in any order. &lt;br /&gt;
 sector&lt;br /&gt;
 {&lt;br /&gt;
   recordnum &amp;lt;unique number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are ExtraData extensions to sector data&lt;br /&gt;
   flags &amp;lt;sector flag list&amp;gt;&lt;br /&gt;
   flags.add &amp;lt;sector flag list&amp;gt;&lt;br /&gt;
   flags.remove &amp;lt;sector flag list&amp;gt;&lt;br /&gt;
   damage &amp;lt;integer&amp;gt;&lt;br /&gt;
   damagemask &amp;lt;integer&amp;gt;&lt;br /&gt;
   damagemod &amp;lt;method of damage type&amp;gt;&lt;br /&gt;
   damageflags &amp;lt;sector damage flags list&amp;gt;&lt;br /&gt;
   damageflags.add &amp;lt;sector damage flags list&amp;gt;&lt;br /&gt;
   damageflags.remove &amp;lt;sector damage flags list&amp;gt;&lt;br /&gt;
   floorterrain &amp;lt;terrain name&amp;gt;&lt;br /&gt;
   floorangle &amp;lt;float&amp;gt;  &lt;br /&gt;
   flooroffsetx &amp;lt;float&amp;gt;&lt;br /&gt;
   flooroffsety &amp;lt;float&amp;gt;&lt;br /&gt;
   ceilingterrain &amp;lt;terrain name&amp;gt;&lt;br /&gt;
   ceilingangle &amp;lt;float&amp;gt;&lt;br /&gt;
   ceilingoffsetx &amp;lt;float&amp;gt;&lt;br /&gt;
   ceilingoffsety &amp;lt;float&amp;gt;&lt;br /&gt;
   colormaptop &amp;lt;lump name&amp;gt;&lt;br /&gt;
   colormapmid &amp;lt;lump name&amp;gt;&lt;br /&gt;
   colormapbottom &amp;lt;lump name&amp;gt;&lt;br /&gt;
   portalflags.floor &amp;lt;portal flags list&amp;gt;&lt;br /&gt;
   portalflags.ceiling &amp;lt;portal flags list&amp;gt;&lt;br /&gt;
   overlayalpha.floor &amp;lt;percentage or value from 0 to 255&amp;gt;&lt;br /&gt;
   overlayalpha.ceiling &amp;lt;percentage or value from 0 to 255&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields: ===&lt;br /&gt;
====recordnum====&lt;br /&gt;
The recordnum serves to identify this record, and is the number which ExtraData sector control linedefs must use to associate themselves with a sector record. Every ExtraData sector record must have a unique record number. If a duplicate record number is detected, the engine will currently exit with an error message. The record number is limited to values between 0 and 32767 inclusive. Some editors may only allow input of numbers up to 255 in the linedef tag field. Beware of this. &lt;br /&gt;
&lt;br /&gt;
====flags====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This field specifies sector flag values which specify various properties of sectors. This field uses the same syntax as BEX/EDF flag strings. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
&lt;br /&gt;
    Flag name     Meaning&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    SECRET        Sector is secret&lt;br /&gt;
    FRICTION      Sector has friction enabled, if targeted by a BOOM friction transfer line&lt;br /&gt;
    PUSH          Sector has BOOM push effects enabled&lt;br /&gt;
    KILLSOUND     Objects in sector cannot make sounds.&lt;br /&gt;
    KILLMOVESOUND Sector makes no movement sounds, even if it has a special sound sequence&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
Example flags fields -- All of these are equivalent: &lt;br /&gt;
    // This is the only syntax that does not require quotations.&lt;br /&gt;
    &lt;br /&gt;
    sector { flags SECRET|FRICTION|KILLMOVESOUND }&lt;br /&gt;
    &lt;br /&gt;
    // All of these syntaxes must be quoted, because unquoted strings in &lt;br /&gt;
    // ExtraData cannot contain spaces, commas, or plus signs.&lt;br /&gt;
    &lt;br /&gt;
    sector { flags &amp;quot;SECRET FRICTION KILLMOVESOUND&amp;quot; }&lt;br /&gt;
    sector { flags &amp;quot;SECRET | FRICTION | KILLMOVESOUND&amp;quot; }&lt;br /&gt;
    sector { flags &amp;quot;SECRET+FRICTION+KILLMOVESOUND&amp;quot; }&lt;br /&gt;
    sector { flags &amp;quot;SECRET + FRICTION + KILLMOVESOUND&amp;quot; }&lt;br /&gt;
    sector { flags &amp;quot;SECRET,FRICTION,KILLMOVESOUND&amp;quot; }&lt;br /&gt;
    sector { flags &amp;quot;SECRET, FRICTION, KILLMOVESOUND&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
====flags.add====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is a list of sector flags to add to the sector. This is supported because some sector specials (such as sector special 9, &amp;quot;Secret&amp;quot;) imply that certain sector flags will be set on the sector before ExtraData is applied. If you wish to only add flags and not override any that may have been set by sector specials, use this field to specify only the flags that you wish to be added to the sector.&lt;br /&gt;
&lt;br /&gt;
====flags.remove====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is a list of sector flags to remove from the sector. If you wish to only remove flags and not override any that may have been set by sector specials, use this field to specify only the flags that you wish to be removed from the sector.&lt;br /&gt;
&lt;br /&gt;
====damage====&lt;br /&gt;
:&#039;&#039;Default: 0&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the amount of damage this sector does to players if the players are standing inside the sector and do not meet any special exemption criteria, such as wearing a Radiation Suit. This amount is done at each damage opportunity, which is determined by the &#039;&#039;&#039;damagemask&#039;&#039;&#039; field.&lt;br /&gt;
&lt;br /&gt;
====damagemask====&lt;br /&gt;
:&#039;&#039;Default: 0&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the interval in gametics between damage opportunities for a player standing in this sector. The default value of 0 will cause the sector to do constant and instantaneous damage every gametic. Setting this value to an integer greater than 0 will cause damage to be done every Nth gametic, with N being the value of this field. The default DOOM nukage types all use a damagemask of 32, which is roughly once per in-game second (there are 35 gametics per second).&lt;br /&gt;
&lt;br /&gt;
====damagemod====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;Unknown&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the type of damage done by this sector. If &amp;quot;Unknown&amp;quot; is specified, the damage done is generic. The value specified should be a valid EDF damagetype mnemonic. If it is not, &amp;quot;Unknown&amp;quot; will be used. This can be used to have a sector type trigger special pain and death states when it deals damage.&lt;br /&gt;
&lt;br /&gt;
====damageflags====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This field specifies sector damage flag values which affect the manner in which a sector does damage. This field uses the same syntax as BEX/EDF flag strings. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
&lt;br /&gt;
    Flag name     Meaning&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    LEAKYSUIT     The player may take damage at random even if he has the radsuit powerup&lt;br /&gt;
    IGNORESUIT    Radiation suit powerups are ignored entirely&lt;br /&gt;
    ENDGODMODE    God mode will be disabled when the player enters this sector&lt;br /&gt;
    EXITLEVEL     The player will exit if has &amp;lt; 11 health and this sector tries to do damage&lt;br /&gt;
    TERRAINHIT    A TerrainTypes hit will occur when this sector does damage&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
====damageflags.add====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because some sector types imply the activation of various sector damageflags (for example, DOOM sector type 11 sets sector damageflags ENDGODMODE and EXITLEVEL), this field is supported to add additional damageflags to any that may have been set by the  map itself. Simply specify whatever flags you wish to have added to those that are already set.&lt;br /&gt;
&lt;br /&gt;
====damageflags.remove====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
As with damageflags.add, it may be desirable to turn off some flags that were set by sector specials or other portions of the map data. Use this field to specify any sector damage flags you want to remove from sectors.&lt;br /&gt;
&lt;br /&gt;
====floorterrain====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;@flat&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies an EDF TerrainTypes mnemonic for the type of terrain this sector should exhibit on its floor. If left to default or specified with an invalid name, the terrain of the sector will be determined by its floorpic as usual.&lt;br /&gt;
&lt;br /&gt;
====floorangle====&lt;br /&gt;
:&#039;&#039;Default: 0 (East, or upper edge to the north)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the angle of the floor flat in floating-point degrees from 0 to 359. Note that for compatibility with ZDoom, the angle specified advances in a &#039;&#039;&#039;clockwise&#039;&#039;&#039; fashion, contrary to most other angles in the DOOM engine.&lt;br /&gt;
&lt;br /&gt;
====flooroffsetx/flooroffsety====&lt;br /&gt;
:&#039;&#039;Default: 0&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the x and y offsets of the floor flat, relative to the normal floor grid, in floating point units.&lt;br /&gt;
&lt;br /&gt;
====ceilingterrain====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;@flat&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies an EDF TerrainTypes mnemonic for the type of terrain this sector should exhibit on its ceiling. If left to default or specified with an invalid name, the terrain of the sector will be determined by its floorpic as usual. This currently only affects the behavior of bullet puffs when particles are enabled.&lt;br /&gt;
&lt;br /&gt;
====ceilingangle====&lt;br /&gt;
:&#039;&#039;Default: 0 (East, or upper edge to the north)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the angle of the ceiling flat in floating-point degrees from 0 to 359. Note that for compatibility with ZDoom, the angle specified advances in a &#039;&#039;&#039;clockwise&#039;&#039;&#039; fashion, contrary to most other angles in the DOOM engine.&lt;br /&gt;
&lt;br /&gt;
====flooroffsetx/flooroffsety====&lt;br /&gt;
:&#039;&#039;Default: 0&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the x and y offsets of the ceiling flat, relative to the normal ceiling grid, in floating point units.&lt;br /&gt;
&lt;br /&gt;
====colormaptop====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;@default&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the colormap lump to use when a player&#039;s viewpoint is above the fake ceiling of a BOOM 242 &amp;quot;deep water&amp;quot; effect applying to this sector. If left to default, the global colormap from MapInfo will be used as normal, unless one is specified by the 242 effect.&lt;br /&gt;
&lt;br /&gt;
====colormapmid====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;@default&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the colormap lump to use when a player&#039;s viewpoint is between the normal floor and ceiling for an ordinary sector, or between the fake floor and ceiling for a BOOM 242 &amp;quot;deep water&amp;quot; sector. If left to default, the global colormap from MapInfo will be used as normal, unless one is specified by a 242 effect.&lt;br /&gt;
&lt;br /&gt;
====colormapbottom====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;@default&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the colormap lump to use when a player&#039;s viewpoint is below the fake floor of a BOOM 242 &amp;quot;deep water&amp;quot; effect applying to this sector. If left to default, the global colormap from MapInfo will be used as normal, unless one is specified by the 242 effect.&lt;br /&gt;
&lt;br /&gt;
====portalflags====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These two fields (portalflags.floor and portalflags.ceiling) specify portal property flag values which affect the rendering and behavior of portals attached to this sector&#039;s surfaces. These fields use the same syntax as BEX/EDF flag strings. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
&lt;br /&gt;
    Flag name     Meaning&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    DISABLED      Portal is completely disabled&lt;br /&gt;
    NORENDER      Portal will not be rendered, but may still be interactive&lt;br /&gt;
    NOPASS        Objects cannot pass through the portal even if it is a linked portal&lt;br /&gt;
    BLOCKSOUND    Sound will not traverse through a linked portal&lt;br /&gt;
    OVERLAY       The portal will render the sector&#039;s flat as a blended overlay&lt;br /&gt;
    ADDITIVE      If OVERLAY is also specified, the overlay will use additive blending&lt;br /&gt;
    USEGLOBALTEX  Reserved for future per-portal texture specification&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
====overlayalpha====&lt;br /&gt;
:&#039;&#039;Default&#039;&#039;: 100%&lt;br /&gt;
&lt;br /&gt;
These two fields (overlayalpha.floor and overlayalpha.ceiling) specify the opacity of the corresponding portal overlay, if any exists. You can specify either a percentage value from 0% to 100%, or a plain integer number from 0 to 255. 100%/255 are completely solid, while 0% is invisible.&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Eternity_Engine&amp;diff=2474</id>
		<title>Eternity Engine</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Eternity_Engine&amp;diff=2474"/>
		<updated>2010-10-19T03:45:34Z</updated>

		<summary type="html">&lt;p&gt;Quasar: /* Version 3.39 */ Forgot version name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Eternity Engine is [[Team Eternity]]&#039;s advanced [[Doom Wiki:Doom|Doom]] [[Doom Wiki:Source port|source port]] and the primary subject of this Wiki.&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 Eternity TC, which was at that time a new and active project. When [[Doom Wiki:Lee Killough|Lee Killough]] began the [[MBF]] project, [[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 [[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 [[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, [[Steven &amp;quot;SoM&amp;quot; McGranahan]], joined the project and immediately set to work porting the code to use [[Wikipedia:SDL|SDL]], making it capable of running on many operating systems, including [[Wikipedia:Microsoft Windows|Windows]].&lt;br /&gt;
&lt;br /&gt;
Current major goals for the engine include completing support for [[Doom Wiki:Heretic|Heretic]], a dynamic weapon and inventory system, ZDoom node support, and UDMF support.&lt;br /&gt;
&lt;br /&gt;
==Major Features==&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 thing types, 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;
===[[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 Small scripts to the maps that use them.&lt;br /&gt;
&lt;br /&gt;
==Releases==&lt;br /&gt;
A complete listing of Eternity&#039;s release history follows.&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;
* 3.35.90 &amp;quot;Simorgh&amp;quot; - January 11, 2009&lt;br /&gt;
* 3.35.92 &amp;quot;Nekhbet&amp;quot; - March 22, 2009&lt;br /&gt;
&lt;br /&gt;
===Version 3.37===&lt;br /&gt;
* 3.37.00 &amp;quot;Sekhmet&amp;quot; - January 1, 2010&lt;br /&gt;
&lt;br /&gt;
===Version 3.39===&lt;br /&gt;
* {{Latest}} &amp;quot;Resheph&amp;quot; - October 10, 2010&lt;br /&gt;
&lt;br /&gt;
[[Category:Source ports]]&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Eternity_Engine&amp;diff=2473</id>
		<title>Eternity Engine</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Eternity_Engine&amp;diff=2473"/>
		<updated>2010-10-19T03:43:41Z</updated>

		<summary type="html">&lt;p&gt;Quasar: /* Version 3.37 */ Added 3.39 header&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Eternity Engine is [[Team Eternity]]&#039;s advanced [[Doom Wiki:Doom|Doom]] [[Doom Wiki:Source port|source port]] and the primary subject of this Wiki.&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 Eternity TC, which was at that time a new and active project. When [[Doom Wiki:Lee Killough|Lee Killough]] began the [[MBF]] project, [[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 [[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 [[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, [[Steven &amp;quot;SoM&amp;quot; McGranahan]], joined the project and immediately set to work porting the code to use [[Wikipedia:SDL|SDL]], making it capable of running on many operating systems, including [[Wikipedia:Microsoft Windows|Windows]].&lt;br /&gt;
&lt;br /&gt;
Current major goals for the engine include completing support for [[Doom Wiki:Heretic|Heretic]], a dynamic weapon and inventory system, ZDoom node support, and UDMF support.&lt;br /&gt;
&lt;br /&gt;
==Major Features==&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 thing types, 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;
===[[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 Small scripts to the maps that use them.&lt;br /&gt;
&lt;br /&gt;
==Releases==&lt;br /&gt;
A complete listing of Eternity&#039;s release history follows.&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;
* 3.35.90 &amp;quot;Simorgh&amp;quot; - January 11, 2009&lt;br /&gt;
* 3.35.92 &amp;quot;Nekhbet&amp;quot; - March 22, 2009&lt;br /&gt;
&lt;br /&gt;
===Version 3.37===&lt;br /&gt;
* 3.37.00 &amp;quot;Sekhmet&amp;quot; - January 1, 2010&lt;br /&gt;
&lt;br /&gt;
===Version 3.39===&lt;br /&gt;
* {{Latest}} - October 10, 2010&lt;br /&gt;
&lt;br /&gt;
[[Category:Source ports]]&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Eternity_Engine&amp;diff=2472</id>
		<title>Eternity Engine</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Eternity_Engine&amp;diff=2472"/>
		<updated>2010-10-19T03:42:52Z</updated>

		<summary type="html">&lt;p&gt;Quasar: /* Releases */ Added 3.39.20&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Eternity Engine is [[Team Eternity]]&#039;s advanced [[Doom Wiki:Doom|Doom]] [[Doom Wiki:Source port|source port]] and the primary subject of this Wiki.&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 Eternity TC, which was at that time a new and active project. When [[Doom Wiki:Lee Killough|Lee Killough]] began the [[MBF]] project, [[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 [[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 [[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, [[Steven &amp;quot;SoM&amp;quot; McGranahan]], joined the project and immediately set to work porting the code to use [[Wikipedia:SDL|SDL]], making it capable of running on many operating systems, including [[Wikipedia:Microsoft Windows|Windows]].&lt;br /&gt;
&lt;br /&gt;
Current major goals for the engine include completing support for [[Doom Wiki:Heretic|Heretic]], a dynamic weapon and inventory system, ZDoom node support, and UDMF support.&lt;br /&gt;
&lt;br /&gt;
==Major Features==&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 thing types, 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;
===[[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 Small scripts to the maps that use them.&lt;br /&gt;
&lt;br /&gt;
==Releases==&lt;br /&gt;
A complete listing of Eternity&#039;s release history follows.&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;
* 3.35.90 &amp;quot;Simorgh&amp;quot; - January 11, 2009&lt;br /&gt;
* 3.35.92 &amp;quot;Nekhbet&amp;quot; - March 22, 2009&lt;br /&gt;
&lt;br /&gt;
===Version 3.37===&lt;br /&gt;
* 3.37.00 &amp;quot;Sekhmet&amp;quot; - January 1, 2010&lt;br /&gt;
* {{Latest}} - October 10, 2010&lt;br /&gt;
&lt;br /&gt;
[[Category:Source ports]]&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=ExtraData&amp;diff=2471</id>
		<title>ExtraData</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=ExtraData&amp;diff=2471"/>
		<updated>2010-10-18T03:45:29Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Added documentation of ExtraData sectors, which debut in the next release.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ExtraData is a new data specification language for the [[Eternity Engine]] that allows arbitrary extension of mapthings, lines, and sectors with any number of new fields, with data provided in more or less any format. The use of a textual input language forever removes any future problems caused by binary format limitations. The ExtraData parser is based on the libConfuse configuration file parser library by Martin Hedenfalk, which is also used by GFS and EDF. &lt;br /&gt;
&lt;br /&gt;
Each section in this document deals with one of the ExtraData constructs, as well as how to embed ExtraData in a WAD and how to associate it with a given map. &lt;br /&gt;
&lt;br /&gt;
ExtraData will continue to be supported in future versions of Eternity, even though it will soon be superceded by support for the [[Universal Doom Map Format]].&lt;br /&gt;
&lt;br /&gt;
=General Syntax=&lt;br /&gt;
&#039;&#039;See [[EDF#Syntax|EDF Syntax]], as it is the same.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Embedding and Associating ExtraData =&lt;br /&gt;
&lt;br /&gt;
ExtraData is embedded directly as a text script into a lump of any name. This can be done with any number of wad file management tools, such as WinTex (though WinTex has some bugs which make the process more complicated), XWE or SLumpEd. &lt;br /&gt;
&lt;br /&gt;
An ExtraData script is associated with a map via use of the [[MapInfo]] variable &#039;&#039;&#039;extradata&#039;&#039;&#039;. A map can only have one ExtraData script, but it is possible for multiple maps to share the same script. &lt;br /&gt;
&lt;br /&gt;
Example of ExtraData specification via EMAPINFO: &lt;br /&gt;
   [MAP01]&lt;br /&gt;
   extradata = EDLUMP01&lt;br /&gt;
&lt;br /&gt;
=Mapthings =&lt;br /&gt;
&lt;br /&gt;
Mapthings define monsters, lamps, control points, items, etc -- anything that is spawned on the map at level start. &lt;br /&gt;
&lt;br /&gt;
Each field in the mapthing definition, with the exception of the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field, is optional. If a field is not provided, it takes on the default value indicated below the syntax information. Fields may also be provided in any order. &lt;br /&gt;
&lt;br /&gt;
Note that the order of mapthing definitions in ExtraData is not important. The &#039;&#039;&#039;recordnum&#039;&#039;&#039; field serves to identify mapthing records. &lt;br /&gt;
&lt;br /&gt;
==Creating ExtraData Control Objects ==&lt;br /&gt;
&lt;br /&gt;
Mapthing records in ExtraData are only associated with a special control object that must be placed on the map in the usual manner. &lt;br /&gt;
&lt;br /&gt;
The ExtraData control object has a &#039;&#039;&#039;doomednum&#039;&#039;&#039; of 5004. Each control object specifies its corresponding ExtraData mapthing record number as an integer value in its mapthing &#039;&#039;&#039;options&#039;&#039;&#039; field. If your editor does not allow entering arbitrary values into the options field of mapthings, you will need to use the BOOM command-line editor, CLED. As of the initial writing time of this document, both DETH and Doom Builder support entering arbitrary integer values for the options field. Check your editor&#039;s documentation or user interface to verify if it supports this. &lt;br /&gt;
&lt;br /&gt;
The x, y, and angle fields of the ExtraData control object are passed on to the thing which will be spawned at the control point&#039;s location, so those fields of the control object should be set normally. The true type and options fields of the thing to be spawned, along with any extended fields, are specified in the ExtraData record. &lt;br /&gt;
&lt;br /&gt;
Any number of ExtraData control objects can reference the same ExtraData record. In the event that a control object references a non-existent ExtraData record, the ExtraData script for a level is missing, or the thing type referenced by an ExtraData record isn&#039;t valid, an [[Unknown]] thing will be spawned at the control point&#039;s location.  Note that you cannot spawn ExtraData control objects using ExtraData. Attempting this will also result in an Unknown thing. &lt;br /&gt;
&lt;br /&gt;
==Mapthing Syntax and Fields ==&lt;br /&gt;
&lt;br /&gt;
The syntax of the ExtraData mapthing record is as follows. Remember that all fields except the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field are optional and can be specified in any order. &lt;br /&gt;
 mapthing&lt;br /&gt;
 {&lt;br /&gt;
   recordnum &amp;lt;unique number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are normal mapthing fields&lt;br /&gt;
   type      &amp;lt;doomednum&amp;gt; OR &amp;lt;EDF thingtype mnemonic&amp;gt;&lt;br /&gt;
   options   &amp;lt;options flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are ExtraData extensions&lt;br /&gt;
   tid       &amp;lt;number&amp;gt;&lt;br /&gt;
   args      { &amp;lt;special field&amp;gt;, ... }&lt;br /&gt;
   height    &amp;lt;number&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields:=== &lt;br /&gt;
====recordnum====&lt;br /&gt;
The recordnum serves to identify this record, and is the number which ExtraData control objects must use to associate themselves with a mapthing record. Every ExtraData mapthing record must have a unique record number. If a duplicate record number is detected, the engine will currently exit with an error message. The record number is limited to values between 0 and 65535 inclusive. Some editors may only allow input of numbers up to 32767 in the mapthing options field, or may treat values above 32767 as negative numbers. Beware of this. &lt;br /&gt;
&lt;br /&gt;
====type====&lt;br /&gt;
Default: No meaningful default value; an Unknown thing will be spawned if not valid.&lt;br /&gt;
&lt;br /&gt;
This field specifies the type of object to spawn at the location and angle of ExtraData control objects using this record. This field can accept one of two types of values. The first is a normal thingtype doomednum as specified via [[EDF]] and used by all editors. For example, the DOOM Imp&#039;s doomednum is 3001. &lt;br /&gt;
&lt;br /&gt;
This field can also accept EDF thingtype mnemonics. EDF thingtype mnemonics must be prefixed with &#039;&#039;thing:&#039;&#039; -- this allows the parser to know it is dealing with a string instead of a number. EDF thingtypes must have a unique doomednum to be specified in an ExtraData mapthing record. If the specified EDF thingtype doesn&#039;t exist or has a doomednum of -1, an Unknown object will be spawned instead. &lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
    mapthing { type 3001 }          // This record specifies an Imp via its doomednum&lt;br /&gt;
    &lt;br /&gt;
    mapthing { type DoomImp } // This record specifies an Imp by its EDF mnemonic&lt;br /&gt;
    &lt;br /&gt;
====options====&lt;br /&gt;
Default: No flags are set by default. &lt;br /&gt;
&lt;br /&gt;
This field specifies the options (also known as mapthing flags). This field uses the same syntax as BEX/EDF flag strings, but the syntax will be reviewed here for completeness. &lt;br /&gt;
&lt;br /&gt;
A BEX flag list is a string of flag names separated by whitespace, pipe characters, commas, or plus characters. In ExtraData, if a flag list contains whitespace, commas, or plus signs, it must be enclosed in double or single quotations. Flags are combined using bitwise-OR logic, so a flag name can be specified more than once. Specifying a flag name causes that flag to be turned on. The default state of all flags is off. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
    Flag name   Decimal  Hex     Meaning&lt;br /&gt;
    ------------------------------------------------------------------------------&lt;br /&gt;
    EASY        1        0x0001  Thing appears in easy difficulties&lt;br /&gt;
    NORMAL      2        0x0002  Thing appears in &amp;quot;Hurt Me Plenty&amp;quot;&lt;br /&gt;
    HARD        4        0x0004  Thing appears in Ultra-Violence and Nightmare&lt;br /&gt;
    AMBUSH      8        0x0008  Thing is &amp;quot;deaf&amp;quot;, will not wake up via sound&lt;br /&gt;
    NOTSINGLE   16       0x0010  Thing doesn&#039;t appear in single-player mode&lt;br /&gt;
    NOTDM       32       0x0020  Thing doesn&#039;t appear in deathmatch&lt;br /&gt;
    NOTCOOP     64       0x0040  Thing doesn&#039;t appear in cooperative multiplayer&lt;br /&gt;
    FRIEND      128      0x0080  Thing uses MBF friendly logic&lt;br /&gt;
    DORMANT     512      0x0200  Thing is dormant at map startup (script feature)&lt;br /&gt;
    ------------------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
The mapthing options value 256 (0x0100) is reserved. If this bit is set, all BOOM, MBF, and Eternity extended mapthing bits will be cleared. This is to guard against editors like Hellmaker which set all bits they do not understand, instead of leaving them zero. &lt;br /&gt;
&lt;br /&gt;
Example options fields -- All of these are equivalent: &lt;br /&gt;
    // This is the only syntax that does not require quotations.&lt;br /&gt;
    &lt;br /&gt;
    mapthing { options EASY|NORMAL|HARD }&lt;br /&gt;
    &lt;br /&gt;
    // All of these syntaxes must be quoted, because unquoted strings in &lt;br /&gt;
    // ExtraData cannot contain spaces, commas, or plus signs.&lt;br /&gt;
    &lt;br /&gt;
    mapthing { options &amp;quot;EASY NORMAL HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY | NORMAL | HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY+NORMAL+HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY + NORMAL + HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY,NORMAL,HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY, NORMAL, HARD&amp;quot; }&lt;br /&gt;
====tid====&lt;br /&gt;
Default: 0 &lt;br /&gt;
&lt;br /&gt;
The TID, or &amp;quot;Thing ID&amp;quot;, is a tag for mapthings which is used for identification in [[Small]] scripts. TID values must be positive numbers between 1 and 65535. The TID value zero means no TID. Negative TID values are reserved and are used to indicate special things within the engine. TIDs are not required to be unique, and most Small functions that accept TIDs will perform an action on all mapthings which bear the same TID. Things spawned within Small scripts can also be given TIDs. &lt;br /&gt;
&lt;br /&gt;
====args====&lt;br /&gt;
Default: All args values default to zero. &lt;br /&gt;
&lt;br /&gt;
The args field is a list of up to five special values which can have a broad range of meanings. Any values not provided in the args list will default, and if more than five values are provided, only the first five will be used. Currently, all args values are interpreted as integers (a non-number string evaluates to zero). This may change in the future. &lt;br /&gt;
&lt;br /&gt;
Example args list: &lt;br /&gt;
    mapthing { args { 0, 1, 2, 3, 4 } }&lt;br /&gt;
    &lt;br /&gt;
====height====&lt;br /&gt;
Default: 0 &lt;br /&gt;
&lt;br /&gt;
For normal objects, this field indicates a distance above the floor that the thing will spawn at level start. For objects with the SPAWNCEILING flag, this field indicates a distance below the ceiling instead. This field will have no effect on objects which spawn at a randomized height.&lt;br /&gt;
&lt;br /&gt;
=Linedefs =&lt;br /&gt;
&lt;br /&gt;
Linedefs define walls, two-sided textures, and provide action triggers within maps. &lt;br /&gt;
&lt;br /&gt;
Each field in the linedef definition, with the exception of the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field, is optional. If a field is not provided, it takes on the default value indicated below the syntax information. Fields may also be provided in any order. &lt;br /&gt;
&lt;br /&gt;
Note that the order of linedef definitions in ExtraData is not important. The &#039;&#039;&#039;recordnum&#039;&#039;&#039; field serves to identify linedef records. &lt;br /&gt;
&lt;br /&gt;
==Creating ExtraData Linedefs ==&lt;br /&gt;
&lt;br /&gt;
Linedef records in ExtraData are associated either with lines which bear the ExtraData Control Line Special (270), or with any linedef in a DOOM-format map which uses a parameterized line special. You can place the 270 special, as well as parameterized special numbers, into the normal &amp;quot;special&amp;quot; field of a line using virtually any map editor. Editors with Eternity-specific configurations should support these specials natively.&lt;br /&gt;
&lt;br /&gt;
Each control linedef (or directly-used parameterized special) specifies its corresponding ExtraData linedef record number as an integer value in its linedef tag field. If your editor does not allow entering arbitrary values up to 32767 into the tag field of linedefs, you will need to use the BOOM command-line editor, CLED. As of the initial writing time of this document, both DETH and Doom Builder support entering arbitrary integer values for the tag field. Check your editor&#039;s documentation or user interface to verify if it supports this. &lt;br /&gt;
&lt;br /&gt;
The flags, sidedefs, textures, and location of the ExtraData control linedef are used normally by the line and cannot be altered from within ExtraData. The true special (if 270 is used) and tag fields of the linedef, along with any extended fields, are specified in the ExtraData record which the control linedef references. &lt;br /&gt;
&lt;br /&gt;
Any number of linedefs can reference the same ExtraData record. In the event that a control linedef references a non-existent ExtraData record or the ExtraData script for a level is missing, the special and tag of the ExtraData control linedef will both be set to zero. &lt;br /&gt;
&lt;br /&gt;
==Linedef Syntax and Fields ==&lt;br /&gt;
&lt;br /&gt;
The syntax of the ExtraData linedef record is as follows. Remember that all fields except the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field are optional and can be specified in any order. &lt;br /&gt;
 linedef&lt;br /&gt;
 {&lt;br /&gt;
   recordnum &amp;lt;unique number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are normal linedef fields&lt;br /&gt;
   special &amp;lt;number&amp;gt; OR &amp;lt;special name&amp;gt;&lt;br /&gt;
   tag &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are ExtraData extensions&lt;br /&gt;
   extflags &amp;lt;extended line flags list&amp;gt;&lt;br /&gt;
   args { &amp;lt;special field&amp;gt;, ... }&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields: ===&lt;br /&gt;
====recordnum====&lt;br /&gt;
The recordnum serves to identify this record, and is the number which ExtraData control linedefs must use to associate themselves with a linedef record. Every ExtraData linedef record must have a unique record number. If a duplicate record number is detected, the engine will currently exit with an error message. The record number is limited to values between 0 and 32767 inclusive. Some editors may only allow input of numbers up to 255 in the linedef tag field. Beware of this. &lt;br /&gt;
&lt;br /&gt;
====special====&lt;br /&gt;
:&#039;&#039;Default: 0 &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The special field determines what [[Linedef_types|type of action]] may be taken when a line is crossed, used, shot, etc. There are three types of linedef specials in Eternity: normal, generalized, and parameterized. Parameterized specials use the &#039;&#039;&#039;args&#039;&#039;&#039; field documented below to provide complete customization of line actions. &lt;br /&gt;
&lt;br /&gt;
This field can accept numbers for any special type, including generalized and parameterized, but it can also accept special names for parameterized line types. See the [[Detailed parameterized linedef specification]] for a complete list of the available names.&lt;br /&gt;
&lt;br /&gt;
====tag====&lt;br /&gt;
:&#039;&#039;Default: 0 &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The tag of the linedef, used by DOOM-style line specials and sector effects.&lt;br /&gt;
&lt;br /&gt;
====extflags====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This field specifies extended linedef flag values which impact the functionality of parameterized linedef specials. This field uses the same syntax as BEX/EDF flag strings, but the syntax will be reviewed here for completeness. &lt;br /&gt;
&lt;br /&gt;
A BEX flag list is a string of flag names separated by whitespace, pipe characters, commas, or plus characters. In ExtraData, if a flag list contains whitespace, commas, or plus signs, it must be enclosed in double or single quotations. Flags are combined using bitwise-OR logic, so a flag name can be specified more than once. Specifying a flag name causes that flag to be turned on. The default state of all flags is off. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
    Flag name   Decimal  Hex     Meaning&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    CROSS       1        0x0001  Linedef can be activated by being crossed.&lt;br /&gt;
    USE         2        0x0002  Linedef can be activated by being used.&lt;br /&gt;
    IMPACT      4        0x0004  Linedef can be activated by being shot.&lt;br /&gt;
    PUSH        8        0x0008  Linedef can be activated by being pushed.&lt;br /&gt;
    PLAYER      16       0x0010  Linedef can be activated by players.&lt;br /&gt;
    MONSTER     32       0x0020  Linedef can be activated by objects with SPACMONSTER flag.&lt;br /&gt;
    MISSILE     64       0x0040  Linedef can be activated by objects with SPACMISSILE flag.&lt;br /&gt;
    REPEAT      128      0x0080  Linedef action is repeatable.&lt;br /&gt;
    1SONLY      256      0x0100  Linedef can only be activated from first side.&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
Notes: IMPACT is currently only implemented for bullet weapons. The ability to use IMPACT with MISSILE will be added in the near future. The PUSH style of activation is not implemented at all yet, so this flag currently does nothing. &lt;br /&gt;
&lt;br /&gt;
Example flags fields -- All of these are equivalent: &lt;br /&gt;
    // This is the only syntax that does not require quotations.&lt;br /&gt;
    &lt;br /&gt;
    linedef { extflags CROSS|PLAYER|MISSILE|REPEAT }&lt;br /&gt;
    &lt;br /&gt;
    // All of these syntaxes must be quoted, because unquoted strings in &lt;br /&gt;
    // ExtraData cannot contain spaces, commas, or plus signs.&lt;br /&gt;
    &lt;br /&gt;
    linedef { extflags &amp;quot;CROSS PLAYER MISSILE REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS | PLAYER | MISSILE | REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS+PLAYER+MISSILE+REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS + PLAYER + MISSILE + REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS,PLAYER,MISSILE,REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS, PLAYER, MISSILE, REPEAT&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
====args====&lt;br /&gt;
:&#039;&#039;Default: All args values default to zero. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The args field is a list of up to five special values which can have a broad range of meanings. Any values not provided in the args list will default, and if more than five values are provided, only the first five will be used. Currently, all args values are interpreted as integers (a non-number string evaluates to zero). This may change in the future. The args list is used by parameterized linedef specials. &lt;br /&gt;
&lt;br /&gt;
Example args list: &lt;br /&gt;
    linedef { args { 0, 1, 2, 3, 4 } }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Sectors=&lt;br /&gt;
&lt;br /&gt;
Sectors define distinct areas of the map that are bordered by linedefs, with floor and ceiling properties, lighting data, and specials. &lt;br /&gt;
&lt;br /&gt;
Each field in the sector definition, with the exception of the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field, is optional. If a field is not provided, it takes on the default value indicated below the syntax information. Fields may also be provided in any order. &lt;br /&gt;
&lt;br /&gt;
Note that the order of sector definitions in ExtraData is not important. The &#039;&#039;&#039;recordnum&#039;&#039;&#039; field serves to identify sector records. &lt;br /&gt;
&lt;br /&gt;
==Creating ExtraData Sectors==&lt;br /&gt;
&lt;br /&gt;
Sector records in ExtraData are associated with lines which bear the ExtraData Sector Control Special (401). The linedef&#039;s front side sector is the map sector that will receive properties from the ExtraData record which is specified by number in the linedef&#039;s tag.&lt;br /&gt;
&lt;br /&gt;
Since ExtraData is attached to sectors via linedefs and not through overriding any of the sectors&#039; native fields, you specify all of the normal data for a sector in the map itself, and overriding that data through ExtraData sector records is not supported.&lt;br /&gt;
&lt;br /&gt;
Any number of linedefs can reference the same ExtraData sector record. In the event that a control linedef references a non-existent ExtraData record or the ExtraData script for a level is missing, the tag of the ExtraData sector control linedef will be set to zero and will otherwise be ignored.&lt;br /&gt;
&lt;br /&gt;
==Sector Syntax and Fields ==&lt;br /&gt;
&lt;br /&gt;
The syntax of the ExtraData sector record is as follows. Remember that all fields except the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field are optional and can be specified in any order. &lt;br /&gt;
 sector&lt;br /&gt;
 {&lt;br /&gt;
   recordnum &amp;lt;unique number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are ExtraData extensions to sector data&lt;br /&gt;
   flags &amp;lt;sector flag list&amp;gt;&lt;br /&gt;
   flagsadd &amp;lt;sector flag list&amp;gt;&lt;br /&gt;
   flagsremove &amp;lt;sector flag list&amp;gt;&lt;br /&gt;
   damage &amp;lt;integer&amp;gt;&lt;br /&gt;
   damagemask &amp;lt;integer&amp;gt;&lt;br /&gt;
   damagemod &amp;lt;method of damage type&amp;gt;&lt;br /&gt;
   damageflags &amp;lt;sector damage flags list&amp;gt;&lt;br /&gt;
   damageflagsadd &amp;lt;sector damage flags list&amp;gt;&lt;br /&gt;
   damageflagsremove &amp;lt;sector damage flags list&amp;gt;&lt;br /&gt;
   floorterrain &amp;lt;terrain name&amp;gt;&lt;br /&gt;
   floorangle &amp;lt;float&amp;gt;  &lt;br /&gt;
   flooroffsetx &amp;lt;float&amp;gt;&lt;br /&gt;
   flooroffsety &amp;lt;float&amp;gt;&lt;br /&gt;
   ceilingterrain &amp;lt;terrain name&amp;gt;&lt;br /&gt;
   ceilingangle &amp;lt;float&amp;gt;&lt;br /&gt;
   ceilingoffsetx &amp;lt;float&amp;gt;&lt;br /&gt;
   ceilingoffsety &amp;lt;float&amp;gt;&lt;br /&gt;
   colormaptop &amp;lt;lump name&amp;gt;&lt;br /&gt;
   colormapmid &amp;lt;lump name&amp;gt;&lt;br /&gt;
   colormapbottom &amp;lt;lump name&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields: ===&lt;br /&gt;
====recordnum====&lt;br /&gt;
The recordnum serves to identify this record, and is the number which ExtraData sector control linedefs must use to associate themselves with a sector record. Every ExtraData sector record must have a unique record number. If a duplicate record number is detected, the engine will currently exit with an error message. The record number is limited to values between 0 and 32767 inclusive. Some editors may only allow input of numbers up to 255 in the linedef tag field. Beware of this. &lt;br /&gt;
&lt;br /&gt;
====flags====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This field specifies sector flag values which specify various properties of sectors. This field uses the same syntax as BEX/EDF flag strings. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
&lt;br /&gt;
    Flag name     Meaning&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    SECRET        Sector is secret&lt;br /&gt;
    FRICTION      Sector has friction enabled, if targeted by a BOOM friction transfer line&lt;br /&gt;
    PUSH          Sector has BOOM push effects enabled&lt;br /&gt;
    KILLSOUND     Objects in sector cannot make sounds.&lt;br /&gt;
    KILLMOVESOUND Sector makes no movement sounds, even if it has a special sound sequence&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
Example flags fields -- All of these are equivalent: &lt;br /&gt;
    // This is the only syntax that does not require quotations.&lt;br /&gt;
    &lt;br /&gt;
    sector { flags SECRET|FRICTION|KILLMOVESOUND }&lt;br /&gt;
    &lt;br /&gt;
    // All of these syntaxes must be quoted, because unquoted strings in &lt;br /&gt;
    // ExtraData cannot contain spaces, commas, or plus signs.&lt;br /&gt;
    &lt;br /&gt;
    sector { flags &amp;quot;SECRET FRICTION KILLMOVESOUND&amp;quot; }&lt;br /&gt;
    sector { flags &amp;quot;SECRET | FRICTION | KILLMOVESOUND&amp;quot; }&lt;br /&gt;
    sector { flags &amp;quot;SECRET+FRICTION+KILLMOVESOUND&amp;quot; }&lt;br /&gt;
    sector { flags &amp;quot;SECRET + FRICTION + KILLMOVESOUND&amp;quot; }&lt;br /&gt;
    sector { flags &amp;quot;SECRET,FRICTION,KILLMOVESOUND&amp;quot; }&lt;br /&gt;
    sector { flags &amp;quot;SECRET, FRICTION, KILLMOVESOUND&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
====flagsadd====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is a list of sector flags to add to the sector. This is supported because some sector specials (such as sector special 9, &amp;quot;Secret&amp;quot;) imply that certain sector flags will be set on the sector before ExtraData is applied. If you wish to only add flags and not override any that may have been set by sector specials, use this field to specify only the flags that you wish to be added to the sector.&lt;br /&gt;
&lt;br /&gt;
====flagsremove====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is a list of sector flags to remove from the sector. If you wish to only remove flags and not override any that may have been set by sector specials, use this field to specify only the flags that you wish to be removed from the sector.&lt;br /&gt;
&lt;br /&gt;
====damage====&lt;br /&gt;
:&#039;&#039;Default: 0&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the amount of damage this sector does to players if the players are standing inside the sector and do not meet any special exemption criteria, such as wearing a Radiation Suit. This amount is done at each damage opportunity, which is determined by the &#039;&#039;&#039;damagemask&#039;&#039;&#039; field.&lt;br /&gt;
&lt;br /&gt;
====damagemask====&lt;br /&gt;
:&#039;&#039;Default: 0&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the interval in gametics between damage opportunities for a player standing in this sector. The default value of 0 will cause the sector to do constant and instantaneous damage every gametic. Setting this value to an integer greater than 0 will cause damage to be done every Nth gametic, with N being the value of this field. The default DOOM nukage types all use a damagemask of 32, which is roughly once per in-game second (there are 35 gametics per second).&lt;br /&gt;
&lt;br /&gt;
====damagemod====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;Unknown&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the type of damage done by this sector. If &amp;quot;Unknown&amp;quot; is specified, the damage done is generic. The value specified should be a valid EDF damagetype mnemonic. If it is not, &amp;quot;Unknown&amp;quot; will be used. This can be used to have a sector type trigger special pain and death states when it deals damage.&lt;br /&gt;
&lt;br /&gt;
====damageflags====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This field specifies sector damage flag values which affect the manner in which a sector does damage. This field uses the same syntax as BEX/EDF flag strings. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
&lt;br /&gt;
    Flag name     Meaning&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    LEAKYSUIT     The player may take damage at random even if he has the radsuit powerup&lt;br /&gt;
    IGNORESUIT    Radiation suit powerups are ignored entirely&lt;br /&gt;
    ENDGODMODE    God mode will be disabled when the player enters this sector&lt;br /&gt;
    EXITLEVEL     The player will exit if has &amp;lt; 11 health and this sector tries to do damage&lt;br /&gt;
    TERRAINHIT    A TerrainTypes hit will occur when this sector does damage&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
====damageflagsadd====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Because some sector types imply the activation of various sector damageflags (for example, DOOM sector type 11 sets sector damageflags ENDGODMODE and EXITLEVEL), this field is supported to add additional damageflags to any that may have been set by the  map itself. Simply specify whatever flags you wish to have added to those that are already set.&lt;br /&gt;
&lt;br /&gt;
====damageflagsremove====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
As with damageflagsadd, it may be desirable to turn off some flags that were set by sector specials or other portions of the map data. Use this field to specify any sector damage flags you want to remove from sectors.&lt;br /&gt;
&lt;br /&gt;
====floorterrain====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;@flat&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies an EDF TerrainTypes mnemonic for the type of terrain this sector should exhibit on its floor. If left to default or specified with an invalid name, the terrain of the sector will be determined by its floorpic as usual.&lt;br /&gt;
&lt;br /&gt;
====floorangle====&lt;br /&gt;
:&#039;&#039;Default: 0 (East, or upper edge to the north)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the angle of the floor flat in floating-point degrees from 0 to 359. Note that for compatibility with ZDoom, the angle specified advances in a &#039;&#039;&#039;clockwise&#039;&#039;&#039; fashion, contrary to most other angles in the DOOM engine.&lt;br /&gt;
&lt;br /&gt;
====flooroffsetx/flooroffsety====&lt;br /&gt;
:&#039;&#039;Default: 0&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the x and y offsets of the floor flat, relative to the normal floor grid, in floating point units.&lt;br /&gt;
&lt;br /&gt;
====ceilingterrain====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;@flat&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies an EDF TerrainTypes mnemonic for the type of terrain this sector should exhibit on its ceiling. If left to default or specified with an invalid name, the terrain of the sector will be determined by its floorpic as usual. This currently only affects the behavior of bullet puffs when particles are enabled.&lt;br /&gt;
&lt;br /&gt;
====ceilingangle====&lt;br /&gt;
:&#039;&#039;Default: 0 (East, or upper edge to the north)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the angle of the ceiling flat in floating-point degrees from 0 to 359. Note that for compatibility with ZDoom, the angle specified advances in a &#039;&#039;&#039;clockwise&#039;&#039;&#039; fashion, contrary to most other angles in the DOOM engine.&lt;br /&gt;
&lt;br /&gt;
====flooroffsetx/flooroffsety====&lt;br /&gt;
:&#039;&#039;Default: 0&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the x and y offsets of the ceiling flat, relative to the normal ceiling grid, in floating point units.&lt;br /&gt;
&lt;br /&gt;
====colormaptop====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;@default&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the colormap lump to use when a player&#039;s viewpoint is above the fake ceiling of a BOOM 242 &amp;quot;deep water&amp;quot; effect applying to this sector. If left to default, the global colormap from MapInfo will be used as normal, unless one is specified by the 242 effect.&lt;br /&gt;
&lt;br /&gt;
====colormapmid====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;@default&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the colormap lump to use when a player&#039;s viewpoint is between the normal floor and ceiling for an ordinary sector, or between the fake floor and ceiling for a BOOM 242 &amp;quot;deep water&amp;quot; sector. If left to default, the global colormap from MapInfo will be used as normal, unless one is specified by a 242 effect.&lt;br /&gt;
&lt;br /&gt;
====colormapbottom====&lt;br /&gt;
:&#039;&#039;Default: &amp;quot;@default&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the colormap lump to use when a player&#039;s viewpoint is below the fake floor of a BOOM 242 &amp;quot;deep water&amp;quot; effect applying to this sector. If left to default, the global colormap from MapInfo will be used as normal, unless one is specified by the 242 effect.&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Template:Latest&amp;diff=2470</id>
		<title>Template:Latest</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Template:Latest&amp;diff=2470"/>
		<updated>2010-10-18T03:00:14Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Updated for new version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.doomworld.com/vb/eternity/52873-eternity-engine-v3-39-20-resheph/ 3.39.20]&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=ExtraData&amp;diff=2428</id>
		<title>ExtraData</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=ExtraData&amp;diff=2428"/>
		<updated>2010-04-19T18:10:08Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Added documentation of ability to bypass line special 270 and use parameterized special #&amp;#039;s directly in the map.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ExtraData is a new data specification language for the [[Eternity Engine]] that allows arbitrary extension of mapthings, lines, and sectors with any number of new fields, with data provided in more or less any format. The use of a textual input language forever removes any future problems caused by binary format limitations. The ExtraData parser is based on the libConfuse configuration file parser library by Martin Hedenfalk, which is also used by GFS and EDF. &lt;br /&gt;
&lt;br /&gt;
Each section in this document deals with one of the ExtraData constructs, as well as how to embed ExtraData in a WAD and how to associate it with a given map. &lt;br /&gt;
&lt;br /&gt;
ExtraData will continue to be supported in future versions of Eternity, even though it will soon be superceded by support for the [[Universal Doom Map Format]].&lt;br /&gt;
&lt;br /&gt;
=General Syntax=&lt;br /&gt;
&#039;&#039;See [[EDF#Syntax|EDF Syntax]], as it is the same.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Embedding and Associating ExtraData =&lt;br /&gt;
&lt;br /&gt;
ExtraData is embedded directly as a text script into a lump of any name. This can be done with any number of wad file management tools, such as WinTex (though WinTex has some bugs which make the process more complicated), XWE or SLumpEd. &lt;br /&gt;
&lt;br /&gt;
An ExtraData script is associated with a map via use of the [[MapInfo]] variable &#039;&#039;&#039;extradata&#039;&#039;&#039;. A map can only have one ExtraData script, but it is possible for multiple maps to share the same script. &lt;br /&gt;
&lt;br /&gt;
Example of ExtraData specification via EMAPINFO: &lt;br /&gt;
   [MAP01]&lt;br /&gt;
   extradata = EDLUMP01&lt;br /&gt;
&lt;br /&gt;
=Mapthings =&lt;br /&gt;
&lt;br /&gt;
Mapthings define monsters, lamps, control points, items, etc -- anything that is spawned on the map at level start. &lt;br /&gt;
&lt;br /&gt;
Each field in the mapthing definition, with the exception of the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field, is optional. If a field is not provided, it takes on the default value indicated below the syntax information. Fields may also be provided in any order. &lt;br /&gt;
&lt;br /&gt;
Note that the order of mapthing definitions in ExtraData is not important. The &#039;&#039;&#039;recordnum&#039;&#039;&#039; field serves to identify mapthing records. &lt;br /&gt;
&lt;br /&gt;
==Creating ExtraData Control Objects ==&lt;br /&gt;
&lt;br /&gt;
Mapthing records in ExtraData are only associated with a special control object that must be placed on the map in the usual manner. &lt;br /&gt;
&lt;br /&gt;
The ExtraData control object has a &#039;&#039;&#039;doomednum&#039;&#039;&#039; of 5004. Each control object specifies its corresponding ExtraData mapthing record number as an integer value in its mapthing &#039;&#039;&#039;options&#039;&#039;&#039; field. If your editor does not allow entering arbitrary values into the options field of mapthings, you will need to use the BOOM command-line editor, CLED. As of the initial writing time of this document, both DETH and Doom Builder support entering arbitrary integer values for the options field. Check your editor&#039;s documentation or user interface to verify if it supports this. &lt;br /&gt;
&lt;br /&gt;
The x, y, and angle fields of the ExtraData control object are passed on to the thing which will be spawned at the control point&#039;s location, so those fields of the control object should be set normally. The true type and options fields of the thing to be spawned, along with any extended fields, are specified in the ExtraData record. &lt;br /&gt;
&lt;br /&gt;
Any number of ExtraData control objects can reference the same ExtraData record. In the event that a control object references a non-existent ExtraData record, the ExtraData script for a level is missing, or the thing type referenced by an ExtraData record isn&#039;t valid, an [[Unknown]] thing will be spawned at the control point&#039;s location.  Note that you cannot spawn ExtraData control objects using ExtraData. Attempting this will also result in an Unknown thing. &lt;br /&gt;
&lt;br /&gt;
==Mapthing Syntax and Fields ==&lt;br /&gt;
&lt;br /&gt;
The syntax of the ExtraData mapthing record is as follows. Remember that all fields except the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field are optional and can be specified in any order. &lt;br /&gt;
 mapthing&lt;br /&gt;
 {&lt;br /&gt;
   recordnum &amp;lt;unique number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are normal mapthing fields&lt;br /&gt;
   type      &amp;lt;doomednum&amp;gt; OR &amp;lt;EDF thingtype mnemonic&amp;gt;&lt;br /&gt;
   options   &amp;lt;options flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are ExtraData extensions&lt;br /&gt;
   tid       &amp;lt;number&amp;gt;&lt;br /&gt;
   args      { &amp;lt;special field&amp;gt;, ... }&lt;br /&gt;
   height    &amp;lt;number&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields:=== &lt;br /&gt;
====recordnum====&lt;br /&gt;
The recordnum serves to identify this record, and is the number which ExtraData control objects must use to associate themselves with a mapthing record. Every ExtraData mapthing record must have a unique record number. If a duplicate record number is detected, the engine will currently exit with an error message. The record number is limited to values between 0 and 65535 inclusive. Some editors may only allow input of numbers up to 32767 in the mapthing options field, or may treat values above 32767 as negative numbers. Beware of this. &lt;br /&gt;
&lt;br /&gt;
====type====&lt;br /&gt;
Default: No meaningful default value; an Unknown thing will be spawned if not valid.&lt;br /&gt;
&lt;br /&gt;
This field specifies the type of object to spawn at the location and angle of ExtraData control objects using this record. This field can accept one of two types of values. The first is a normal thingtype doomednum as specified via [[EDF]] and used by all editors. For example, the DOOM Imp&#039;s doomednum is 3001. &lt;br /&gt;
&lt;br /&gt;
This field can also accept EDF thingtype mnemonics. EDF thingtype mnemonics must be prefixed with &#039;&#039;thing:&#039;&#039; -- this allows the parser to know it is dealing with a string instead of a number. EDF thingtypes must have a unique doomednum to be specified in an ExtraData mapthing record. If the specified EDF thingtype doesn&#039;t exist or has a doomednum of -1, an Unknown object will be spawned instead. &lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
    mapthing { type 3001 }          // This record specifies an Imp via its doomednum&lt;br /&gt;
    &lt;br /&gt;
    mapthing { type DoomImp } // This record specifies an Imp by its EDF mnemonic&lt;br /&gt;
    &lt;br /&gt;
====options====&lt;br /&gt;
Default: No flags are set by default. &lt;br /&gt;
&lt;br /&gt;
This field specifies the options (also known as mapthing flags). This field uses the same syntax as BEX/EDF flag strings, but the syntax will be reviewed here for completeness. &lt;br /&gt;
&lt;br /&gt;
A BEX flag list is a string of flag names separated by whitespace, pipe characters, commas, or plus characters. In ExtraData, if a flag list contains whitespace, commas, or plus signs, it must be enclosed in double or single quotations. Flags are combined using bitwise-OR logic, so a flag name can be specified more than once. Specifying a flag name causes that flag to be turned on. The default state of all flags is off. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
    Flag name   Decimal  Hex     Meaning&lt;br /&gt;
    ------------------------------------------------------------------------------&lt;br /&gt;
    EASY        1        0x0001  Thing appears in easy difficulties&lt;br /&gt;
    NORMAL      2        0x0002  Thing appears in &amp;quot;Hurt Me Plenty&amp;quot;&lt;br /&gt;
    HARD        4        0x0004  Thing appears in Ultra-Violence and Nightmare&lt;br /&gt;
    AMBUSH      8        0x0008  Thing is &amp;quot;deaf&amp;quot;, will not wake up via sound&lt;br /&gt;
    NOTSINGLE   16       0x0010  Thing doesn&#039;t appear in single-player mode&lt;br /&gt;
    NOTDM       32       0x0020  Thing doesn&#039;t appear in deathmatch&lt;br /&gt;
    NOTCOOP     64       0x0040  Thing doesn&#039;t appear in cooperative multiplayer&lt;br /&gt;
    FRIEND      128      0x0080  Thing uses MBF friendly logic&lt;br /&gt;
    DORMANT     512      0x0200  Thing is dormant at map startup (script feature)&lt;br /&gt;
    ------------------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
The mapthing options value 256 (0x0100) is reserved. If this bit is set, all BOOM, MBF, and Eternity extended mapthing bits will be cleared. This is to guard against editors like Hellmaker which set all bits they do not understand, instead of leaving them zero. &lt;br /&gt;
&lt;br /&gt;
Example options fields -- All of these are equivalent: &lt;br /&gt;
    // This is the only syntax that does not require quotations.&lt;br /&gt;
    &lt;br /&gt;
    mapthing { options EASY|NORMAL|HARD }&lt;br /&gt;
    &lt;br /&gt;
    // All of these syntaxes must be quoted, because unquoted strings in &lt;br /&gt;
    // ExtraData cannot contain spaces, commas, or plus signs.&lt;br /&gt;
    &lt;br /&gt;
    mapthing { options &amp;quot;EASY NORMAL HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY | NORMAL | HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY+NORMAL+HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY + NORMAL + HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY,NORMAL,HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY, NORMAL, HARD&amp;quot; }&lt;br /&gt;
====tid====&lt;br /&gt;
Default: 0 &lt;br /&gt;
&lt;br /&gt;
The TID, or &amp;quot;Thing ID&amp;quot;, is a tag for mapthings which is used for identification in [[Small]] scripts. TID values must be positive numbers between 1 and 65535. The TID value zero means no TID. Negative TID values are reserved and are used to indicate special things within the engine. TIDs are not required to be unique, and most Small functions that accept TIDs will perform an action on all mapthings which bear the same TID. Things spawned within Small scripts can also be given TIDs. &lt;br /&gt;
&lt;br /&gt;
====args====&lt;br /&gt;
Default: All args values default to zero. &lt;br /&gt;
&lt;br /&gt;
The args field is a list of up to five special values which can have a broad range of meanings. Any values not provided in the args list will default, and if more than five values are provided, only the first five will be used. Currently, all args values are interpreted as integers (a non-number string evaluates to zero). This may change in the future. &lt;br /&gt;
&lt;br /&gt;
Example args list: &lt;br /&gt;
    mapthing { args { 0, 1, 2, 3, 4 } }&lt;br /&gt;
    &lt;br /&gt;
====height====&lt;br /&gt;
Default: 0 &lt;br /&gt;
&lt;br /&gt;
For normal objects, this field indicates a distance above the floor that the thing will spawn at level start. For objects with the SPAWNCEILING flag, this field indicates a distance below the ceiling instead. This field will have no effect on objects which spawn at a randomized height.&lt;br /&gt;
&lt;br /&gt;
=Linedefs =&lt;br /&gt;
&lt;br /&gt;
Linedefs define walls, two-sided textures, and provide action triggers within maps. &lt;br /&gt;
&lt;br /&gt;
Each field in the linedef definition, with the exception of the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field, is optional. If a field is not provided, it takes on the default value indicated below the syntax information. Fields may also be provided in any order. &lt;br /&gt;
&lt;br /&gt;
Note that the order of linedef definitions in ExtraData is not important. The &#039;&#039;&#039;recordnum&#039;&#039;&#039; field serves to identify linedef records. &lt;br /&gt;
&lt;br /&gt;
==Creating ExtraData Linedefs ==&lt;br /&gt;
&lt;br /&gt;
Linedef records in ExtraData are associated either with lines which bear the ExtraData Control Line Special (270), or with any linedef in a DOOM-format map which uses a parameterized line special. You can place the 270 special, as well as parameterized special numbers, into the normal &amp;quot;special&amp;quot; field of a line using virtually any map editor. Editors with Eternity-specific configurations should support these specials natively.&lt;br /&gt;
&lt;br /&gt;
Each control linedef (or directly-used parameterized special) specifies its corresponding ExtraData linedef record number as an integer value in its linedef tag field. If your editor does not allow entering arbitrary values up to 32767 into the tag field of linedefs, you will need to use the BOOM command-line editor, CLED. As of the initial writing time of this document, both DETH and Doom Builder support entering arbitrary integer values for the tag field. Check your editor&#039;s documentation or user interface to verify if it supports this. &lt;br /&gt;
&lt;br /&gt;
The flags, sidedefs, textures, and location of the ExtraData control linedef are used normally by the line and cannot be altered from within ExtraData. The true special (if 270 is used) and tag fields of the linedef, along with any extended fields, are specified in the ExtraData record which the control linedef references. &lt;br /&gt;
&lt;br /&gt;
Any number of linedefs can reference the same ExtraData record. In the event that a control linedef references a non-existent ExtraData record or the ExtraData script for a level is missing, the special and tag of the ExtraData control linedef will both be set to zero. &lt;br /&gt;
&lt;br /&gt;
==Linedef Syntax and Fields ==&lt;br /&gt;
&lt;br /&gt;
The syntax of the ExtraData linedef record is as follows. Remember that all fields except the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field are optional and can be specified in any order. &lt;br /&gt;
 linedef&lt;br /&gt;
 {&lt;br /&gt;
   recordnum &amp;lt;unique number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are normal linedef fields&lt;br /&gt;
   special &amp;lt;number&amp;gt; OR &amp;lt;special name&amp;gt;&lt;br /&gt;
   tag &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are ExtraData extensions&lt;br /&gt;
   extflags &amp;lt;extended line flags list&amp;gt;&lt;br /&gt;
   args { &amp;lt;special field&amp;gt;, ... }&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields: ===&lt;br /&gt;
====recordnum====&lt;br /&gt;
The recordnum serves to identify this record, and is the number which ExtraData control linedefs must use to associate themselves with a linedef record. Every ExtraData linedef record must have a unique record number. If a duplicate record number is detected, the engine will currently exit with an error message. The record number is limited to values between 0 and 32767 inclusive. Some editors may only allow input of numbers up to 255 in the linedef tag field. Beware of this. &lt;br /&gt;
&lt;br /&gt;
====special====&lt;br /&gt;
:&#039;&#039;Default: 0 &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The special field determines what [[Linedef_types|type of action]] may be taken when a line is crossed, used, shot, etc. There are three types of linedef specials in Eternity: normal, generalized, and parameterized. Parameterized specials use the &#039;&#039;&#039;args&#039;&#039;&#039; field documented below to provide complete customization of line actions. &lt;br /&gt;
&lt;br /&gt;
This field can accept numbers for any special type, including generalized and parameterized, but it can also accept special names for parameterized line types. See the [[Detailed parameterized linedef specification]] for a complete list of the available names.&lt;br /&gt;
&lt;br /&gt;
====tag====&lt;br /&gt;
:&#039;&#039;Default: 0 &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The tag of the linedef, used by DOOM-style line specials and sector effects.&lt;br /&gt;
&lt;br /&gt;
====extflags====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This field specifies extended linedef flag values which impact the functionality of parameterized linedef specials. This field uses the same syntax as BEX/EDF flag strings, but the syntax will be reviewed here for completeness. &lt;br /&gt;
&lt;br /&gt;
A BEX flag list is a string of flag names separated by whitespace, pipe characters, commas, or plus characters. In ExtraData, if a flag list contains whitespace, commas, or plus signs, it must be enclosed in double or single quotations. Flags are combined using bitwise-OR logic, so a flag name can be specified more than once. Specifying a flag name causes that flag to be turned on. The default state of all flags is off. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
    Flag name   Decimal  Hex     Meaning&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    CROSS       1        0x0001  Linedef can be activated by being crossed.&lt;br /&gt;
    USE         2        0x0002  Linedef can be activated by being used.&lt;br /&gt;
    IMPACT      4        0x0004  Linedef can be activated by being shot.&lt;br /&gt;
    PUSH        8        0x0008  Linedef can be activated by being pushed.&lt;br /&gt;
    PLAYER      16       0x0010  Linedef can be activated by players.&lt;br /&gt;
    MONSTER     32       0x0020  Linedef can be activated by objects with SPACMONSTER flag.&lt;br /&gt;
    MISSILE     64       0x0040  Linedef can be activated by objects with SPACMISSILE flag.&lt;br /&gt;
    REPEAT      128      0x0080  Linedef action is repeatable.&lt;br /&gt;
    1SONLY      256      0x0100  Linedef can only be activated from first side.&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
Notes: IMPACT is currently only implemented for bullet weapons. The ability to use IMPACT with MISSILE will be added in the near future. The PUSH style of activation is not implemented at all yet, so this flag currently does nothing. &lt;br /&gt;
&lt;br /&gt;
Example flags fields -- All of these are equivalent: &lt;br /&gt;
    // This is the only syntax that does not require quotations.&lt;br /&gt;
    &lt;br /&gt;
    linedef { extflags CROSS|PLAYER|MISSILE|REPEAT }&lt;br /&gt;
    &lt;br /&gt;
    // All of these syntaxes must be quoted, because unquoted strings in &lt;br /&gt;
    // ExtraData cannot contain spaces, commas, or plus signs.&lt;br /&gt;
    &lt;br /&gt;
    linedef { extflags &amp;quot;CROSS PLAYER MISSILE REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS | PLAYER | MISSILE | REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS+PLAYER+MISSILE+REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS + PLAYER + MISSILE + REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS,PLAYER,MISSILE,REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS, PLAYER, MISSILE, REPEAT&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
====args====&lt;br /&gt;
:&#039;&#039;Default: All args values default to zero. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The args field is a list of up to five special values which can have a broad range of meanings. Any values not provided in the args list will default, and if more than five values are provided, only the first five will be used. Currently, all args values are interpreted as integers (a non-number string evaluates to zero). This may change in the future. The args list is used by parameterized linedef specials. &lt;br /&gt;
&lt;br /&gt;
Example args list: &lt;br /&gt;
    linedef { args { 0, 1, 2, 3, 4 } }&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=ExtraData&amp;diff=2427</id>
		<title>ExtraData</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=ExtraData&amp;diff=2427"/>
		<updated>2010-04-19T18:01:05Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Corrections, updates, and removal of documentation for deprecated features&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ExtraData is a new data specification language for the [[Eternity Engine]] that allows arbitrary extension of mapthings, lines, and sectors with any number of new fields, with data provided in more or less any format. The use of a textual input language forever removes any future problems caused by binary format limitations. The ExtraData parser is based on the libConfuse configuration file parser library by Martin Hedenfalk, which is also used by GFS and EDF. &lt;br /&gt;
&lt;br /&gt;
Each section in this document deals with one of the ExtraData constructs, as well as how to embed ExtraData in a WAD and how to associate it with a given map. &lt;br /&gt;
&lt;br /&gt;
ExtraData will continue to be supported in future versions of Eternity, even though it will soon be superceded by support for the [[Universal Doom Map Format]].&lt;br /&gt;
&lt;br /&gt;
=General Syntax=&lt;br /&gt;
&#039;&#039;See [[EDF#Syntax|EDF Syntax]], as it is the same.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Embedding and Associating ExtraData =&lt;br /&gt;
&lt;br /&gt;
ExtraData is embedded directly as a text script into a lump of any name. This can be done with any number of wad file management tools, such as WinTex (though WinTex has some bugs which make the process more complicated), XWE or SLumpEd. &lt;br /&gt;
&lt;br /&gt;
An ExtraData script is associated with a map via use of the [[MapInfo]] variable &#039;&#039;&#039;extradata&#039;&#039;&#039;. A map can only have one ExtraData script, but it is possible for multiple maps to share the same script. &lt;br /&gt;
&lt;br /&gt;
Example of ExtraData specification via EMAPINFO: &lt;br /&gt;
   [MAP01]&lt;br /&gt;
   extradata = EDLUMP01&lt;br /&gt;
&lt;br /&gt;
=Mapthings =&lt;br /&gt;
&lt;br /&gt;
Mapthings define monsters, lamps, control points, items, etc -- anything that is spawned on the map at level start. &lt;br /&gt;
&lt;br /&gt;
Each field in the mapthing definition, with the exception of the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field, is optional. If a field is not provided, it takes on the default value indicated below the syntax information. Fields may also be provided in any order. &lt;br /&gt;
&lt;br /&gt;
Note that the order of mapthing definitions in ExtraData is not important. The &#039;&#039;&#039;recordnum&#039;&#039;&#039; field serves to identify mapthing records. &lt;br /&gt;
&lt;br /&gt;
==Creating ExtraData Control Objects ==&lt;br /&gt;
&lt;br /&gt;
Mapthing records in ExtraData are only associated with a special control object that must be placed on the map in the usual manner. &lt;br /&gt;
&lt;br /&gt;
The ExtraData control object has a &#039;&#039;&#039;doomednum&#039;&#039;&#039; of 5004. Each control object specifies its corresponding ExtraData mapthing record number as an integer value in its mapthing &#039;&#039;&#039;options&#039;&#039;&#039; field. If your editor does not allow entering arbitrary values into the options field of mapthings, you will need to use the BOOM command-line editor, CLED. As of the initial writing time of this document, both DETH and Doom Builder support entering arbitrary integer values for the options field. Check your editor&#039;s documentation or user interface to verify if it supports this. &lt;br /&gt;
&lt;br /&gt;
The x, y, and angle fields of the ExtraData control object are passed on to the thing which will be spawned at the control point&#039;s location, so those fields of the control object should be set normally. The true type and options fields of the thing to be spawned, along with any extended fields, are specified in the ExtraData record. &lt;br /&gt;
&lt;br /&gt;
Any number of ExtraData control objects can reference the same ExtraData record. In the event that a control object references a non-existent ExtraData record, the ExtraData script for a level is missing, or the thing type referenced by an ExtraData record isn&#039;t valid, an [[Unknown]] thing will be spawned at the control point&#039;s location.  Note that you cannot spawn ExtraData control objects using ExtraData. Attempting this will also result in an Unknown thing. &lt;br /&gt;
&lt;br /&gt;
==Mapthing Syntax and Fields ==&lt;br /&gt;
&lt;br /&gt;
The syntax of the ExtraData mapthing record is as follows. Remember that all fields except the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field are optional and can be specified in any order. &lt;br /&gt;
 mapthing&lt;br /&gt;
 {&lt;br /&gt;
   recordnum &amp;lt;unique number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are normal mapthing fields&lt;br /&gt;
   type      &amp;lt;doomednum&amp;gt; OR &amp;lt;EDF thingtype mnemonic&amp;gt;&lt;br /&gt;
   options   &amp;lt;options flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are ExtraData extensions&lt;br /&gt;
   tid       &amp;lt;number&amp;gt;&lt;br /&gt;
   args      { &amp;lt;special field&amp;gt;, ... }&lt;br /&gt;
   height    &amp;lt;number&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields:=== &lt;br /&gt;
====recordnum====&lt;br /&gt;
The recordnum serves to identify this record, and is the number which ExtraData control objects must use to associate themselves with a mapthing record. Every ExtraData mapthing record must have a unique record number. If a duplicate record number is detected, the engine will currently exit with an error message. The record number is limited to values between 0 and 65535 inclusive. Some editors may only allow input of numbers up to 32767 in the mapthing options field, or may treat values above 32767 as negative numbers. Beware of this. &lt;br /&gt;
&lt;br /&gt;
====type====&lt;br /&gt;
Default: No meaningful default value; an Unknown thing will be spawned if not valid.&lt;br /&gt;
&lt;br /&gt;
This field specifies the type of object to spawn at the location and angle of ExtraData control objects using this record. This field can accept one of two types of values. The first is a normal thingtype doomednum as specified via [[EDF]] and used by all editors. For example, the DOOM Imp&#039;s doomednum is 3001. &lt;br /&gt;
&lt;br /&gt;
This field can also accept EDF thingtype mnemonics. EDF thingtype mnemonics must be prefixed with &#039;&#039;thing:&#039;&#039; -- this allows the parser to know it is dealing with a string instead of a number. EDF thingtypes must have a unique doomednum to be specified in an ExtraData mapthing record. If the specified EDF thingtype doesn&#039;t exist or has a doomednum of -1, an Unknown object will be spawned instead. &lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
    mapthing { type 3001 }          // This record specifies an Imp via its doomednum&lt;br /&gt;
    &lt;br /&gt;
    mapthing { type DoomImp } // This record specifies an Imp by its EDF mnemonic&lt;br /&gt;
    &lt;br /&gt;
====options====&lt;br /&gt;
Default: No flags are set by default. &lt;br /&gt;
&lt;br /&gt;
This field specifies the options (also known as mapthing flags). This field uses the same syntax as BEX/EDF flag strings, but the syntax will be reviewed here for completeness. &lt;br /&gt;
&lt;br /&gt;
A BEX flag list is a string of flag names separated by whitespace, pipe characters, commas, or plus characters. In ExtraData, if a flag list contains whitespace, commas, or plus signs, it must be enclosed in double or single quotations. Flags are combined using bitwise-OR logic, so a flag name can be specified more than once. Specifying a flag name causes that flag to be turned on. The default state of all flags is off. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
    Flag name   Decimal  Hex     Meaning&lt;br /&gt;
    ------------------------------------------------------------------------------&lt;br /&gt;
    EASY        1        0x0001  Thing appears in easy difficulties&lt;br /&gt;
    NORMAL      2        0x0002  Thing appears in &amp;quot;Hurt Me Plenty&amp;quot;&lt;br /&gt;
    HARD        4        0x0004  Thing appears in Ultra-Violence and Nightmare&lt;br /&gt;
    AMBUSH      8        0x0008  Thing is &amp;quot;deaf&amp;quot;, will not wake up via sound&lt;br /&gt;
    NOTSINGLE   16       0x0010  Thing doesn&#039;t appear in single-player mode&lt;br /&gt;
    NOTDM       32       0x0020  Thing doesn&#039;t appear in deathmatch&lt;br /&gt;
    NOTCOOP     64       0x0040  Thing doesn&#039;t appear in cooperative multiplayer&lt;br /&gt;
    FRIEND      128      0x0080  Thing uses MBF friendly logic&lt;br /&gt;
    DORMANT     512      0x0200  Thing is dormant at map startup (script feature)&lt;br /&gt;
    ------------------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
The mapthing options value 256 (0x0100) is reserved. If this bit is set, all BOOM, MBF, and Eternity extended mapthing bits will be cleared. This is to guard against editors like Hellmaker which set all bits they do not understand, instead of leaving them zero. &lt;br /&gt;
&lt;br /&gt;
Example options fields -- All of these are equivalent: &lt;br /&gt;
    // This is the only syntax that does not require quotations.&lt;br /&gt;
    &lt;br /&gt;
    mapthing { options EASY|NORMAL|HARD }&lt;br /&gt;
    &lt;br /&gt;
    // All of these syntaxes must be quoted, because unquoted strings in &lt;br /&gt;
    // ExtraData cannot contain spaces, commas, or plus signs.&lt;br /&gt;
    &lt;br /&gt;
    mapthing { options &amp;quot;EASY NORMAL HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY | NORMAL | HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY+NORMAL+HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY + NORMAL + HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY,NORMAL,HARD&amp;quot; }&lt;br /&gt;
    mapthing { options &amp;quot;EASY, NORMAL, HARD&amp;quot; }&lt;br /&gt;
====tid====&lt;br /&gt;
Default: 0 &lt;br /&gt;
&lt;br /&gt;
The TID, or &amp;quot;Thing ID&amp;quot;, is a tag for mapthings which is used for identification in [[Small]] scripts. TID values must be positive numbers between 1 and 65535. The TID value zero means no TID. Negative TID values are reserved and are used to indicate special things within the engine. TIDs are not required to be unique, and most Small functions that accept TIDs will perform an action on all mapthings which bear the same TID. Things spawned within Small scripts can also be given TIDs. &lt;br /&gt;
&lt;br /&gt;
====args====&lt;br /&gt;
Default: All args values default to zero. &lt;br /&gt;
&lt;br /&gt;
The args field is a list of up to five special values which can have a broad range of meanings. Any values not provided in the args list will default, and if more than five values are provided, only the first five will be used. Currently, all args values are interpreted as integers (a non-number string evaluates to zero). This may change in the future. &lt;br /&gt;
&lt;br /&gt;
Example args list: &lt;br /&gt;
    mapthing { args { 0, 1, 2, 3, 4 } }&lt;br /&gt;
    &lt;br /&gt;
====height====&lt;br /&gt;
Default: 0 &lt;br /&gt;
&lt;br /&gt;
For normal objects, this field indicates a distance above the floor that the thing will spawn at level start. For objects with the SPAWNCEILING flag, this field indicates a distance below the ceiling instead. This field will have no effect on objects which spawn at a randomized height.&lt;br /&gt;
&lt;br /&gt;
=Linedefs =&lt;br /&gt;
&lt;br /&gt;
Linedefs define walls, two-sided textures, and provide action triggers within maps. &lt;br /&gt;
&lt;br /&gt;
Each field in the linedef definition, with the exception of the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field, is optional. If a field is not provided, it takes on the default value indicated below the syntax information. Fields may also be provided in any order. &lt;br /&gt;
&lt;br /&gt;
Note that the order of linedef definitions in ExtraData is not important. The &#039;&#039;&#039;recordnum&#039;&#039;&#039; field serves to identify linedef records. &lt;br /&gt;
&lt;br /&gt;
==Creating ExtraData Linedefs ==&lt;br /&gt;
&lt;br /&gt;
Linedef records in ExtraData are associated only with lines which bear the ExtraData Control Line Special, #270. You can place this special into the normal &amp;quot;special&amp;quot; field of a line using virtually any map editor. Editors with Eternity-specific configurations should support this special natively. &lt;br /&gt;
&lt;br /&gt;
Each control linedef specifies its corresponding ExtraData linedef record number as an integer value in its linedef tag field. If your editor does not allow entering arbitrary values up to 32767 into the tag field of linedefs, you will need to use the BOOM command-line editor, CLED. As of the initial writing time of this document, both DETH and Doom Builder support entering arbitrary integer values for the tag field. Check your editor&#039;s documentation or user interface to verify if it supports this. &lt;br /&gt;
&lt;br /&gt;
The flags, sidedefs, textures, and location of the ExtraData control linedef are used normally by the line and cannot be altered from within ExtraData. The true special and tag fields of the linedef, along with any extended fields, are specified in the ExtraData record which the control linedef references. &lt;br /&gt;
&lt;br /&gt;
Any number of ExtraData control linedefs can reference the same ExtraData record. In the event that a control linedef references a non-existent ExtraData record or the ExtraData script for a level is missing, the special and tag of the ExtraData control linedef will both be set to zero. &lt;br /&gt;
&lt;br /&gt;
==Linedef Syntax and Fields ==&lt;br /&gt;
&lt;br /&gt;
The syntax of the ExtraData linedef record is as follows. Remember that all fields except the &#039;&#039;&#039;recordnum&#039;&#039;&#039; field are optional and can be specified in any order. &lt;br /&gt;
 linedef&lt;br /&gt;
 {&lt;br /&gt;
   recordnum &amp;lt;unique number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are normal linedef fields&lt;br /&gt;
   special &amp;lt;number&amp;gt; OR &amp;lt;special name&amp;gt;&lt;br /&gt;
   tag &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   // These fields are ExtraData extensions&lt;br /&gt;
   extflags &amp;lt;extended line flags list&amp;gt;&lt;br /&gt;
   args { &amp;lt;special field&amp;gt;, ... }&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields: ===&lt;br /&gt;
====recordnum====&lt;br /&gt;
The recordnum serves to identify this record, and is the number which ExtraData control linedefs must use to associate themselves with a linedef record. Every ExtraData linedef record must have a unique record number. If a duplicate record number is detected, the engine will currently exit with an error message. The record number is limited to values between 0 and 32767 inclusive. Some editors may only allow input of numbers up to 255 in the linedef tag field. Beware of this. &lt;br /&gt;
&lt;br /&gt;
====special====&lt;br /&gt;
:&#039;&#039;Default: 0 &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The special field determines what [[Linedef_types|type of action]] may be taken when a line is crossed, used, shot, etc. There are three types of linedef specials in Eternity: normal, generalized, and parameterized. Parameterized specials use the &#039;&#039;&#039;args&#039;&#039;&#039; field documented below to provide complete customization of line actions. &lt;br /&gt;
&lt;br /&gt;
This field can accept numbers for any special type, including generalized and parameterized, but it can also accept special names for parameterized line types. See the [[Detailed parameterized linedef specification]] for a complete list of the available names.&lt;br /&gt;
&lt;br /&gt;
====tag====&lt;br /&gt;
:&#039;&#039;Default: 0 &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The tag of the linedef, used by DOOM-style line specials and sector effects.&lt;br /&gt;
&lt;br /&gt;
====extflags====&lt;br /&gt;
:&#039;&#039;Default: No flags are set by default. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This field specifies extended linedef flag values which impact the functionality of parameterized linedef specials. This field uses the same syntax as BEX/EDF flag strings, but the syntax will be reviewed here for completeness. &lt;br /&gt;
&lt;br /&gt;
A BEX flag list is a string of flag names separated by whitespace, pipe characters, commas, or plus characters. In ExtraData, if a flag list contains whitespace, commas, or plus signs, it must be enclosed in double or single quotations. Flags are combined using bitwise-OR logic, so a flag name can be specified more than once. Specifying a flag name causes that flag to be turned on. The default state of all flags is off. &lt;br /&gt;
&lt;br /&gt;
These are the flag values which are available for this field: &lt;br /&gt;
    Flag name   Decimal  Hex     Meaning&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    CROSS       1        0x0001  Linedef can be activated by being crossed.&lt;br /&gt;
    USE         2        0x0002  Linedef can be activated by being used.&lt;br /&gt;
    IMPACT      4        0x0004  Linedef can be activated by being shot.&lt;br /&gt;
    PUSH        8        0x0008  Linedef can be activated by being pushed.&lt;br /&gt;
    PLAYER      16       0x0010  Linedef can be activated by players.&lt;br /&gt;
    MONSTER     32       0x0020  Linedef can be activated by objects with SPACMONSTER flag.&lt;br /&gt;
    MISSILE     64       0x0040  Linedef can be activated by objects with SPACMISSILE flag.&lt;br /&gt;
    REPEAT      128      0x0080  Linedef action is repeatable.&lt;br /&gt;
    1SONLY      256      0x0100  Linedef can only be activated from first side.&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
Notes: IMPACT is currently only implemented for bullet weapons. The ability to use IMPACT with MISSILE will be added in the near future. The PUSH style of activation is not implemented at all yet, so this flag currently does nothing. &lt;br /&gt;
&lt;br /&gt;
Example flags fields -- All of these are equivalent: &lt;br /&gt;
    // This is the only syntax that does not require quotations.&lt;br /&gt;
    &lt;br /&gt;
    linedef { extflags CROSS|PLAYER|MISSILE|REPEAT }&lt;br /&gt;
    &lt;br /&gt;
    // All of these syntaxes must be quoted, because unquoted strings in &lt;br /&gt;
    // ExtraData cannot contain spaces, commas, or plus signs.&lt;br /&gt;
    &lt;br /&gt;
    linedef { extflags &amp;quot;CROSS PLAYER MISSILE REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS | PLAYER | MISSILE | REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS+PLAYER+MISSILE+REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS + PLAYER + MISSILE + REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS,PLAYER,MISSILE,REPEAT&amp;quot; }&lt;br /&gt;
    linedef { extflags &amp;quot;CROSS, PLAYER, MISSILE, REPEAT&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
====args====&lt;br /&gt;
:&#039;&#039;Default: All args values default to zero. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The args field is a list of up to five special values which can have a broad range of meanings. Any values not provided in the args list will default, and if more than five values are provided, only the first five will be used. Currently, all args values are interpreted as integers (a non-number string evaluates to zero). This may change in the future. The args list is used by parameterized linedef specials. &lt;br /&gt;
&lt;br /&gt;
Example args list: &lt;br /&gt;
    linedef { args { 0, 1, 2, 3, 4 } }&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Polyobject&amp;diff=2426</id>
		<title>Polyobject</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Polyobject&amp;diff=2426"/>
		<updated>2010-04-19T17:46:16Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Some corrections and updates.&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 and ZDoom 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, unlike ZDoom, 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;
==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 &#039;&#039;Polyobj_StartLine&#039;&#039; Special&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:The Polyobj_StartLine 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;
    [Control Sector]                     [Main Map Area]&lt;br /&gt;
    +-------------------+          +-------------------------------+&lt;br /&gt;
    |                   |          |                               |&lt;br /&gt;
    |        |          |          |                               |&lt;br /&gt;
    |      +---&amp;gt;+       |          |                               |&lt;br /&gt;
    |      ^    |       |          |                               |&lt;br /&gt;
    |      |    |_      |          |                               |&lt;br /&gt;
    |   A -| B  |       |          |              C                |&lt;br /&gt;
    |      |    v       |          |                               |&lt;br /&gt;
    |      +&amp;lt;---+       |          |                               |&lt;br /&gt;
    |         |         |          |                               |&lt;br /&gt;
    |                   |          |                               |&lt;br /&gt;
    +-------------------+          +-------------------------------+&lt;br /&gt;
:Assume that the linedef A is assigned the Polyobj_StartLine special and has argument #1 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. &lt;br /&gt;
&lt;br /&gt;
:Starting from line A, 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 A, 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 B and C are the two required objects: &lt;br /&gt;
:* B: 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 PolyObject ID). There must be one and only one of these objects for each PolyObject ID. &lt;br /&gt;
:* C: 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 Polyobj_StartLine 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 &#039;&#039;Polyobj_ExplicitLine&#039;&#039; Special &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:The Polyobj_ExplicitLine 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;
    [Control Sector]                     [Main Map Area]&lt;br /&gt;
    +-------------------+          +-------------------------------+&lt;br /&gt;
    |        2          |          |                               |&lt;br /&gt;
    |        |          |          |                               |&lt;br /&gt;
    |      +---&amp;gt;+       |          |                               |&lt;br /&gt;
    |      ^    |       |          |                               |&lt;br /&gt;
    |      |    |_ 4    |          |                               |&lt;br /&gt;
    |   1 -| B  |       |          |              C                |&lt;br /&gt;
    |      |    v       |          |                               |&lt;br /&gt;
    |      +&amp;lt;---+       |          |                               |&lt;br /&gt;
    |         |         |          |                               |&lt;br /&gt;
    |         3         |          |                               |&lt;br /&gt;
    +-------------------+          +-------------------------------+&lt;br /&gt;
:Assume that the linedefs labeled 1 through 4 are assigned the Polyobj_ExplicitLine special, all have argument #1 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 all have argument #2 set to the integer values 1 through 4, corresponding to their labels in the diagram. &lt;br /&gt;
&lt;br /&gt;
:The game engine will search through all linedefs in the entire map for ones with the current PolyObject ID in argument #1 and a value greater than zero in argument #2. The lines will be collected and then sorted by the value in their second argument and added to the PolyObject in that order. Note that unlike Hexen, it is not necessary for the numbers in the second argument to be sequential (ie, a sequence such as { 5, 10, 15, 20 } would also work). &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 StartLine special above. &lt;br /&gt;
:* B: 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 ExplicitLines&#039; first argument (the PolyObject ID). There must be one and only one of these objects for each PolyObject ID. &lt;br /&gt;
:* C: 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 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;
:The complete arguments to Polyobj_ExplicitLine 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;number&#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;
==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;
&#039;&#039;&#039;Translating PolyObjects&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To move a PolyObject in the xy plane, use one of the following line specials: &lt;br /&gt;
* Polyobj_Move &lt;br /&gt;
* Polyobj_OR_Move &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;
&#039;&#039;&#039;Rotating PolyObjects &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To rotate a PolyObject, use one of the following line specials: &lt;br /&gt;
* Polyobj_RotateRight &lt;br /&gt;
* Polyobj_OR_RotateRight &lt;br /&gt;
* Polyobj_RotateLeft &lt;br /&gt;
* Polyobj_OR_RotateLeft &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 Doors==&lt;br /&gt;
&lt;br /&gt;
There are two distinct types of actions provided to allow PolyObjects to function as doors. 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;
* Polyobj_DoorSlide&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;
* Polyobj_DoorSwing&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;
&#039;&#039;Back to [[Linedef types]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Thing_type_flags&amp;diff=2423</id>
		<title>Thing type flags</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Thing_type_flags&amp;diff=2423"/>
		<updated>2010-04-09T15:22:54Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Added new flags implemented in SVN r1096&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Thing type flags are properties that can be set on or off, to control special behavior. They belong to thing classes, such as Zombieman or BaronOfHell, and shouldn&#039;t be confused with the mapthing flags, which affect individual objects in a level, regardless of species (see [[ExtraData#options|ExtraData mapthing options]] for that type of flags).&lt;br /&gt;
&lt;br /&gt;
Thingtype flags are used by the [[thingtype]] block in EDF, with the fields: &#039;&#039;&#039;flags&#039;&#039;&#039;, &#039;&#039;&#039;flags2&#039;&#039;&#039;, &#039;&#039;&#039;flags3&#039;&#039;&#039;, &#039;&#039;&#039;flags4&#039;&#039;&#039;, &#039;&#039;&#039;cflags&#039;&#039;&#039;, &#039;&#039;&#039;addflags&#039;&#039;&#039; and &#039;&#039;&#039;remflags&#039;&#039;&#039;. They are also used by the [[SetFlags]] and [[UnSetFlags]] [[List of codepointers|codepointers]].&lt;br /&gt;
&lt;br /&gt;
The flags (or bits) are grouped (currently) into four categories, because only 32 bits can enter a long integer block. This was once important for Eternity editing, such as via DeHackEd, but since the extension of EDF arguments to a runtime evaluation system, there is no longer any need to use the original restricted &#039;&#039;&#039;flags&#039;&#039;&#039; fields.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;flags&#039;&#039;&#039; up to &#039;&#039;&#039;flags4&#039;&#039;&#039; can only use bits from their own namespaces, while &#039;&#039;&#039;cflags&#039;&#039;&#039;, &#039;&#039;&#039;addflags&#039;&#039;&#039; and &#039;&#039;&#039;remflags&#039;&#039;&#039; combine all flags into a single namespace, excepting the &#039;&#039;&#039;flags&#039;&#039;&#039; bit &#039;&#039;&#039;SLIDE&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=flags=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 85%&amp;quot;; text-align: center; width: auto&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Flag name&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Bit number&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Decimal&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Hexadecimal&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Description&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;SPECIAL&#039;&#039;&#039;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0x01&lt;br /&gt;
| Collectable item (can be picked up).&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;SOLID&#039;&#039;&#039;&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 0x02&lt;br /&gt;
| Blocks other objects.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;SHOOTABLE&#039;&#039;&#039;&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 0x04&lt;br /&gt;
| Can take damage and be targeted.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NOSECTOR&#039;&#039;&#039;&lt;br /&gt;
| 3&lt;br /&gt;
| 8&lt;br /&gt;
| 0x08&lt;br /&gt;
| Not linked into sectors. Invisible, but can be hit. Never appears in automap, even with cheats.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NOBLOCKMAP&#039;&#039;&#039;&lt;br /&gt;
| 4&lt;br /&gt;
| 16&lt;br /&gt;
| 0x10&lt;br /&gt;
| Not linked into the blockmap. Cannot be hit, but can hit other objects.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;AMBUSH&#039;&#039;&#039;&lt;br /&gt;
| 5&lt;br /&gt;
| 32&lt;br /&gt;
| 0x20&lt;br /&gt;
| Always has &amp;quot;AMBUSH&amp;quot; mapthing flag behavior. Will only wake up when an enemy is seen.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;JUSTHIT&#039;&#039;&#039;&lt;br /&gt;
| 6&lt;br /&gt;
| 64&lt;br /&gt;
| 0x40&lt;br /&gt;
| Internal flag, monster will attack as soon as it is activated.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;JUSTATTACKED&#039;&#039;&#039;&lt;br /&gt;
| 7&lt;br /&gt;
| 128&lt;br /&gt;
| 0x80&lt;br /&gt;
| Internal flag, delays a bit before attacking.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;SPAWNCEILING&#039;&#039;&#039;&lt;br /&gt;
| 8&lt;br /&gt;
| 256&lt;br /&gt;
| 0x100&lt;br /&gt;
| Spawns on the ceiling instead of the floor.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NOGRAVITY&#039;&#039;&#039;&lt;br /&gt;
| 9&lt;br /&gt;
| 512&lt;br /&gt;
| 0x200&lt;br /&gt;
| Is not subject to gravity.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;DROPOFF&#039;&#039;&#039;&lt;br /&gt;
| 10&lt;br /&gt;
| 1024&lt;br /&gt;
| 0x400&lt;br /&gt;
| Can pass over ledges higher than 24 units.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;PICKUP&#039;&#039;&#039;&lt;br /&gt;
| 11&lt;br /&gt;
| 2048&lt;br /&gt;
| 0x800&lt;br /&gt;
| Can pick up items. Currently only works on player class objects.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NOCLIP&#039;&#039;&#039;&lt;br /&gt;
| 12&lt;br /&gt;
| 4096&lt;br /&gt;
| 0x1000&lt;br /&gt;
| Is not clipped against other objects or lines.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;SLIDE&#039;&#039;&#039;&lt;br /&gt;
| 13&lt;br /&gt;
| 8192&lt;br /&gt;
| 0x2000&lt;br /&gt;
| For compatibility only, has no effect. Use &#039;&#039;&#039;flags3&#039;&#039;&#039; bit &#039;&#039;&#039;SLIDE&#039;&#039;&#039; instead.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;FLOAT&#039;&#039;&#039;&lt;br /&gt;
| 14&lt;br /&gt;
| 16384&lt;br /&gt;
| 0x4000&lt;br /&gt;
| Has floating monster behavior.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;TELEPORT&#039;&#039;&#039;&lt;br /&gt;
| 15&lt;br /&gt;
| 32768&lt;br /&gt;
| 0x8000&lt;br /&gt;
| Unused vanilla flag. Can go over steps of any height, has other odd behaviors. Use not recommended.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;MISSILE&#039;&#039;&#039;&lt;br /&gt;
| 16&lt;br /&gt;
| 65536&lt;br /&gt;
| 0x10000&lt;br /&gt;
| Is a projectile.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;DROPPED&#039;&#039;&#039;&lt;br /&gt;
| 17&lt;br /&gt;
| 131072&lt;br /&gt;
| 0x20000&lt;br /&gt;
| Internal flag for dropped items (trooper clips, etc). Can be crushed, never respawns.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;SHADOW&#039;&#039;&#039;&lt;br /&gt;
| 18&lt;br /&gt;
| 262144&lt;br /&gt;
| 0x40000&lt;br /&gt;
| Renders as spectre fuzz. Monsters aiming at this thing will suffer inaccuracy.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NOBLOOD&#039;&#039;&#039;&lt;br /&gt;
| 19&lt;br /&gt;
| 524288&lt;br /&gt;
| 0x80000&lt;br /&gt;
| Doesn&#039;t bleed when hit by tracer attacks; spawns bullet puffs instead.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;CORPSE&#039;&#039;&#039;&lt;br /&gt;
| 20&lt;br /&gt;
| 1048576&lt;br /&gt;
| 0x100000&lt;br /&gt;
| Is a corpse and may slide over ledges. Also checked by Arch-viles.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;INFLOAT&#039;&#039;&#039;&lt;br /&gt;
| 21&lt;br /&gt;
| 2097152&lt;br /&gt;
| 0x200000&lt;br /&gt;
| Internal flag, used for floating monster AI.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;COUNTKILL&#039;&#039;&#039;&lt;br /&gt;
| 22&lt;br /&gt;
| 4194304&lt;br /&gt;
| 0x400000&lt;br /&gt;
| Counts toward kill score when defeated, and is considered a valid target. See also &#039;&#039;&#039;KILLABLE&#039;&#039;&#039;.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;COUNTITEM&#039;&#039;&#039;&lt;br /&gt;
| 23&lt;br /&gt;
| 8388608&lt;br /&gt;
| 0x800000&lt;br /&gt;
| Counts toward item score when collected. May respawn if item respawning is enabled.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;SKULLFLY&#039;&#039;&#039;&lt;br /&gt;
| 24&lt;br /&gt;
| 16777216&lt;br /&gt;
| 0x1000000&lt;br /&gt;
| Internal flag, used for charging monster maintenance.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NOTDMATCH&#039;&#039;&#039;&lt;br /&gt;
| 25&lt;br /&gt;
| 33554432&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| Is not spawned at level start in Deathmatch game modes.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;TRANSLATION1&#039;&#039;&#039;&lt;br /&gt;
| 26&lt;br /&gt;
| 67108864&lt;br /&gt;
| 0x4000000&lt;br /&gt;
| Remaps green to gray in sprites.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;TRANSLATION2&#039;&#039;&#039;&lt;br /&gt;
| 27&lt;br /&gt;
| 134217728&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| Remaps green to brown, or gray to red if combined with &#039;&#039;&#039;TRANSLATION1&#039;&#039;&#039;.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;TOUCHY&#039;&#039;&#039;&lt;br /&gt;
| 28&lt;br /&gt;
| 268435456&lt;br /&gt;
| 0x10000000&lt;br /&gt;
| Dies on contact with solid things of other species, excepting Lost Souls and Pain Elementals.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;BOUNCES&#039;&#039;&#039;&lt;br /&gt;
| 29&lt;br /&gt;
| 536870912&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| Bounces. Can be combined with other flags for various effects. See below.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;FRIEND&#039;&#039;&#039;&lt;br /&gt;
| 30&lt;br /&gt;
| 1073741824&lt;br /&gt;
| 0x40000000&lt;br /&gt;
| Friendly monster, MBF/Eternity variety.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;TRANSLUCENT&#039;&#039;&#039;&lt;br /&gt;
| 31&lt;br /&gt;
| 2147483648&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| Renders with BOOM-style translucency, controlled by user translucency level setting.&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Flag name&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Bit number&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Decimal&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Hexadecimal&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;BOUNCES&#039;&#039;&#039;&lt;br /&gt;
Bounces. Different behaviors may be achieved by combining with other flags:&lt;br /&gt;
:BOUNCES+MISSILE: as a missile, bounces off floors and ceilings but explodes everywhere else. Useful for not allowing the BFG to conveniently explode.&lt;br /&gt;
:BOUNCES+NOGRAVITY: bounces off all surfaces. Can be used for projectiles despite lack of MISSILE flag.&lt;br /&gt;
:BOUNCES+FLOAT: usable for monsters, letting them pogo-jump to most heights.&lt;br /&gt;
:BOUNCES+FLOAT+DROPOFF: even higher jumping.&lt;br /&gt;
:BOUNCES: can be used for projectiles, allowing grenades to be implemented.&lt;br /&gt;
&lt;br /&gt;
=flags2=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 85%&amp;quot;; text-align: center; width: auto&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Flag name&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Bit number&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Decimal&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Hexadecimal&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Description&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;LOGRAV&#039;&#039;&#039;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0x01&lt;br /&gt;
| Is subject to 1/3rd normal gravity. Does not combine with &#039;&#039;&#039;BOUNCES&#039;&#039;&#039;.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NOSPLASH&#039;&#039;&#039;&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 0x02&lt;br /&gt;
| Cannot trigger [[terrain]] effects.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NOSTRAFE&#039;&#039;&#039;&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 0x04&lt;br /&gt;
| Never uses MBF strafing logic even if enabled.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NORESPAWN&#039;&#039;&#039;&lt;br /&gt;
| 3&lt;br /&gt;
| 8&lt;br /&gt;
| 0x08&lt;br /&gt;
| Never respawns, even in Nightmare skill or with -respawn active.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;ALWAYSRESPAWN&#039;&#039;&#039;&lt;br /&gt;
| 4&lt;br /&gt;
| 16&lt;br /&gt;
| 0x10&lt;br /&gt;
| Always respawns regardless of skill or settings.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;REMOVEDEAD&#039;&#039;&#039;&lt;br /&gt;
| 5&lt;br /&gt;
| 32&lt;br /&gt;
| 0x20&lt;br /&gt;
| Is randomly removed from the level after death, instead of respawning. Not for player class objects.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NOTHRUST&#039;&#039;&#039;&lt;br /&gt;
| 6&lt;br /&gt;
| 64&lt;br /&gt;
| 0x40&lt;br /&gt;
| Is not affected by BOOM environmental pushers (wind, force points, conveyors, water currents).&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NOCROSS&#039;&#039;&#039;&lt;br /&gt;
| 7&lt;br /&gt;
| 128&lt;br /&gt;
| 0x80&lt;br /&gt;
| Cannot trigger DOOM-style walk-over linedef specials.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;JUMPDOWN&#039;&#039;&#039;&lt;br /&gt;
| 8&lt;br /&gt;
| 256&lt;br /&gt;
| 0x100&lt;br /&gt;
| When friendly, may jump down off ledges to follow player, subject to dog jumping setting.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;PUSHABLE&#039;&#039;&#039;&lt;br /&gt;
| 9&lt;br /&gt;
| 512&lt;br /&gt;
| 0x200&lt;br /&gt;
| Can be pushed, like Heretic pods.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;MAP07BOSS1&#039;&#039;&#039;&lt;br /&gt;
| 10&lt;br /&gt;
| 1024&lt;br /&gt;
| 0x400&lt;br /&gt;
| Is a boss for the MAP07_1 boss special (tag 666).&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;MAP07BOSS2&#039;&#039;&#039;&lt;br /&gt;
| 11&lt;br /&gt;
| 2048&lt;br /&gt;
| 0x800&lt;br /&gt;
| Is a boss for the MAP07_2 boss special (tag 667).&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;E1M8BOSS&#039;&#039;&#039;&lt;br /&gt;
| 12&lt;br /&gt;
| 4096&lt;br /&gt;
| 0x1000&lt;br /&gt;
| Is a boss for the E1M8 boss special (tag 666).&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;E2M8BOSS&#039;&#039;&#039;&lt;br /&gt;
| 13&lt;br /&gt;
| 8192&lt;br /&gt;
| 0x2000&lt;br /&gt;
| Is a boss for the E2M8 boss special (exits level, or tag 666 in Heretic).&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;E3M8BOSS&#039;&#039;&#039;&lt;br /&gt;
| 14&lt;br /&gt;
| 16384&lt;br /&gt;
| 0x4000&lt;br /&gt;
| Is a boss for the E3M8 boss special (exits level, or tag 666 in Heretic).&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;BOSS&#039;&#039;&#039;&lt;br /&gt;
| 15&lt;br /&gt;
| 32768&lt;br /&gt;
| 0x8000&lt;br /&gt;
| Roars loudly, and is immune to blast radii and certain other attacks.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;E4M6BOSS&#039;&#039;&#039;&lt;br /&gt;
| 16&lt;br /&gt;
| 65536&lt;br /&gt;
| 0x10000&lt;br /&gt;
| Is a boss for the E4M6 boss special (tag 666).&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;E4M8BOSS&#039;&#039;&#039;&lt;br /&gt;
| 17&lt;br /&gt;
| 131072&lt;br /&gt;
| 0x20000&lt;br /&gt;
| Is a boss for the E4M8 boss special (tag 666).&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;FOOTCLIP&#039;&#039;&#039;&lt;br /&gt;
| 18&lt;br /&gt;
| 262144&lt;br /&gt;
| 0x40000&lt;br /&gt;
| Is subject to liquid terrain effects (lowered view point, missiles, feet are clipped).&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;FLOATBOB&#039;&#039;&#039;&lt;br /&gt;
| 19&lt;br /&gt;
| 524288&lt;br /&gt;
| 0x80000&lt;br /&gt;
| Bobs perpetually on the z axis, like Heretic and Hexen powerups.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;DONTDRAW&#039;&#039;&#039;&lt;br /&gt;
| 20&lt;br /&gt;
| 1048576&lt;br /&gt;
| 0x100000&lt;br /&gt;
| Doesn&#039;t generate a sprite (invisible, but appears on automap).&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;SHORTMRANGE&#039;&#039;&#039;&lt;br /&gt;
| 21&lt;br /&gt;
| 2097152&lt;br /&gt;
| 0x200000&lt;br /&gt;
| Has a limited missile range, like the Arch-vile.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;LONGMELEE&#039;&#039;&#039;&lt;br /&gt;
| 22&lt;br /&gt;
| 4194304&lt;br /&gt;
| 0x400000&lt;br /&gt;
| Has a restricted non-missile proximity area, like the Revenant.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;RANGEHALF&#039;&#039;&#039;&lt;br /&gt;
| 23&lt;br /&gt;
| 8388608&lt;br /&gt;
| 0x800000&lt;br /&gt;
| Considers only half the distance to its target, giving a higher missile attack probability.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;HIGHERMPROB&#039;&#039;&#039;&lt;br /&gt;
| 24&lt;br /&gt;
| 16777216&lt;br /&gt;
| 0x1000000&lt;br /&gt;
| Additional boost to missile attack probability at a distance, as with the Cyberdemon.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;CANTLEAVEFLOORPIC&#039;&#039;&#039;&lt;br /&gt;
| 25&lt;br /&gt;
| 33554432&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| Cannot cross into sectors with a different floor flat. Useful for water monsters.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;SPAWNFLOAT&#039;&#039;&#039;&lt;br /&gt;
| 26&lt;br /&gt;
| 67108864&lt;br /&gt;
| 0x4000000&lt;br /&gt;
| Spawns at a randomized height within the range of its sector, like Heretic Gargoyle.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;INVULNERABLE&#039;&#039;&#039;&lt;br /&gt;
| 27&lt;br /&gt;
| 134217728&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| Takes no damage if damage is less than 10000. Does not react to damage.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;DORMANT&#039;&#039;&#039;&lt;br /&gt;
| 28&lt;br /&gt;
| 268435456&lt;br /&gt;
| 0x10000000&lt;br /&gt;
| Spawns as dormant and invulnerable regardless of mapthing flags. Must be awakened by script or line special.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;SEEKERMISSILE&#039;&#039;&#039;&lt;br /&gt;
| 29&lt;br /&gt;
| 536870912&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| Is considered a homing projectile, for reflection purposes.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;DEFLECTIVE&#039;&#039;&#039;&lt;br /&gt;
| 30&lt;br /&gt;
| 1073741824&lt;br /&gt;
| 0x40000000&lt;br /&gt;
| If paired with REFLECTIVE, causes reflection at a wide angle.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;REFLECTIVE&#039;&#039;&#039;&lt;br /&gt;
| 31&lt;br /&gt;
| 2147483648&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| Reflects projectiles. Still takes damage unless also &#039;&#039;&#039;INVULNERABLE&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Flag name&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Bit number&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Decimal&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Hexadecimal&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=flags3=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 85%&amp;quot;; text-align: center; width: auto&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Flag name&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Bit number&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Decimal&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Hexadecimal&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Description&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;GHOST&#039;&#039;&#039;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0x01&lt;br /&gt;
| Is a Heretic ghost. Translucent, monsters will aim inaccurately, and &#039;&#039;&#039;THRUGHOST&#039;&#039;&#039; missiles will pass through.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;THRUGHOST&#039;&#039;&#039;&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 0x02&lt;br /&gt;
| Missiles with this flag will pass through objects with the &#039;&#039;&#039;GHOST&#039;&#039;&#039; flag.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NODMGTHRUST&#039;&#039;&#039;&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 0x04&lt;br /&gt;
| Will not inflict thrust on objects that this object inflicts damage upon directly.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;ACTSEESOUND&#039;&#039;&#039;&lt;br /&gt;
| 3&lt;br /&gt;
| 8&lt;br /&gt;
| 0x08&lt;br /&gt;
| Has a 50% chance of making its seesound instead of its activesound at each opportunity.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;LOUDACTIVE&#039;&#039;&#039;&lt;br /&gt;
| 4&lt;br /&gt;
| 16&lt;br /&gt;
| 0x10&lt;br /&gt;
| Makes activesound at full volume.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;E5M8BOSS&#039;&#039;&#039;&lt;br /&gt;
| 5&lt;br /&gt;
| 32&lt;br /&gt;
| 0x20&lt;br /&gt;
| Is a boss for the E5M8 boss special (tag 666). Used by Maulotaurs.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;DMGIGNORED&#039;&#039;&#039;&lt;br /&gt;
| 6&lt;br /&gt;
| 64&lt;br /&gt;
| 0x40&lt;br /&gt;
| Monsters will never retaliate against this object when it damages them, as with Arch-viles.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;BOSSIGNORE&#039;&#039;&#039;&lt;br /&gt;
| 7&lt;br /&gt;
| 128&lt;br /&gt;
| 0x80&lt;br /&gt;
| Will not attack other species with this flag. &#039;&#039;&#039;This flag is deprecated and should not be used in EDF.&#039;&#039;&#039;&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;SLIDE&#039;&#039;&#039;&lt;br /&gt;
| 8&lt;br /&gt;
| 256&lt;br /&gt;
| 0x100&lt;br /&gt;
| Slides against walls when moving into them; used by players and Heretic pods.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;TELESTOMP&#039;&#039;&#039;&lt;br /&gt;
| 9&lt;br /&gt;
| 512&lt;br /&gt;
| 0x200&lt;br /&gt;
| Can telefrag shootable objects, including monsters and players.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;WINDTHRUST&#039;&#039;&#039;&lt;br /&gt;
| 10&lt;br /&gt;
| 1024&lt;br /&gt;
| 0x400&lt;br /&gt;
| Is affected by Heretic wind sector effects.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;FIREDAMAGE&#039;&#039;&#039;&lt;br /&gt;
| 11&lt;br /&gt;
| 2048&lt;br /&gt;
| 0x800&lt;br /&gt;
| Damage inflicted directly by this object will be changed to use the &#039;&#039;&#039;Fire&#039;&#039;&#039; damagetype.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;KILLABLE&#039;&#039;&#039;&lt;br /&gt;
| 12&lt;br /&gt;
| 4096&lt;br /&gt;
| 0x1000&lt;br /&gt;
| Is a living monster, but does not count for kill percentage. Used instead of &#039;&#039;&#039;COUNTKILL&#039;&#039;&#039; for Lost Souls.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;DEADFLOAT&#039;&#039;&#039;&lt;br /&gt;
| 13&lt;br /&gt;
| 8192&lt;br /&gt;
| 0x2000&lt;br /&gt;
| &#039;&#039;&#039;NOGRAVITY&#039;&#039;&#039; flag is not removed when this object dies, as with Lost Souls.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NOTHRESHOLD&#039;&#039;&#039;&lt;br /&gt;
| 14&lt;br /&gt;
| 16384&lt;br /&gt;
| 0x4000&lt;br /&gt;
| Turns against most recent attacker instantly, as with Arch-viles and in Quake AI.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;FLOORMISSILE&#039;&#039;&#039;&lt;br /&gt;
| 15&lt;br /&gt;
| 32768&lt;br /&gt;
| 0x8000&lt;br /&gt;
| Missiles with this flag can hug the floor and move up steps.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;SUPERITEM&#039;&#039;&#039;&lt;br /&gt;
| 16&lt;br /&gt;
| 65536&lt;br /&gt;
| 0x10000&lt;br /&gt;
| An item with this flag will only respawn if the &#039;&#039;&#039;super items respawn&#039;&#039;&#039; dmflag is asserted.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NOITEMRESP&#039;&#039;&#039;&lt;br /&gt;
| 17&lt;br /&gt;
| 131072&lt;br /&gt;
| 0x20000&lt;br /&gt;
| Items with this flag never respawn, but cannot be crushed as with &#039;&#039;&#039;DROPPED&#039;&#039;&#039;.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;SUPERFRIEND&#039;&#039;&#039;&lt;br /&gt;
| 18&lt;br /&gt;
| 262144&lt;br /&gt;
| 0x40000&lt;br /&gt;
| Adds absolute loyalty to &#039;&#039;&#039;FRIEND&#039;&#039;&#039; monsters; will never retaliate if attacked by a friend.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;INVULNCHARGE&#039;&#039;&#039;&lt;br /&gt;
| 19&lt;br /&gt;
| 524288&lt;br /&gt;
| 0x80000&lt;br /&gt;
| Is invulnerable when &#039;&#039;&#039;SKULLFLY&#039;&#039;&#039;-charging, as with Maulotaurs.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;EXPLOCOUNT&#039;&#039;&#039;&lt;br /&gt;
| 20&lt;br /&gt;
| 1048576&lt;br /&gt;
| 0x100000&lt;br /&gt;
| Missile will not explode if counter 1 &amp;lt; counter 2, but increments counter 1. Used by Iron Lich tornadoes.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;CANNOTPUSH&#039;&#039;&#039;&lt;br /&gt;
| 21&lt;br /&gt;
| 2097152&lt;br /&gt;
| 0x200000&lt;br /&gt;
| Is unable to push objects with the &#039;&#039;&#039;PUSHABLE&#039;&#039;&#039; flag.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;TLSTYLEADD&#039;&#039;&#039;&lt;br /&gt;
| 22&lt;br /&gt;
| 4194304&lt;br /&gt;
| 0x400000&lt;br /&gt;
| Uses additive translucency as determined by the thingtype&#039;s [[thingtype|&#039;&#039;&#039;alpha&#039;&#039;&#039; property]].&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;SPACMONSTER&#039;&#039;&#039;&lt;br /&gt;
| 23&lt;br /&gt;
| 8388608&lt;br /&gt;
| 0x800000&lt;br /&gt;
| Can activate parameterized linedefs which are marked with the MONSTER special activation flag.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;SPACMISSILE&#039;&#039;&#039;&lt;br /&gt;
| 24&lt;br /&gt;
| 16777216&lt;br /&gt;
| 0x1000000&lt;br /&gt;
| Can activate parameterized linedefs which are marked with the MISSILE special activation flag.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NOFRIENDDMG&#039;&#039;&#039;&lt;br /&gt;
| 25&lt;br /&gt;
| 33554432&lt;br /&gt;
| 0x2000000&lt;br /&gt;
| Does not take damage from &#039;&#039;&#039;FRIEND&#039;&#039;&#039; objects, excepting possibly itself.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;3DDECORATION&#039;&#039;&#039;&lt;br /&gt;
| 26&lt;br /&gt;
| 67108864&lt;br /&gt;
| 0x4000000&lt;br /&gt;
| Object clips missiles at its normal height even when &#039;&#039;&#039;comp_theights&#039;&#039;&#039; is off. Used by DOOM decor objects.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;ALWAYSFAST&#039;&#039;&#039;&lt;br /&gt;
| 27&lt;br /&gt;
| 134217728&lt;br /&gt;
| 0x8000000&lt;br /&gt;
| Always exhibits -fast/Nightmare increased reaction time and attack rate in all skill levels.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;PASSMOBJ&#039;&#039;&#039;&lt;br /&gt;
| 28&lt;br /&gt;
| 268435456&lt;br /&gt;
| 0x10000000&lt;br /&gt;
| Is considered fully three dimensional when &#039;&#039;&#039;comp_overunder&#039;&#039;&#039; is off (3D object clipping enabled).&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;DONTOVERLAP&#039;&#039;&#039;&lt;br /&gt;
| 29&lt;br /&gt;
| 536870912&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| Tries to avoid overlapping with other objects even when 3D object clipping is enabled.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;CYCLEALPHA&#039;&#039;&#039;&lt;br /&gt;
| 30&lt;br /&gt;
| 1073741824&lt;br /&gt;
| 0x40000000&lt;br /&gt;
| &#039;&#039;&#039;alpha&#039;&#039;&#039; will cycle continuously if &#039;&#039;&#039;alphavelocity&#039;&#039;&#039; is greater than zero.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;RIP&#039;&#039;&#039;&lt;br /&gt;
| 31&lt;br /&gt;
| 2147483648&lt;br /&gt;
| 0x80000000&lt;br /&gt;
| Missile will pass through &#039;&#039;&#039;SHOOTABLE&#039;&#039;&#039; objects, dealing damage repeatedly as long as contact is sustained.&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Flag name&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Bit number&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Decimal&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Hexadecimal&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=flags4=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 85%&amp;quot;; text-align: center; width: auto&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Flag name&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Bit number&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Decimal&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Hexadecimal&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Description&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;AUTOTRANSLATE&#039;&#039;&#039;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0x01&lt;br /&gt;
| Adapts a built-in palette translation if spawned in games other than Doom; used by EE objects such as MBFHelperDog.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NORADIUSDMG&#039;&#039;&#039;&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 0x02&lt;br /&gt;
| Object will not take radius damage from most sources.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;FORCERADIUSDMG&#039;&#039;&#039;&lt;br /&gt;
| 2&lt;br /&gt;
| 4&lt;br /&gt;
| 0x04&lt;br /&gt;
| As an inflictor, forces all objects (including &#039;&#039;&#039;BOSS&#039;&#039;&#039; and &#039;&#039;&#039;NORADIUSDMG&#039;&#039;&#039;) to take radius damage.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;LOOKALLAROUND&#039;&#039;&#039;&lt;br /&gt;
| 3&lt;br /&gt;
| 8&lt;br /&gt;
| 0x08&lt;br /&gt;
| Has a 360-degree field of vision, same as monsters given the &#039;&#039;&#039;AMBUSH&#039;&#039;&#039; flag after hearing a shot.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NODAMAGE&#039;&#039;&#039;&lt;br /&gt;
| 4&lt;br /&gt;
| 16&lt;br /&gt;
| 0x10&lt;br /&gt;
| Is invulnerable to damage &amp;lt; 10000, but still reacts as if damage has been taken (thrust, blood, and pain).&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;SYNCHRONIZED&#039;&#039;&#039;&lt;br /&gt;
| 5&lt;br /&gt;
| 32&lt;br /&gt;
| 0x20&lt;br /&gt;
| Will not have its spawnstate tics randomized when spawned on the map at level start. &#039;&#039;&#039;SVN r1096+&#039;&#039;&#039;&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NORANDOMIZE&#039;&#039;&#039;&lt;br /&gt;
| 6&lt;br /&gt;
| 64&lt;br /&gt;
| 0x40&lt;br /&gt;
| As a missile or bouncing explosive, will not have its spawnstate and first deathstate tics randomized. Note that the semantics of this flag are opposite of [[ZDoom]], due to compatibility requirements. &#039;&#039;&#039;SVN r1096+&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Flag name&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Bit number&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Decimal&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Hexadecimal&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Description&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Eternity_Engine&amp;diff=2422</id>
		<title>Eternity Engine</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Eternity_Engine&amp;diff=2422"/>
		<updated>2010-04-01T15:49:33Z</updated>

		<summary type="html">&lt;p&gt;Quasar: /* History */ Some updates and redactions.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Eternity Engine is [[Team Eternity]]&#039;s advanced [[Doom Wiki:Doom|Doom]] [[Doom Wiki:Source port|source port]] and the primary subject of this Wiki.&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 Eternity TC, which was at that time a new and active project. When [[Doom Wiki:Lee Killough|Lee Killough]] began the [[MBF]] project, [[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 [[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 [[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, [[Steven &amp;quot;SoM&amp;quot; McGranahan]], joined the project and immediately set to work porting the code to use [[Wikipedia:SDL|SDL]], making it capable of running on many operating systems, including [[Wikipedia:Microsoft Windows|Windows]].&lt;br /&gt;
&lt;br /&gt;
Current major goals for the engine include completing support for [[Doom Wiki:Heretic|Heretic]], a dynamic weapon and inventory system, ZDoom node support, and UDMF support.&lt;br /&gt;
&lt;br /&gt;
==Major Features==&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 thing types, 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;
===[[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 Small scripts to the maps that use them.&lt;br /&gt;
&lt;br /&gt;
==Releases==&lt;br /&gt;
A complete listing of Eternity&#039;s release history follows.&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;
* 3.35.90 &amp;quot;Simorgh&amp;quot; - January 11, 2009&lt;br /&gt;
* 3.35.92 &amp;quot;Nekhbet&amp;quot; - March 22, 2009&lt;br /&gt;
&lt;br /&gt;
===Version 3.37===&lt;br /&gt;
* {{Latest}} &amp;quot;Sekhmet&amp;quot; - January 1, 2010&lt;br /&gt;
&lt;br /&gt;
[[Category:Source ports]]&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=List_of_command_line_parameters&amp;diff=2421</id>
		<title>List of command line parameters</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=List_of_command_line_parameters&amp;diff=2421"/>
		<updated>2010-04-01T15:41:06Z</updated>

		<summary type="html">&lt;p&gt;Quasar: /* Gameplay */ Added new -solo-net&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of all &#039;&#039;&#039;command line parameters&#039;&#039;&#039; that are supported by the Eternity Engine, along with detail about their functions. Most of the options available through the command line are also settable with the [[Eternity Frontend]].&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;See also: [[Doom_Wiki:Command line arguments|Command line arguments]] on the [[Doom Wiki]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Console==&lt;br /&gt;
* -exec &amp;amp;lt;filename&amp;amp;gt; : Executes the indicated file as a console script at game startup.&lt;br /&gt;
* -nocscload : Disables autoloaded console scripts for this play session only.&lt;br /&gt;
&lt;br /&gt;
==Debugging==&lt;br /&gt;
* -devparm : Enables FPS ticker and screenshots with F1 key (id development mode)&lt;br /&gt;
&lt;br /&gt;
==DeHackEd/BEX==&lt;br /&gt;
* -bex &amp;amp;lt;filename&amp;amp;gt; ... : Alias for -deh.&lt;br /&gt;
* -bexout &amp;amp;lt;filename&amp;amp;gt; : Alias for -dehout.&lt;br /&gt;
* -deh &amp;amp;lt;filename&amp;amp;gt; ... : Loads one or more DeHackEd/BEX patch files.&lt;br /&gt;
* -dehout &amp;amp;lt;filename&amp;amp;gt; : Enables verbose DeHackEd parser logging.&lt;br /&gt;
&lt;br /&gt;
==EDF==&lt;br /&gt;
* -edf &amp;amp;lt;filename&amp;amp;gt; : Specifies the root EDF file.&lt;br /&gt;
* -edfenables : Causes all gamemode&#039;s definitions to be enabled. For compatibility with older projects.&lt;br /&gt;
* -edfout : Enables verbose EDF logging to edfout##.txt&lt;br /&gt;
&lt;br /&gt;
==Gameplay==&lt;br /&gt;
* -dog : Enables a single MBF helper dog.&lt;br /&gt;
* -dogs &amp;amp;lt;n&amp;amp;gt; : Enables from one to three MBF helper dogs, depending on the number specified.&lt;br /&gt;
* -episode &amp;amp;lt;n&amp;amp;gt; : Start a new game on episode n. For DOOM and Heretic only.&lt;br /&gt;
* -fast : Enables Nightmare-mode monster speed in any difficulty.&lt;br /&gt;
* -nomonsters : Removes all monsters except Lost Souls from all levels.&lt;br /&gt;
* -respawn : Enables Nightmare-mode monster respawning in any difficulty.&lt;br /&gt;
* -skill &amp;amp;lt;n&amp;amp;gt; : Sets skill to level 1 through 5.&lt;br /&gt;
* -solo-net : Starts the game as single-player cooperative &#039;&#039;&#039;(SVN revision 1071+)&#039;&#039;&#039;&lt;br /&gt;
* -spechit &amp;amp;lt;n&amp;amp;gt; : Sets spechit emulation magic number to n. Spechit emulation must be enabled separately.&lt;br /&gt;
* -turbo &amp;amp;lt;n&amp;amp;gt; : Sets player turbo factor to n.&lt;br /&gt;
* -warp &amp;amp;lt;x&amp;amp;gt; &amp;amp;lt;y&amp;amp;gt; : Warps to level x in DOOM 2, or ExMy for DOOM or Heretic.&lt;br /&gt;
* -wart : Alias for -warp.&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
* -affinity &amp;amp;lt;num&amp;amp;gt; : Enables processor affinity mask to stop SDL_mixer crashes on multicore processors. Expert setting only.&lt;br /&gt;
* -blockmap : Enables MBF blockmap builder for all levels.&lt;br /&gt;
* -cdrom : Game is running from a cd-rom. Data is written to C:\DOOMDATA. Does not work in Linux.&lt;br /&gt;
* -grabmouse : Enables mouse input grabbing.&lt;br /&gt;
* -nograbmouse : Disables mouse input grabbing.&lt;br /&gt;
* -numparticles &amp;amp;lt;n&amp;amp;gt; : Sets the static particle limit to n.&lt;br /&gt;
* -speed &amp;amp;lt;n&amp;amp;gt; : Sets game speed to n% of normal speed. Range is 10 to 1000.&lt;br /&gt;
* -statcopy : Does nothing. Enabled external statistics driver in Vanilla Doom.&lt;br /&gt;
&lt;br /&gt;
==Multiplayer==&lt;br /&gt;
* -altdeath : Enables Deathmatch 2.0 (items respawn, weapons stay).&lt;br /&gt;
* -avg : Austin Virtual Gaming. Deathmatch levels end after 20 minutes.&lt;br /&gt;
* -deathmatch : Enables original Deathmatch mode.&lt;br /&gt;
* -dmflags &amp;amp;lt;n&amp;amp;gt; : Sets the dmflags variable to value n.&lt;br /&gt;
* -dup&lt;br /&gt;
* -extratic&lt;br /&gt;
* -frags &amp;amp;lt;n&amp;amp;gt; : Sets fraglimit for Deathmatch. Levels end when the fraglimit is reached.&lt;br /&gt;
* -net&lt;br /&gt;
* -timer &amp;amp;lt;n&amp;amp;gt; : Sets timelimit for Deathmatch to n minutes.&lt;br /&gt;
* -trideath : Enables SMMU Deathmatch 3.0 (barrels respawn, players drop backpacks [currently broken]).&lt;br /&gt;
&lt;br /&gt;
==Savegames==&lt;br /&gt;
* -loadgame &amp;amp;lt;n&amp;amp;gt; : Loads the savegame in slot n (0-7).&lt;br /&gt;
* -save &amp;amp;lt;path&amp;amp;gt; : Sets the directory from/to which savegames are loaded and saved.&lt;br /&gt;
&lt;br /&gt;
==Sound engine==&lt;br /&gt;
* -nomusic : Disables the music engine.&lt;br /&gt;
* -nosfx : Disables the digital sound engine.&lt;br /&gt;
* -nosound : Disables sound and music.&lt;br /&gt;
&lt;br /&gt;
==Video==&lt;br /&gt;
* -8in32 : Runs Eternity in a 32-bit video mode and crossblits the 8-bit framebuffer to the screen. Circumvents some SDL palette issues, but is slower.&lt;br /&gt;
* -directx : Windows only. Selects the DirectX 5.0 SDL video driver.&lt;br /&gt;
* -frame : Creates a main window with a frame (this is on by default for windowed modes and off for fullscreen).&lt;br /&gt;
* -fullscreen : Toggles fullscreen mode.&lt;br /&gt;
* -gdi : Windows only. Selects the Win32 GDI SDL video driver.&lt;br /&gt;
* -geom &amp;amp;lt;geomstring&amp;amp;gt; : Sets the video mode using a [[Geom string]].&lt;br /&gt;
* -noblit : Disables blitting for benchmark testing. &lt;br /&gt;
* -nodraw : Disables all screen drawing.&lt;br /&gt;
* -noframe : Opposite of -frame, creates a frameless window, if possible on the current platform.&lt;br /&gt;
* -nofullscreen : Alias for -window.&lt;br /&gt;
* -novsync : Disables waiting for vsync.&lt;br /&gt;
* -vheight &amp;amp;lt;n&amp;amp;gt; : Sets screen height to n; current limits are 200 to 1600.&lt;br /&gt;
* -vsync : Enables waiting for vsync.&lt;br /&gt;
* -vwidth &amp;amp;lt;n&amp;amp;gt; : Sets screen width to n; current limits are 320 to 2560.&lt;br /&gt;
* -window : Toggles windowed mode.&lt;br /&gt;
&lt;br /&gt;
==Wads and other files==&lt;br /&gt;
* -base &amp;amp;lt;path&amp;amp;gt; : Sets the base path to the indicated path. The path must be a directory, not a file.&lt;br /&gt;
* -config &amp;amp;lt;filename&amp;amp;gt; : Game will use the given configuration file.&lt;br /&gt;
* -file &amp;amp;lt;filename&amp;amp;gt; ... : Loads one or more WAD or lump files. Lump file names must be 8 characters or less with .lmp extension added.&lt;br /&gt;
* -game &amp;amp;lt;name&amp;amp;gt; : Causes Eternity to use the named game folder under its current base path.&lt;br /&gt;
* -gfs &amp;amp;lt;filename&amp;amp;gt; : Loads the given GFS script. GFS scripts may load WADs, DEH/BEX files, EDF, and console scripts.&lt;br /&gt;
* -iwad &amp;amp;lt;filename&amp;amp;gt; : Specifies the given WAD file as the IWAD.&lt;br /&gt;
* -noload : Disables autoloaded WADs and DEH/BEX patches during this play session only.&lt;br /&gt;
&lt;br /&gt;
==Demos==&lt;br /&gt;
* -donut &amp;amp;lt;height&amp;amp;gt; &amp;amp;lt;pic&amp;amp;gt; : Enables donut overflow emulation using the specified parameters.&lt;br /&gt;
* -fastdemo &amp;amp;lt;filename&amp;amp;gt; : Plays the given demo as fast as possible.&lt;br /&gt;
* -longtics : Enables v1.91 longtics demo recording when used with -vanilla.&lt;br /&gt;
* -maxdemo &amp;amp;lt;n&amp;amp;gt; : Sets the initial size of the demo recording buffer. This is no longer a hard limit, and the buffer will expand if the given limit is exceeded.&lt;br /&gt;
* -playdemo &amp;amp;lt;filename&amp;amp;gt; : Plays the given demo.&lt;br /&gt;
* -record &amp;amp;lt;filename&amp;amp;gt; : Records this play session as a demo named &amp;quot;filename&amp;quot;.&lt;br /&gt;
* -recordfrom &lt;br /&gt;
* -spechit &amp;amp;lt;number&amp;amp;gt; : Enables spechits overflow emulation with the given magic number.&lt;br /&gt;
* -timedemo &amp;amp;lt;filename&amp;amp;gt; : Plays the given demo normally and reports FPS information at exit.&lt;br /&gt;
* -vanilla : Enables recording of v1.9-compatible demo files.&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Geom_string&amp;diff=2418</id>
		<title>Geom string</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Geom_string&amp;diff=2418"/>
		<updated>2010-03-05T00:01:56Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Explanation of geom strings and documentation of flag values.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;geom string&#039;&#039;&#039; is a special configuration setting in [[Eternity]] which allows specification of all of the characteristics of a video mode in a single string.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
The syntax of a geom string is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
WWWWxHHHH[flags]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where WWWW is the width, between 320 and 2560; HHHH is the height, between 200 and 1600; and [flags] is an optional valid combination of the following single-letter specifiers:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 85%&amp;quot;; text-align: center; width: auto&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Flag&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Description&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| w&lt;br /&gt;
| Selects windowed mode.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| f&lt;br /&gt;
| Selects fullscreen mode.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| a&lt;br /&gt;
| Selects &amp;quot;asynchronous&amp;quot; or non-page-flipped updating.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| v&lt;br /&gt;
| Selects page-flipped updating.&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| s&lt;br /&gt;
| Selects &amp;quot;software&amp;quot; surface.&lt;br /&gt;
|-style=&amp;quot;background-color: #D9D9D9&amp;quot;&lt;br /&gt;
| h&lt;br /&gt;
| Selects &amp;quot;hardware&amp;quot; surface (eg. DirectDraw acceleration)&lt;br /&gt;
|-style=&amp;quot;background-color: #F5F5F5&amp;quot;&lt;br /&gt;
| n&lt;br /&gt;
| Creates primary window without a window frame, where supported.&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: #C5D0E1&amp;quot;| Flag&lt;br /&gt;
!style=&amp;quot;background-color: #E3EEFF&amp;quot;| Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
The following are examples of valid geom strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
 320x200w&lt;br /&gt;
 640x480f&lt;br /&gt;
 1024x768wan&lt;br /&gt;
 1280x800fvh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Basic_Portals&amp;diff=2417</id>
		<title>Basic Portals</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Basic_Portals&amp;diff=2417"/>
		<updated>2010-03-04T07:22:39Z</updated>

		<summary type="html">&lt;p&gt;Quasar: Remove double redirect.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Portal]]&lt;/div&gt;</summary>
		<author><name>Quasar</name></author>
	</entry>
</feed>