<?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=Altazimuth</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=Altazimuth"/>
	<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/wiki/Special:Contributions/Altazimuth"/>
	<updated>2026-06-09T11:53:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.2</generator>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=File:EEwiki.png&amp;diff=6166</id>
		<title>File:EEwiki.png</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=File:EEwiki.png&amp;diff=6166"/>
		<updated>2023-07-29T03:15:03Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: PNG version of Eternity Engine wiki logo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
PNG version of Eternity Engine wiki logo&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=UDMF&amp;diff=6165</id>
		<title>UDMF</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=UDMF&amp;diff=6165"/>
		<updated>2023-07-16T01:47:31Z</updated>

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

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

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

		<summary type="html">&lt;p&gt;Altazimuth: Add A_CounterDiceRoll.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{codepointer&lt;br /&gt;
|description=&lt;br /&gt;
Calculates damage numbers the same way that one might for a tabletop role-playing game, rolling multiple dice with a certain number of sides. This value is then assigned or added to a counter.&lt;br /&gt;
|usage=&lt;br /&gt;
&#039;&#039;&#039;CounterDiceRoll&#039;&#039;&#039;(&#039;&#039;ctr&#039;&#039;, &#039;&#039;multiplier&#039;&#039;, &#039;&#039;dicesides&#039;&#039;, &#039;&#039;staticdmg&#039;&#039;, &#039;&#039;setoradd&#039;&#039;, &#039;&#039;randomtype&#039;&#039;)&lt;br /&gt;
|parameters=&lt;br /&gt;
*&#039;&#039;ctr&#039;&#039;: the counter to assign or add to&lt;br /&gt;
*&#039;&#039;multiplier&#039;&#039;: the multiplier of the dice outctome, or the number of dice to roll&lt;br /&gt;
*&#039;&#039;dicesides&#039;&#039;: the number of sides each die has&lt;br /&gt;
*&#039;&#039;staticdmg&#039;&#039;: static damage to add to the result regardless of dice roll outcome&lt;br /&gt;
*&#039;&#039;setoradd&#039;&#039;: one of the following:&lt;br /&gt;
:&#039;&#039;&#039;assign&#039;&#039;&#039; or 0: assigns the result of the calculation to ctr&lt;br /&gt;
:&#039;&#039;&#039;add&#039;&#039;&#039; or 1: adds the result of the calculation to ctr&lt;br /&gt;
*randomtype: one of the following:&lt;br /&gt;
:&#039;&#039;&#039;multiplyone&#039;&#039;&#039; or 0: roll for damage once then multiply by &#039;&#039;multiplier&#039;&#039; and add &#039;&#039;staticdmg&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;rollmany&#039;&#039;&#039; or 1: roll for damage &#039;&#039;multiplier&#039;&#039; times, summing up the rolls, then add &#039;&#039;staticdmg&#039;&#039;&lt;br /&gt;
|seealso=&lt;br /&gt;
*[[CounterOp]]&lt;br /&gt;
*[[SetCounter]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Eternity_Engine&amp;diff=5029</id>
		<title>Eternity Engine</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Eternity_Engine&amp;diff=5029"/>
		<updated>2020-10-14T14:15:46Z</updated>

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

		<summary type="html">&lt;p&gt;Altazimuth: 4.01.00 is out!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://www.doomworld.com/forum/topic/117429-eternity-engine-40100-tyrfing/ 4.01.00]&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_puff_type_reference&amp;diff=4924</id>
		<title>EDF puff type reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_puff_type_reference&amp;diff=4924"/>
		<updated>2020-04-25T12:25:08Z</updated>

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

		<summary type="html">&lt;p&gt;Altazimuth: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Codepointer |&lt;br /&gt;
description=FireCustomBullets is a parameterized player weapon codepointer. This codepointer can be used for the construction of custom player bullet weapons. The sound, accuracy, number of tracers, and randomized damage range of the tracers are all selectable via the argument fields. |&lt;br /&gt;
usage=&#039;&#039;&#039;FireCustomBullets&#039;&#039;&#039; (&#039;&#039;soundname&#039;&#039;, &#039;&#039;accuracy&#039;&#039;, &#039;&#039;tracers&#039;&#039;, &#039;&#039;dmgfactor&#039;&#039;, &#039;&#039;dmgmod&#039;&#039;, &#039;&#039;flashstate&#039;&#039;, [&#039;&#039;horizontal&#039;&#039;, &#039;&#039;vertical&#039;&#039;]) |&lt;br /&gt;
parameters=*soundname: The &amp;quot;nice name&amp;quot; of the sound to play.  See [[sound|the sound EDF block]] for how to define this.&lt;br /&gt;
*&#039;&#039;accuracy&#039;&#039;: Select accuracy type:&lt;br /&gt;
**&#039;&#039;&#039;always&#039;&#039;&#039;: Always accurate on every shot.&lt;br /&gt;
**&#039;&#039;&#039;first&#039;&#039;&#039;: Accurate on first fire only (&amp;quot;never&amp;quot; accurate afterward)&lt;br /&gt;
**&#039;&#039;&#039;never&#039;&#039;&#039;: Never accurate (5-degree horizontal spread with no vertical error)&lt;br /&gt;
**&#039;&#039;&#039;ssg&#039;&#039;&#039;: Super Shotgun accuracy (10-degree horizontal spread with 5-degree vertical error)&lt;br /&gt;
**&#039;&#039;&#039;monster&#039;&#039;&#039;: Monster accuracy (20-degree horizontal spread)&lt;br /&gt;
**&#039;&#039;&#039;custom&#039;&#039;&#039;: custom accuracy. Use &#039;&#039;horizontal&#039;&#039; and &#039;&#039;vertical&#039;&#039; arguments to specify the spread.&lt;br /&gt;
*&#039;&#039;tracers&#039;&#039;: Number of bullet tracers to fire.&lt;br /&gt;
*&#039;&#039;dmgfactor&#039;&#039;: Damage factor. Damage formula is: &#039;&#039;dmgfactor&#039;&#039; * ((rnd%&#039;&#039;dmgmod&#039;&#039;) + 1))&lt;br /&gt;
*&#039;&#039;dmgmod&#039;&#039;: Damage modulus (Clamped into range of 1 to 256) &lt;br /&gt;
*&#039;&#039;flashstate&#039;&#039;: optional flash state to display. If 0, it will use weapon&#039;s defined flash state.&lt;br /&gt;
*&#039;&#039;horizontal&#039;&#039;: if &#039;&#039;accuracy&#039;&#039; is &#039;&#039;&#039;custom&#039;&#039;&#039;, specify the &#039;&#039;&#039;overall&#039;&#039;&#039; horizontal spread in degrees (as opposed to spread each side of firing thing&#039;s current angle). Keep in mind the distribution is not uniform; it&#039;s concentrated on the centre, just like the preset spread types.&lt;br /&gt;
*&#039;&#039;vertical&#039;&#039;: also if &#039;&#039;accuracy&#039;&#039; is &#039;&#039;&#039;custom&#039;&#039;&#039;, specify the overall vertical spread. Same distribution as for &#039;&#039;horizontal&#039;&#039;.&lt;br /&gt;
|notes=It is possible to recreate any of the other bullet attacks in the game using this pointer, as well as create many totally new ones. |&lt;br /&gt;
seealso=&lt;br /&gt;
*[[CustomPlayerMelee]]&lt;br /&gt;
*[[FirePlayerMissile]]}}&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=A_FireCustomBullets&amp;diff=4642</id>
		<title>A FireCustomBullets</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=A_FireCustomBullets&amp;diff=4642"/>
		<updated>2020-02-23T00:44:02Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Make description for angle parameters less ambiguous.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Codepointer |&lt;br /&gt;
description=FireCustomBullets is a parameterized player weapon codepointer. This codepointer can be used for the construction of custom player bullet weapons. The sound, accuracy, number of tracers, and randomized damage range of the tracers are all selectable via the argument fields. |&lt;br /&gt;
usage=&#039;&#039;&#039;FireCustomBullets&#039;&#039;&#039; (&#039;&#039;soundname&#039;&#039;, &#039;&#039;accuracy&#039;&#039;, &#039;&#039;tracers&#039;&#039;, &#039;&#039;dmgfactor&#039;&#039;, &#039;&#039;dmgmod&#039;&#039;, &#039;&#039;flashstate&#039;&#039;, [&#039;&#039;horizontal&#039;&#039;, &#039;&#039;vertical&#039;&#039;]) |&lt;br /&gt;
parameters=*soundname: The &amp;quot;nice name&amp;quot; of the sound to play.  See [[sound|the sound EDF block]] for how to define this.&lt;br /&gt;
*&#039;&#039;accuracy&#039;&#039;: Select accuracy type:&lt;br /&gt;
**&#039;&#039;&#039;always&#039;&#039;&#039;: Always accurate on every shot.&lt;br /&gt;
**&#039;&#039;&#039;first&#039;&#039;&#039;: Accurate on first fire only (&amp;quot;never&amp;quot; accurate afterward)&lt;br /&gt;
**&#039;&#039;&#039;never&#039;&#039;&#039;: Never accurate (5-degree horizontal spread with no vertical error)&lt;br /&gt;
**&#039;&#039;&#039;ssg&#039;&#039;&#039;: Super Shotgun accuracy (10-degree horizontal spread with 5-degree vertical error)&lt;br /&gt;
**&#039;&#039;&#039;monster&#039;&#039;&#039;: Monster accuracy (20-degree horizontal spread)&lt;br /&gt;
**&#039;&#039;&#039;custom&#039;&#039;&#039;: custom accuracy. Use &#039;&#039;horizontal&#039;&#039; and &#039;&#039;vertical&#039;&#039; arguments to specify the spread.&lt;br /&gt;
*&#039;&#039;tracers&#039;&#039;: Number of bullet tracers to fire.&lt;br /&gt;
*&#039;&#039;dmgfactor&#039;&#039;: Damage factor. Damage formula is: &#039;&#039;dmgfactor&#039;&#039; * ((rnd%&#039;&#039;dmgmod&#039;&#039;) + 1))&lt;br /&gt;
*&#039;&#039;dmgmod&#039;&#039;: Damage modulus (Clamped into range of 1 to 256) &lt;br /&gt;
*&#039;&#039;flashstate&#039;&#039;: optional flash state to display. If 0, it will use weapon&#039;s defined flash state.&lt;br /&gt;
*&#039;&#039;horizontal&#039;&#039;: if &#039;&#039;accuracy&#039;&#039; is &#039;&#039;&#039;custom&#039;&#039;&#039;, specify the *overall* horizontal spread in degrees (as opposed to spread each side of firing thing&#039;s current angle). Keep in mind the distribution is not uniform; it&#039;s concentrated on the centre, just like the preset spread types.&lt;br /&gt;
*&#039;&#039;vertical&#039;&#039;: also if &#039;&#039;accuracy&#039;&#039; is &#039;&#039;&#039;custom&#039;&#039;&#039;, specify the overall vertical spread. Same distribution as for &#039;&#039;horizontal&#039;&#039;.&lt;br /&gt;
|notes=It is possible to recreate any of the other bullet attacks in the game using this pointer, as well as create many totally new ones. |&lt;br /&gt;
seealso=&lt;br /&gt;
*[[CustomPlayerMelee]]&lt;br /&gt;
*[[FirePlayerMissile]]}}&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_item_effects_and_inventory&amp;diff=4640</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=4640"/>
		<updated>2020-02-16T20:20:53Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Add link to &amp;quot;Creating a pickup&amp;quot; article.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Define what happens when an item is picked up and used (and eventually, dropped from the inventory - this is not complete yet). A tutorial on defining each of these can be found at [[Creating a pickup]].&lt;br /&gt;
&lt;br /&gt;
There are many different types of item effect definitions:&lt;br /&gt;
&lt;br /&gt;
===artifact===&lt;br /&gt;
An artifact is an item which, when collected, goes into the player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
 artifact &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  amount         &amp;lt;int&amp;gt; // amount gained with one pickup&lt;br /&gt;
  maxamount      &amp;lt;int&amp;gt; // max amount that can be carried in inventory&lt;br /&gt;
  interhubamount &amp;lt;int&amp;gt; // max amount carryable between levels in different hubs;&lt;br /&gt;
                       // -1 if this field should not apply at all&lt;br /&gt;
  sortorder      &amp;lt;int&amp;gt; // key used for sorting the player&#039;s inventory&lt;br /&gt;
  icon           &amp;lt;str&amp;gt; // name of icon graphic for invbar&lt;br /&gt;
  usesound       &amp;lt;str&amp;gt; // sound made when item is used&lt;br /&gt;
  useeffect      &amp;lt;str&amp;gt; // name of item effect to use for activation&lt;br /&gt;
  useaction      &amp;lt;action function&amp;gt; // codepointer and arguments called (e.g. A_GauntletAttack(1))&lt;br /&gt;
  &lt;br /&gt;
  [+-]undroppable      // if +, cannot be dropped from inventory&lt;br /&gt;
  [+-]invbar           // if +, appears in invbar; otherwise, invisible&lt;br /&gt;
  [+-]keepdepleted     // if +, will remain in inventory with amount of zero&lt;br /&gt;
  [+-]fullamountonly   // if +, cannot pickup unless full amount is needed&lt;br /&gt;
  [+-]noshareware      // if +, non-shareware&lt;br /&gt;
  &lt;br /&gt;
  // artifacttype determines what sort of artifact this is.  &lt;br /&gt;
  artifacttype   &amp;lt;str&amp;gt; // &amp;quot;Normal&amp;quot;, &amp;quot;Ammo&amp;quot;, &amp;quot;Key&amp;quot;, &amp;quot;Puzzle&amp;quot;, &amp;quot;Power&amp;quot;, &amp;quot;Weapon&amp;quot;,&lt;br /&gt;
                       // or &amp;quot;Quest&amp;quot;&lt;br /&gt;
                       &lt;br /&gt;
  // The following fields apply only to certain artifact types. They have no&lt;br /&gt;
  // effect if specified on other types.&lt;br /&gt;
  &lt;br /&gt;
  // Ammo&lt;br /&gt;
  ammo.backpackamount    &amp;lt;int&amp;gt; // amount of this ammo type given by a Backpack&lt;br /&gt;
  ammo.backpackmaxamount &amp;lt;int&amp;gt; // max amount after collecting a Backpack&lt;br /&gt;
 }&lt;br /&gt;
===healtheffect===&lt;br /&gt;
A health effect gives the player health in one of many possible ways. &lt;br /&gt;
 healtheffect &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  amount     &amp;lt;int&amp;gt; // amount of health to give&lt;br /&gt;
  maxamount  &amp;lt;int&amp;gt; // max amount this item can health to.&lt;br /&gt;
  lowmessage &amp;lt;str&amp;gt; // alternate message to give instead of pickupfx message when&lt;br /&gt;
                   // health is less than amount; if starts with $, is a BEX mnemonic.&lt;br /&gt;
  &lt;br /&gt;
  [+-]alwayspickup  // if +, item is picked up even when unneeded (e.g. Health Bonus)&lt;br /&gt;
  [+-]sethealth     // if +, item SETS health rather than adding to it (e.g. Megasphere)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===armoreffect===&lt;br /&gt;
An armor effect defines the properties of player armor &lt;br /&gt;
 armoreffect &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  saveamount    &amp;lt;int&amp;gt; // amount of armor given&lt;br /&gt;
  savefactor    &amp;lt;int&amp;gt; // numerator of fraction determining save percentage&lt;br /&gt;
  savedivisor   &amp;lt;int&amp;gt; // denominator of fraction determining save percentage&lt;br /&gt;
  maxsaveamount &amp;lt;int&amp;gt; // max amount his item can give; if player has greater&lt;br /&gt;
                      // armor, the item cannot be picked up at all&lt;br /&gt;
                      &lt;br /&gt;
  [+-]alwayspickup    // item is picked up even when unneeded (e.g. Armor Bonus)&lt;br /&gt;
  [+-]additive        // if +, adds to the current amount of armor&lt;br /&gt;
  [+-]setabsorption   // if +, sets absorption values (savefactor &amp;amp; savedivisor)&lt;br /&gt;
 }&lt;br /&gt;
===ammoeffect===&lt;br /&gt;
Ammo givers give an Ammo type artifact to the player.&lt;br /&gt;
 ammoeffect &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  ammo       &amp;lt;str&amp;gt; // Name of an Ammo-type artifact definition&lt;br /&gt;
  amount     &amp;lt;int&amp;gt; // Amount to give for an ordinary pickup&lt;br /&gt;
  dropamount &amp;lt;int&amp;gt; // Amount to give if dropped by an enemy&lt;br /&gt;
  &lt;br /&gt;
  [+-]ignoreskill  // if +, does not double on skills that give double ammo  &lt;br /&gt;
 }&lt;br /&gt;
===powereffect===&lt;br /&gt;
Power givers 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;
  // Note that you can specify as many ammogiven properties as you want in a single weapongiver&lt;br /&gt;
  ammogiven  &amp;lt;ammo&amp;gt;, &amp;lt;amount&amp;gt; [, &amp;lt;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;br /&gt;
&lt;br /&gt;
[[Category:EDF]]&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4389</id>
		<title>EDF weapon reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4389"/>
		<updated>2019-02-07T19:31:53Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Update selectionorder type and default&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Weapon info define weapons, simple as. They have unique names, or mnemonics, for easy identification. They&#039;re currently referenced solely by weapongivers (see [[EDF item effects and inventory]] for more info on those).&lt;br /&gt;
&lt;br /&gt;
If a weapon info&#039;s mnemonic is not unique, the latest definition of a weapon info with that mnemonic replaces any earlier ones. Like most other identifiers in EDF (but not lump names or subnames), weapon info mnemonics are completely case-insensitive.&lt;br /&gt;
&lt;br /&gt;
New objects, created via EDF files or wad lumps, can be later tweaked with weapon deltas. New weapon info should not be given a &#039;&#039;&#039;dehackednum&#039;&#039;&#039; property, as this is reserved solely for internal weapons so that mods that modify weapons with DeHackEd (BEX) patches remain compatible with Eternity.&lt;br /&gt;
&lt;br /&gt;
{{See|Weapon info flags}}&lt;br /&gt;
{{Backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
==Eternity Alfheim syntax==&lt;br /&gt;
EDF weaponinfo supports pre-Alfheim and Alfehim syntax. Make sure to add:&lt;br /&gt;
 setdialect(&amp;quot;ALFHEIM&amp;quot;)&lt;br /&gt;
before using this syntax:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt;, &amp;lt;dehackednum&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;lt;other attributes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Header properties===&lt;br /&gt;
* &#039;&#039;&amp;lt;inherited weaponinfo&amp;gt;&#039;&#039; must be a value, even if the weaponinfo doesn&#039;t inherit from anything else. In that case, it must be &#039;&#039;&#039;Weapon&#039;&#039;&#039;, which is a placeholder value belonging to no real weaponinfo.&lt;br /&gt;
* &#039;&#039;&amp;lt;dehackednum&amp;gt;&#039;&#039; -1 if not used. If -1, it can be omitted, leaving just this:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt; {&amp;lt;attributes&amp;gt;}&lt;br /&gt;
* If header properties are used, the pre-Alfheim syntax &#039;&#039;&#039;inherits&#039;&#039;&#039; and &#039;&#039;&#039;dehackednum&#039;&#039;&#039; attributes are not used.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; [: &amp;lt;parent type&amp;gt; [, &amp;lt;dehackednum&amp;gt;]]&lt;br /&gt;
 {&lt;br /&gt;
   dehackednum            &amp;lt;unique number&amp;gt;&lt;br /&gt;
   inherits               &amp;lt;weaponinfo&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammotype               &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   ammotype2              &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upstate                &amp;lt;frame&amp;gt;&lt;br /&gt;
   downstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   readystate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate            &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate2           &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate2            &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate2             &amp;lt;frame&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammouse                &amp;lt;number&amp;gt;&lt;br /&gt;
   ammouse2               &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   selectionorder         &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   slotnumber             &amp;lt;number&amp;gt;&lt;br /&gt;
   slotselectionorder     &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   sisterweapon           &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   flags                  &amp;lt;flag list&amp;gt;&lt;br /&gt;
   addflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   remflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   mod                    &amp;lt;MOD name OR number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   recoil                 &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   hapticrecoil           &amp;lt;number&amp;gt;&lt;br /&gt;
   haptictime             &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upsound                &amp;lt;sound&amp;gt;&lt;br /&gt;
   readysound             &amp;lt;sound&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   firstdecoratestate     &amp;lt;frame&amp;gt;&lt;br /&gt;
   states                 &amp;lt;[[DECORATE state syntax]] heredoc&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
====ID / Type Info====&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Fake array index number, for Dehacked patch (BEX or DEH file) compatibility. It has to be an unique number if not -1. Safe numbers are from 10000 up.&lt;br /&gt;
*&#039;&#039;&#039;inherits&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Sets the weapon info from which this will copy properties. All of the properties except &#039;&#039;&#039;dehackednum&#039;&#039;&#039; will be copied from the base actor type.&lt;br /&gt;
&lt;br /&gt;
====States====&lt;br /&gt;
*&#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039;&lt;br /&gt;
:Sets the first frame in a sequential list of dummy frames that use the internal Decorate-style defined &#039;&#039;&#039;states&#039;&#039;&#039; of this actor for [[EDF delta structures|framedelta]] compatibility. It&#039;s not required unless the intention is to make the Decorate states of this weapon accessible from other weapon info. Default games&#039; (Doom, Heretic) weapon info use externalized frames for all weapon info, for compatibility.&lt;br /&gt;
*&#039;&#039;&#039;states&#039;&#039;&#039;&lt;br /&gt;
{{see|DECORATE state syntax}}&lt;br /&gt;
:Default = nothing&lt;br /&gt;
:Defines frames using [http://zdoom.org/wiki/DECORATE DECORATE]-style state definitions. This means it won&#039;t be necessary to define separate [[frame]] blocks for each individual frame. See the DECORATE reference at the ZDoom wiki for documentation on its syntax. Using the &#039;&#039;&#039;states&#039;&#039;&#039; field instead of any of the ones below results in more concise text, but also the newly created frames won&#039;t be accessible from outside (other weaponinfo, Dehacked patches or delta structures), unless you use the &#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039; field as well. Like normally, [[List of codepointers|codepointers]] may or may not be preceded by &#039;&#039;&#039;A_&#039;&#039;&#039;. The DECORATE code has to be implemented via a heredoc: a text string that spans on multiple lines. Unlike a regular string which uses quotation marks, the heredoc is marked by @&amp;quot; and &amp;quot;@ respectively. Example on an shotgun-like weapon (the &#039;=&#039; sign is optional):&lt;br /&gt;
 states =&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Ready:&lt;br /&gt;
      SHTG A 1 A_WeaponReady&lt;br /&gt;
      loop&lt;br /&gt;
   Deselect:&lt;br /&gt;
      SHTG A 1 A_Lower&lt;br /&gt;
      loop&lt;br /&gt;
   Select:&lt;br /&gt;
      SHTG A 1 A_Raise&lt;br /&gt;
      loop&lt;br /&gt;
   Fire:&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_FireShotgun&lt;br /&gt;
      SHTG BC 5&lt;br /&gt;
      SHTG D 4&lt;br /&gt;
      SHTG CB 5&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_ReFire&lt;br /&gt;
      goto Ready&lt;br /&gt;
   Flash:&lt;br /&gt;
      SHTF A 4 Bright A_Light1&lt;br /&gt;
      SHTF B 3 Bright A_Light2&lt;br /&gt;
      goto LightDone&lt;br /&gt;
  &amp;quot;@&lt;br /&gt;
*&#039;&#039;&#039;upstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is raised.If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;upstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;downstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is being lowered. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;downstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;readystate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is ready to be fired. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;readystate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;attackstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon goes to if the user tries to perform a primary attack. Though not necessary, it is suggested for weapons to have an attackstate for primary firing purposes.&lt;br /&gt;
*&#039;&#039;&#039;flashstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon jumps to if a [[List of codepointers|codepointer]] causes a weapon to flash.&lt;br /&gt;
*&#039;&#039;&#039;holdstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame jumped to by [[ReFire|A_ReFire]] if the player is still holding the primary attack button.&lt;br /&gt;
*&#039;&#039;&#039;attackstate2&#039;&#039;&#039;, &#039;&#039;&#039;flashstate2&#039;&#039;&#039;, &#039;&#039;&#039;holdstate2&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
: The equivalent of &#039;&#039;&#039;attackstate&#039;&#039;&#039;, &#039;&#039;&#039;flashstate&#039;&#039;&#039;, and &#039;&#039;&#039;holdstate&#039;&#039;&#039;, but for alternate fire.&lt;br /&gt;
&lt;br /&gt;
====Selection Order and Weapon Slots====&lt;br /&gt;
*&#039;&#039;&#039;selectionorder&#039;&#039;&#039;&lt;br /&gt;
:Default = -1.0&lt;br /&gt;
:Sets the priority for selection of the weapon. The lower the number, the higher its priority.&lt;br /&gt;
*&#039;&#039;&#039;slotnumber&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Sets the weapon slot that the weapon occupies in the global weapon slots structure. For assigning to player class weapon slots, read [[weapon slots]].&lt;br /&gt;
*&#039;&#039;&#039;slotselectionorder&#039;&#039;&#039;&lt;br /&gt;
:Default = -1.0&lt;br /&gt;
:Sets the in-slot priority for the weapon in the global weapon slots structure. The lower the number, the higher its priority. Read [[weapon slots]] if you wish to understand the specifics of how in-slot priority works interacts with player class weapon slots.&lt;br /&gt;
&lt;br /&gt;
====Sister Weapon====&lt;br /&gt;
*&#039;&#039;&#039;sisterweapon&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Defines a weapon that is also provided when this weapon is picked up. This is can be used either for [[doom_wiki:Tome of Power|Tome of Power]] variants, or for weapons with two different firing modes (used by Strife weapons).&lt;br /&gt;
&lt;br /&gt;
====Flags====&lt;br /&gt;
*&#039;&#039;&#039;flags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field controls a number of weapon info properties using bit flags, where each bit in the field stands for some effect, and has the value of being either on or off. See the [[Weapon info flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks.&lt;br /&gt;
*&#039;&#039;&#039;addflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be added to the weapon&#039;s existing flags values (this works the same as the flags field above). Flags in this list are &amp;quot;turned on&amp;quot; in the weapon. If flags are listed here which are already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance.&lt;br /&gt;
*&#039;&#039;&#039;remflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be subtracted from the weapon&#039;s existing flags values (this works the same as the flags field above). Flags in this list are &amp;quot;turned off&amp;quot; in the weapon, as if they had never been listed. If flags are listed here which are not already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance. This field will be applied AFTER the addflags field is applied, so it could potentially turn off flags turned on by that field.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Damage Properties====&lt;br /&gt;
*&#039;&#039;&#039;mod&#039;&#039;&#039;&lt;br /&gt;
:Default = UNKNOWN (0)&lt;br /&gt;
:Originally standing for &amp;quot;Means of Death&amp;quot;, this field allows you to associate a &#039;&#039;&#039;[[damagetype]]&#039;&#039;&#039; to the weapon info (though this property needs to be applied to projectiles for non-hitscan weapons). Then, you&#039;ll be able to make thing types resistant to the given damage type by using the thingtype &#039;&#039;&#039;damagefactor&#039;&#039;&#039; field. You can give them specific pain or death states as well. This property also have the role in multiplayer to specify what obituaries are shown depending on which weapon the player uses.&lt;br /&gt;
:The mnemonics were initially hard-coded, but are now available inside &#039;&#039;base\things.edf&#039;&#039; as &#039;&#039;&#039;damagetype&#039;&#039;&#039; blocks. Notice that the default damage types (means of death) have been differentiated for each player attack, as well as for the various slime types and whatnot, so as to have the obituaries differentiated.&lt;br /&gt;
&lt;br /&gt;
====Recoil &amp;amp; Haptics Properties====&lt;br /&gt;
*&#039;&#039;&#039;recoil&#039;&#039;&#039;&lt;br /&gt;
:Default = 0.0&lt;br /&gt;
:This field designates the backwards thrust provided to the player when they fire the weapon (in 32nds of map-units). By default users have to opt-in to weapons having recoil, but if the flag ALWAYSRECOIL is set on the weapon then it will cause recoil regardless of the player&#039;s settings.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=File:Pickup_Assets.7z&amp;diff=4388</id>
		<title>File:Pickup Assets.7z</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=File:Pickup_Assets.7z&amp;diff=4388"/>
		<updated>2018-12-29T18:07:15Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Altazimuth uploaded a new version of File:Pickup Assets.7z&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Assets and completed EDF for the tutorial [[Creating a pickup]] (located at User:Altazimuth at the time of upload).&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4387</id>
		<title>Creating a pickup</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4387"/>
		<updated>2018-12-29T18:06:05Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Change tutorial to use Alfheim dialect.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating a pickup is  effectively [[creating a simple decoration]], but with a few more steps. You should read that tutorial first before continuing on here. In this tutorial we will define several pickups, each with its own section. In addition, the multiple ways in which a pickup can be defined will also be explored.&lt;br /&gt;
&lt;br /&gt;
Before starting out you should grab the resources for this tutorial from [[File:Pickup Assets.7z]], and make sure to either rename or delete all the EDF files currently present (as it&#039;s already completed).&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 each pickup will have its own unique lump which contains the necessary EDF. We will include these lumps in EDFROOT so that the relevant pickups defined in the files can be used. For this tutorial we will use [[DECORATE state syntax]] when defining the thingtypes that our pickups require, as well as [[EDF_thing_reference#Eternity_Alfheim_syntax|Alfheim syntax]].&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;
 setdialect(&amp;quot;Alfheim&amp;quot;) // Sets the dialect to Alfheim, which will impact all the lumpincluded files.&lt;br /&gt;
                       // This means that the syntax &amp;quot;thingtype Whatever : Mobj, doomednum&amp;quot; can be used.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please note that you can call the lumps whatever you want. The lump names used here (besides EDFROOT) are just example lump names.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Thing-based pickup==&lt;br /&gt;
Thing-based pickups offer a more streamlined end-user experience than sprite-based pickups, and so it is suggested that you use thing-based pickups. In addition, thing-based pickups take priority over sprite-based pickups, and if a pickup has both available, it will only use the one that is in its thingtype definition.&lt;br /&gt;
&lt;br /&gt;
===Health===&lt;br /&gt;
Create a new lump, called EHEALTH. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EHEALTH&amp;quot;) // A new health pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EHEALTH.&lt;br /&gt;
&lt;br /&gt;
 // This defines the thingtype UglyKit as a thing with doomednum 30001. Mobj is currently a dummy value.&lt;br /&gt;
 thingtype UglyKit : Mobj, 30001&lt;br /&gt;
 {&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects UglyKit   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got health, but you didn&#039;t like it...&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup    // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     UMED A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 healtheffect UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   amount    15  // The amount of health given per pickup.&lt;br /&gt;
   maxamount 150 // The maximum amount the pickup will heal up to.&lt;br /&gt;
 &lt;br /&gt;
   lowmessage &amp;quot;You got health, but you&#039;re not sure how to feel about it.&amp;quot; // The message displayed if the player&lt;br /&gt;
                                                                          // has less then twice the health given.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon UglyKit&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30001 in the map. When you pick it up, it should heal you up to 150 health, and if your health is less than 30 prior to pickup then it will display the lowmessage.&lt;br /&gt;
&lt;br /&gt;
===Armor===&lt;br /&gt;
Create a new lump, called EARMOR. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EARMOR&amp;quot;) // A new armor pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EARMOR.&lt;br /&gt;
&lt;br /&gt;
 // This defines the thingtype RedArmor as a thing with doomednum 30002. Mobj is currently a dummy value.&lt;br /&gt;
 thingtype RedArmor : Mobj, 30002&lt;br /&gt;
 {&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects RedArmor   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;Picked up the HyperArmor!&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup    // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RARM A 6&lt;br /&gt;
     RARM B 7 bright&lt;br /&gt;
     loop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 armoreffect RedArmor&lt;br /&gt;
 {&lt;br /&gt;
   saveamount  150 // The number the armor % is set to.&lt;br /&gt;
   savefactor  2   // The numerator for the damage multiplier fraction (2/n).&lt;br /&gt;
   savedivisor 3   // The denominator for the damage multiplier fraction (n/3).&lt;br /&gt;
                   // These two properties combine to the player taking 2/3 times the damage they usually would (66%).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedArmor&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30002 in the map. When you pick it up, it should set your armor to 150. In addition, 66% of damage dealt to you will be absorbed by the armor.&lt;br /&gt;
&lt;br /&gt;
===Ammo===&lt;br /&gt;
Create a new lump, called EAMMO. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EAMMO&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EAMMO.&lt;br /&gt;
&lt;br /&gt;
 // This defines the thingtype RedAmmoBox as a thing with doomednum 30003. Mobj is currently a dummy value.&lt;br /&gt;
 thingtype RedAmmoBox : Mobj, 30003&lt;br /&gt;
 {&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects RedAmmoBox // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got lazily-recolored ammo.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup     // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RAMM A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ammoeffect RedAmmoBox&lt;br /&gt;
 {&lt;br /&gt;
   ammo       AmmoClip // The type of ammo given&lt;br /&gt;
   amount     75       // The amount of ammo given&lt;br /&gt;
 &lt;br /&gt;
   +ignoreskill        // ignoreskill is a flag. When + it makes it so it ignores skills that double ammo&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedAmmoBox&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30003 in the map. When you pick it up, it should give you 75 bullets, regardless of difficulty.&lt;br /&gt;
&lt;br /&gt;
===Weapon===&lt;br /&gt;
Create a new lump, called EWEAPON. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EWEAPON&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EWEAPON.&lt;br /&gt;
&lt;br /&gt;
  // This defines the thingtype BlueLauncher as a thing with doomednum 30004. Mobj is currently a dummy value.&lt;br /&gt;
 thingtype BlueLauncher : Mobj, 30004&lt;br /&gt;
 {&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects BlueLauncher // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got an offensively blue missile launcher.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   wpnup        // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     BLUL A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 weapongiver BlueLauncher&lt;br /&gt;
 {&lt;br /&gt;
   weapon MissileLauncher // The weaponinfo given by the weaponinfo&lt;br /&gt;
   ammogiven AmmoMissile, 2, 1, 5, 2 // Ammo type given, and values in order, normal, dropped,&lt;br /&gt;
                                     // DM w/ weapons stay, coop w/ weapons stay&lt;br /&gt;
   ammogiven AmmoCell, 10 // You can define as many as you want. In this case, it gives 10 cells always&lt;br /&gt;
                          // (but is doubled for certain skill levels).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon BlueLauncher&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30005 in the map. When you pick it up, it should give you a rocket launcher, some rockets, and cells.&lt;br /&gt;
&lt;br /&gt;
===Power-up===&lt;br /&gt;
Create a new lump, called EPOWER. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EPOWER&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EPOWER.&lt;br /&gt;
&lt;br /&gt;
 // This defines the thingtype Torch as a thing with doomednum 30005. Mobj is currently a dummy value.&lt;br /&gt;
 thingtype Torch : Mobj, 30005&lt;br /&gt;
 {&lt;br /&gt;
   doomednum  30005  // This is the thing number used to place the object in a map.&lt;br /&gt;
   addflags   SPECIAL|COUNTITEM|FLOATBOB // Sets flags for item, which in this case means it&#039;s a collectable item, counts in the items end tally, and floats.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects Torch        // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got a hideous  torch.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   getpow       // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     TRCH ABC 3 bright&lt;br /&gt;
     loop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 powereffect Torch&lt;br /&gt;
 {&lt;br /&gt;
   duration 120        // How long the power lasts in seconds.&lt;br /&gt;
   type     PowerTorch // The type of power given, in this case Heretic&#039;s flickering torch.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon Torch&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30005 in the map. When you pick it up, it should provide you with the Heretic-style&lt;br /&gt;
&lt;br /&gt;
===Artifact===&lt;br /&gt;
Create a new lump, called EKEY. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EKEY&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EKEY.&lt;br /&gt;
&lt;br /&gt;
 // This defines the thingtype GreyCard as a thing with doomednum 30002. Mobj is currently a dummy value.&lt;br /&gt;
 thingtype GreyCard : Mobj, 30006&lt;br /&gt;
 {&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects GreyCard   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;Picked up a grey keycard.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup     // The sound made when the item is picked up.&lt;br /&gt;
     flags   ALWAYSPICKUP|LEAVEINMULTI // These flags set it so it&#039;s always picked up, but isn&#039;t removed in multiplayer.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     GKEY A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 artifact GreyCard&lt;br /&gt;
 {&lt;br /&gt;
   +invbar           // This means that the key will show up in the Heretic-style inventory bar.&lt;br /&gt;
   icon GKEYA0       // The icon for the graphic in the (Heretic-style) inventory bar.&lt;br /&gt;
   // Bear in mind these offsets are combined with the patch offsets instead of overriding them.&lt;br /&gt;
   icon.offset.x -15 // Patch-style x offset for inventory bar (positive is left).&lt;br /&gt;
   icon.offset.y -26 // Patch-style y offset for inventory bar (positive is up).&lt;br /&gt;
   artifacttype Key  // This designates this artifact as a key. This means that the idk cheat would give this new item.&lt;br /&gt;
                     // The other types are Normal, Ammo, Puzzle, Power, Weapon, and Quest. Of these types Normal&lt;br /&gt;
                     // is the default. You will likely only ever need to make Normal (implicitly), Ammo, or Key artifacts.&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Don&#039;t worry about this, as lockdefs will probably be covered another day&lt;br /&gt;
 lockdef 300&lt;br /&gt;
 {&lt;br /&gt;
   require  GreyCard&lt;br /&gt;
   mapcolor &amp;quot;#AAAAAA&amp;quot; // This is matched as closely as possible to the current palette&lt;br /&gt;
    &lt;br /&gt;
   message       &amp;quot;You need a grey card to activate this door&amp;quot;&lt;br /&gt;
   remotemessage &amp;quot;You need a grey card to activate this object&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon GreyCard&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30006 in the map. When you pick it up open your inventory bar (you&#039;ll need keys bound for that) and it should be in there.&lt;br /&gt;
&lt;br /&gt;
==Sprite-based pickup==&lt;br /&gt;
Sprite-based pickups are what almost all IWAD pickups use, and are mostly there for backwards-compatibility.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=User:Altazimuth/Creating_a_pickup&amp;diff=4386</id>
		<title>User:Altazimuth/Creating a pickup</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=User:Altazimuth/Creating_a_pickup&amp;diff=4386"/>
		<updated>2018-12-27T23:01:01Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Altazimuth moved page User:Altazimuth/Creating a pickup to Creating a pickup: The article is ready to be in main.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Creating a pickup]]&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4385</id>
		<title>Creating a pickup</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4385"/>
		<updated>2018-12-27T23:01:01Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Altazimuth moved page User:Altazimuth/Creating a pickup to Creating a pickup: The article is ready to be in main.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating a pickup is  effectively [[creating a simple decoration]], but with a few more steps. You should read that tutorial first before continuing on here. In this tutorial we will define several pickups, each with its own section. In addition, the multiple ways in which a pickup can be defined will also be explored.&lt;br /&gt;
&lt;br /&gt;
Before starting out you should grab the resources for this tutorial from [[File:Pickup Assets.7z]], and make sure to either rename or delete all the EDF files currently present (as it&#039;s already completed).&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 each pickup will have its own unique lump which contains the necessary EDF. We will include these lumps in EDFROOT so that the relevant pickups defined in the files can be used. For this tutorial we will use [[DECORATE state syntax]] when defining the the thingtypes that our pickups require.&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;
&#039;&#039;&#039;Please note that you can call the lumps whatever you want. The lump names used here (besides EDFROOT) are just example lump names.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Thing-based pickup==&lt;br /&gt;
Thing-based pickups offer a more streamlined end-user experience than sprite-based pickups, and so it is suggested that you use thing-based pickups. In addition, thing-based pickups take priority over sprite-based pickups, and if a pickup has both available, it will only use the one that is in its thingtype definition.&lt;br /&gt;
&lt;br /&gt;
===Health===&lt;br /&gt;
Create a new lump, called EHEALTH. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EHEALTH&amp;quot;) // A new health pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EHEALTH.&lt;br /&gt;
&lt;br /&gt;
 thingtype UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30001   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects UglyKit   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got health, but you didn&#039;t like it...&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup    // The sound made when the item is picked up.&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;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     UMED A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 healtheffect UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   amount    15  // The amount of health given per pickup.&lt;br /&gt;
   maxamount 150 // The maximum amount the pickup will heal up to.&lt;br /&gt;
 &lt;br /&gt;
   lowmessage &amp;quot;You got health, but you&#039;re not sure how to feel about it.&amp;quot; // The message displayed if the player&lt;br /&gt;
                                                                          // has less then twice the health given.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon UglyKit&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30001 in the map. When you pick it up, it should heal you up to 150 health, and if your health is less than 30 prior to pickup then it will display the lowmessage.&lt;br /&gt;
&lt;br /&gt;
===Armor===&lt;br /&gt;
Create a new lump, called EARMOR. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EARMOR&amp;quot;) // A new armor pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EARMOR.&lt;br /&gt;
&lt;br /&gt;
 thingtype RedArmor &lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30002   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
    effects RedArmor   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
    message &amp;quot;Picked up the HyperArmor!&amp;quot; // The message given when picked up.&lt;br /&gt;
    sound   itemup    // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RARM A 6&lt;br /&gt;
     RARM B 7 bright&lt;br /&gt;
     loop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 armoreffect RedArmor&lt;br /&gt;
 {&lt;br /&gt;
   saveamount  150 // The number the armor % is set to.&lt;br /&gt;
   savefactor  2   // The numerator for the damage absorption fraction (2/n).&lt;br /&gt;
   savedivisor 3   // The denominator for the damage absorption fraction (n/3).&lt;br /&gt;
                   // These two properties combine to the armor absorbing 2/3 the damage the player would usually would take (66%).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedArmor&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30002 in the map. When you pick it up, it should set your armor to 150. In addition, 66% of damage dealt to you will be absorbed by the armor.&lt;br /&gt;
&lt;br /&gt;
===Ammo===&lt;br /&gt;
Create a new lump, called EAMMO. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EAMMO&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EAMMO.&lt;br /&gt;
&lt;br /&gt;
 thingtype RedAmmoBox&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30003    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects RedAmmoBox // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got lazily-recolored ammo.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup     // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RAMM A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ammoeffect RedAmmoBox&lt;br /&gt;
 {&lt;br /&gt;
   ammo       AmmoClip // The type of ammo given&lt;br /&gt;
   amount     75       // The amount of ammo given&lt;br /&gt;
 &lt;br /&gt;
   +ignoreskill        // ignoreskill is a flag. When + it makes it so it ignores skills that double ammo&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedAmmoBox&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30003 in the map. When you pick it up, it should give you 75 bullets, regardless of difficulty.&lt;br /&gt;
&lt;br /&gt;
===Power-up===&lt;br /&gt;
Create a new lump, called EPOWER. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EPOWER&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EPOWER.&lt;br /&gt;
&lt;br /&gt;
 thingtype Torch&lt;br /&gt;
 {&lt;br /&gt;
   doomednum  30005  // This is the thing number used to place the object in a map.&lt;br /&gt;
   addflags   SPECIAL|COUNTITEM|FLOATBOB // Sets flags for item, which in this case means it&#039;s a collectable item, counts in the items end tally, and floats.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects Torch        // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got a hideous torch.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   getpow       // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     TRCH ABC 3 bright&lt;br /&gt;
     loop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 powereffect Torch&lt;br /&gt;
 {&lt;br /&gt;
   duration 120        // How long the power lasts in seconds.&lt;br /&gt;
   type     PowerTorch // The type of power given, in this case Heretic&#039;s flickering torch.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon Torch&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30005 in the map. When you pick it up, it should provide you with the Heretic-style&lt;br /&gt;
&lt;br /&gt;
===Weapon===&lt;br /&gt;
Create a new lump, called EWEAPON. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EWEAPON&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EWEAPON.&lt;br /&gt;
&lt;br /&gt;
 thingtype BlueLauncher&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30005    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects BlueLauncher // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got an offensively blue missile launcher.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   wpnup        // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     BLUL A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 weapongiver BlueLauncher&lt;br /&gt;
 {&lt;br /&gt;
   weapon MissileLauncher            // The weaponinfo name given by the weapongiver.&lt;br /&gt;
   ammogiven AmmoMissile, 2, 1, 5, 2 // Ammo type given, and values in order, normal, dropped,&lt;br /&gt;
                                     // DM w/ weapons stay, coop w/ weapons stay.&lt;br /&gt;
   ammogiven AmmoCell, 10            // You can define as many as you want. In this case, it gives 10 cells always&lt;br /&gt;
                                     // (but is doubled for certain skill levels).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon BlueLauncher&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30005 in the map. When you pick it up, it should give you a rocket launcher, some rockets, and cells.&lt;br /&gt;
&lt;br /&gt;
===Artifact===&lt;br /&gt;
Create a new lump, called EKEY. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EKEY&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EKEY.&lt;br /&gt;
&lt;br /&gt;
 thingtype GreyCard&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30006    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects GreyCard   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;Picked up a grey keycard.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup     // The sound made when the item is picked up.&lt;br /&gt;
     flags   ALWAYSPICKUP|LEAVEINMULTI // These flags set it so it&#039;s always picked up, but isn&#039;t removed in multiplayer.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     GKEY A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 artifact GreyCard&lt;br /&gt;
 {&lt;br /&gt;
   +invbar           // This means that the key will show up in the Heretic-style inventory bar.&lt;br /&gt;
   icon GKEYA0       // The icon for the graphic in the (Heretic-style) inventory bar.&lt;br /&gt;
   // Bear in mind these offsets are combined with the patch offsets instead of overriding them.&lt;br /&gt;
   icon.offset.x -15 // Patch-style x offset for inventory bar (positive is left).&lt;br /&gt;
   icon.offset.y -26 // Patch-style y offset for inventory bar (positive is up).&lt;br /&gt;
   artifacttype Key  // This designates this artifact as a key. This means that the idk cheat would give this new item.&lt;br /&gt;
                     // The other types are Normal, Ammo, Puzzle, Power, Weapon, and Quest. Of these types Normal&lt;br /&gt;
                     // is the default. You will likely only ever need to make Normal (implicitly), Ammo, or Key artifacts.&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Don&#039;t worry about this, as lockdefs will probably be covered another day&lt;br /&gt;
 lockdef 300&lt;br /&gt;
 {&lt;br /&gt;
   require  GreyCard&lt;br /&gt;
   mapcolor &amp;quot;#AAAAAA&amp;quot; // This is matched as closely as possible to the current palette&lt;br /&gt;
   &lt;br /&gt;
   message       &amp;quot;You need a grey card to activate this door&amp;quot;&lt;br /&gt;
   remotemessage &amp;quot;You need a grey card to activate this object&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon GreyCard&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30006 in the map. When you pick it up open your inventory bar (you&#039;ll need keys bound for that) and it should be in there.&lt;br /&gt;
&lt;br /&gt;
==Sprite-based pickup==&lt;br /&gt;
Sprite-based pickups are what almost all IWAD pickups use, and are mostly there for backwards-compatibility.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4384</id>
		<title>Creating a pickup</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4384"/>
		<updated>2018-12-27T23:00:12Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Add link to resources prior to moving out of user-space.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating a pickup is  effectively [[creating a simple decoration]], but with a few more steps. You should read that tutorial first before continuing on here. In this tutorial we will define several pickups, each with its own section. In addition, the multiple ways in which a pickup can be defined will also be explored.&lt;br /&gt;
&lt;br /&gt;
Before starting out you should grab the resources for this tutorial from [[File:Pickup Assets.7z]], and make sure to either rename or delete all the EDF files currently present (as it&#039;s already completed).&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 each pickup will have its own unique lump which contains the necessary EDF. We will include these lumps in EDFROOT so that the relevant pickups defined in the files can be used. For this tutorial we will use [[DECORATE state syntax]] when defining the the thingtypes that our pickups require.&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;
&#039;&#039;&#039;Please note that you can call the lumps whatever you want. The lump names used here (besides EDFROOT) are just example lump names.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Thing-based pickup==&lt;br /&gt;
Thing-based pickups offer a more streamlined end-user experience than sprite-based pickups, and so it is suggested that you use thing-based pickups. In addition, thing-based pickups take priority over sprite-based pickups, and if a pickup has both available, it will only use the one that is in its thingtype definition.&lt;br /&gt;
&lt;br /&gt;
===Health===&lt;br /&gt;
Create a new lump, called EHEALTH. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EHEALTH&amp;quot;) // A new health pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EHEALTH.&lt;br /&gt;
&lt;br /&gt;
 thingtype UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30001   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects UglyKit   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got health, but you didn&#039;t like it...&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup    // The sound made when the item is picked up.&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;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     UMED A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 healtheffect UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   amount    15  // The amount of health given per pickup.&lt;br /&gt;
   maxamount 150 // The maximum amount the pickup will heal up to.&lt;br /&gt;
 &lt;br /&gt;
   lowmessage &amp;quot;You got health, but you&#039;re not sure how to feel about it.&amp;quot; // The message displayed if the player&lt;br /&gt;
                                                                          // has less then twice the health given.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon UglyKit&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30001 in the map. When you pick it up, it should heal you up to 150 health, and if your health is less than 30 prior to pickup then it will display the lowmessage.&lt;br /&gt;
&lt;br /&gt;
===Armor===&lt;br /&gt;
Create a new lump, called EARMOR. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EARMOR&amp;quot;) // A new armor pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EARMOR.&lt;br /&gt;
&lt;br /&gt;
 thingtype RedArmor &lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30002   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
    effects RedArmor   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
    message &amp;quot;Picked up the HyperArmor!&amp;quot; // The message given when picked up.&lt;br /&gt;
    sound   itemup    // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RARM A 6&lt;br /&gt;
     RARM B 7 bright&lt;br /&gt;
     loop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 armoreffect RedArmor&lt;br /&gt;
 {&lt;br /&gt;
   saveamount  150 // The number the armor % is set to.&lt;br /&gt;
   savefactor  2   // The numerator for the damage absorption fraction (2/n).&lt;br /&gt;
   savedivisor 3   // The denominator for the damage absorption fraction (n/3).&lt;br /&gt;
                   // These two properties combine to the armor absorbing 2/3 the damage the player would usually would take (66%).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedArmor&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30002 in the map. When you pick it up, it should set your armor to 150. In addition, 66% of damage dealt to you will be absorbed by the armor.&lt;br /&gt;
&lt;br /&gt;
===Ammo===&lt;br /&gt;
Create a new lump, called EAMMO. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EAMMO&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EAMMO.&lt;br /&gt;
&lt;br /&gt;
 thingtype RedAmmoBox&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30003    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects RedAmmoBox // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got lazily-recolored ammo.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup     // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RAMM A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ammoeffect RedAmmoBox&lt;br /&gt;
 {&lt;br /&gt;
   ammo       AmmoClip // The type of ammo given&lt;br /&gt;
   amount     75       // The amount of ammo given&lt;br /&gt;
 &lt;br /&gt;
   +ignoreskill        // ignoreskill is a flag. When + it makes it so it ignores skills that double ammo&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedAmmoBox&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30003 in the map. When you pick it up, it should give you 75 bullets, regardless of difficulty.&lt;br /&gt;
&lt;br /&gt;
===Power-up===&lt;br /&gt;
Create a new lump, called EPOWER. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EPOWER&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EPOWER.&lt;br /&gt;
&lt;br /&gt;
 thingtype Torch&lt;br /&gt;
 {&lt;br /&gt;
   doomednum  30005  // This is the thing number used to place the object in a map.&lt;br /&gt;
   addflags   SPECIAL|COUNTITEM|FLOATBOB // Sets flags for item, which in this case means it&#039;s a collectable item, counts in the items end tally, and floats.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects Torch        // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got a hideous torch.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   getpow       // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     TRCH ABC 3 bright&lt;br /&gt;
     loop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 powereffect Torch&lt;br /&gt;
 {&lt;br /&gt;
   duration 120        // How long the power lasts in seconds.&lt;br /&gt;
   type     PowerTorch // The type of power given, in this case Heretic&#039;s flickering torch.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon Torch&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30005 in the map. When you pick it up, it should provide you with the Heretic-style&lt;br /&gt;
&lt;br /&gt;
===Weapon===&lt;br /&gt;
Create a new lump, called EWEAPON. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EWEAPON&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EWEAPON.&lt;br /&gt;
&lt;br /&gt;
 thingtype BlueLauncher&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30005    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects BlueLauncher // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got an offensively blue missile launcher.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   wpnup        // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     BLUL A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 weapongiver BlueLauncher&lt;br /&gt;
 {&lt;br /&gt;
   weapon MissileLauncher            // The weaponinfo name given by the weapongiver.&lt;br /&gt;
   ammogiven AmmoMissile, 2, 1, 5, 2 // Ammo type given, and values in order, normal, dropped,&lt;br /&gt;
                                     // DM w/ weapons stay, coop w/ weapons stay.&lt;br /&gt;
   ammogiven AmmoCell, 10            // You can define as many as you want. In this case, it gives 10 cells always&lt;br /&gt;
                                     // (but is doubled for certain skill levels).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon BlueLauncher&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30005 in the map. When you pick it up, it should give you a rocket launcher, some rockets, and cells.&lt;br /&gt;
&lt;br /&gt;
===Artifact===&lt;br /&gt;
Create a new lump, called EKEY. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EKEY&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EKEY.&lt;br /&gt;
&lt;br /&gt;
 thingtype GreyCard&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30006    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects GreyCard   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;Picked up a grey keycard.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup     // The sound made when the item is picked up.&lt;br /&gt;
     flags   ALWAYSPICKUP|LEAVEINMULTI // These flags set it so it&#039;s always picked up, but isn&#039;t removed in multiplayer.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     GKEY A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 artifact GreyCard&lt;br /&gt;
 {&lt;br /&gt;
   +invbar           // This means that the key will show up in the Heretic-style inventory bar.&lt;br /&gt;
   icon GKEYA0       // The icon for the graphic in the (Heretic-style) inventory bar.&lt;br /&gt;
   // Bear in mind these offsets are combined with the patch offsets instead of overriding them.&lt;br /&gt;
   icon.offset.x -15 // Patch-style x offset for inventory bar (positive is left).&lt;br /&gt;
   icon.offset.y -26 // Patch-style y offset for inventory bar (positive is up).&lt;br /&gt;
   artifacttype Key  // This designates this artifact as a key. This means that the idk cheat would give this new item.&lt;br /&gt;
                     // The other types are Normal, Ammo, Puzzle, Power, Weapon, and Quest. Of these types Normal&lt;br /&gt;
                     // is the default. You will likely only ever need to make Normal (implicitly), Ammo, or Key artifacts.&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Don&#039;t worry about this, as lockdefs will probably be covered another day&lt;br /&gt;
 lockdef 300&lt;br /&gt;
 {&lt;br /&gt;
   require  GreyCard&lt;br /&gt;
   mapcolor &amp;quot;#AAAAAA&amp;quot; // This is matched as closely as possible to the current palette&lt;br /&gt;
   &lt;br /&gt;
   message       &amp;quot;You need a grey card to activate this door&amp;quot;&lt;br /&gt;
   remotemessage &amp;quot;You need a grey card to activate this object&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon GreyCard&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30006 in the map. When you pick it up open your inventory bar (you&#039;ll need keys bound for that) and it should be in there.&lt;br /&gt;
&lt;br /&gt;
==Sprite-based pickup==&lt;br /&gt;
Sprite-based pickups are what almost all IWAD pickups use, and are mostly there for backwards-compatibility.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=File:Pickup_Assets.7z&amp;diff=4383</id>
		<title>File:Pickup Assets.7z</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=File:Pickup_Assets.7z&amp;diff=4383"/>
		<updated>2018-12-27T22:52:29Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Assets and completed EDF for the tutorial Creating a pickup (located at User:Altazimuth at the time of upload).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Assets and completed EDF for the tutorial [[Creating a pickup]] (located at User:Altazimuth at the time of upload).&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4382</id>
		<title>Creating a pickup</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4382"/>
		<updated>2018-12-27T22:42:24Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Add Power-up section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating a pickup is  effectively [[creating a simple decoration]], but with a few more steps. You should read that tutorial first before continuing on here. In this tutorial we will define several pickups, each with its own section. In addition, the multiple ways in which a pickup can be defined will also be explored.&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 each pickup will have its own unique lump which contains the necessary EDF. We will include these lumps in EDFROOT so that the relevant pickups defined in the files can be used. For this tutorial we will use [[DECORATE state syntax]] when defining the the thingtypes that our pickups require.&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;
&#039;&#039;&#039;Please note that you can call the lumps whatever you want. The lump names used here (besides EDFROOT) are just example lump names.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Thing-based pickup==&lt;br /&gt;
Thing-based pickups offer a more streamlined end-user experience than sprite-based pickups, and so it is suggested that you use thing-based pickups. In addition, thing-based pickups take priority over sprite-based pickups, and if a pickup has both available, it will only use the one that is in its thingtype definition.&lt;br /&gt;
&lt;br /&gt;
===Health===&lt;br /&gt;
Create a new lump, called EHEALTH. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EHEALTH&amp;quot;) // A new health pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EHEALTH.&lt;br /&gt;
&lt;br /&gt;
 thingtype UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30001   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects UglyKit   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got health, but you didn&#039;t like it...&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup    // The sound made when the item is picked up.&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;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     UMED A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 healtheffect UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   amount    15  // The amount of health given per pickup.&lt;br /&gt;
   maxamount 150 // The maximum amount the pickup will heal up to.&lt;br /&gt;
 &lt;br /&gt;
   lowmessage &amp;quot;You got health, but you&#039;re not sure how to feel about it.&amp;quot; // The message displayed if the player&lt;br /&gt;
                                                                          // has less then twice the health given.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon UglyKit&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30001 in the map. When you pick it up, it should heal you up to 150 health, and if your health is less than 30 prior to pickup then it will display the lowmessage.&lt;br /&gt;
&lt;br /&gt;
===Armor===&lt;br /&gt;
Create a new lump, called EARMOR. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EARMOR&amp;quot;) // A new armor pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EARMOR.&lt;br /&gt;
&lt;br /&gt;
 thingtype RedArmor &lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30002   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
    effects RedArmor   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
    message &amp;quot;Picked up the HyperArmor!&amp;quot; // The message given when picked up.&lt;br /&gt;
    sound   itemup    // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RARM A 6&lt;br /&gt;
     RARM B 7 bright&lt;br /&gt;
     loop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 armoreffect RedArmor&lt;br /&gt;
 {&lt;br /&gt;
   saveamount  150 // The number the armor % is set to.&lt;br /&gt;
   savefactor  2   // The numerator for the damage absorption fraction (2/n).&lt;br /&gt;
   savedivisor 3   // The denominator for the damage absorption fraction (n/3).&lt;br /&gt;
                   // These two properties combine to the armor absorbing 2/3 the damage the player would usually would take (66%).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedArmor&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30002 in the map. When you pick it up, it should set your armor to 150. In addition, 66% of damage dealt to you will be absorbed by the armor.&lt;br /&gt;
&lt;br /&gt;
===Ammo===&lt;br /&gt;
Create a new lump, called EAMMO. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EAMMO&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EAMMO.&lt;br /&gt;
&lt;br /&gt;
 thingtype RedAmmoBox&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30003    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects RedAmmoBox // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got lazily-recolored ammo.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup     // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RAMM A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ammoeffect RedAmmoBox&lt;br /&gt;
 {&lt;br /&gt;
   ammo       AmmoClip // The type of ammo given&lt;br /&gt;
   amount     75       // The amount of ammo given&lt;br /&gt;
 &lt;br /&gt;
   +ignoreskill        // ignoreskill is a flag. When + it makes it so it ignores skills that double ammo&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedAmmoBox&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30003 in the map. When you pick it up, it should give you 75 bullets, regardless of difficulty.&lt;br /&gt;
&lt;br /&gt;
===Power-up===&lt;br /&gt;
Create a new lump, called EPOWER. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EPOWER&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EPOWER.&lt;br /&gt;
&lt;br /&gt;
 thingtype Torch&lt;br /&gt;
 {&lt;br /&gt;
   doomednum  30005  // This is the thing number used to place the object in a map.&lt;br /&gt;
   addflags   SPECIAL|COUNTITEM|FLOATBOB // Sets flags for item, which in this case means it&#039;s a collectable item, counts in the items end tally, and floats.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects Torch        // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got a hideous torch.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   getpow       // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     TRCH ABC 3 bright&lt;br /&gt;
     loop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 powereffect Torch&lt;br /&gt;
 {&lt;br /&gt;
   duration 120        // How long the power lasts in seconds.&lt;br /&gt;
   type     PowerTorch // The type of power given, in this case Heretic&#039;s flickering torch.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon Torch&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30005 in the map. When you pick it up, it should provide you with the Heretic-style&lt;br /&gt;
&lt;br /&gt;
===Weapon===&lt;br /&gt;
Create a new lump, called EWEAPON. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EWEAPON&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EWEAPON.&lt;br /&gt;
&lt;br /&gt;
 thingtype BlueLauncher&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30005    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects BlueLauncher // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got an offensively blue missile launcher.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   wpnup        // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     BLUL A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 weapongiver BlueLauncher&lt;br /&gt;
 {&lt;br /&gt;
   weapon MissileLauncher            // The weaponinfo name given by the weapongiver.&lt;br /&gt;
   ammogiven AmmoMissile, 2, 1, 5, 2 // Ammo type given, and values in order, normal, dropped,&lt;br /&gt;
                                     // DM w/ weapons stay, coop w/ weapons stay.&lt;br /&gt;
   ammogiven AmmoCell, 10            // You can define as many as you want. In this case, it gives 10 cells always&lt;br /&gt;
                                     // (but is doubled for certain skill levels).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon BlueLauncher&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30005 in the map. When you pick it up, it should give you a rocket launcher, some rockets, and cells.&lt;br /&gt;
&lt;br /&gt;
===Artifact===&lt;br /&gt;
Create a new lump, called EKEY. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EKEY&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EKEY.&lt;br /&gt;
&lt;br /&gt;
 thingtype GreyCard&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30006    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects GreyCard   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;Picked up a grey keycard.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup     // The sound made when the item is picked up.&lt;br /&gt;
     flags   ALWAYSPICKUP|LEAVEINMULTI // These flags set it so it&#039;s always picked up, but isn&#039;t removed in multiplayer.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     GKEY A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 artifact GreyCard&lt;br /&gt;
 {&lt;br /&gt;
   +invbar           // This means that the key will show up in the Heretic-style inventory bar.&lt;br /&gt;
   icon GKEYA0       // The icon for the graphic in the (Heretic-style) inventory bar.&lt;br /&gt;
   // Bear in mind these offsets are combined with the patch offsets instead of overriding them.&lt;br /&gt;
   icon.offset.x -15 // Patch-style x offset for inventory bar (positive is left).&lt;br /&gt;
   icon.offset.y -26 // Patch-style y offset for inventory bar (positive is up).&lt;br /&gt;
   artifacttype Key  // This designates this artifact as a key. This means that the idk cheat would give this new item.&lt;br /&gt;
                     // The other types are Normal, Ammo, Puzzle, Power, Weapon, and Quest. Of these types Normal&lt;br /&gt;
                     // is the default. You will likely only ever need to make Normal (implicitly), Ammo, or Key artifacts.&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Don&#039;t worry about this, as lockdefs will probably be covered another day&lt;br /&gt;
 lockdef 300&lt;br /&gt;
 {&lt;br /&gt;
   require  GreyCard&lt;br /&gt;
   mapcolor &amp;quot;#AAAAAA&amp;quot; // This is matched as closely as possible to the current palette&lt;br /&gt;
   &lt;br /&gt;
   message       &amp;quot;You need a grey card to activate this door&amp;quot;&lt;br /&gt;
   remotemessage &amp;quot;You need a grey card to activate this object&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon GreyCard&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30006 in the map. When you pick it up open your inventory bar (you&#039;ll need keys bound for that) and it should be in there.&lt;br /&gt;
&lt;br /&gt;
==Sprite-based pickup==&lt;br /&gt;
Sprite-based pickups are what almost all IWAD pickups use, and are mostly there for backwards-compatibility.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4381</id>
		<title>Creating a pickup</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4381"/>
		<updated>2018-12-27T15:46:31Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Fix a couple minor typos.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating a pickup is  effectively [[creating a simple decoration]], but with a few more steps. You should read that tutorial first before continuing on here. In this tutorial we will define several pickups, each with its own section. In addition, the multiple ways in which a pickup can be defined will also be explored.&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 each pickup will have its own unique lump which contains the necessary EDF. We will include these lumps in EDFROOT so that the relevant pickups defined in the files can be used. For this tutorial we will use [[DECORATE state syntax]] when defining the the thingtypes that our pickups require.&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;
&#039;&#039;&#039;Please note that you can call the lumps whatever you want. The lump names used here (besides EDFROOT) are just example lump names.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Thing-based pickup==&lt;br /&gt;
Thing-based pickups offer a more streamlined end-user experience than sprite-based pickups, and so it is suggested that you use thing-based pickups. In addition, thing-based pickups take priority over sprite-based pickups, and if a pickup has both available, it will only use the one that is in its thingtype definition.&lt;br /&gt;
&lt;br /&gt;
===Health===&lt;br /&gt;
Create a new lump, called EHEALTH. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EHEALTH&amp;quot;) // A new health pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EHEALTH.&lt;br /&gt;
&lt;br /&gt;
 thingtype UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30001   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects UglyKit   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got health, but you didn&#039;t like it...&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup    // The sound made when the item is picked up.&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;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     UMED A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 healtheffect UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   amount    15  // The amount of health given per pickup.&lt;br /&gt;
   maxamount 150 // The maximum amount the pickup will heal up to.&lt;br /&gt;
 &lt;br /&gt;
   lowmessage &amp;quot;You got health, but you&#039;re not sure how to feel about it.&amp;quot; // The message displayed if the player&lt;br /&gt;
                                                                          // has less then twice the health given.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon UglyKit&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30001 in the map. When you pick it up, it should heal you up to 150 health, and if your health is less than 30 prior to pickup then it will display the lowmessage.&lt;br /&gt;
&lt;br /&gt;
===Armor===&lt;br /&gt;
Create a new lump, called EARMOR. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EARMOR&amp;quot;) // A new armor pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EARMOR.&lt;br /&gt;
&lt;br /&gt;
 thingtype RedArmor &lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30002   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
    effects RedArmor   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
    message &amp;quot;Picked up the HyperArmor!&amp;quot; // The message given when picked up.&lt;br /&gt;
    sound   itemup    // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RARM A 6&lt;br /&gt;
     RARM B 7 bright&lt;br /&gt;
     loop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 armoreffect RedArmor&lt;br /&gt;
 {&lt;br /&gt;
   saveamount  150 // The number the armor % is set to.&lt;br /&gt;
   savefactor  2   // The numerator for the damage absorption fraction (2/n).&lt;br /&gt;
   savedivisor 3   // The denominator for the damage absorption fraction (n/3).&lt;br /&gt;
                   // These two properties combine to the armor absorbing 2/3 the damage the player would usually would take (66%).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedArmor&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30002 in the map. When you pick it up, it should set your armor to 150. In addition, 66% of damage dealt to you will be absorbed by the armor.&lt;br /&gt;
&lt;br /&gt;
===Ammo===&lt;br /&gt;
Create a new lump, called EAMMO. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EAMMO&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EAMMO.&lt;br /&gt;
&lt;br /&gt;
 thingtype RedAmmoBox&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30003    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects RedAmmoBox // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got lazily-recolored ammo.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup     // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RAMM A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ammoeffect RedAmmoBox&lt;br /&gt;
 {&lt;br /&gt;
   ammo       AmmoClip // The type of ammo given&lt;br /&gt;
   amount     75       // The amount of ammo given&lt;br /&gt;
 &lt;br /&gt;
   +ignoreskill        // ignoreskill is a flag. When + it makes it so it ignores skills that double ammo&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedAmmoBox&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30003 in the map. When you pick it up, it should give you 75 bullets, regardless of difficulty.&lt;br /&gt;
&lt;br /&gt;
===Power-up===&lt;br /&gt;
&lt;br /&gt;
===Weapon===&lt;br /&gt;
Create a new lump, called EWEAPON. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EWEAPON&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EWEAPON.&lt;br /&gt;
&lt;br /&gt;
 thingtype BlueLauncher&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30005    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects BlueLauncher // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got an offensively blue missile launcher.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   wpnup        // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     BLUL A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 weapongiver BlueLauncher&lt;br /&gt;
 {&lt;br /&gt;
   weapon MissileLauncher            // The weaponinfo name given by the weapongiver.&lt;br /&gt;
   ammogiven AmmoMissile, 2, 1, 5, 2 // Ammo type given, and values in order, normal, dropped,&lt;br /&gt;
                                     // DM w/ weapons stay, coop w/ weapons stay.&lt;br /&gt;
   ammogiven AmmoCell, 10            // You can define as many as you want. In this case, it gives 10 cells always&lt;br /&gt;
                                     // (but is doubled for certain skill levels).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon BlueLauncher&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30005 in the map. When you pick it up, it should give you a rocket launcher, some rockets, and cells.&lt;br /&gt;
&lt;br /&gt;
===Artifact===&lt;br /&gt;
Create a new lump, called EKEY. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EKEY&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EKEY.&lt;br /&gt;
&lt;br /&gt;
 thingtype GreyCard&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30006    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects GreyCard   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;Picked up a grey keycard.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup     // The sound made when the item is picked up.&lt;br /&gt;
     flags   ALWAYSPICKUP|LEAVEINMULTI // These flags set it so it&#039;s always picked up, but isn&#039;t removed in multiplayer.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     GKEY A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 artifact GreyCard&lt;br /&gt;
 {&lt;br /&gt;
   +invbar           // This means that the key will show up in the Heretic-style inventory bar.&lt;br /&gt;
   icon GKEYA0       // The icon for the graphic in the (Heretic-style) inventory bar.&lt;br /&gt;
   // Bear in mind these offsets are combined with the patch offsets instead of overriding them.&lt;br /&gt;
   icon.offset.x -15 // Patch-style x offset for inventory bar (positive is left).&lt;br /&gt;
   icon.offset.y -26 // Patch-style y offset for inventory bar (positive is up).&lt;br /&gt;
   artifacttype Key  // This designates this artifact as a key. This means that the idk cheat would give this new item.&lt;br /&gt;
                     // The other types are Normal, Ammo, Puzzle, Power, Weapon, and Quest. Of these types Normal&lt;br /&gt;
                     // is the default. You will likely only ever need to make Normal (implicitly), Ammo, or Key artifacts.&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Don&#039;t worry about this, as lockdefs will probably be covered another day&lt;br /&gt;
 lockdef 300&lt;br /&gt;
 {&lt;br /&gt;
   require  GreyCard&lt;br /&gt;
   mapcolor &amp;quot;#AAAAAA&amp;quot; // This is matched as closely as possible to the current palette&lt;br /&gt;
   &lt;br /&gt;
   message       &amp;quot;You need a grey card to activate this door&amp;quot;&lt;br /&gt;
   remotemessage &amp;quot;You need a grey card to activate this object&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon GreyCard&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30006 in the map. When you pick it up open your inventory bar (you&#039;ll need keys bound for that) and it should be in there.&lt;br /&gt;
&lt;br /&gt;
==Sprite-based pickup==&lt;br /&gt;
Sprite-based pickups are what almost all IWAD pickups use, and are mostly there for backwards-compatibility.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4380</id>
		<title>Creating a pickup</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4380"/>
		<updated>2018-12-27T15:45:06Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Add Artifact section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating a pickup is  effectively [[creating a simple decoration]], but with a few more steps. You should read that tutorial first before continuing on here. In this tutorial we will define several pickups, each with its own section. In addition, the multiple ways in which a pickup can be defined will also be explored.&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 each pickup will have its own unique lump which contains the necessary EDF. We will include these lumps in EDFROOT so that the relevant pickups defined in the files can be used. For this tutorial we will use [[DECORATE state syntax]] when defining the the thingtypes that our pickups require.&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;
&#039;&#039;&#039;Please note that you can call the lumps whatever you want. The lump names used here (besides EDFROOT) are just example lump names.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Thing-based pickup==&lt;br /&gt;
Thing-based pickups offer a more streamlined end-user experience than sprite-based pickups, and so it is suggested that you use thing-based pickups. In addition, thing-based pickups take priority over sprite-based pickups, and if a pickup has both available, it will only use the one that is in its thingtype definition.&lt;br /&gt;
&lt;br /&gt;
===Health===&lt;br /&gt;
Create a new lump, called EHEALTH. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EHEALTH&amp;quot;) // A new health pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EHEALTH.&lt;br /&gt;
&lt;br /&gt;
 thingtype UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30001   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects UglyKit   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got health, but you didn&#039;t like it...&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup    // The sound made when the item is picked up.&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;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     UMED A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 healtheffect UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   amount    15  // The amount of health given per pickup.&lt;br /&gt;
   maxamount 150 // The maximum amount the pickup will heal up to.&lt;br /&gt;
 &lt;br /&gt;
   lowmessage &amp;quot;You got health, but you&#039;re not sure how to feel about it.&amp;quot; // The message displayed if the player&lt;br /&gt;
                                                                          // has less then twice the health given.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon UglyKit&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30001 in the map. When you pick it up, it should heal you up to 150 health, and if your health is less than 30 prior to pickup then it will display the lowmessage.&lt;br /&gt;
&lt;br /&gt;
===Armor===&lt;br /&gt;
Create a new lump, called EARMOR. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EARMOR&amp;quot;) // A new armor pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EARMOR.&lt;br /&gt;
&lt;br /&gt;
 thingtype RedArmor &lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30002   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
    effects RedArmor   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
    message &amp;quot;Picked up the HyperArmor!&amp;quot; // The message given when picked up.&lt;br /&gt;
    sound   itemup    // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RARM A 6&lt;br /&gt;
     RARM B 7 bright&lt;br /&gt;
     loop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 armoreffect RedArmor&lt;br /&gt;
 {&lt;br /&gt;
   saveamount  150 // The number the armor % is set to.&lt;br /&gt;
   savefactor  2   // The numerator for the damage absorption fraction (2/n).&lt;br /&gt;
   savedivisor 3   // The denominator for the damage absorption fraction (n/3).&lt;br /&gt;
                   // These two properties combine to the armor absorbing 2/3 the damage the player would usually would take (66%).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedArmor&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30002 in the map. When you pick it up, it should set your armor to 150. In addition, 66% of damage dealt to you will be absorbed by the armor.&lt;br /&gt;
&lt;br /&gt;
===Ammo===&lt;br /&gt;
Create a new lump, called EAMMO. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EAMMO&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EAMMO.&lt;br /&gt;
&lt;br /&gt;
 thingtype RedAmmoBox&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30003    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects RedAmmoBox // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got lazily-recolored ammo.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup     // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RAMM A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ammoeffect RedAmmoBox&lt;br /&gt;
 {&lt;br /&gt;
   ammo       AmmoClip // The type of ammo given&lt;br /&gt;
   amount     75       // The amount of ammo given&lt;br /&gt;
 &lt;br /&gt;
   +ignoreskill        // ignoreskill is a flag. When + it makes it so it ignores skills that double ammo&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedAmmoBox&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30003 in the map. When you pick it up, it should give you 75 bullets, regardless of difficulty.&lt;br /&gt;
&lt;br /&gt;
===Power-up===&lt;br /&gt;
&lt;br /&gt;
===Weapon===&lt;br /&gt;
Create a new lump, called EWEAPON. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EWEAPON&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EWEAPON.&lt;br /&gt;
&lt;br /&gt;
 thingtype BlueLauncher&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30005    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects BlueLauncher // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got an offensively blue missile launcher.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   wpnup        // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     BLUL A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 weapongiver BlueLauncher&lt;br /&gt;
 {&lt;br /&gt;
   weapon MissileLauncher            // The weaponinfo name given by the weapongiver.&lt;br /&gt;
   ammogiven AmmoMissile, 2, 1, 5, 2 // Ammo type given, and values in order, normal, dropped,&lt;br /&gt;
                                     // DM w/ weapons stay, coop w/ weapons stay.&lt;br /&gt;
   ammogiven AmmoCell, 10            // You can define as many as you want. In this case, it gives 10 cells always&lt;br /&gt;
                                     // (but is doubled for certain skill levels).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon BlueLauncher&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30005 in the map. When you pick it  up, it should give you a rocket launcher, some rockets, and cells.&lt;br /&gt;
&lt;br /&gt;
===Artifact===&lt;br /&gt;
Create a new lump, called EKEY. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EKEY&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EKEY.&lt;br /&gt;
&lt;br /&gt;
 thingtype GreyCard&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30005    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects GreyCard   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;Picked up a grey keycard.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup     // The sound made when the item is picked up.&lt;br /&gt;
     flags   ALWAYSPICKUP|LEAVEINMULTI // These flags set it so it&#039;s always picked up, but isn&#039;t removed in multiplayer.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     GKEY A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 artifact GreyCard&lt;br /&gt;
 {&lt;br /&gt;
   +invbar           // This means that the key will show up in the Heretic-style inventory bar.&lt;br /&gt;
   icon GKEYA0       // The icon for the graphic in the (Heretic-style) inventory bar.&lt;br /&gt;
   // Bear in mind these offsets are combined with the patch offsets instead of overriding them.&lt;br /&gt;
   icon.offset.x -15 // Patch-style x offset for inventory bar (positive is left).&lt;br /&gt;
   icon.offset.y -26 // Patch-style y offset for inventory bar (positive is up).&lt;br /&gt;
   artifacttype Key  // This designates this artifact as a key. This means that the idk cheat would give this new item.&lt;br /&gt;
                     // The other types are Normal, Ammo, Puzzle, Power, Weapon, and Quest. Of these types Normal&lt;br /&gt;
                     // is the default. You will likely only ever need to make Normal (implicitly), Ammo, or Key artifacts.&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Don&#039;t worry about this, as lockdefs will probably be covered another day&lt;br /&gt;
 lockdef 300&lt;br /&gt;
 {&lt;br /&gt;
   require  GreyCard&lt;br /&gt;
   mapcolor &amp;quot;#AAAAAA&amp;quot; // This is matched as closely as possible to the current palette&lt;br /&gt;
   &lt;br /&gt;
   message       &amp;quot;You need a grey card to activate this door&amp;quot;&lt;br /&gt;
   remotemessage &amp;quot;You need a grey card to activate this object&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon GreyCard&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30005 in the map. When you pick it up open your inventory bar (you&#039;ll need keys bound for that) and it should be in there.&lt;br /&gt;
&lt;br /&gt;
==Sprite-based pickup==&lt;br /&gt;
Sprite-based pickups are what almost all IWAD pickups use, and are mostly there for backwards-compatibility.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=ExtraData&amp;diff=4364</id>
		<title>ExtraData</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=ExtraData&amp;diff=4364"/>
		<updated>2018-12-17T13:00:30Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Make note that ExtraData is now deprecated, in favour of UDMF.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;With support of [[Universal Doom Map Format]] in releases of Eternity, ExtraData is now considered {{Deprecated}}. In the future new features introduced into UDMF will not be supported by ExtraData. ExtraData maps will still work, but new projects should use UDMF due to its greatly streamlined mapping experience, especially if using editors such as [https://www.doomworld.com/forum/topic/96943 Doom Builder X] or [https://forum.zdoom.org/viewtopic.php?t=54957 GZDoomBuilder-Bugfix] are used (the former including specific improvements for Eternity&#039;s UDMF, such as for [[linked portals]]).&lt;br /&gt;
&lt;br /&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;
{{Backto|Eternity Engine}}&lt;br /&gt;
{{editref}}&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;
   special   &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 [[ACS]] 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 ACS functions that accept TIDs will perform an action on all mapthings which bear the same TID.&lt;br /&gt;
&lt;br /&gt;
====special====&lt;br /&gt;
Default: 0&lt;br /&gt;
&lt;br /&gt;
The thing special field, which will execute when thing dies if it&#039;s a monster or picked up if it&#039;s an item. Use &#039;&#039;&#039;args&#039;&#039;&#039; to control the parameters.&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;
   id &amp;lt;number&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;
    POLYOBJECT    Linedef can be activated by polyobjects (only works with CROSS)&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;
    ZONEBOUNDARY  Linedef will work as a reverb effect boundary. Not needed for one-sided lines.&lt;br /&gt;
    CLIPMIDTEX    Linedef middle texture will not &amp;quot;bleed&amp;quot; on floor and ceiling.&lt;br /&gt;
    LOWERPORTAL   Linedef copies floor portal from its backside to its lower visible edge&lt;br /&gt;
    UPPERPORTAL   Linedef copies ceiling portal from its backside to its upper visible edge&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;
LOWERPORTAL and UPPERPORTAL are used to enable portals on the front side&#039;s upper and/or lower edges of a linedef, if the sector in front of the linedef is tall enough compared to the back sector to expose them. It is the only way to enable such portals, which will copy the sector portal(s) from the backside, if any.&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;
====id====&lt;br /&gt;
:&#039;&#039;Default: 0&#039;&#039;&lt;br /&gt;
This field is equivalent to &#039;&#039;&#039;tag&#039;&#039;&#039;. It will only have effect if &#039;&#039;&#039;tag&#039;&#039;&#039; is not already set.&lt;br /&gt;
&lt;br /&gt;
====alpha====&lt;br /&gt;
:&#039;&#039;Default: Alpha defaults to 1.0.&#039;&#039;&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;
   floorscalex &amp;lt;float&amp;gt;&lt;br /&gt;
   floorscaley &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;
   ceilingscalex &amp;lt;float&amp;gt;&lt;br /&gt;
   ceilingscaley &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;
    PHASEDLIGHT   Sector is phased light sequence start&lt;br /&gt;
    LIGHTSEQUENCE Sector is phased light sequence step (alternates with below flag)&lt;br /&gt;
    LIGHTSEQALT   Sector is phased light sequence alternate step (alternates with above flag)&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. For example, you can use &#039;&#039;&#039;slime&#039;&#039;&#039; or &#039;&#039;&#039;lava&#039;&#039;&#039; damagemod.&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;
====floorscalex/floorscaley====&lt;br /&gt;
:&#039;&#039;Default: 1.0&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the x and y offsets of the floor flat. A higher number means a smaller texture.&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;
====ceilingoffsetx/ceilingoffsety====&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;
====ceilingscalex/ceilingscaley====&lt;br /&gt;
:&#039;&#039;Default: 1.0&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Specifies the x and y offsets of the ceiling flat. A higher number means a smaller texture.&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.floor/portalflags.ceiling====&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;
    ATTACHEDPORTAL  If a linked portal is on the respective floor or ceiling, move it along &lt;br /&gt;
                    with the surface. Useful for vertically moving platforms.&lt;br /&gt;
    ---------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
====overlayalpha.floor/overlayalpha.ceiling====&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>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4356</id>
		<title>EDF weapon reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4356"/>
		<updated>2018-11-07T12:45:30Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Fix recoil&amp;#039;s description being incorrect.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Weapon info define weapons, simple as. They have unique names, or mnemonics, for easy identification. They&#039;re currently referenced solely by weapongivers (see [[EDF item effects and inventory]] for more info on those).&lt;br /&gt;
&lt;br /&gt;
If a weapon info&#039;s mnemonic is not unique, the latest definition of a weapon info with that mnemonic replaces any earlier ones. Like most other identifiers in EDF (but not lump names or subnames), weapon info mnemonics are completely case-insensitive.&lt;br /&gt;
&lt;br /&gt;
New objects, created via EDF files or wad lumps, can be later tweaked with weapon deltas. New weapon info should not be given a &#039;&#039;&#039;dehackednum&#039;&#039;&#039; property, as this is reserved solely for internal weapons so that mods that modify weapons with DeHackEd (BEX) patches remain compatible with Eternity.&lt;br /&gt;
&lt;br /&gt;
{{See|Weapon info flags}}&lt;br /&gt;
{{Backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
==Eternity Alfheim syntax==&lt;br /&gt;
EDF weaponinfo supports pre-Alfheim and Alfehim syntax. Make sure to add:&lt;br /&gt;
 setdialect(&amp;quot;ALFHEIM&amp;quot;)&lt;br /&gt;
before using this syntax:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt;, &amp;lt;dehackednum&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;lt;other attributes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Header properties===&lt;br /&gt;
* &#039;&#039;&amp;lt;inherited weaponinfo&amp;gt;&#039;&#039; must be a value, even if the weaponinfo doesn&#039;t inherit from anything else. In that case, it must be &#039;&#039;&#039;Weapon&#039;&#039;&#039;, which is a placeholder value belonging to no real weaponinfo.&lt;br /&gt;
* &#039;&#039;&amp;lt;dehackednum&amp;gt;&#039;&#039; -1 if not used. If -1, it can be omitted, leaving just this:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt; {&amp;lt;attributes&amp;gt;}&lt;br /&gt;
* If header properties are used, the pre-Alfheim syntax &#039;&#039;&#039;inherits&#039;&#039;&#039; and &#039;&#039;&#039;dehackednum&#039;&#039;&#039; attributes are not used.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; [: &amp;lt;parent type&amp;gt; [, &amp;lt;dehackednum&amp;gt;]]&lt;br /&gt;
 {&lt;br /&gt;
   dehackednum            &amp;lt;unique number&amp;gt;&lt;br /&gt;
   inherits               &amp;lt;weaponinfo&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammotype               &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   ammotype2              &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upstate                &amp;lt;frame&amp;gt;&lt;br /&gt;
   downstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   readystate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate            &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate2           &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate2            &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate2             &amp;lt;frame&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammouse                &amp;lt;number&amp;gt;&lt;br /&gt;
   ammouse2               &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   selectionorder         &amp;lt;number&amp;gt;&lt;br /&gt;
   slotnumber             &amp;lt;number&amp;gt;&lt;br /&gt;
   slotselectionorder     &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   sisterweapon           &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   flags                  &amp;lt;flag list&amp;gt;&lt;br /&gt;
   addflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   remflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   mod                    &amp;lt;MOD name OR number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   recoil                 &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   hapticrecoil           &amp;lt;number&amp;gt;&lt;br /&gt;
   haptictime             &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upsound                &amp;lt;sound&amp;gt;&lt;br /&gt;
   readysound             &amp;lt;sound&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   firstdecoratestate     &amp;lt;frame&amp;gt;&lt;br /&gt;
   states                 &amp;lt;[[DECORATE state syntax]] heredoc&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
====ID / Type Info====&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Fake array index number, for Dehacked patch (BEX or DEH file) compatibility. It has to be an unique number if not -1. Safe numbers are from 10000 up.&lt;br /&gt;
*&#039;&#039;&#039;inherits&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Sets the weapon info from which this will copy properties. All of the properties except &#039;&#039;&#039;dehackednum&#039;&#039;&#039; will be copied from the base actor type.&lt;br /&gt;
&lt;br /&gt;
====States====&lt;br /&gt;
*&#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039;&lt;br /&gt;
:Sets the first frame in a sequential list of dummy frames that use the internal Decorate-style defined &#039;&#039;&#039;states&#039;&#039;&#039; of this actor for [[EDF delta structures|framedelta]] compatibility. It&#039;s not required unless the intention is to make the Decorate states of this weapon accessible from other weapon info. Default games&#039; (Doom, Heretic) weapon info use externalized frames for all weapon info, for compatibility.&lt;br /&gt;
*&#039;&#039;&#039;states&#039;&#039;&#039;&lt;br /&gt;
{{see|DECORATE state syntax}}&lt;br /&gt;
:Default = nothing&lt;br /&gt;
:Defines frames using [http://zdoom.org/wiki/DECORATE DECORATE]-style state definitions. This means it won&#039;t be necessary to define separate [[frame]] blocks for each individual frame. See the DECORATE reference at the ZDoom wiki for documentation on its syntax. Using the &#039;&#039;&#039;states&#039;&#039;&#039; field instead of any of the ones below results in more concise text, but also the newly created frames won&#039;t be accessible from outside (other weaponinfo, Dehacked patches or delta structures), unless you use the &#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039; field as well. Like normally, [[List of codepointers|codepointers]] may or may not be preceded by &#039;&#039;&#039;A_&#039;&#039;&#039;. The DECORATE code has to be implemented via a heredoc: a text string that spans on multiple lines. Unlike a regular string which uses quotation marks, the heredoc is marked by @&amp;quot; and &amp;quot;@ respectively. Example on an shotgun-like weapon (the &#039;=&#039; sign is optional):&lt;br /&gt;
 states =&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Ready:&lt;br /&gt;
      SHTG A 1 A_WeaponReady&lt;br /&gt;
      loop&lt;br /&gt;
   Deselect:&lt;br /&gt;
      SHTG A 1 A_Lower&lt;br /&gt;
      loop&lt;br /&gt;
   Select:&lt;br /&gt;
      SHTG A 1 A_Raise&lt;br /&gt;
      loop&lt;br /&gt;
   Fire:&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_FireShotgun&lt;br /&gt;
      SHTG BC 5&lt;br /&gt;
      SHTG D 4&lt;br /&gt;
      SHTG CB 5&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_ReFire&lt;br /&gt;
      goto Ready&lt;br /&gt;
   Flash:&lt;br /&gt;
      SHTF A 4 Bright A_Light1&lt;br /&gt;
      SHTF B 3 Bright A_Light2&lt;br /&gt;
      goto LightDone&lt;br /&gt;
  &amp;quot;@&lt;br /&gt;
*&#039;&#039;&#039;upstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is raised.If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;upstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;downstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is being lowered. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;downstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;readystate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is ready to be fired. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;readystate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;attackstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon goes to if the user tries to perform a primary attack. Though not necessary, it is suggested for weapons to have an attackstate for primary firing purposes.&lt;br /&gt;
*&#039;&#039;&#039;flashstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon jumps to if a [[List of codepointers|codepointer]] causes a weapon to flash.&lt;br /&gt;
*&#039;&#039;&#039;holdstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame jumped to by [[ReFire|A_ReFire]] if the player is still holding the primary attack button.&lt;br /&gt;
*&#039;&#039;&#039;attackstate2&#039;&#039;&#039;, &#039;&#039;&#039;flashstate2&#039;&#039;&#039;, &#039;&#039;&#039;holdstate2&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
: The equivalent of &#039;&#039;&#039;attackstate&#039;&#039;&#039;, &#039;&#039;&#039;flashstate&#039;&#039;&#039;, and &#039;&#039;&#039;holdstate&#039;&#039;&#039;, but for alternate fire.&lt;br /&gt;
&lt;br /&gt;
====Selection Order and Weapon Slots====&lt;br /&gt;
*&#039;&#039;&#039;selectionorder&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Sets the priority for selection of the weapon. The lower the number, the higher its priority.&lt;br /&gt;
*&#039;&#039;&#039;slotnumber&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Sets the weapon slot that the weapon occupies in the global weapon slots structure. For assigning to player class weapon slots, read [[weapon slots]].&lt;br /&gt;
*&#039;&#039;&#039;slotselectionorder&#039;&#039;&#039;&lt;br /&gt;
:Default = -1.0&lt;br /&gt;
:Sets the in-slot priority for the weapon in the global weapon slots structure. The lower the number, the higher its priority. Read [[weapon slots]] if you wish to understand the specifics of how in-slot priority works interacts with player class weapon slots.&lt;br /&gt;
&lt;br /&gt;
====Sister Weapon====&lt;br /&gt;
*&#039;&#039;&#039;sisterweapon&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Defines a weapon that is also provided when this weapon is picked up. This is can be used either for [[doom_wiki:Tome of Power|Tome of Power]] variants, or for weapons with two different firing modes (used by Strife weapons).&lt;br /&gt;
&lt;br /&gt;
====Flags====&lt;br /&gt;
*&#039;&#039;&#039;flags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field controls a number of weapon info properties using bit flags, where each bit in the field stands for some effect, and has the value of being either on or off. See the [[Weapon info flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks.&lt;br /&gt;
*&#039;&#039;&#039;addflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be added to the weapon&#039;s existing flags values (this works the same as the flags field above). Flags in this list are &amp;quot;turned on&amp;quot; in the weapon. If flags are listed here which are already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance.&lt;br /&gt;
*&#039;&#039;&#039;remflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be subtracted from the weapon&#039;s existing flags values (this works the same as the flags field above). Flags in this list are &amp;quot;turned off&amp;quot; in the weapon, as if they had never been listed. If flags are listed here which are not already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance. This field will be applied AFTER the addflags field is applied, so it could potentially turn off flags turned on by that field.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Damage Properties====&lt;br /&gt;
*&#039;&#039;&#039;mod&#039;&#039;&#039;&lt;br /&gt;
:Default = UNKNOWN (0)&lt;br /&gt;
:Originally standing for &amp;quot;Means of Death&amp;quot;, this field allows you to associate a &#039;&#039;&#039;[[damagetype]]&#039;&#039;&#039; to the weapon info (though this property needs to be applied to projectiles for non-hitscan weapons). Then, you&#039;ll be able to make thing types resistant to the given damage type by using the thingtype &#039;&#039;&#039;damagefactor&#039;&#039;&#039; field. You can give them specific pain or death states as well. This property also have the role in multiplayer to specify what obituaries are shown depending on which weapon the player uses.&lt;br /&gt;
:The mnemonics were initially hard-coded, but are now available inside &#039;&#039;base\things.edf&#039;&#039; as &#039;&#039;&#039;damagetype&#039;&#039;&#039; blocks. Notice that the default damage types (means of death) have been differentiated for each player attack, as well as for the various slime types and whatnot, so as to have the obituaries differentiated.&lt;br /&gt;
&lt;br /&gt;
====Recoil &amp;amp; Haptics Properties====&lt;br /&gt;
*&#039;&#039;&#039;recoil&#039;&#039;&#039;&lt;br /&gt;
:Default = 0.0&lt;br /&gt;
:This field designates the backwards thrust provided to the player when they fire the weapon (in 32nds of map-units). By default users have to opt-in to weapons having recoil, but if the flag ALWAYSRECOIL is set on the weapon then it will cause recoil regardless of the player&#039;s settings.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4353</id>
		<title>EDF weapon reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4353"/>
		<updated>2018-11-04T19:18:45Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Add more fields.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Weapon info define weapons, simple as. They have unique names, or mnemonics, for easy identification. They&#039;re currently referenced solely by weapongivers (see [[EDF item effects and inventory]] for more info on those).&lt;br /&gt;
&lt;br /&gt;
If a weapon info&#039;s mnemonic is not unique, the latest definition of a weapon info with that mnemonic replaces any earlier ones. Like most other identifiers in EDF (but not lump names or subnames), weapon info mnemonics are completely case-insensitive.&lt;br /&gt;
&lt;br /&gt;
New objects, created via EDF files or wad lumps, can be later tweaked with weapon deltas. New weapon info should not be given a &#039;&#039;&#039;dehackednum&#039;&#039;&#039; property, as this is reserved solely for internal weapons so that mods that modify weapons with DeHackEd (BEX) patches remain compatible with Eternity.&lt;br /&gt;
&lt;br /&gt;
{{See|Weapon info flags}}&lt;br /&gt;
{{Backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
==Eternity Alfheim syntax==&lt;br /&gt;
EDF weaponinfo supports pre-Alfheim and Alfehim syntax. Make sure to add:&lt;br /&gt;
 setdialect(&amp;quot;ALFHEIM&amp;quot;)&lt;br /&gt;
before using this syntax:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt;, &amp;lt;dehackednum&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;lt;other attributes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Header properties===&lt;br /&gt;
* &#039;&#039;&amp;lt;inherited weaponinfo&amp;gt;&#039;&#039; must be a value, even if the weaponinfo doesn&#039;t inherit from anything else. In that case, it must be &#039;&#039;&#039;Weapon&#039;&#039;&#039;, which is a placeholder value belonging to no real weaponinfo.&lt;br /&gt;
* &#039;&#039;&amp;lt;dehackednum&amp;gt;&#039;&#039; -1 if not used. If -1, it can be omitted, leaving just this:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt; {&amp;lt;attributes&amp;gt;}&lt;br /&gt;
* If header properties are used, the pre-Alfheim syntax &#039;&#039;&#039;inherits&#039;&#039;&#039; and &#039;&#039;&#039;dehackednum&#039;&#039;&#039; attributes are not used.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; [: &amp;lt;parent type&amp;gt; [, &amp;lt;dehackednum&amp;gt;]]&lt;br /&gt;
 {&lt;br /&gt;
   dehackednum            &amp;lt;unique number&amp;gt;&lt;br /&gt;
   inherits               &amp;lt;weaponinfo&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammotype               &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   ammotype2              &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upstate                &amp;lt;frame&amp;gt;&lt;br /&gt;
   downstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   readystate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate            &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate2           &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate2            &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate2             &amp;lt;frame&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammouse                &amp;lt;number&amp;gt;&lt;br /&gt;
   ammouse2               &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   selectionorder         &amp;lt;number&amp;gt;&lt;br /&gt;
   slotnumber             &amp;lt;number&amp;gt;&lt;br /&gt;
   slotselectionorder     &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   sisterweapon           &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   flags                  &amp;lt;flag list&amp;gt;&lt;br /&gt;
   addflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   remflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   mod                    &amp;lt;MOD name OR number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   recoil                 &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   hapticrecoil           &amp;lt;number&amp;gt;&lt;br /&gt;
   haptictime             &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upsound                &amp;lt;sound&amp;gt;&lt;br /&gt;
   readysound             &amp;lt;sound&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   firstdecoratestate     &amp;lt;frame&amp;gt;&lt;br /&gt;
   states                 &amp;lt;[[DECORATE state syntax]] heredoc&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
====ID / Type Info====&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Fake array index number, for Dehacked patch (BEX or DEH file) compatibility. It has to be an unique number if not -1. Safe numbers are from 10000 up.&lt;br /&gt;
*&#039;&#039;&#039;inherits&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Sets the weapon info from which this will copy properties. All of the properties except &#039;&#039;&#039;dehackednum&#039;&#039;&#039; will be copied from the base actor type.&lt;br /&gt;
&lt;br /&gt;
====States====&lt;br /&gt;
*&#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039;&lt;br /&gt;
:Sets the first frame in a sequential list of dummy frames that use the internal Decorate-style defined &#039;&#039;&#039;states&#039;&#039;&#039; of this actor for [[EDF delta structures|framedelta]] compatibility. It&#039;s not required unless the intention is to make the Decorate states of this weapon accessible from other weapon info. Default games&#039; (Doom, Heretic) weapon info use externalized frames for all weapon info, for compatibility.&lt;br /&gt;
*&#039;&#039;&#039;states&#039;&#039;&#039;&lt;br /&gt;
{{see|DECORATE state syntax}}&lt;br /&gt;
:Default = nothing&lt;br /&gt;
:Defines frames using [http://zdoom.org/wiki/DECORATE DECORATE]-style state definitions. This means it won&#039;t be necessary to define separate [[frame]] blocks for each individual frame. See the DECORATE reference at the ZDoom wiki for documentation on its syntax. Using the &#039;&#039;&#039;states&#039;&#039;&#039; field instead of any of the ones below results in more concise text, but also the newly created frames won&#039;t be accessible from outside (other weaponinfo, Dehacked patches or delta structures), unless you use the &#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039; field as well. Like normally, [[List of codepointers|codepointers]] may or may not be preceded by &#039;&#039;&#039;A_&#039;&#039;&#039;. The DECORATE code has to be implemented via a heredoc: a text string that spans on multiple lines. Unlike a regular string which uses quotation marks, the heredoc is marked by @&amp;quot; and &amp;quot;@ respectively. Example on an shotgun-like weapon (the &#039;=&#039; sign is optional):&lt;br /&gt;
 states =&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Ready:&lt;br /&gt;
      SHTG A 1 A_WeaponReady&lt;br /&gt;
      loop&lt;br /&gt;
   Deselect:&lt;br /&gt;
      SHTG A 1 A_Lower&lt;br /&gt;
      loop&lt;br /&gt;
   Select:&lt;br /&gt;
      SHTG A 1 A_Raise&lt;br /&gt;
      loop&lt;br /&gt;
   Fire:&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_FireShotgun&lt;br /&gt;
      SHTG BC 5&lt;br /&gt;
      SHTG D 4&lt;br /&gt;
      SHTG CB 5&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_ReFire&lt;br /&gt;
      goto Ready&lt;br /&gt;
   Flash:&lt;br /&gt;
      SHTF A 4 Bright A_Light1&lt;br /&gt;
      SHTF B 3 Bright A_Light2&lt;br /&gt;
      goto LightDone&lt;br /&gt;
  &amp;quot;@&lt;br /&gt;
*&#039;&#039;&#039;upstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is raised.If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;upstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;downstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is being lowered. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;downstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;readystate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is ready to be fired. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;readystate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;attackstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon goes to if the user tries to perform a primary attack. Though not necessary, it is suggested for weapons to have an attackstate for primary firing purposes.&lt;br /&gt;
*&#039;&#039;&#039;flashstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon jumps to if a [[List of codepointers|codepointer]] causes a weapon to flash.&lt;br /&gt;
*&#039;&#039;&#039;holdstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame jumped to by [[ReFire|A_ReFire]] if the player is still holding the primary attack button.&lt;br /&gt;
*&#039;&#039;&#039;attackstate2&#039;&#039;&#039;, &#039;&#039;&#039;flashstate2&#039;&#039;&#039;, &#039;&#039;&#039;holdstate2&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
: The equivalent of &#039;&#039;&#039;attackstate&#039;&#039;&#039;, &#039;&#039;&#039;flashstate&#039;&#039;&#039;, and &#039;&#039;&#039;holdstate&#039;&#039;&#039;, but for alternate fire.&lt;br /&gt;
&lt;br /&gt;
====Selection Order and Weapon Slots====&lt;br /&gt;
*&#039;&#039;&#039;selectionorder&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Sets the priority for selection of the weapon. The lower the number, the higher its priority.&lt;br /&gt;
*&#039;&#039;&#039;slotnumber&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Sets the weapon slot that the weapon occupies in the global weapon slots structure. For assigning to player class weapon slots, read [[weapon slots]].&lt;br /&gt;
*&#039;&#039;&#039;slotselectionorder&#039;&#039;&#039;&lt;br /&gt;
:Default = -1.0&lt;br /&gt;
:Sets the in-slot priority for the weapon in the global weapon slots structure. The lower the number, the higher its priority. Read [[weapon slots]] if you wish to understand the specifics of how in-slot priority works interacts with player class weapon slots.&lt;br /&gt;
&lt;br /&gt;
====Sister Weapon====&lt;br /&gt;
*&#039;&#039;&#039;sisterweapon&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Defines a weapon that is also provided when this weapon is picked up. This is can be used either for [[doom_wiki:Tome of Power|Tome of Power]] variants, or for weapons with two different firing modes (used by Strife weapons).&lt;br /&gt;
&lt;br /&gt;
====Flags====&lt;br /&gt;
*&#039;&#039;&#039;flags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field controls a number of weapon info properties using bit flags, where each bit in the field stands for some effect, and has the value of being either on or off. See the [[Weapon info flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks.&lt;br /&gt;
*&#039;&#039;&#039;addflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be added to the weapon&#039;s existing flags values (this works the same as the flags field above). Flags in this list are &amp;quot;turned on&amp;quot; in the weapon. If flags are listed here which are already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance.&lt;br /&gt;
*&#039;&#039;&#039;remflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be subtracted from the weapon&#039;s existing flags values (this works the same as the flags field above). Flags in this list are &amp;quot;turned off&amp;quot; in the weapon, as if they had never been listed. If flags are listed here which are not already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance. This field will be applied AFTER the addflags field is applied, so it could potentially turn off flags turned on by that field.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Damage Properties====&lt;br /&gt;
*&#039;&#039;&#039;mod&#039;&#039;&#039;&lt;br /&gt;
:Default = UNKNOWN (0)&lt;br /&gt;
:Originally standing for &amp;quot;Means of Death&amp;quot;, this field allows you to associate a &#039;&#039;&#039;[[damagetype]]&#039;&#039;&#039; to the weapon info (though this property needs to be applied to projectiles for non-hitscan weapons). Then, you&#039;ll be able to make thing types resistant to the given damage type by using the thingtype &#039;&#039;&#039;damagefactor&#039;&#039;&#039; field. You can give them specific pain or death states as well. This property also have the role in multiplayer to specify what obituaries are shown depending on which weapon the player uses.&lt;br /&gt;
:The mnemonics were initially hard-coded, but are now available inside &#039;&#039;base\things.edf&#039;&#039; as &#039;&#039;&#039;damagetype&#039;&#039;&#039; blocks. Notice that the default damage types (means of death) have been differentiated for each player attack, as well as for the various slime types and whatnot, so as to have the obituaries differentiated.&lt;br /&gt;
&lt;br /&gt;
====Recoil &amp;amp; Haptics Properties====&lt;br /&gt;
*&#039;&#039;&#039;recoil&#039;&#039;&#039;&lt;br /&gt;
:Default = 0.0&lt;br /&gt;
:This field specifies a combined list of flags to be added to the weapon&#039;s existing flags values (this works the same as the flags field above). Flags in this list are &amp;quot;turned on&amp;quot; in the weapon. If flags are listed here which are already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4252</id>
		<title>EDF weapon reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4252"/>
		<updated>2018-04-10T15:31:45Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Remove the User:Altazimuth from the Weapon info flags reference.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Weapon info define weapons, simple as. They have unique names, or mnemonics, for easy identification. They&#039;re currently referenced solely by weapongivers (see [[EDF item effects and inventory]] for more info on those).&lt;br /&gt;
&lt;br /&gt;
If a weapon info&#039;s mnemonic is not unique, the latest definition of a weapon info with that mnemonic replaces any earlier ones. Like most other identifiers in EDF (but not lump names or subnames), weapon info mnemonics are completely case-insensitive.&lt;br /&gt;
&lt;br /&gt;
New objects, created via EDF files or wad lumps, can be later tweaked with weapon deltas. New weapon info should not be given a &#039;&#039;&#039;dehackednum&#039;&#039;&#039; property, as this is reserved solely for internal weapons so that mods that modify weapons with DeHackEd (BEX) patches remain compatible with Eternity.&lt;br /&gt;
&lt;br /&gt;
{{See|Weapon info flags}}&lt;br /&gt;
{{Backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
==Eternity Alfheim syntax==&lt;br /&gt;
EDF weaponinfo supports pre-Alfheim and Alfehim syntax. Make sure to add:&lt;br /&gt;
 setdialect(&amp;quot;ALFHEIM&amp;quot;)&lt;br /&gt;
before using this syntax:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt;, &amp;lt;dehackednum&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;lt;other attributes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Header properties===&lt;br /&gt;
* &#039;&#039;&amp;lt;inherited weaponinfo&amp;gt;&#039;&#039; must be a value, even if the weaponinfo doesn&#039;t inherit from anything else. In that case, it must be &#039;&#039;&#039;Weapon&#039;&#039;&#039;, which is a placeholder value belonging to no real weaponinfo.&lt;br /&gt;
* &#039;&#039;&amp;lt;dehackednum&amp;gt;&#039;&#039; -1 if not used. If -1, it can be omitted, leaving just this:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt; {&amp;lt;attributes&amp;gt;}&lt;br /&gt;
* If header properties are used, the pre-Alfheim syntax &#039;&#039;&#039;inherits&#039;&#039;&#039; and &#039;&#039;&#039;dehackednum&#039;&#039;&#039; attributes are not used.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; [: &amp;lt;parent type&amp;gt; [, &amp;lt;dehackednum&amp;gt;]]&lt;br /&gt;
 {&lt;br /&gt;
   dehackednum            &amp;lt;unique number&amp;gt;&lt;br /&gt;
   inherits               &amp;lt;weaponinfo&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammotype               &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   ammotype2              &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upstate                &amp;lt;frame&amp;gt;&lt;br /&gt;
   downstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   readystate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate            &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate2           &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate2            &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate2             &amp;lt;frame&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammouse                &amp;lt;number&amp;gt;&lt;br /&gt;
   ammouse2               &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   selectionorder         &amp;lt;number&amp;gt;&lt;br /&gt;
   slotnumber             &amp;lt;number&amp;gt;&lt;br /&gt;
   slotselectionorder     &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   sisterweapon           &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   flags                  &amp;lt;flag list&amp;gt;&lt;br /&gt;
   addflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   remflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   mod                    &amp;lt;MOD name OR number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   recoil                 &amp;lt;number&amp;gt;&lt;br /&gt;
   hapticrecoil           &amp;lt;number&amp;gt;&lt;br /&gt;
   haptictime             &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upsound                &amp;lt;sound&amp;gt;&lt;br /&gt;
   readysound             &amp;lt;sound&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   firstdecoratestate     &amp;lt;frame&amp;gt;&lt;br /&gt;
   states                 &amp;lt;[[DECORATE state syntax]] heredoc&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
====ID / Type Info====&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Fake array index number, for Dehacked patch (BEX or DEH file) compatibility. It has to be an unique number if not -1. Safe numbers are from 10000 up.&lt;br /&gt;
*&#039;&#039;&#039;inherits&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Sets the weapon info from which this will copy properties. All of the properties except &#039;&#039;&#039;dehackednum&#039;&#039;&#039; will be copied from the base actor type.&lt;br /&gt;
&lt;br /&gt;
====States====&lt;br /&gt;
*&#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039;&lt;br /&gt;
:Sets the first frame in a sequential list of dummy frames that use the internal Decorate-style defined &#039;&#039;&#039;states&#039;&#039;&#039; of this actor for [[EDF delta structures|framedelta]] compatibility. It&#039;s not required unless the intention is to make the Decorate states of this weapon accessible from other weapon info. Default games&#039; (Doom, Heretic) weapon info use externalized frames for all weapon info, for compatibility.&lt;br /&gt;
*&#039;&#039;&#039;states&#039;&#039;&#039;&lt;br /&gt;
{{see|DECORATE state syntax}}&lt;br /&gt;
:Default = nothing&lt;br /&gt;
:Defines frames using [http://zdoom.org/wiki/DECORATE DECORATE]-style state definitions. This means it won&#039;t be necessary to define separate [[frame]] blocks for each individual frame. See the DECORATE reference at the ZDoom wiki for documentation on its syntax. Using the &#039;&#039;&#039;states&#039;&#039;&#039; field instead of any of the ones below results in more concise text, but also the newly created frames won&#039;t be accessible from outside (other weaponinfo, Dehacked patches or delta structures), unless you use the &#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039; field as well. Like normally, [[List of codepointers|codepointers]] may or may not be preceded by &#039;&#039;&#039;A_&#039;&#039;&#039;. The DECORATE code has to be implemented via a heredoc: a text string that spans on multiple lines. Unlike a regular string which uses quotation marks, the heredoc is marked by @&amp;quot; and &amp;quot;@ respectively. Example on an shotgun-like weapon (the &#039;=&#039; sign is optional):&lt;br /&gt;
 states =&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Ready:&lt;br /&gt;
      SHTG A 1 A_WeaponReady&lt;br /&gt;
      loop&lt;br /&gt;
   Deselect:&lt;br /&gt;
      SHTG A 1 A_Lower&lt;br /&gt;
      loop&lt;br /&gt;
   Select:&lt;br /&gt;
      SHTG A 1 A_Raise&lt;br /&gt;
      loop&lt;br /&gt;
   Fire:&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_FireShotgun&lt;br /&gt;
      SHTG BC 5&lt;br /&gt;
      SHTG D 4&lt;br /&gt;
      SHTG CB 5&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_ReFire&lt;br /&gt;
      goto Ready&lt;br /&gt;
   Flash:&lt;br /&gt;
      SHTF A 4 Bright A_Light1&lt;br /&gt;
      SHTF B 3 Bright A_Light2&lt;br /&gt;
      goto LightDone&lt;br /&gt;
  &amp;quot;@&lt;br /&gt;
*&#039;&#039;&#039;upstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is raised.If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;upstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;downstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is being lowered. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;downstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;readystate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is ready to be fired. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;readystate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;attackstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon goes to if the user tries to perform a primary attack. Though not necessary, it is suggested for weapons to have an attackstate for primary firing purposes.&lt;br /&gt;
*&#039;&#039;&#039;flashstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon jumps to if a [[List of codepointers|codepointer]] causes a weapon to flash.&lt;br /&gt;
*&#039;&#039;&#039;holdstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame jumped to by [[ReFire|A_ReFire]] if the player is still holding the primary attack button.&lt;br /&gt;
*&#039;&#039;&#039;attackstate2&#039;&#039;&#039;, &#039;&#039;&#039;flashstate2&#039;&#039;&#039;, &#039;&#039;&#039;holdstate2&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
: The equivalent of &#039;&#039;&#039;attackstate&#039;&#039;&#039;, &#039;&#039;&#039;flashstate&#039;&#039;&#039;, and &#039;&#039;&#039;holdstate&#039;&#039;&#039;, but for alternate fire.&lt;br /&gt;
&lt;br /&gt;
====Selection Order and Weapon Slots====&lt;br /&gt;
*&#039;&#039;&#039;selectionorder&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Sets the priority for selection of the weapon. The lower the number, the higher its priority.&lt;br /&gt;
*&#039;&#039;&#039;slotnumber&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Sets the weapon slot that the weapon occupies in the global weapon slots structure. For assigning to player class weapon slots, read [[weapon slots]].&lt;br /&gt;
*&#039;&#039;&#039;slotselectionorder&#039;&#039;&#039;&lt;br /&gt;
:Default = -1.0&lt;br /&gt;
:Sets the in-slot priority for the weapon in the global weapon slots structure. The lower the number, the higher its priority. Read [[weapon slots]] if you wish to understand the specifics of how in-slot priority works interacts with player class weapon slots.&lt;br /&gt;
&lt;br /&gt;
====Sister Weapon====&lt;br /&gt;
*&#039;&#039;&#039;sisterweapon&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Defines a weapon that is also provided when this weapon is picked up. This is can be used either for [[doom_wiki:Tome of Power|Tome of Power]] variants, or for weapons with two different firing modes (used by Strife weapons).&lt;br /&gt;
&lt;br /&gt;
====Flags====&lt;br /&gt;
*&#039;&#039;&#039;flags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field controls a number of weapon info properties using bit flags, where each bit in the field stands for some effect, and has the value of being either on or off. See the [[Weapon info flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks.&lt;br /&gt;
*&#039;&#039;&#039;addflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be added to the weapon&#039;s existing flags values (this works the same as the flags field above). Flags in this list are &amp;quot;turned on&amp;quot; in the weapon. If flags are listed here which are already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance.&lt;br /&gt;
*&#039;&#039;&#039;remflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be subtracted from the weapon&#039;s existing flags values (this works the same as the flags field above). Flags in this list are &amp;quot;turned off&amp;quot; in the weapon, as if they had never been listed. If flags are listed here which are not already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance. This field will be applied AFTER the addflags field is applied, so it could potentially turn off flags turned on by that field.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_item_effects_and_inventory&amp;diff=4251</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=4251"/>
		<updated>2018-04-10T15:08:13Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Parenthesise example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Define what happens when an item is picked up and used (and eventually, dropped from the inventory - this is not complete yet).&lt;br /&gt;
&lt;br /&gt;
There are many different types of item effect definitions:&lt;br /&gt;
&lt;br /&gt;
===artifact===&lt;br /&gt;
An artifact is an item which, when collected, goes into the player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
 artifact &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  amount         &amp;lt;int&amp;gt; // amount gained with one pickup&lt;br /&gt;
  maxamount      &amp;lt;int&amp;gt; // max amount that can be carried in inventory&lt;br /&gt;
  interhubamount &amp;lt;int&amp;gt; // max amount carryable between levels in different hubs;&lt;br /&gt;
                       // -1 if this field should not apply at all&lt;br /&gt;
  sortorder      &amp;lt;int&amp;gt; // key used for sorting the player&#039;s inventory&lt;br /&gt;
  icon           &amp;lt;str&amp;gt; // name of icon graphic for invbar&lt;br /&gt;
  usesound       &amp;lt;str&amp;gt; // sound made when item is used&lt;br /&gt;
  useeffect      &amp;lt;str&amp;gt; // name of item effect to use for activation&lt;br /&gt;
  useaction      &amp;lt;action function&amp;gt; // codepointer and arguments called (e.g. A_GauntletAttack(1))&lt;br /&gt;
  &lt;br /&gt;
  [+-]undroppable      // if +, cannot be dropped from inventory&lt;br /&gt;
  [+-]invbar           // if +, appears in invbar; otherwise, invisible&lt;br /&gt;
  [+-]keepdepleted     // if +, will remain in inventory with amount of zero&lt;br /&gt;
  [+-]fullamountonly   // if +, cannot pickup unless full amount is needed&lt;br /&gt;
  [+-]noshareware      // if +, non-shareware&lt;br /&gt;
  &lt;br /&gt;
  // artifacttype determines what sort of artifact this is.  &lt;br /&gt;
  artifacttype   &amp;lt;str&amp;gt; // &amp;quot;Normal&amp;quot;, &amp;quot;Ammo&amp;quot;, &amp;quot;Key&amp;quot;, &amp;quot;Puzzle&amp;quot;, &amp;quot;Power&amp;quot;, &amp;quot;Weapon&amp;quot;,&lt;br /&gt;
                       // or &amp;quot;Quest&amp;quot;&lt;br /&gt;
                       &lt;br /&gt;
  // The following fields apply only to certain artifact types. They have no&lt;br /&gt;
  // effect if specified on other types.&lt;br /&gt;
  &lt;br /&gt;
  // Ammo&lt;br /&gt;
  ammo.backpackamount    &amp;lt;int&amp;gt; // amount of this ammo type given by a Backpack&lt;br /&gt;
  ammo.backpackmaxamount &amp;lt;int&amp;gt; // max amount after collecting a Backpack&lt;br /&gt;
 }&lt;br /&gt;
===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;
  [+-]additive        // if +, adds to the current amount of armor&lt;br /&gt;
  [+-]setabsorption   // if +, sets absorption values (savefactor &amp;amp; savedivisor)&lt;br /&gt;
 }&lt;br /&gt;
===ammoeffect===&lt;br /&gt;
Ammo givers give an Ammo type artifact to the player.&lt;br /&gt;
 ammoeffect &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  ammo       &amp;lt;str&amp;gt; // Name of an Ammo-type artifact definition&lt;br /&gt;
  amount     &amp;lt;int&amp;gt; // Amount to give for an ordinary pickup&lt;br /&gt;
  dropamount &amp;lt;int&amp;gt; // Amount to give if dropped by an enemy&lt;br /&gt;
  &lt;br /&gt;
  [+-]ignoreskill  // if +, does not double on skills that give double ammo  &lt;br /&gt;
 }&lt;br /&gt;
===powereffect===&lt;br /&gt;
Power givers 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;
  // Note that you can specify as many ammogiven properties as you want in a single weapongiver&lt;br /&gt;
  ammogiven  &amp;lt;ammo&amp;gt;, &amp;lt;amount&amp;gt; [, &amp;lt;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>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_item_effects_and_inventory&amp;diff=4250</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=4250"/>
		<updated>2018-04-10T15:07:40Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Update page to use info from EDF_item_effects_and_inventory/Weapons-branch.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Define what happens when an item is picked up and used (and eventually, dropped from the inventory - this is not complete yet).&lt;br /&gt;
&lt;br /&gt;
There are many different types of item effect definitions:&lt;br /&gt;
&lt;br /&gt;
===artifact===&lt;br /&gt;
An artifact is an item which, when collected, goes into the player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
 artifact &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  amount         &amp;lt;int&amp;gt; // amount gained with one pickup&lt;br /&gt;
  maxamount      &amp;lt;int&amp;gt; // max amount that can be carried in inventory&lt;br /&gt;
  interhubamount &amp;lt;int&amp;gt; // max amount carryable between levels in different hubs;&lt;br /&gt;
                       // -1 if this field should not apply at all&lt;br /&gt;
  sortorder      &amp;lt;int&amp;gt; // key used for sorting the player&#039;s inventory&lt;br /&gt;
  icon           &amp;lt;str&amp;gt; // name of icon graphic for invbar&lt;br /&gt;
  usesound       &amp;lt;str&amp;gt; // sound made when item is used&lt;br /&gt;
  useeffect      &amp;lt;str&amp;gt; // name of item effect to use for activation&lt;br /&gt;
  useaction      &amp;lt;action function&amp;gt; // codepointer and arguments called e.g. A_GauntletAttack(1)&lt;br /&gt;
  &lt;br /&gt;
  [+-]undroppable      // if +, cannot be dropped from inventory&lt;br /&gt;
  [+-]invbar           // if +, appears in invbar; otherwise, invisible&lt;br /&gt;
  [+-]keepdepleted     // if +, will remain in inventory with amount of zero&lt;br /&gt;
  [+-]fullamountonly   // if +, cannot pickup unless full amount is needed&lt;br /&gt;
  [+-]noshareware      // if +, non-shareware&lt;br /&gt;
  &lt;br /&gt;
  // artifacttype determines what sort of artifact this is.  &lt;br /&gt;
  artifacttype   &amp;lt;str&amp;gt; // &amp;quot;Normal&amp;quot;, &amp;quot;Ammo&amp;quot;, &amp;quot;Key&amp;quot;, &amp;quot;Puzzle&amp;quot;, &amp;quot;Power&amp;quot;, &amp;quot;Weapon&amp;quot;,&lt;br /&gt;
                       // or &amp;quot;Quest&amp;quot;&lt;br /&gt;
                       &lt;br /&gt;
  // The following fields apply only to certain artifact types. They have no&lt;br /&gt;
  // effect if specified on other types.&lt;br /&gt;
  &lt;br /&gt;
  // Ammo&lt;br /&gt;
  ammo.backpackamount    &amp;lt;int&amp;gt; // amount of this ammo type given by a Backpack&lt;br /&gt;
  ammo.backpackmaxamount &amp;lt;int&amp;gt; // max amount after collecting a Backpack&lt;br /&gt;
 }&lt;br /&gt;
===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;
  [+-]additive        // if +, adds to the current amount of armor&lt;br /&gt;
  [+-]setabsorption   // if +, sets absorption values (savefactor &amp;amp; savedivisor)&lt;br /&gt;
 }&lt;br /&gt;
===ammoeffect===&lt;br /&gt;
Ammo givers give an Ammo type artifact to the player.&lt;br /&gt;
 ammoeffect &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  ammo       &amp;lt;str&amp;gt; // Name of an Ammo-type artifact definition&lt;br /&gt;
  amount     &amp;lt;int&amp;gt; // Amount to give for an ordinary pickup&lt;br /&gt;
  dropamount &amp;lt;int&amp;gt; // Amount to give if dropped by an enemy&lt;br /&gt;
  &lt;br /&gt;
  [+-]ignoreskill  // if +, does not double on skills that give double ammo  &lt;br /&gt;
 }&lt;br /&gt;
===powereffect===&lt;br /&gt;
Power givers 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;
  // Note that you can specify as many ammogiven properties as you want in a single weapongiver&lt;br /&gt;
  ammogiven  &amp;lt;ammo&amp;gt;, &amp;lt;amount&amp;gt; [, &amp;lt;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>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_item_effects_and_inventory/Weapons-branch&amp;diff=4249</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=4249"/>
		<updated>2018-04-10T14:59:35Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Update all item effects to reflect current item effects and inventory properties. Remove warning.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Define what happens when an item is picked up and used (and eventually, dropped from the inventory - this is not complete yet).&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;
  useaction      &amp;lt;action function&amp;gt; // codepointer and arguments called e.g. A_GauntletAttack(1)&lt;br /&gt;
  &lt;br /&gt;
  [+-]undroppable      // if +, cannot be dropped from inventory&lt;br /&gt;
  [+-]invbar           // if +, appears in invbar; otherwise, invisible&lt;br /&gt;
  [+-]keepdepleted     // if +, will remain in inventory with amount of zero&lt;br /&gt;
  [+-]fullamountonly   // if +, cannot pickup unless full amount is needed&lt;br /&gt;
  [+-]noshareware      // if +, non-shareware&lt;br /&gt;
  &lt;br /&gt;
  // artifacttype determines what sort of artifact this is.  &lt;br /&gt;
  artifacttype   &amp;lt;str&amp;gt; // &amp;quot;Normal&amp;quot;, &amp;quot;Ammo&amp;quot;, &amp;quot;Key&amp;quot;, &amp;quot;Puzzle&amp;quot;, &amp;quot;Power&amp;quot;, &amp;quot;Weapon&amp;quot;,&lt;br /&gt;
                       // or &amp;quot;Quest&amp;quot;&lt;br /&gt;
                       &lt;br /&gt;
  // The following fields apply only to certain artifact types. They have no&lt;br /&gt;
  // effect if specified on other types.&lt;br /&gt;
  &lt;br /&gt;
  // Ammo&lt;br /&gt;
  ammo.backpackamount    &amp;lt;int&amp;gt; // amount of this ammo type given by a Backpack&lt;br /&gt;
  ammo.backpackmaxamount &amp;lt;int&amp;gt; // max amount after collecting a Backpack&lt;br /&gt;
 }&lt;br /&gt;
===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;
  [+-]additive        // if +, adds to the current amount of armor&lt;br /&gt;
  [+-]setabsorption   // if +, sets absorption values (savefactor &amp;amp; savedivisor)&lt;br /&gt;
 }&lt;br /&gt;
===ammoeffect===&lt;br /&gt;
Ammo givers give an Ammo type artifact to the player.&lt;br /&gt;
 ammoeffect &amp;lt;name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  ammo       &amp;lt;str&amp;gt; // Name of an Ammo-type artifact definition&lt;br /&gt;
  amount     &amp;lt;int&amp;gt; // Amount to give for an ordinary pickup&lt;br /&gt;
  dropamount &amp;lt;int&amp;gt; // Amount to give if dropped by an enemy&lt;br /&gt;
  &lt;br /&gt;
  [+-]ignoreskill  // if +, does not double on skills that give double ammo  &lt;br /&gt;
 }&lt;br /&gt;
===powereffect===&lt;br /&gt;
Power givers 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;
  // Note that you can specify as many ammogiven properties as you want in a single weapongiver&lt;br /&gt;
  ammogiven  &amp;lt;ammo&amp;gt;, &amp;lt;amount&amp;gt; [, &amp;lt;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>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=User:Altazimuth&amp;diff=4248</id>
		<title>User:Altazimuth</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=User:Altazimuth&amp;diff=4248"/>
		<updated>2018-04-10T14:45:31Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Update things I&amp;#039;m working on. Toot my own horn.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Howdy; I&#039;m Altazimuth, though feel free to abbreviate it as you wish. I am a contributor to the [[Eternity Engine]], as well as a member of [[Team Eternity]]. When unable to contribute to the codebase I try to improve documentation and general article quality around here. My end goals are to assist in making modding for the Eternity Engine easier, improve its adoption, and make it a more complete and featureful engine.&lt;br /&gt;
&lt;br /&gt;
Things I&#039;ve done that I&#039;m proud enough to list here:&lt;br /&gt;
* Complete [[inventory]] support.&lt;br /&gt;
* Add EDF pickup support.&lt;br /&gt;
* Add [[EDF weapon reference|EDF weapon]] support.&lt;br /&gt;
* Migrate Eternity to SDL2.&lt;br /&gt;
* Probably other stuff I&#039;m forgetting.&lt;br /&gt;
&lt;br /&gt;
Eternity-related things I&#039;m working on:&lt;br /&gt;
* Improving documentation of features on this wiki ([[EDF]] tutorials and action specials in particular).&lt;br /&gt;
* Improving, or adding, Eternity [[UDMF]] support in SLADE3 and GZDoomBuilder.&lt;br /&gt;
* Bugfix, add in small quality-of-life changes.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=User:Altazimuth/EDF_weapon_reference&amp;diff=4247</id>
		<title>User:Altazimuth/EDF weapon reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=User:Altazimuth/EDF_weapon_reference&amp;diff=4247"/>
		<updated>2018-04-10T14:37:20Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Altazimuth moved page User:Altazimuth/EDF weapon reference to EDF weapon reference: The page is ready for general use.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[EDF weapon reference]]&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4246</id>
		<title>EDF weapon reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4246"/>
		<updated>2018-04-10T14:37:20Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Altazimuth moved page User:Altazimuth/EDF weapon reference to EDF weapon reference: The page is ready for general use.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Weapon info define weapons, simple as. They have unique names, or mnemonics, for easy identification. They&#039;re currently referenced solely by weapongivers (see [[EDF item effects and inventory]] for more info on those).&lt;br /&gt;
&lt;br /&gt;
If a weapon info&#039;s mnemonic is not unique, the latest definition of a weapon info with that mnemonic replaces any earlier ones. Like most other identifiers in EDF (but not lump names or subnames), weapon info mnemonics are completely case-insensitive.&lt;br /&gt;
&lt;br /&gt;
New objects, created via EDF files or wad lumps, can be later tweaked with weapon deltas. New weapon info should not be given a &#039;&#039;&#039;dehackednum&#039;&#039;&#039; property, as this is reserved solely for internal weapons so that mods that modify weapons with DeHackEd (BEX) patches remain compatible with Eternity.&lt;br /&gt;
&lt;br /&gt;
{{See|User:Altazimuth/Weapon info flags}}&lt;br /&gt;
{{Backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
==Eternity Alfheim syntax==&lt;br /&gt;
EDF weaponinfo supports pre-Alfheim and Alfehim syntax. Make sure to add:&lt;br /&gt;
 setdialect(&amp;quot;ALFHEIM&amp;quot;)&lt;br /&gt;
before using this syntax:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt;, &amp;lt;dehackednum&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;lt;other attributes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Header properties===&lt;br /&gt;
* &#039;&#039;&amp;lt;inherited weaponinfo&amp;gt;&#039;&#039; must be a value, even if the weaponinfo doesn&#039;t inherit from anything else. In that case, it must be &#039;&#039;&#039;Weapon&#039;&#039;&#039;, which is a placeholder value belonging to no real weaponinfo.&lt;br /&gt;
* &#039;&#039;&amp;lt;dehackednum&amp;gt;&#039;&#039; -1 if not used. If -1, it can be omitted, leaving just this:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt; {&amp;lt;attributes&amp;gt;}&lt;br /&gt;
* If header properties are used, the pre-Alfheim syntax &#039;&#039;&#039;inherits&#039;&#039;&#039; and &#039;&#039;&#039;dehackednum&#039;&#039;&#039; attributes are not used.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; [: &amp;lt;parent type&amp;gt; [, &amp;lt;dehackednum&amp;gt;]]&lt;br /&gt;
 {&lt;br /&gt;
   dehackednum            &amp;lt;unique number&amp;gt;&lt;br /&gt;
   inherits               &amp;lt;weaponinfo&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammotype               &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   ammotype2              &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upstate                &amp;lt;frame&amp;gt;&lt;br /&gt;
   downstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   readystate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate            &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate2           &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate2            &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate2             &amp;lt;frame&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammouse                &amp;lt;number&amp;gt;&lt;br /&gt;
   ammouse2               &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   selectionorder         &amp;lt;number&amp;gt;&lt;br /&gt;
   slotnumber             &amp;lt;number&amp;gt;&lt;br /&gt;
   slotselectionorder     &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   sisterweapon           &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   flags                  &amp;lt;flag list&amp;gt;&lt;br /&gt;
   addflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   remflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   mod                    &amp;lt;MOD name OR number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   recoil                 &amp;lt;number&amp;gt;&lt;br /&gt;
   hapticrecoil           &amp;lt;number&amp;gt;&lt;br /&gt;
   haptictime             &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upsound                &amp;lt;sound&amp;gt;&lt;br /&gt;
   readysound             &amp;lt;sound&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   firstdecoratestate     &amp;lt;frame&amp;gt;&lt;br /&gt;
   states                 &amp;lt;[[DECORATE state syntax]] heredoc&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
====ID / Type Info====&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Fake array index number, for Dehacked patch (BEX or DEH file) compatibility. It has to be an unique number if not -1. Safe numbers are from 10000 up.&lt;br /&gt;
*&#039;&#039;&#039;inherits&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Sets the weapon info from which this will copy properties. All of the properties except &#039;&#039;&#039;dehackednum&#039;&#039;&#039; will be copied from the base actor type.&lt;br /&gt;
&lt;br /&gt;
====States====&lt;br /&gt;
*&#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039;&lt;br /&gt;
:Sets the first frame in a sequential list of dummy frames that use the internal Decorate-style defined &#039;&#039;&#039;states&#039;&#039;&#039; of this actor for [[EDF delta structures|framedelta]] compatibility. It&#039;s not required unless the intention is to make the Decorate states of this weapon accessible from other weapon info. Default games&#039; (Doom, Heretic) weapon info use externalized frames for all weapon info, for compatibility.&lt;br /&gt;
*&#039;&#039;&#039;states&#039;&#039;&#039;&lt;br /&gt;
{{see|DECORATE state syntax}}&lt;br /&gt;
:Default = nothing&lt;br /&gt;
:Defines frames using [http://zdoom.org/wiki/DECORATE DECORATE]-style state definitions. This means it won&#039;t be necessary to define separate [[frame]] blocks for each individual frame. See the DECORATE reference at the ZDoom wiki for documentation on its syntax. Using the &#039;&#039;&#039;states&#039;&#039;&#039; field instead of any of the ones below results in more concise text, but also the newly created frames won&#039;t be accessible from outside (other weaponinfo, Dehacked patches or delta structures), unless you use the &#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039; field as well. Like normally, [[List of codepointers|codepointers]] may or may not be preceded by &#039;&#039;&#039;A_&#039;&#039;&#039;. The DECORATE code has to be implemented via a heredoc: a text string that spans on multiple lines. Unlike a regular string which uses quotation marks, the heredoc is marked by @&amp;quot; and &amp;quot;@ respectively. Example on an shotgun-like weapon (the &#039;=&#039; sign is optional):&lt;br /&gt;
 states =&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Ready:&lt;br /&gt;
      SHTG A 1 A_WeaponReady&lt;br /&gt;
      loop&lt;br /&gt;
   Deselect:&lt;br /&gt;
      SHTG A 1 A_Lower&lt;br /&gt;
      loop&lt;br /&gt;
   Select:&lt;br /&gt;
      SHTG A 1 A_Raise&lt;br /&gt;
      loop&lt;br /&gt;
   Fire:&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_FireShotgun&lt;br /&gt;
      SHTG BC 5&lt;br /&gt;
      SHTG D 4&lt;br /&gt;
      SHTG CB 5&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_ReFire&lt;br /&gt;
      goto Ready&lt;br /&gt;
   Flash:&lt;br /&gt;
      SHTF A 4 Bright A_Light1&lt;br /&gt;
      SHTF B 3 Bright A_Light2&lt;br /&gt;
      goto LightDone&lt;br /&gt;
  &amp;quot;@&lt;br /&gt;
*&#039;&#039;&#039;upstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is raised.If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;upstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;downstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is being lowered. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;downstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;readystate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is ready to be fired. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;readystate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;attackstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon goes to if the user tries to perform a primary attack. Though not necessary, it is suggested for weapons to have an attackstate for primary firing purposes.&lt;br /&gt;
*&#039;&#039;&#039;flashstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon jumps to if a [[List of codepointers|codepointer]] causes a weapon to flash.&lt;br /&gt;
*&#039;&#039;&#039;holdstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame jumped to by [[ReFire|A_ReFire]] if the player is still holding the primary attack button.&lt;br /&gt;
*&#039;&#039;&#039;attackstate2&#039;&#039;&#039;, &#039;&#039;&#039;flashstate2&#039;&#039;&#039;, &#039;&#039;&#039;holdstate2&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
: The equivalent of &#039;&#039;&#039;attackstate&#039;&#039;&#039;, &#039;&#039;&#039;flashstate&#039;&#039;&#039;, and &#039;&#039;&#039;holdstate&#039;&#039;&#039;, but for alternate fire.&lt;br /&gt;
&lt;br /&gt;
====Selection Order and Weapon Slots====&lt;br /&gt;
*&#039;&#039;&#039;selectionorder&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Sets the priority for selection of the weapon. The lower the number, the higher its priority.&lt;br /&gt;
*&#039;&#039;&#039;slotnumber&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Sets the weapon slot that the weapon occupies in the global weapon slots structure. For assigning to player class weapon slots, read [[weapon slots]].&lt;br /&gt;
*&#039;&#039;&#039;slotselectionorder&#039;&#039;&#039;&lt;br /&gt;
:Default = -1.0&lt;br /&gt;
:Sets the in-slot priority for the weapon in the global weapon slots structure. The lower the number, the higher its priority. Read [[weapon slots]] if you wish to understand the specifics of how in-slot priority works interacts with player class weapon slots.&lt;br /&gt;
&lt;br /&gt;
====Sister Weapon====&lt;br /&gt;
*&#039;&#039;&#039;sisterweapon&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Defines a weapon that is also provided when this weapon is picked up. This is can be used either for [[doom_wiki:Tome of Power|Tome of Power]] variants, or for weapons with two different firing modes (used by Strife weapons).&lt;br /&gt;
&lt;br /&gt;
====Flags====&lt;br /&gt;
*&#039;&#039;&#039;flags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field controls a number of weapon info properties using bit flags, where each bit in the field stands for some effect, and has the value of being either on or off. See the [[Weapon info flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks.&lt;br /&gt;
*&#039;&#039;&#039;addflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be added to the weapon&#039;s existing flags values (this works the same as the flags field above). Flags in this list are &amp;quot;turned on&amp;quot; in the weapon. If flags are listed here which are already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance.&lt;br /&gt;
*&#039;&#039;&#039;remflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be subtracted from the weapon&#039;s existing flags values (this works the same as the flags field above). Flags in this list are &amp;quot;turned off&amp;quot; in the weapon, as if they had never been listed. If flags are listed here which are not already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance. This field will be applied AFTER the addflags field is applied, so it could potentially turn off flags turned on by that field.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4245</id>
		<title>EDF weapon reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4245"/>
		<updated>2018-04-10T14:36:52Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Do initial spiel.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Weapon info define weapons, simple as. They have unique names, or mnemonics, for easy identification. They&#039;re currently referenced solely by weapongivers (see [[EDF item effects and inventory]] for more info on those).&lt;br /&gt;
&lt;br /&gt;
If a weapon info&#039;s mnemonic is not unique, the latest definition of a weapon info with that mnemonic replaces any earlier ones. Like most other identifiers in EDF (but not lump names or subnames), weapon info mnemonics are completely case-insensitive.&lt;br /&gt;
&lt;br /&gt;
New objects, created via EDF files or wad lumps, can be later tweaked with weapon deltas. New weapon info should not be given a &#039;&#039;&#039;dehackednum&#039;&#039;&#039; property, as this is reserved solely for internal weapons so that mods that modify weapons with DeHackEd (BEX) patches remain compatible with Eternity.&lt;br /&gt;
&lt;br /&gt;
{{See|User:Altazimuth/Weapon info flags}}&lt;br /&gt;
{{Backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
==Eternity Alfheim syntax==&lt;br /&gt;
EDF weaponinfo supports pre-Alfheim and Alfehim syntax. Make sure to add:&lt;br /&gt;
 setdialect(&amp;quot;ALFHEIM&amp;quot;)&lt;br /&gt;
before using this syntax:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt;, &amp;lt;dehackednum&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;lt;other attributes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Header properties===&lt;br /&gt;
* &#039;&#039;&amp;lt;inherited weaponinfo&amp;gt;&#039;&#039; must be a value, even if the weaponinfo doesn&#039;t inherit from anything else. In that case, it must be &#039;&#039;&#039;Weapon&#039;&#039;&#039;, which is a placeholder value belonging to no real weaponinfo.&lt;br /&gt;
* &#039;&#039;&amp;lt;dehackednum&amp;gt;&#039;&#039; -1 if not used. If -1, it can be omitted, leaving just this:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt; {&amp;lt;attributes&amp;gt;}&lt;br /&gt;
* If header properties are used, the pre-Alfheim syntax &#039;&#039;&#039;inherits&#039;&#039;&#039; and &#039;&#039;&#039;dehackednum&#039;&#039;&#039; attributes are not used.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; [: &amp;lt;parent type&amp;gt; [, &amp;lt;dehackednum&amp;gt;]]&lt;br /&gt;
 {&lt;br /&gt;
   dehackednum            &amp;lt;unique number&amp;gt;&lt;br /&gt;
   inherits               &amp;lt;weaponinfo&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammotype               &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   ammotype2              &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upstate                &amp;lt;frame&amp;gt;&lt;br /&gt;
   downstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   readystate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate            &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate2           &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate2            &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate2             &amp;lt;frame&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammouse                &amp;lt;number&amp;gt;&lt;br /&gt;
   ammouse2               &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   selectionorder         &amp;lt;number&amp;gt;&lt;br /&gt;
   slotnumber             &amp;lt;number&amp;gt;&lt;br /&gt;
   slotselectionorder     &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   sisterweapon           &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   flags                  &amp;lt;flag list&amp;gt;&lt;br /&gt;
   addflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   remflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   mod                    &amp;lt;MOD name OR number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   recoil                 &amp;lt;number&amp;gt;&lt;br /&gt;
   hapticrecoil           &amp;lt;number&amp;gt;&lt;br /&gt;
   haptictime             &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upsound                &amp;lt;sound&amp;gt;&lt;br /&gt;
   readysound             &amp;lt;sound&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   firstdecoratestate     &amp;lt;frame&amp;gt;&lt;br /&gt;
   states                 &amp;lt;[[DECORATE state syntax]] heredoc&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
====ID / Type Info====&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Fake array index number, for Dehacked patch (BEX or DEH file) compatibility. It has to be an unique number if not -1. Safe numbers are from 10000 up.&lt;br /&gt;
*&#039;&#039;&#039;inherits&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Sets the weapon info from which this will copy properties. All of the properties except &#039;&#039;&#039;dehackednum&#039;&#039;&#039; will be copied from the base actor type.&lt;br /&gt;
&lt;br /&gt;
====States====&lt;br /&gt;
*&#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039;&lt;br /&gt;
:Sets the first frame in a sequential list of dummy frames that use the internal Decorate-style defined &#039;&#039;&#039;states&#039;&#039;&#039; of this actor for [[EDF delta structures|framedelta]] compatibility. It&#039;s not required unless the intention is to make the Decorate states of this weapon accessible from other weapon info. Default games&#039; (Doom, Heretic) weapon info use externalized frames for all weapon info, for compatibility.&lt;br /&gt;
*&#039;&#039;&#039;states&#039;&#039;&#039;&lt;br /&gt;
{{see|DECORATE state syntax}}&lt;br /&gt;
:Default = nothing&lt;br /&gt;
:Defines frames using [http://zdoom.org/wiki/DECORATE DECORATE]-style state definitions. This means it won&#039;t be necessary to define separate [[frame]] blocks for each individual frame. See the DECORATE reference at the ZDoom wiki for documentation on its syntax. Using the &#039;&#039;&#039;states&#039;&#039;&#039; field instead of any of the ones below results in more concise text, but also the newly created frames won&#039;t be accessible from outside (other weaponinfo, Dehacked patches or delta structures), unless you use the &#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039; field as well. Like normally, [[List of codepointers|codepointers]] may or may not be preceded by &#039;&#039;&#039;A_&#039;&#039;&#039;. The DECORATE code has to be implemented via a heredoc: a text string that spans on multiple lines. Unlike a regular string which uses quotation marks, the heredoc is marked by @&amp;quot; and &amp;quot;@ respectively. Example on an shotgun-like weapon (the &#039;=&#039; sign is optional):&lt;br /&gt;
 states =&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Ready:&lt;br /&gt;
      SHTG A 1 A_WeaponReady&lt;br /&gt;
      loop&lt;br /&gt;
   Deselect:&lt;br /&gt;
      SHTG A 1 A_Lower&lt;br /&gt;
      loop&lt;br /&gt;
   Select:&lt;br /&gt;
      SHTG A 1 A_Raise&lt;br /&gt;
      loop&lt;br /&gt;
   Fire:&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_FireShotgun&lt;br /&gt;
      SHTG BC 5&lt;br /&gt;
      SHTG D 4&lt;br /&gt;
      SHTG CB 5&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_ReFire&lt;br /&gt;
      goto Ready&lt;br /&gt;
   Flash:&lt;br /&gt;
      SHTF A 4 Bright A_Light1&lt;br /&gt;
      SHTF B 3 Bright A_Light2&lt;br /&gt;
      goto LightDone&lt;br /&gt;
  &amp;quot;@&lt;br /&gt;
*&#039;&#039;&#039;upstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is raised.If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;upstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;downstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is being lowered. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;downstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;readystate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is ready to be fired. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;readystate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;attackstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon goes to if the user tries to perform a primary attack. Though not necessary, it is suggested for weapons to have an attackstate for primary firing purposes.&lt;br /&gt;
*&#039;&#039;&#039;flashstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon jumps to if a [[List of codepointers|codepointer]] causes a weapon to flash.&lt;br /&gt;
*&#039;&#039;&#039;holdstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame jumped to by [[ReFire|A_ReFire]] if the player is still holding the primary attack button.&lt;br /&gt;
*&#039;&#039;&#039;attackstate2&#039;&#039;&#039;, &#039;&#039;&#039;flashstate2&#039;&#039;&#039;, &#039;&#039;&#039;holdstate2&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
: The equivalent of &#039;&#039;&#039;attackstate&#039;&#039;&#039;, &#039;&#039;&#039;flashstate&#039;&#039;&#039;, and &#039;&#039;&#039;holdstate&#039;&#039;&#039;, but for alternate fire.&lt;br /&gt;
&lt;br /&gt;
====Selection Order and Weapon Slots====&lt;br /&gt;
*&#039;&#039;&#039;selectionorder&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Sets the priority for selection of the weapon. The lower the number, the higher its priority.&lt;br /&gt;
*&#039;&#039;&#039;slotnumber&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Sets the weapon slot that the weapon occupies in the global weapon slots structure. For assigning to player class weapon slots, read [[weapon slots]].&lt;br /&gt;
*&#039;&#039;&#039;slotselectionorder&#039;&#039;&#039;&lt;br /&gt;
:Default = -1.0&lt;br /&gt;
:Sets the in-slot priority for the weapon in the global weapon slots structure. The lower the number, the higher its priority. Read [[weapon slots]] if you wish to understand the specifics of how in-slot priority works interacts with player class weapon slots.&lt;br /&gt;
&lt;br /&gt;
====Sister Weapon====&lt;br /&gt;
*&#039;&#039;&#039;sisterweapon&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Defines a weapon that is also provided when this weapon is picked up. This is can be used either for [[doom_wiki:Tome of Power|Tome of Power]] variants, or for weapons with two different firing modes (used by Strife weapons).&lt;br /&gt;
&lt;br /&gt;
====Flags====&lt;br /&gt;
*&#039;&#039;&#039;flags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field controls a number of weapon info properties using bit flags, where each bit in the field stands for some effect, and has the value of being either on or off. See the [[Weapon info flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks.&lt;br /&gt;
*&#039;&#039;&#039;addflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be added to the weapon&#039;s existing flags values (this works the same as the flags field above). Flags in this list are &amp;quot;turned on&amp;quot; in the weapon. If flags are listed here which are already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance.&lt;br /&gt;
*&#039;&#039;&#039;remflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be subtracted from the weapon&#039;s existing flags values (this works the same as the flags field above). Flags in this list are &amp;quot;turned off&amp;quot; in the weapon, as if they had never been listed. If flags are listed here which are not already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance. This field will be applied AFTER the addflags field is applied, so it could potentially turn off flags turned on by that field.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4244</id>
		<title>EDF weapon reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4244"/>
		<updated>2018-04-10T13:49:38Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Update EDF weapon reference to reflect current properties.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO: Initial spiel.&lt;br /&gt;
&lt;br /&gt;
{{See|User:Altazimuth/Weapon info flags}}&lt;br /&gt;
{{Backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
==Eternity Alfheim syntax==&lt;br /&gt;
EDF weaponinfo supports pre-Alfheim and Alfehim syntax. Make sure to add:&lt;br /&gt;
 setdialect(&amp;quot;ALFHEIM&amp;quot;)&lt;br /&gt;
before using this syntax:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt;, &amp;lt;dehackednum&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;lt;other attributes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Header properties===&lt;br /&gt;
* &#039;&#039;&amp;lt;inherited weaponinfo&amp;gt;&#039;&#039; must be a value, even if the weaponinfo doesn&#039;t inherit from anything else. In that case, it must be &#039;&#039;&#039;Weapon&#039;&#039;&#039;, which is a placeholder value belonging to no real weaponinfo.&lt;br /&gt;
* &#039;&#039;&amp;lt;dehackednum&amp;gt;&#039;&#039; -1 if not used. If -1, it can be omitted, leaving just this:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt; {&amp;lt;attributes&amp;gt;}&lt;br /&gt;
* If header properties are used, the pre-Alfheim syntax &#039;&#039;&#039;inherits&#039;&#039;&#039; and &#039;&#039;&#039;dehackednum&#039;&#039;&#039; attributes are not used.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; [: &amp;lt;parent type&amp;gt; [, &amp;lt;dehackednum&amp;gt;]]&lt;br /&gt;
 {&lt;br /&gt;
   dehackednum            &amp;lt;unique number&amp;gt;&lt;br /&gt;
   inherits               &amp;lt;weaponinfo&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammotype               &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   ammotype2              &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upstate                &amp;lt;frame&amp;gt;&lt;br /&gt;
   downstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   readystate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate            &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate2           &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate2            &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate2             &amp;lt;frame&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammouse                &amp;lt;number&amp;gt;&lt;br /&gt;
   ammouse2               &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   selectionorder         &amp;lt;number&amp;gt;&lt;br /&gt;
   slotnumber             &amp;lt;number&amp;gt;&lt;br /&gt;
   slotselectionorder     &amp;lt;floating-point number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   sisterweapon           &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   flags                  &amp;lt;flag list&amp;gt;&lt;br /&gt;
   addflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   remflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   mod                    &amp;lt;MOD name OR number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   recoil                 &amp;lt;number&amp;gt;&lt;br /&gt;
   hapticrecoil           &amp;lt;number&amp;gt;&lt;br /&gt;
   haptictime             &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upsound                &amp;lt;sound&amp;gt;&lt;br /&gt;
   readysound             &amp;lt;sound&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   firstdecoratestate     &amp;lt;frame&amp;gt;&lt;br /&gt;
   states                 &amp;lt;[[DECORATE state syntax]] heredoc&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
====ID / Type Info====&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Fake array index number, for Dehacked patch (BEX or DEH file) compatibility. It has to be an unique number if not -1. Safe numbers are from 10000 up.&lt;br /&gt;
*&#039;&#039;&#039;inherits&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Sets the weapon info from which this will copy properties. All of the properties except &#039;&#039;&#039;dehackednum&#039;&#039;&#039; will be copied from the base actor type.&lt;br /&gt;
&lt;br /&gt;
====States====&lt;br /&gt;
*&#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039;&lt;br /&gt;
:Sets the first frame in a sequential list of dummy frames that use the internal Decorate-style defined &#039;&#039;&#039;states&#039;&#039;&#039; of this actor for [[EDF delta structures|framedelta]] compatibility. It&#039;s not required unless the intention is to make the Decorate states of this weapon accessible from other weapon info. Default games&#039; (Doom, Heretic) weapon info use externalized frames for all weapon info, for compatibility.&lt;br /&gt;
*&#039;&#039;&#039;states&#039;&#039;&#039;&lt;br /&gt;
{{see|DECORATE state syntax}}&lt;br /&gt;
:Default = nothing&lt;br /&gt;
:Defines frames using [http://zdoom.org/wiki/DECORATE DECORATE]-style state definitions. This means it won&#039;t be necessary to define separate [[frame]] blocks for each individual frame. See the DECORATE reference at the ZDoom wiki for documentation on its syntax. Using the &#039;&#039;&#039;states&#039;&#039;&#039; field instead of any of the ones below results in more concise text, but also the newly created frames won&#039;t be accessible from outside (other weaponinfo, Dehacked patches or delta structures), unless you use the &#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039; field as well. Like normally, [[List of codepointers|codepointers]] may or may not be preceded by &#039;&#039;&#039;A_&#039;&#039;&#039;. The DECORATE code has to be implemented via a heredoc: a text string that spans on multiple lines. Unlike a regular string which uses quotation marks, the heredoc is marked by @&amp;quot; and &amp;quot;@ respectively. Example on an shotgun-like weapon (the &#039;=&#039; sign is optional):&lt;br /&gt;
 states =&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Ready:&lt;br /&gt;
      SHTG A 1 A_WeaponReady&lt;br /&gt;
      loop&lt;br /&gt;
   Deselect:&lt;br /&gt;
      SHTG A 1 A_Lower&lt;br /&gt;
      loop&lt;br /&gt;
   Select:&lt;br /&gt;
      SHTG A 1 A_Raise&lt;br /&gt;
      loop&lt;br /&gt;
   Fire:&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_FireShotgun&lt;br /&gt;
      SHTG BC 5&lt;br /&gt;
      SHTG D 4&lt;br /&gt;
      SHTG CB 5&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_ReFire&lt;br /&gt;
      goto Ready&lt;br /&gt;
   Flash:&lt;br /&gt;
      SHTF A 4 Bright A_Light1&lt;br /&gt;
      SHTF B 3 Bright A_Light2&lt;br /&gt;
      goto LightDone&lt;br /&gt;
  &amp;quot;@&lt;br /&gt;
*&#039;&#039;&#039;upstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is raised.If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;upstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;downstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is being lowered. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;downstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;readystate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is ready to be fired. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;readystate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;attackstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon goes to if the user tries to perform a primary attack. Though not necessary, it is suggested for weapons to have an attackstate for primary firing purposes.&lt;br /&gt;
*&#039;&#039;&#039;flashstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon jumps to if a [[List of codepointers|codepointer]] causes a weapon to flash.&lt;br /&gt;
*&#039;&#039;&#039;holdstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame jumped to by [[ReFire|A_ReFire]] if the player is still holding the primary attack button.&lt;br /&gt;
*&#039;&#039;&#039;attackstate2&#039;&#039;&#039;, &#039;&#039;&#039;flashstate2&#039;&#039;&#039;, &#039;&#039;&#039;holdstate2&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
: The equivalent of &#039;&#039;&#039;attackstate&#039;&#039;&#039;, &#039;&#039;&#039;flashstate&#039;&#039;&#039;, and &#039;&#039;&#039;holdstate&#039;&#039;&#039;, but for alternate fire.&lt;br /&gt;
&lt;br /&gt;
====Selection Order and Weapon Slots====&lt;br /&gt;
*&#039;&#039;&#039;selectionorder&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Sets the priority for selection of the weapon. The lower the number, the higher its priority.&lt;br /&gt;
*&#039;&#039;&#039;slotnumber&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Sets the weapon slot that the weapon occupies in the global weapon slots structure. For assigning to player class weapon slots, read [[weapon slots]].&lt;br /&gt;
*&#039;&#039;&#039;slotselectionorder&#039;&#039;&#039;&lt;br /&gt;
:Default = -1.0&lt;br /&gt;
:Sets the in-slot priority for the weapon in the global weapon slots structure. The lower the number, the higher its priority. Read [[weapon slots]] if you wish to understand the specifics of how in-slot priority works interacts with player class weapon slots.&lt;br /&gt;
&lt;br /&gt;
====Sister Weapon====&lt;br /&gt;
*&#039;&#039;&#039;sisterweapon&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Defines a weapon that is also provided when this weapon is picked up. This is can be used either for [[doom_wiki:Tome of Power|Tome of Power]] variants, or for weapons with two different firing modes (used by Strife weapons).&lt;br /&gt;
&lt;br /&gt;
====Flags====&lt;br /&gt;
*&#039;&#039;&#039;flags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field controls a number of weapon info properties using bit flags, where each bit in the field stands for some effect, and has the value of being either on or off. See the [[Weapon info flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks.&lt;br /&gt;
*&#039;&#039;&#039;addflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be added to the weapon&#039;s existing flags values (this works the same as the flags field above). Flags in this list are &amp;quot;turned on&amp;quot; in the weapon. If flags are listed here which are already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance.&lt;br /&gt;
*&#039;&#039;&#039;remflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be subtracted from the weapon&#039;s existing flags values (this works the same as the flags field above). Flags in this list are &amp;quot;turned off&amp;quot; in the weapon, as if they had never been listed. If flags are listed here which are not already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance. This field will be applied AFTER the addflags field is applied, so it could potentially turn off flags turned on by that field.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4193</id>
		<title>Creating a pickup</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4193"/>
		<updated>2018-01-28T19:05:03Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Modify doomednum for weapon section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating a pickup is  effectively [[creating a simple decoration]], but with a few more steps. You should read that tutorial first before continuing on here. In this tutorial we will define several pickups, each with its own section. In addition, the multiple ways in which a pickup can be defined will also be explored.&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 each pickup will have its own unique lump which contains the necessary EDF. We will include these lumps in EDFROOT so that the relevant pickups defined in the files can be used. For this tutorial we will use [[DECORATE state syntax]] when defining the the thingtypes that our pickups require.&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;
&#039;&#039;&#039;Please note that you can call the lumps whatever you want. The lump names used here (besides EDFROOT) are just example lump names.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Thing-based pickup==&lt;br /&gt;
Thing-based pickups offer a more streamlined end-user experience than sprite-based pickups, and so it is suggested that you use thing-based pickups. In addition, thing-based pickups take priority over sprite-based pickups, and if a pickup has both available, it will only use the one that is in its thingtype definition.&lt;br /&gt;
&lt;br /&gt;
===Health===&lt;br /&gt;
Create a new lump, called EHEALTH. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EHEALTH&amp;quot;) // A new health pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EHEALTH.&lt;br /&gt;
&lt;br /&gt;
 thingtype UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30001   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects UglyKit   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got health, but you didn&#039;t like it...&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup    // The sound made when the item is picked up.&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;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     UMED A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 healtheffect UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   amount    15  // The amount of health given per pickup.&lt;br /&gt;
   maxamount 150 // The maximum amount the pickup will heal up to.&lt;br /&gt;
 &lt;br /&gt;
   lowmessage &amp;quot;You got health, but you&#039;re not sure how to feel about it.&amp;quot; // The message displayed if the player&lt;br /&gt;
                                                                          // has less then twice the health given.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon UglyKit&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30001 in the map. When you pick it up, it should heal you up to 150 health, and if your health is less than 30 prior to pickup then it will display the lowmessage.&lt;br /&gt;
&lt;br /&gt;
===Armor===&lt;br /&gt;
Create a new lump, called EARMOR. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EARMOR&amp;quot;) // A new armor pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EARMOR.&lt;br /&gt;
&lt;br /&gt;
 thingtype RedArmor &lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30002   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
    effects RedArmor   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
    message &amp;quot;Picked up the HyperArmor!&amp;quot; // The message given when picked up.&lt;br /&gt;
    sound   itemup    // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RARM A 6&lt;br /&gt;
     RARM B 7 bright&lt;br /&gt;
     loop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 armoreffect RedArmor&lt;br /&gt;
 {&lt;br /&gt;
   saveamount  150 // The number the armor % is set to.&lt;br /&gt;
   savefactor  2   // The numerator for the damage absorption fraction (2/n).&lt;br /&gt;
   savedivisor 3   // The denominator for the damage absorption fraction (n/3).&lt;br /&gt;
                   // These two properties combine to the armor absorbing 2/3 the damage the player would usually would take (66%).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedArmor&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30002 in the map. When you pick it up, it should set your armor to 150. In addition, 66% of damage dealt to you will be absorbed by the armor.&lt;br /&gt;
&lt;br /&gt;
===Ammo===&lt;br /&gt;
Create a new lump, called EAMMO. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EAMMO&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EAMMO.&lt;br /&gt;
&lt;br /&gt;
 thingtype RedAmmoBox&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30003    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects RedAmmoBox // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got lazily-recolored ammo.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup     // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RAMM A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ammoeffect RedAmmoBox&lt;br /&gt;
 {&lt;br /&gt;
   ammo       AmmoClip // The type of ammo given&lt;br /&gt;
   amount     75       // The amount of ammo given&lt;br /&gt;
 &lt;br /&gt;
   +ignoreskill        // ignoreskill is a flag. When + it makes it so it ignores skills that double ammo&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedAmmoBox&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30003 in the map. When you pick it up, it should give you 75 bullets, regardless of difficulty.&lt;br /&gt;
&lt;br /&gt;
===Power-up===&lt;br /&gt;
&lt;br /&gt;
===Weapon===&lt;br /&gt;
Create a new lump, called EWEAPON. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EWEAPON&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EWEAPON.&lt;br /&gt;
&lt;br /&gt;
 thingtype BlueLauncher&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30005    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects BlueLauncher // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got an offensively blue missile launcher.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   wpnup        // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     BLUL A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 weapongiver BlueLauncher&lt;br /&gt;
 {&lt;br /&gt;
   weapon MissileLauncher            // The weaponinfo name given by the weapongiver.&lt;br /&gt;
   ammogiven AmmoMissile, 2, 1, 5, 2 // Ammo type given, and values in order, normal, dropped,&lt;br /&gt;
                                     // DM w/ weapons stay, coop w/ weapons stay.&lt;br /&gt;
   ammogiven AmmoCell, 10            // You can define as many as you want. In this case, it gives 10 cells always&lt;br /&gt;
                                     // (but is doubled for certain skill levels).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon BlueLauncher&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30005 in the map. When you pick it  up, it should give you a rocket launcher, some rockets, and cells.&lt;br /&gt;
&lt;br /&gt;
===Artifact===&lt;br /&gt;
&lt;br /&gt;
==Sprite-based pickup==&lt;br /&gt;
Sprite-based pickups are what almost all IWAD pickups use, and are mostly there for backwards-compatibility.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4192</id>
		<title>Creating a pickup</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4192"/>
		<updated>2018-01-28T18:42:30Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Add weapon section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating a pickup is  effectively [[creating a simple decoration]], but with a few more steps. You should read that tutorial first before continuing on here. In this tutorial we will define several pickups, each with its own section. In addition, the multiple ways in which a pickup can be defined will also be explored.&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 each pickup will have its own unique lump which contains the necessary EDF. We will include these lumps in EDFROOT so that the relevant pickups defined in the files can be used. For this tutorial we will use [[DECORATE state syntax]] when defining the the thingtypes that our pickups require.&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;
&#039;&#039;&#039;Please note that you can call the lumps whatever you want. The lump names used here (besides EDFROOT) are just example lump names.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Thing-based pickup==&lt;br /&gt;
Thing-based pickups offer a more streamlined end-user experience than sprite-based pickups, and so it is suggested that you use thing-based pickups. In addition, thing-based pickups take priority over sprite-based pickups, and if a pickup has both available, it will only use the one that is in its thingtype definition.&lt;br /&gt;
&lt;br /&gt;
===Health===&lt;br /&gt;
Create a new lump, called EHEALTH. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EHEALTH&amp;quot;) // A new health pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EHEALTH.&lt;br /&gt;
&lt;br /&gt;
 thingtype UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30001   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects UglyKit   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got health, but you didn&#039;t like it...&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup    // The sound made when the item is picked up.&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;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     UMED A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 healtheffect UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   amount    15  // The amount of health given per pickup.&lt;br /&gt;
   maxamount 150 // The maximum amount the pickup will heal up to.&lt;br /&gt;
 &lt;br /&gt;
   lowmessage &amp;quot;You got health, but you&#039;re not sure how to feel about it.&amp;quot; // The message displayed if the player&lt;br /&gt;
                                                                          // has less then twice the health given.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon UglyKit&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30001 in the map. When you pick it up, it should heal you up to 150 health, and if your health is less than 30 prior to pickup then it will display the lowmessage.&lt;br /&gt;
&lt;br /&gt;
===Armor===&lt;br /&gt;
Create a new lump, called EARMOR. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EARMOR&amp;quot;) // A new armor pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EARMOR.&lt;br /&gt;
&lt;br /&gt;
 thingtype RedArmor &lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30002   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
    effects RedArmor   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
    message &amp;quot;Picked up the HyperArmor!&amp;quot; // The message given when picked up.&lt;br /&gt;
    sound   itemup    // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RARM A 6&lt;br /&gt;
     RARM B 7 bright&lt;br /&gt;
     loop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 armoreffect RedArmor&lt;br /&gt;
 {&lt;br /&gt;
   saveamount  150 // The number the armor % is set to.&lt;br /&gt;
   savefactor  2   // The numerator for the damage absorption fraction (2/n).&lt;br /&gt;
   savedivisor 3   // The denominator for the damage absorption fraction (n/3).&lt;br /&gt;
                   // These two properties combine to the armor absorbing 2/3 the damage the player would usually would take (66%).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedArmor&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30002 in the map. When you pick it up, it should set your armor to 150. In addition, 66% of damage dealt to you will be absorbed by the armor.&lt;br /&gt;
&lt;br /&gt;
===Ammo===&lt;br /&gt;
Create a new lump, called EAMMO. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EAMMO&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EAMMO.&lt;br /&gt;
&lt;br /&gt;
 thingtype RedAmmoBox&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30003    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects RedAmmoBox // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got lazily-recolored ammo.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup     // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RAMM A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ammoeffect RedAmmoBox&lt;br /&gt;
 {&lt;br /&gt;
   ammo       AmmoClip // The type of ammo given&lt;br /&gt;
   amount     75       // The amount of ammo given&lt;br /&gt;
 &lt;br /&gt;
   +ignoreskill        // ignoreskill is a flag. When + it makes it so it ignores skills that double ammo&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedAmmoBox&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30003 in the map. When you pick it up, it should give you 75 bullets, regardless of difficulty.&lt;br /&gt;
&lt;br /&gt;
===Power-up===&lt;br /&gt;
&lt;br /&gt;
===Weapon===&lt;br /&gt;
Create a new lump, called EWEAPON. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EWEAPON&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EWEAPON.&lt;br /&gt;
&lt;br /&gt;
 thingtype BlueLauncher&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30004    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects BlueLauncher // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got an offensively blue missile launcher.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   wpnup        // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     BLUL A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 weapongiver BlueLauncher&lt;br /&gt;
 {&lt;br /&gt;
   weapon MissileLauncher            // The weaponinfo name given by the weapongiver.&lt;br /&gt;
   ammogiven AmmoMissile, 2, 1, 5, 2 // Ammo type given, and values in order, normal, dropped,&lt;br /&gt;
                                     // DM w/ weapons stay, coop w/ weapons stay.&lt;br /&gt;
   ammogiven AmmoCell, 10            // You can define as many as you want. In this case, it gives 10 cells always&lt;br /&gt;
                                     // (but is doubled for certain skill levels).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon BlueLauncher&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30004 in the map. When you pick it  up, it should give you a rocket launcher, some rockets, and cells.&lt;br /&gt;
&lt;br /&gt;
===Artifact===&lt;br /&gt;
&lt;br /&gt;
==Sprite-based pickup==&lt;br /&gt;
Sprite-based pickups are what almost all IWAD pickups use, and are mostly there for backwards-compatibility.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4191</id>
		<title>Creating a pickup</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4191"/>
		<updated>2018-01-25T19:19:40Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Add disclaimer and ammo section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating a pickup is  effectively [[creating a simple decoration]], but with a few more steps. You should read that tutorial first before continuing on here. In this tutorial we will define several pickups, each with its own section. In addition, the multiple ways in which a pickup can be defined will also be explored.&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 each pickup will have its own unique lump which contains the necessary EDF. We will include these lumps in EDFROOT so that the relevant pickups defined in the files can be used. For this tutorial we will use [[DECORATE state syntax]] when defining the the thingtypes that our pickups require.&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;
&#039;&#039;&#039;Please note that you can call the lumps whatever you want. The lump names used here (besides EDFROOT) are just example lump names.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Thing-based pickup==&lt;br /&gt;
Thing-based pickups offer a more streamlined end-user experience than sprite-based pickups, and so it is suggested that you use thing-based pickups. In addition, thing-based pickups take priority over sprite-based pickups, and if a pickup has both available, it will only use the one that is in its thingtype definition.&lt;br /&gt;
&lt;br /&gt;
===Health===&lt;br /&gt;
Create a new lump, called EHEALTH. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EHEALTH&amp;quot;) // A new health pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EHEALTH.&lt;br /&gt;
&lt;br /&gt;
 thingtype UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30001   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects UglyKit   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got health, but you didn&#039;t like it...&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup    // The sound made when the item is picked up.&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;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     UMED A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 healtheffect UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   amount    15  // The amount of health given per pickup.&lt;br /&gt;
   maxamount 150 // The maximum amount the pickup will heal up to.&lt;br /&gt;
 &lt;br /&gt;
   lowmessage &amp;quot;You got health, but you&#039;re not sure how to feel about it.&amp;quot; // The message displayed if the player&lt;br /&gt;
                                                                          // has less then twice the health given.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon UglyKit&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30001 in the map. When you pick it up, it should heal you up to 150 health, and if your health is less than 30 prior to pickup then it will display the lowmessage.&lt;br /&gt;
&lt;br /&gt;
===Armor===&lt;br /&gt;
Create a new lump, called EARMOR. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EARMOR&amp;quot;) // A new armor pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EARMOR.&lt;br /&gt;
&lt;br /&gt;
 thingtype RedArmor &lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30002   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
    effects RedArmor   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
    message &amp;quot;Picked up the HyperArmor!&amp;quot; // The message given when picked up.&lt;br /&gt;
    sound   itemup    // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RARM A 6&lt;br /&gt;
     RARM B 7 bright&lt;br /&gt;
     loop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 armoreffect RedArmor&lt;br /&gt;
 {&lt;br /&gt;
   saveamount  150 // The number the armor % is set to.&lt;br /&gt;
   savefactor  2   // The numerator for the damage absorption fraction (2/n).&lt;br /&gt;
   savedivisor 3   // The denominator for the damage absorption fraction (n/3).&lt;br /&gt;
                   // These two properties combine to the armor absorbing 2/3 the damage the player would usually would take (66%).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedArmor&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30002 in the map. When you pick it up, it should set your armor to 150. In addition, 66% of damage dealt to you will be absorbed by the armor.&lt;br /&gt;
&lt;br /&gt;
===Ammo===&lt;br /&gt;
Create a new lump, called EAMMO. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EAMMO&amp;quot;) // A new ammo pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editing EAMMO.&lt;br /&gt;
&lt;br /&gt;
 thingtype RedAmmoBox&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30003    // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL  // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect         // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects RedAmmoBox // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got lazily-recolored ammo.&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup     // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RAMM A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ammoeffect RedAmmoBox&lt;br /&gt;
 {&lt;br /&gt;
   ammo       AmmoClip // The type of ammo given&lt;br /&gt;
   amount     75       // The amount of ammo given&lt;br /&gt;
 &lt;br /&gt;
   +ignoreskill        // ignoreskill is a flag. When + it makes it so it ignores skills that double ammo&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedAmmoBox&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30003 in the map. When you pick it up, it should give you 75 bullets, regardless of difficulty.&lt;br /&gt;
&lt;br /&gt;
===Power-up===&lt;br /&gt;
&lt;br /&gt;
===Weapon===&lt;br /&gt;
&lt;br /&gt;
===Artifact===&lt;br /&gt;
&lt;br /&gt;
==Sprite-based pickup==&lt;br /&gt;
Sprite-based pickups are what almost all IWAD pickups use, and are mostly there for backwards-compatibility.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4190</id>
		<title>Creating a pickup</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4190"/>
		<updated>2018-01-25T16:22:39Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Add armor section. Improve health section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating a pickup is  effectively [[creating a simple decoration]], but with a few more steps. You should read that tutorial first before continuing on here. In this tutorial we will define several pickups, each with its own section. In addition, the multiple ways in which a pickup can be defined will also be explored.&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 each section will have its own unique lump name. We will include these lumps in EDFROOT so that the relevant pickups defined in the files can be used. For this tutorial we will use [[DECORATE state syntax]].&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;
==Thing-based pickup==&lt;br /&gt;
Thing-based pickups offer a more streamlined end-user experience than sprite-based pickups, and so it is suggested that you use thing-based pickups. In addition, thing-based pickups take priority over sprite-based pickups, and if a pickup has both available, it will only use the one that is in its thingtype definition.&lt;br /&gt;
&lt;br /&gt;
===Health===&lt;br /&gt;
Create a new lump, called EHEALTH. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EHEALTH&amp;quot;) // A new health pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editting EHEALTH.&lt;br /&gt;
&lt;br /&gt;
 thingtype UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30001   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects UglyKit   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got health, but you didn&#039;t like it...&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup    // The sound made when the item is picked up.&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;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     UMED A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 healtheffect UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   amount    15  // The amount of health given per pickup.&lt;br /&gt;
   maxamount 150 // The maximum amount the pickup will heal up to.&lt;br /&gt;
 &lt;br /&gt;
   lowmessage &amp;quot;You got health, but you&#039;re not sure how to feel about it.&amp;quot; // The message displayed if the player&lt;br /&gt;
                                                                          // has less then twice the health given.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon UglyKit&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30001 in the map. When you pick it up, it should heal you up to 150 health, and if your health is less than 30 prior to pickup then it will display the lowmessage.&lt;br /&gt;
&lt;br /&gt;
===Armor===&lt;br /&gt;
Create a new lump, called EARMOR. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EARMOR&amp;quot;) // A new armor pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editting EARMOR.&lt;br /&gt;
&lt;br /&gt;
 thingtype RedArmor &lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30002   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
    effects RedArmor   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
    message &amp;quot;Picked up the HyperArmor!&amp;quot; // The message given when picked up.&lt;br /&gt;
    sound   itemup    // The sound made when the item is picked up.&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   states&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     RARM A 6&lt;br /&gt;
     RARM B 7 bright&lt;br /&gt;
     loop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 armoreffect RedArmor&lt;br /&gt;
 {&lt;br /&gt;
   saveamount  150 // The number the armor % is set to.&lt;br /&gt;
   savefactor  2   // The numerator for the damage absorption fraction (2/n).&lt;br /&gt;
   savedivisor 3   // The denominator for the damage absorption fraction (n/3).&lt;br /&gt;
                   // These two properties combine to the armor absorbing 2/3 the damage the player would usually would take (66%).&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Now either type &amp;quot;summon RedArmor&amp;quot; (not case-sensitive) in the console, or place a thing with doomednum 30002 in the map. When you pick it up, it should set your armor to 150. In addition, 66% of damage dealt to you will be absorbed by the armor.&lt;br /&gt;
&lt;br /&gt;
===Ammo===&lt;br /&gt;
&lt;br /&gt;
===Power-up===&lt;br /&gt;
&lt;br /&gt;
===Weapon===&lt;br /&gt;
&lt;br /&gt;
===Artifact===&lt;br /&gt;
&lt;br /&gt;
==Sprite-based pickup==&lt;br /&gt;
Sprite-based pickups are what almost all IWAD pickups use, and are mostly there for backwards-compatibility.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4189</id>
		<title>Creating a pickup</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4189"/>
		<updated>2018-01-24T22:23:39Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Add health section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating a pickup is  effectively [[creating a simple decoration]], but with a few more steps. You should read that tutorial first before continuing on here. In this tutorial we will define several pickups, each with its own section. In addition, the multiple ways in which a pickup can be defined will also be explored.&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 each section will have its own unique lump name. We will include these lumps in EDFROOT so that the relevant pickups defined in the files can be used. For this tutorial we will use [[DECORATE state syntax]].&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;
==Thing-based pickup==&lt;br /&gt;
Thing-based pickups offer a more streamlined end-user experience than sprite-based pickups, and so it is suggested that you use thing-based pickups. In addition, thing-based pickups take priority over sprite-based pickups, and if a pickup has both available, it will only use the one that is in its thingtype definition.&lt;br /&gt;
&lt;br /&gt;
===Health===&lt;br /&gt;
Create a new lump, called EHEALTH. Add the following to EDFROOT, on a line after the stdinclude.&lt;br /&gt;
&lt;br /&gt;
 lumpinclude(&amp;quot;EHEALTH&amp;quot;) // A new health pickup&lt;br /&gt;
&lt;br /&gt;
Now, start editting EHEALTH.&lt;br /&gt;
&lt;br /&gt;
 thingtype UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   doomednum   30001   // This is the thing number used to place the object in a map.&lt;br /&gt;
   flags       SPECIAL // Sets flags for item, which in this case means it&#039;s a collectable item.&lt;br /&gt;
 &lt;br /&gt;
   pickupeffect        // This defines what happens when the item is picked up.&lt;br /&gt;
   {&lt;br /&gt;
     effects UglyKit   // The actual effects that happen when the item is picked up (can be a comma separated list).&lt;br /&gt;
     message &amp;quot;You got health, but you didn&#039;t like it...&amp;quot; // The message given when picked up.&lt;br /&gt;
     sound   itemup    // The sound made when the item is picked up.&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;&lt;br /&gt;
   Spawn:&lt;br /&gt;
     UMED A -1&lt;br /&gt;
     stop&lt;br /&gt;
   &amp;quot;@&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 healtheffect UglyKit&lt;br /&gt;
 {&lt;br /&gt;
   amount    15  // The amount of health given per pickup.&lt;br /&gt;
   maxamount 150 // The maximum amount the pickup will heal up to.&lt;br /&gt;
 &lt;br /&gt;
   lowmessage &amp;quot;You got health, but you&#039;re not sure how to feel about it.&amp;quot; // The message displayed if the player&lt;br /&gt;
                                                                          // has less then twice the health given.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Armor===&lt;br /&gt;
&lt;br /&gt;
===Ammo===&lt;br /&gt;
&lt;br /&gt;
===Power-up===&lt;br /&gt;
&lt;br /&gt;
===Weapon===&lt;br /&gt;
&lt;br /&gt;
===Artifact===&lt;br /&gt;
&lt;br /&gt;
==Sprite-based pickup==&lt;br /&gt;
Sprite-based pickups are what almost all IWAD pickups use, and are mostly there for backwards-compatibility.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4188</id>
		<title>Creating a pickup</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=Creating_a_pickup&amp;diff=4188"/>
		<updated>2018-01-24T13:47:22Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Add initial skeleton for tutorial.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating a pickup is  effectively [[creating a simple decoration]], but with a few more steps. You should read that tutorial first before continuing on here. In this tutorial we will define several pickups, each with its own section. In addition, the multiple ways in which a pickup can be defined will also be explored.&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 each section will have its own unique lump name.&lt;br /&gt;
&lt;br /&gt;
==Thing-based pickup==&lt;br /&gt;
Thing-based pickups offer a more streamlined end-user experience than sprite-based pickups, and so it is suggested that you use thing-based pickups. In addition, thing-based pickups take priority over sprite-based pickups, and if a pickup has both available, it will only use the one that is in its thingtype definition.&lt;br /&gt;
&lt;br /&gt;
===Health===&lt;br /&gt;
&lt;br /&gt;
===Armor===&lt;br /&gt;
&lt;br /&gt;
===Ammo===&lt;br /&gt;
&lt;br /&gt;
===Power-up===&lt;br /&gt;
&lt;br /&gt;
===Weapon===&lt;br /&gt;
&lt;br /&gt;
===Artifact===&lt;br /&gt;
&lt;br /&gt;
==Sprite-based pickup==&lt;br /&gt;
Sprite-based pickups are what almost all IWAD pickups use, and are mostly there for backwards-compatibility.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=User:Altazimuth/EDF_animation_and_switches&amp;diff=4187</id>
		<title>User:Altazimuth/EDF animation and switches</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=User:Altazimuth/EDF_animation_and_switches&amp;diff=4187"/>
		<updated>2018-01-12T19:44:36Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Fix a mistake in syntax.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO: Initial spiel.&lt;br /&gt;
&lt;br /&gt;
If an animation&#039;s mnemonic is not unique, the latest definition of a thing type with that mnemonic replaces any earlier ones. Like most other identifiers in EDF (but not lump names or subnames), animation mnemonics are completely case-insensitive.&lt;br /&gt;
&lt;br /&gt;
{{Backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
 animation &amp;lt;unique name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   flat    &amp;lt;string&amp;gt;&lt;br /&gt;
   wall    &amp;lt;string&amp;gt;&lt;br /&gt;
   lastpic &amp;lt;string&amp;gt;&lt;br /&gt;
   tics    &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   flags   &amp;lt;flag list&amp;gt;&lt;br /&gt;
   pic     {num &amp;lt;number&amp;gt; tics &amp;lt;number&amp;gt; random {&amp;lt;number&amp;gt;, &amp;lt;number&amp;gt;} flags &amp;lt;flag list&amp;gt;}&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
====ID / Type Info====&lt;br /&gt;
*&#039;&#039;&#039;flat&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Lorem ipsum and stuff.&lt;br /&gt;
*&#039;&#039;&#039;wall&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Lorem ipsum and stuff.&lt;br /&gt;
*&#039;&#039;&#039;lastpic&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Lorem ipsum and stuff.&lt;br /&gt;
*&#039;&#039;&#039;tics&#039;&#039;&#039;&lt;br /&gt;
:Default = 8&lt;br /&gt;
:Lorem ipsum and stuff.&lt;br /&gt;
*&#039;&#039;&#039;flags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Lorem ipsum and stuff.&lt;br /&gt;
====Pic(?) Sub-Block====&lt;br /&gt;
*&#039;&#039;&#039;pic&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Lorem ipsum and stuff.&lt;br /&gt;
 pic { name F_FOO; tics 8; random {4, 12}; flags SWIRL }&lt;br /&gt;
TODO: Talk here, fix above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:EDF]]&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=User:Altazimuth/EDF_animation_and_switches&amp;diff=4186</id>
		<title>User:Altazimuth/EDF animation and switches</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=User:Altazimuth/EDF_animation_and_switches&amp;diff=4186"/>
		<updated>2018-01-12T19:40:29Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Put in initial framework for animation reference, ready for adding switches&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO: Initial spiel.&lt;br /&gt;
&lt;br /&gt;
If an animation&#039;s mnemonic is not unique, the latest definition of a thing type with that mnemonic replaces any earlier ones. Like most other identifiers in EDF (but not lump names or subnames), animation mnemonics are completely case-insensitive.&lt;br /&gt;
&lt;br /&gt;
{{Backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
 animation &amp;lt;unique name&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   flat    &amp;lt;string&amp;gt;&lt;br /&gt;
   wall    &amp;lt;string&amp;gt;&lt;br /&gt;
   lastpic &amp;lt;string&amp;gt;&lt;br /&gt;
   tics    &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   flags   &amp;lt;flag list&amp;gt;&lt;br /&gt;
   pic     {num &amp;lt;number&amp;gt; tics &amp;lt;number&amp;gt; random {min &amp;lt;number&amp;gt; max &amp;lt;number&amp;gt;} flags &amp;lt;flag list&amp;gt;}&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
====ID / Type Info====&lt;br /&gt;
*&#039;&#039;&#039;flat&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Lorem ipsum and stuff.&lt;br /&gt;
*&#039;&#039;&#039;wall&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Lorem ipsum and stuff.&lt;br /&gt;
*&#039;&#039;&#039;lastpic&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Lorem ipsum and stuff.&lt;br /&gt;
*&#039;&#039;&#039;tics&#039;&#039;&#039;&lt;br /&gt;
:Default = 8&lt;br /&gt;
:Lorem ipsum and stuff.&lt;br /&gt;
*&#039;&#039;&#039;flags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Lorem ipsum and stuff.&lt;br /&gt;
====Pic(?) Sub-Block====&lt;br /&gt;
*&#039;&#039;&#039;pic&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Lorem ipsum and stuff.&lt;br /&gt;
 pic { name F_FOO; tics 8; random {4, 12}; flags SWIRL }&lt;br /&gt;
TODO: Talk here, fix above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:EDF]]&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4183</id>
		<title>EDF weapon reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4183"/>
		<updated>2018-01-08T23:43:20Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Fix lazy copy-paste from EDF thing reference.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO: Initial spiel.&lt;br /&gt;
&lt;br /&gt;
{{See|User:Altazimuth/Weapon info flags}}&lt;br /&gt;
{{Backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
==Eternity Alfheim syntax==&lt;br /&gt;
EDF weaponinfo supports pre-Alfheim and Alfehim syntax. Make sure to add:&lt;br /&gt;
 setdialect(&amp;quot;ALFHEIM&amp;quot;)&lt;br /&gt;
before using this syntax:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt;, &amp;lt;dehackednum&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;lt;other attributes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Header properties===&lt;br /&gt;
* &#039;&#039;&amp;lt;inherited weaponinfo&amp;gt;&#039;&#039; must be a value, even if the weaponinfo doesn&#039;t inherit from anything else. In that case, it must be &#039;&#039;&#039;Weapon&#039;&#039;&#039;, which is a placeholder value belonging to no real weaponinfo.&lt;br /&gt;
* &#039;&#039;&amp;lt;dehackednum&amp;gt;&#039;&#039; -1 if not used. If -1, it can be omitted, leaving just this:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt; {&amp;lt;attributes&amp;gt;}&lt;br /&gt;
* If header properties are used, the pre-Alfheim syntax &#039;&#039;&#039;inherits&#039;&#039;&#039; and &#039;&#039;&#039;dehackednum&#039;&#039;&#039; attributes are not used.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; [: &amp;lt;parent type&amp;gt; [, &amp;lt;dehackednum&amp;gt;]]&lt;br /&gt;
 {&lt;br /&gt;
   dehackednum            &amp;lt;unique number&amp;gt;&lt;br /&gt;
   inherits               &amp;lt;weaponinfo&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammotype               &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   ammotype2              &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upstate                &amp;lt;frame&amp;gt;&lt;br /&gt;
   downstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   readystate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate            &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate2           &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate2            &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate2             &amp;lt;frame&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammouse                &amp;lt;number&amp;gt;&lt;br /&gt;
   ammouse2               &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   selectionorder         &amp;lt;number&amp;gt;&lt;br /&gt;
   nextincycle            &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   previncycle            &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   flags                  &amp;lt;flag list&amp;gt;&lt;br /&gt;
   addflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   remflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   mod                    &amp;lt;MOD name OR number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   recoil                 &amp;lt;number&amp;gt;&lt;br /&gt;
   hapticrecoil           &amp;lt;number&amp;gt;&lt;br /&gt;
   haptictime             &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upsound                &amp;lt;sound&amp;gt;&lt;br /&gt;
   readysound             &amp;lt;sound&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   firstdecoratestate     &amp;lt;frame&amp;gt;&lt;br /&gt;
   states                 &amp;lt;[[DECORATE state syntax]] heredoc&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
====ID / Type Info====&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Fake array index number, for Dehacked patch (BEX or DEH file) compatibility. It has to be an unique number if not -1. Safe numbers are from 10000 up.&lt;br /&gt;
*&#039;&#039;&#039;inherits&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Sets the weapon info from which this will copy properties. All of the properties except &#039;&#039;&#039;dehackednum&#039;&#039;&#039; will be copied from the base actor type.&lt;br /&gt;
&lt;br /&gt;
====States====&lt;br /&gt;
*&#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039;&lt;br /&gt;
:Sets the first frame in a sequential list of dummy frames that use the internal Decorate-style defined &#039;&#039;&#039;states&#039;&#039;&#039; of this actor for [[EDF delta structures|framedelta]] compatibility. It&#039;s not required unless the intention is to make the Decorate states of this weapon accessible from other weapon info. Default games&#039; (Doom, Heretic) weapon info use externalized frames for all weapon info, for compatibility.&lt;br /&gt;
*&#039;&#039;&#039;states&#039;&#039;&#039;&lt;br /&gt;
{{see|DECORATE state syntax}}&lt;br /&gt;
:Default = nothing&lt;br /&gt;
:Defines frames using [http://zdoom.org/wiki/DECORATE DECORATE]-style state definitions. This means it won&#039;t be necessary to define separate [[frame]] blocks for each individual frame. See the DECORATE reference at the ZDoom wiki for documentation on its syntax. Using the &#039;&#039;&#039;states&#039;&#039;&#039; field instead of any of the ones below results in more concise text, but also the newly created frames won&#039;t be accessible from outside (other weaponinfo, Dehacked patches or delta structures), unless you use the &#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039; field as well. Like normally, [[List of codepointers|codepointers]] may or may not be preceded by &#039;&#039;&#039;A_&#039;&#039;&#039;. The DECORATE code has to be implemented via a heredoc: a text string that spans on multiple lines. Unlike a regular string which uses quotation marks, the heredoc is marked by @&amp;quot; and &amp;quot;@ respectively. Example on an shotgun-like weapon (the &#039;=&#039; sign is optional):&lt;br /&gt;
 states =&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Ready:&lt;br /&gt;
      SHTG A 1 A_WeaponReady&lt;br /&gt;
      loop&lt;br /&gt;
   Deselect:&lt;br /&gt;
      SHTG A 1 A_Lower&lt;br /&gt;
      loop&lt;br /&gt;
   Select:&lt;br /&gt;
      SHTG A 1 A_Raise&lt;br /&gt;
      loop&lt;br /&gt;
   Fire:&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_FireShotgun&lt;br /&gt;
      SHTG BC 5&lt;br /&gt;
      SHTG D 4&lt;br /&gt;
      SHTG CB 5&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_ReFire&lt;br /&gt;
      goto Ready&lt;br /&gt;
   Flash:&lt;br /&gt;
      SHTF A 4 Bright A_Light1&lt;br /&gt;
      SHTF B 3 Bright A_Light2&lt;br /&gt;
      goto LightDone&lt;br /&gt;
  &amp;quot;@&lt;br /&gt;
*&#039;&#039;&#039;upstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is raised.If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;upstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;downstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is being lowered. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;downstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;readystate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is ready to be fired. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;readystate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;attackstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon goes to if the user tries to perform a primary attack. Though not necessary, it is suggested for weapons to have an attackstate for primary firing purposes.&lt;br /&gt;
*&#039;&#039;&#039;flashstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon jumps to if a [[List of codepointers|codepointer]] causes a weapon to flash.&lt;br /&gt;
*&#039;&#039;&#039;holdstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame jumped to by [[ReFire|A_ReFire]] if the player is still holding the primary attack button.&lt;br /&gt;
*&#039;&#039;&#039;attackstate2&#039;&#039;&#039;, &#039;&#039;&#039;flashstate2&#039;&#039;&#039;, &#039;&#039;&#039;holdstate2&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
: The equivalent of &#039;&#039;&#039;attackstate&#039;&#039;&#039;, &#039;&#039;&#039;flashstate&#039;&#039;&#039;, and &#039;&#039;&#039;holdstate&#039;&#039;&#039;, but for alternate fire.&lt;br /&gt;
&lt;br /&gt;
====Selection Order and Cycles====&lt;br /&gt;
*&#039;&#039;&#039;selectionorder&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Sets the priority for selection of the weapon. The lower the number, the higher its priority.&lt;br /&gt;
*&#039;&#039;&#039;nextincycle&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Sets the weapon moved to when the player inputs the &amp;quot;next weapon&amp;quot; command.&lt;br /&gt;
*&#039;&#039;&#039;previncycle&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Sets the weapon moved to when the player inputs the &amp;quot;previous weapon&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
====Flags====&lt;br /&gt;
*&#039;&#039;&#039;flags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field controls a number of weapon info properties using bit flags, where each bit in the field stands for some effect, and has the value of being either on or off. See the [[Weapon info flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks.&lt;br /&gt;
*&#039;&#039;&#039;addflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be added to the weapon&#039;s existing flags values (this works the same as the flags field above). Flags in this list are &amp;quot;turned on&amp;quot; in the weapon. If flags are listed here which are already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance.&lt;br /&gt;
*&#039;&#039;&#039;remflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be subtracted from the weapon&#039;s existing flags values (this works the same as the flags field above). Flags in this list are &amp;quot;turned off&amp;quot; in the weapon, as if they had never been listed. If flags are listed here which are not already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance. This field will be applied AFTER the addflags field is applied, so it could potentially turn off flags turned on by that field.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4182</id>
		<title>EDF weapon reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4182"/>
		<updated>2018-01-08T23:28:40Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Update to include documentation of more fields.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO: Initial spiel.&lt;br /&gt;
&lt;br /&gt;
{{See|User:Altazimuth/Weapon info flags}}&lt;br /&gt;
{{Backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
==Eternity Alfheim syntax==&lt;br /&gt;
EDF weaponinfo supports pre-Alfheim and Alfehim syntax. Make sure to add:&lt;br /&gt;
 setdialect(&amp;quot;ALFHEIM&amp;quot;)&lt;br /&gt;
before using this syntax:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt;, &amp;lt;dehackednum&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;lt;other attributes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Header properties===&lt;br /&gt;
* &#039;&#039;&amp;lt;inherited weaponinfo&amp;gt;&#039;&#039; must be a value, even if the weaponinfo doesn&#039;t inherit from anything else. In that case, it must be &#039;&#039;&#039;Weapon&#039;&#039;&#039;, which is a placeholder value belonging to no real weaponinfo.&lt;br /&gt;
* &#039;&#039;&amp;lt;dehackednum&amp;gt;&#039;&#039; -1 if not used. If -1, it can be omitted, leaving just this:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt; {&amp;lt;attributes&amp;gt;}&lt;br /&gt;
* If header properties are used, the pre-Alfheim syntax &#039;&#039;&#039;inherits&#039;&#039;&#039; and &#039;&#039;&#039;dehackednum&#039;&#039;&#039; attributes are not used.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; [: &amp;lt;parent type&amp;gt; [, &amp;lt;dehackednum&amp;gt;]]&lt;br /&gt;
 {&lt;br /&gt;
   dehackednum            &amp;lt;unique number&amp;gt;&lt;br /&gt;
   inherits               &amp;lt;weaponinfo&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammotype               &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   ammotype2              &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upstate                &amp;lt;frame&amp;gt;&lt;br /&gt;
   downstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   readystate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate            &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate2           &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate2            &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate2             &amp;lt;frame&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammouse                &amp;lt;number&amp;gt;&lt;br /&gt;
   ammouse2               &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   selectionorder         &amp;lt;number&amp;gt;&lt;br /&gt;
   nextincycle            &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   previncycle            &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   flags                  &amp;lt;flag list&amp;gt;&lt;br /&gt;
   addflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   remflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   mod                    &amp;lt;MOD name OR number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   recoil                 &amp;lt;number&amp;gt;&lt;br /&gt;
   hapticrecoil           &amp;lt;number&amp;gt;&lt;br /&gt;
   haptictime             &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upsound                &amp;lt;sound&amp;gt;&lt;br /&gt;
   readysound             &amp;lt;sound&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   firstdecoratestate     &amp;lt;frame&amp;gt;&lt;br /&gt;
   states                 &amp;lt;[[DECORATE state syntax]] heredoc&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
====ID / Type Info====&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Fake array index number, for Dehacked patch (BEX or DEH file) compatibility. It has to be an unique number if not -1. Safe numbers are from 10000 up.&lt;br /&gt;
*&#039;&#039;&#039;inherits&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Sets the weapon info from which this will copy properties. All of the properties except &#039;&#039;&#039;dehackednum&#039;&#039;&#039; will be copied from the base actor type.&lt;br /&gt;
&lt;br /&gt;
====States====&lt;br /&gt;
*&#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039;&lt;br /&gt;
:Sets the first frame in a sequential list of dummy frames that use the internal Decorate-style defined &#039;&#039;&#039;states&#039;&#039;&#039; of this actor for [[EDF delta structures|framedelta]] compatibility. It&#039;s not required unless the intention is to make the Decorate states of this weapon accessible from other weapon info. Default games&#039; (Doom, Heretic) weapon info use externalized frames for all weapon info, for compatibility.&lt;br /&gt;
*&#039;&#039;&#039;states&#039;&#039;&#039;&lt;br /&gt;
{{see|DECORATE state syntax}}&lt;br /&gt;
:Default = nothing&lt;br /&gt;
:Defines frames using [http://zdoom.org/wiki/DECORATE DECORATE]-style state definitions. This means it won&#039;t be necessary to define separate [[frame]] blocks for each individual frame. See the DECORATE reference at the ZDoom wiki for documentation on its syntax. Using the &#039;&#039;&#039;states&#039;&#039;&#039; field instead of any of the ones below results in more concise text, but also the newly created frames won&#039;t be accessible from outside (other weaponinfo, Dehacked patches or delta structures), unless you use the &#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039; field as well. Like normally, [[List of codepointers|codepointers]] may or may not be preceded by &#039;&#039;&#039;A_&#039;&#039;&#039;. The DECORATE code has to be implemented via a heredoc: a text string that spans on multiple lines. Unlike a regular string which uses quotation marks, the heredoc is marked by @&amp;quot; and &amp;quot;@ respectively. Example on an shotgun-like weapon (the &#039;=&#039; sign is optional):&lt;br /&gt;
 states =&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Ready:&lt;br /&gt;
      SHTG A 1 A_WeaponReady&lt;br /&gt;
      loop&lt;br /&gt;
   Deselect:&lt;br /&gt;
      SHTG A 1 A_Lower&lt;br /&gt;
      loop&lt;br /&gt;
   Select:&lt;br /&gt;
      SHTG A 1 A_Raise&lt;br /&gt;
      loop&lt;br /&gt;
   Fire:&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_FireShotgun&lt;br /&gt;
      SHTG BC 5&lt;br /&gt;
      SHTG D 4&lt;br /&gt;
      SHTG CB 5&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_ReFire&lt;br /&gt;
      goto Ready&lt;br /&gt;
   Flash:&lt;br /&gt;
      SHTF A 4 Bright A_Light1&lt;br /&gt;
      SHTF B 3 Bright A_Light2&lt;br /&gt;
      goto LightDone&lt;br /&gt;
  &amp;quot;@&lt;br /&gt;
*&#039;&#039;&#039;upstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is raised.If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;upstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;downstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is being lowered. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;downstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;readystate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is ready to be fired. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;readystate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;attackstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon goes to if the user tries to perform a primary attack. Though not necessary, it is suggested for weapons to have an attackstate for primary firing purposes.&lt;br /&gt;
*&#039;&#039;&#039;flashstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon jumps to if a [[List of codepointers|codepointer]] causes a weapon to flash.&lt;br /&gt;
*&#039;&#039;&#039;holdstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame jumped to by [[ReFire|A_ReFire]] if the player is still holding the primary attack button.&lt;br /&gt;
*&#039;&#039;&#039;attackstate2&#039;&#039;&#039;, &#039;&#039;&#039;flashstate2&#039;&#039;&#039;, &#039;&#039;&#039;holdstate2&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
: The equivalent of &#039;&#039;&#039;attackstate&#039;&#039;&#039;, &#039;&#039;&#039;flashstate&#039;&#039;&#039;, and &#039;&#039;&#039;holdstate&#039;&#039;&#039;, but for alternate fire.&lt;br /&gt;
&lt;br /&gt;
====Selection Order and Cycles====&lt;br /&gt;
*&#039;&#039;&#039;selectionorder&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Sets the priority for selection of the weapon. The lower the number, the higher its priority.&lt;br /&gt;
*&#039;&#039;&#039;nextincycle&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Sets the weapon moved to when the player inputs the &amp;quot;next weapon&amp;quot; command.&lt;br /&gt;
*&#039;&#039;&#039;previncycle&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:Sets the weapon moved to when the player inputs the &amp;quot;previous weapon&amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Flags====&lt;br /&gt;
*&#039;&#039;&#039;flags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field controls a number of weapon info properties using bit flags, where each bit in the field stands for some effect, and has the value of being either on or off. See the [[Weapon info flags]] List, for the values which can be used in this field. Remember that if whitespace or disallowed characters are used, this field&#039;s value must be enclosed in quotation marks.&lt;br /&gt;
*&#039;&#039;&#039;addflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be added to the weapon&#039;s existing flags values (this works the same as the cflags field above). Flags in this list are &amp;quot;turned on&amp;quot; in the weapon. If flags are listed here which are already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance.&lt;br /&gt;
*&#039;&#039;&#039;remflags&#039;&#039;&#039;&lt;br /&gt;
:Default = &amp;quot;&amp;quot;&lt;br /&gt;
:This field specifies a combined list of flags to be subtracted from the weapon&#039;s existing flags values (this works the same as the cflags field above). Flags in this list are &amp;quot;turned off&amp;quot; in the weapon, as if they had never been listed. If flags are listed here which are not already &amp;quot;on,&amp;quot; there is no effect on those flags. This field is most useful within weapondelta sections and in concert with weapon info inheritance. This field will be applied AFTER the addflags field is applied, so it could potentially turn off flags turned on by that field.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4176</id>
		<title>EDF weapon reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4176"/>
		<updated>2017-10-27T10:52:29Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Update properties.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO: Initial spiel.&lt;br /&gt;
&lt;br /&gt;
{{See|User:Altazimuth/Weapon info flags}}&lt;br /&gt;
{{Backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
==Eternity Alfheim syntax==&lt;br /&gt;
EDF weaponinfo supports pre-Alfheim and Alfehim syntax. Make sure to add:&lt;br /&gt;
 setdialect(&amp;quot;ALFHEIM&amp;quot;)&lt;br /&gt;
before using this syntax:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt;, &amp;lt;dehackednum&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;lt;other attributes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Header properties===&lt;br /&gt;
* &#039;&#039;&amp;lt;inherited weaponinfo&amp;gt;&#039;&#039; must be a value, even if the weaponinfo doesn&#039;t inherit from anything else. In that case, it must be &#039;&#039;&#039;Weapon&#039;&#039;&#039;, which is a placeholder value belonging to no real weaponinfo.&lt;br /&gt;
* &#039;&#039;&amp;lt;dehackednum&amp;gt;&#039;&#039; -1 if not used. If -1, it can be omitted, leaving just this:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt; {&amp;lt;attributes&amp;gt;}&lt;br /&gt;
* If header properties are used, the pre-Alfheim syntax &#039;&#039;&#039;inherits&#039;&#039;&#039; and &#039;&#039;&#039;dehackednum&#039;&#039;&#039; attributes are not used.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; [: &amp;lt;parent type&amp;gt; [, &amp;lt;dehackednum&amp;gt;]]&lt;br /&gt;
 {&lt;br /&gt;
   dehackednum            &amp;lt;unique number&amp;gt;&lt;br /&gt;
   inherits               &amp;lt;weaponinfo&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammotype               &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   ammotype2              &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upstate                &amp;lt;frame&amp;gt;&lt;br /&gt;
   downstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   readystate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate            &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate2           &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate2            &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate2             &amp;lt;frame&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammouse                &amp;lt;number&amp;gt;&lt;br /&gt;
   ammouse2               &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   selectionorder         &amp;lt;number&amp;gt;&lt;br /&gt;
   nextincycle            &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   previncycle            &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   flags                  &amp;lt;flag list&amp;gt;&lt;br /&gt;
   addflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   remflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   mod                    &amp;lt;MOD name OR number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   recoil                 &amp;lt;number&amp;gt;&lt;br /&gt;
   hapticrecoil           &amp;lt;number&amp;gt;&lt;br /&gt;
   haptictime             &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upsound                &amp;lt;sound&amp;gt;&lt;br /&gt;
   readysound             &amp;lt;sound&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   tracker                &amp;lt;string, TO BE REMOVED&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   firstdecoratestate     &amp;lt;frame&amp;gt;&lt;br /&gt;
   states                 &amp;lt;[[DECORATE state syntax]] heredoc&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
====ID / Type Info====&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Fake array index number, for Dehacked patch (BEX or DEH file) compatibility. It has to be an unique number if not -1. Safe numbers are from 10000 up.&lt;br /&gt;
*&#039;&#039;&#039;inherits&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Sets the weapon info from which this will copy properties. All of the properties except &#039;&#039;&#039;dehackednum&#039;&#039;&#039; will be copied from the base actor type.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====States====&lt;br /&gt;
*&#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039;&lt;br /&gt;
:Sets the first frame in a sequential list of dummy frames that use the internal Decorate-style defined &#039;&#039;&#039;states&#039;&#039;&#039; of this actor for [[EDF delta structures|framedelta]] compatibility. It&#039;s not required unless the intention is to make the Decorate states of this thing accessible from other thing types. Default games&#039; (Doom, Heretic) thing types use externalized frames for all thing types, for compatibility.&lt;br /&gt;
*&#039;&#039;&#039;states&#039;&#039;&#039;&lt;br /&gt;
{{see|DECORATE state syntax}}&lt;br /&gt;
:Default = nothing&lt;br /&gt;
:Defines frames using [http://zdoom.org/wiki/DECORATE DECORATE]-style state definitions. This means it won&#039;t be necessary to define separate [[frame]] blocks for each individual frame. See the DECORATE reference at the ZDoom wiki for documentation on its syntax. Using the &#039;&#039;&#039;states&#039;&#039;&#039; field instead of any of the ones below results in more concise text, but also the newly created frames won&#039;t be accessible from outside (other thingtypes, Dehacked patches or delta structures), unless you use the &#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039; field as well. Like normally, [[List of codepointers|codepointers]] may or may not be preceded by &#039;&#039;&#039;A_&#039;&#039;&#039;. The DECORATE code has to be implemented via a heredoc: a text string that spans on multiple lines. Unlike a regular string which uses quotation marks, the heredoc is marked by @&amp;quot; and &amp;quot;@ respectively. Example on an shotgun-like weapon (the &#039;=&#039; sign is optional):&lt;br /&gt;
 states =&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Ready:&lt;br /&gt;
      SHTG A 1 A_WeaponReady&lt;br /&gt;
      loop&lt;br /&gt;
   Deselect:&lt;br /&gt;
      SHTG A 1 A_Lower&lt;br /&gt;
      loop&lt;br /&gt;
   Select:&lt;br /&gt;
      SHTG A 1 A_Raise&lt;br /&gt;
      loop&lt;br /&gt;
   Fire:&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_FireShotgun&lt;br /&gt;
      SHTG BC 5&lt;br /&gt;
      SHTG D 4&lt;br /&gt;
      SHTG CB 5&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_ReFire&lt;br /&gt;
      goto Ready&lt;br /&gt;
   Flash:&lt;br /&gt;
      SHTF A 4 Bright A_Light1&lt;br /&gt;
      SHTF B 3 Bright A_Light2&lt;br /&gt;
      goto LightDone&lt;br /&gt;
  &amp;quot;@&lt;br /&gt;
*&#039;&#039;&#039;upstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is raised.If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;upstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;downstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is being lowered. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;downstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;readystate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a thing starts in when it is ready to be fired. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;readystate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;attackstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon goes to if the user tries to perform a primary attack. Though not necessary, it is suggested for weapons to have an attackstate for primary firing purposes.&lt;br /&gt;
*&#039;&#039;&#039;flashstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon jumps to if a [[List of codepointers|codepointer]] causes a weapon to flash.&lt;br /&gt;
*&#039;&#039;&#039;holdstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame jumped to by [[ReFire|A_ReFire]] if the player is still holding the primary attack button.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;attackstate2&#039;&#039;&#039;, &#039;&#039;&#039;flashstate2&#039;&#039;&#039;, &#039;&#039;&#039;holdstate2&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
: The equivalent of &#039;&#039;&#039;attackstate&#039;&#039;&#039;, &#039;&#039;&#039;flashstate&#039;&#039;&#039;, and &#039;&#039;&#039;holdstate&#039;&#039;&#039;, but for alternate fire.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_item_effects_and_inventory&amp;diff=4145</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=4145"/>
		<updated>2017-08-13T16:43:27Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Add link to the in-progress sub-page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
For information on progress in current development, see [[EDF item effects and inventory/Weapons-branch|weapons-branch]].&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>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_item_effects_and_inventory/Weapons-branch&amp;diff=4143</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=4143"/>
		<updated>2017-08-13T16:37:31Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Add BackTo template; improve English; update artifact properties&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>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_item_effects_and_inventory/Weapons-branch&amp;diff=4142</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=4142"/>
		<updated>2017-08-13T16:26:02Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Make subpage to contain in-dev stuff, so that it&amp;#039;s ready to be made the official documentation as soon as necessary.&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 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;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>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4052</id>
		<title>EDF weapon reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4052"/>
		<updated>2017-07-11T13:46:52Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Fix link to A_ReFire page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO: Initial spiel.&lt;br /&gt;
&lt;br /&gt;
{{See|User:Altazimuth/Weapon info flags}}&lt;br /&gt;
{{Backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
==Eternity Alfheim syntax==&lt;br /&gt;
For versions of Eternity from Alfheim up, EDF weaponinfo support the following syntax. Make sure to add:&lt;br /&gt;
 setdialect(&amp;quot;ALFHEIM&amp;quot;)&lt;br /&gt;
before using this syntax:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt;, &amp;lt;dehackednum&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;lt;other attributes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Header properties===&lt;br /&gt;
* &#039;&#039;&amp;lt;inherited weaponinfo&amp;gt;&#039;&#039; must be a value, even if the weaponinfo doesn&#039;t inherit from anything else. In that case, it must be &#039;&#039;&#039;Weapon&#039;&#039;&#039;, which is a placeholder value belonging to no real weaponinfo.&lt;br /&gt;
* &#039;&#039;&amp;lt;dehackednum&amp;gt;&#039;&#039; -1 if not used. If -1, it can be omitted, leaving just this:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt; {&amp;lt;attributes&amp;gt;}&lt;br /&gt;
* If header properties are used, the pre-Alfheim syntax &#039;&#039;&#039;inherits&#039;&#039;&#039; and &#039;&#039;&#039;dehackednum&#039;&#039;&#039; attributes are not used.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; [: &amp;lt;parent type&amp;gt; [, &amp;lt;dehackednum&amp;gt;]]&lt;br /&gt;
 {&lt;br /&gt;
   dehackednum            &amp;lt;unique number&amp;gt;&lt;br /&gt;
   inherits               &amp;lt;weaponinfo&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammotype               &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upstate                &amp;lt;frame&amp;gt;&lt;br /&gt;
   downstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   readystate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate            &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammouse                &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   nextincycle            &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   previncycle            &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   cflags                 &amp;lt;flag list&amp;gt;&lt;br /&gt;
   addflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   remflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   mod                    &amp;lt;MOD name OR number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   recoil                 &amp;lt;number&amp;gt;&lt;br /&gt;
   hapticrecoil           &amp;lt;number&amp;gt;&lt;br /&gt;
   haptictime             &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upsound                &amp;lt;sound&amp;gt;&lt;br /&gt;
   readysound             &amp;lt;sound&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   tracker                &amp;lt;string, TO BE REMOVED&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   firstdecoratestate     &amp;lt;frame&amp;gt;&lt;br /&gt;
   states                 &amp;lt;[[DECORATE state syntax]] heredoc&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
====ID / Type Info====&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Fake array index number, for Dehacked patch (BEX or DEH file) compatibility. It has to be an unique number if not -1. Safe numbers are from 10000 up.&lt;br /&gt;
*&#039;&#039;&#039;inherits&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Sets the weapon info from which this will copy properties. All of the properties except &#039;&#039;&#039;dehackednum&#039;&#039;&#039; will be copied from the base actor type.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====States====&lt;br /&gt;
*&#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039;&lt;br /&gt;
:Sets the first frame in a sequential list of dummy frames that use the internal Decorate-style defined &#039;&#039;&#039;states&#039;&#039;&#039; of this actor for [[EDF delta structures|framedelta]] compatibility. It&#039;s not required unless the intention is to make the Decorate states of this thing accessible from other thing types. Default games&#039; (Doom, Heretic) thing types use externalized frames for all thing types, for compatibility.&lt;br /&gt;
*&#039;&#039;&#039;states&#039;&#039;&#039;&lt;br /&gt;
{{see|DECORATE state syntax}}&lt;br /&gt;
:Default = nothing&lt;br /&gt;
:Defines frames using [http://zdoom.org/wiki/DECORATE DECORATE]-style state definitions. This means it won&#039;t be necessary to define separate [[frame]] blocks for each individual frame. See the DECORATE reference at the ZDoom wiki for documentation on its syntax. Using the &#039;&#039;&#039;states&#039;&#039;&#039; field instead of any of the ones below results in more concise text, but also the newly created frames won&#039;t be accessible from outside (other thingtypes, Dehacked patches or delta structures), unless you use the &#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039; field as well. Like normally, [[List of codepointers|codepointers]] may or may not be preceded by &#039;&#039;&#039;A_&#039;&#039;&#039;. The DECORATE code has to be implemented via a heredoc: a text string that spans on multiple lines. Unlike a regular string which uses quotation marks, the heredoc is marked by @&amp;quot; and &amp;quot;@ respectively. Example on an shotgun-like (the &#039;=&#039; sign is optional):&lt;br /&gt;
 states =&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Ready:&lt;br /&gt;
      SHTG A 1 A_WeaponReady&lt;br /&gt;
      loop&lt;br /&gt;
   Deselect:&lt;br /&gt;
      SHTG A 1 A_Lower&lt;br /&gt;
      loop&lt;br /&gt;
   Select:&lt;br /&gt;
      SHTG A 1 A_Raise&lt;br /&gt;
      loop&lt;br /&gt;
   Fire:&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_FireShotgun&lt;br /&gt;
      SHTG BC 5&lt;br /&gt;
      SHTG D 4&lt;br /&gt;
      SHTG CB 5&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_ReFire&lt;br /&gt;
      goto Ready&lt;br /&gt;
   Flash:&lt;br /&gt;
      SHTF A 4 Bright A_Light1&lt;br /&gt;
      SHTF B 3 Bright A_Light2&lt;br /&gt;
      goto LightDone&lt;br /&gt;
  &amp;quot;@&lt;br /&gt;
*&#039;&#039;&#039;upstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is raised.If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;upstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;downstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is being lowered. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;downstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;readystate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a thing starts in when it is ready to be fired. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;readystate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;attackstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon goes to if the user tries to perform a primary attack. Though not necessary, it is suggested for weapons to have an attackstate for primary firing purposes.&lt;br /&gt;
*&#039;&#039;&#039;flashstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon jumps to if a [[List of codepointers|codepointer]] causes a weapon to flash.&lt;br /&gt;
*&#039;&#039;&#039;holdstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame jumped to by [[ReFire|A_ReFire]] if the player is still holding the primary attack button.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;attackstate2&#039;&#039;&#039;, &#039;&#039;&#039;flashstate2&#039;&#039;&#039;, &#039;&#039;&#039;holdstate2&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
: The equivalent of &#039;&#039;&#039;attackstate&#039;&#039;&#039;, &#039;&#039;&#039;flashstate&#039;&#039;&#039;, and &#039;&#039;&#039;holdstate&#039;&#039;&#039;, but for alternate fire.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4051</id>
		<title>EDF weapon reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4051"/>
		<updated>2017-07-11T13:32:49Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Add holdstate to Syntax list of properties.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO: Initial spiel.&lt;br /&gt;
&lt;br /&gt;
{{See|User:Altazimuth/Weapon info flags}}&lt;br /&gt;
{{Backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
==Eternity Alfheim syntax==&lt;br /&gt;
For versions of Eternity from Alfheim up, EDF weaponinfo support the following syntax. Make sure to add:&lt;br /&gt;
 setdialect(&amp;quot;ALFHEIM&amp;quot;)&lt;br /&gt;
before using this syntax:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt;, &amp;lt;dehackednum&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;lt;other attributes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Header properties===&lt;br /&gt;
* &#039;&#039;&amp;lt;inherited weaponinfo&amp;gt;&#039;&#039; must be a value, even if the weaponinfo doesn&#039;t inherit from anything else. In that case, it must be &#039;&#039;&#039;Weapon&#039;&#039;&#039;, which is a placeholder value belonging to no real weaponinfo.&lt;br /&gt;
* &#039;&#039;&amp;lt;dehackednum&amp;gt;&#039;&#039; -1 if not used. If -1, it can be omitted, leaving just this:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt; {&amp;lt;attributes&amp;gt;}&lt;br /&gt;
* If header properties are used, the pre-Alfheim syntax &#039;&#039;&#039;inherits&#039;&#039;&#039; and &#039;&#039;&#039;dehackednum&#039;&#039;&#039; attributes are not used.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; [: &amp;lt;parent type&amp;gt; [, &amp;lt;dehackednum&amp;gt;]]&lt;br /&gt;
 {&lt;br /&gt;
   dehackednum            &amp;lt;unique number&amp;gt;&lt;br /&gt;
   inherits               &amp;lt;weaponinfo&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammotype               &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upstate                &amp;lt;frame&amp;gt;&lt;br /&gt;
   downstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   readystate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate            &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   holdstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammouse                &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   nextincycle            &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   previncycle            &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   cflags                 &amp;lt;flag list&amp;gt;&lt;br /&gt;
   addflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   remflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   mod                    &amp;lt;MOD name OR number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   recoil                 &amp;lt;number&amp;gt;&lt;br /&gt;
   hapticrecoil           &amp;lt;number&amp;gt;&lt;br /&gt;
   haptictime             &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upsound                &amp;lt;sound&amp;gt;&lt;br /&gt;
   readysound             &amp;lt;sound&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   tracker                &amp;lt;string, TO BE REMOVED&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   firstdecoratestate     &amp;lt;frame&amp;gt;&lt;br /&gt;
   states                 &amp;lt;[[DECORATE state syntax]] heredoc&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
====ID / Type Info====&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Fake array index number, for Dehacked patch (BEX or DEH file) compatibility. It has to be an unique number if not -1. Safe numbers are from 10000 up.&lt;br /&gt;
*&#039;&#039;&#039;inherits&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Sets the weapon info from which this will copy properties. All of the properties except &#039;&#039;&#039;dehackednum&#039;&#039;&#039; will be copied from the base actor type.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====States====&lt;br /&gt;
*&#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039;&lt;br /&gt;
:Sets the first frame in a sequential list of dummy frames that use the internal Decorate-style defined &#039;&#039;&#039;states&#039;&#039;&#039; of this actor for [[EDF delta structures|framedelta]] compatibility. It&#039;s not required unless the intention is to make the Decorate states of this thing accessible from other thing types. Default games&#039; (Doom, Heretic) thing types use externalized frames for all thing types, for compatibility.&lt;br /&gt;
*&#039;&#039;&#039;states&#039;&#039;&#039;&lt;br /&gt;
{{see|DECORATE state syntax}}&lt;br /&gt;
:Default = nothing&lt;br /&gt;
:Defines frames using [http://zdoom.org/wiki/DECORATE DECORATE]-style state definitions. This means it won&#039;t be necessary to define separate [[frame]] blocks for each individual frame. See the DECORATE reference at the ZDoom wiki for documentation on its syntax. Using the &#039;&#039;&#039;states&#039;&#039;&#039; field instead of any of the ones below results in more concise text, but also the newly created frames won&#039;t be accessible from outside (other thingtypes, Dehacked patches or delta structures), unless you use the &#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039; field as well. Like normally, [[List of codepointers|codepointers]] may or may not be preceded by &#039;&#039;&#039;A_&#039;&#039;&#039;. The DECORATE code has to be implemented via a heredoc: a text string that spans on multiple lines. Unlike a regular string which uses quotation marks, the heredoc is marked by @&amp;quot; and &amp;quot;@ respectively. Example on an shotgun-like (the &#039;=&#039; sign is optional):&lt;br /&gt;
 states =&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Ready:&lt;br /&gt;
      SHTG A 1 A_WeaponReady&lt;br /&gt;
      loop&lt;br /&gt;
   Deselect:&lt;br /&gt;
      SHTG A 1 A_Lower&lt;br /&gt;
      loop&lt;br /&gt;
   Select:&lt;br /&gt;
      SHTG A 1 A_Raise&lt;br /&gt;
      loop&lt;br /&gt;
   Fire:&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_FireShotgun&lt;br /&gt;
      SHTG BC 5&lt;br /&gt;
      SHTG D 4&lt;br /&gt;
      SHTG CB 5&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_ReFire&lt;br /&gt;
      goto Ready&lt;br /&gt;
   Flash:&lt;br /&gt;
      SHTF A 4 Bright A_Light1&lt;br /&gt;
      SHTF B 3 Bright A_Light2&lt;br /&gt;
      goto LightDone&lt;br /&gt;
  &amp;quot;@&lt;br /&gt;
*&#039;&#039;&#039;upstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is raised.If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;upstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;downstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is being lowered. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;downstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;readystate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a thing starts in when it is ready to be fired. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;readystate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;attackstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon goes to if the user tries to perform a primary attack. Though not necessary, it is suggested for weapons to have an attackstate for primary firing purposes.&lt;br /&gt;
*&#039;&#039;&#039;flashstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon jumps to if a [[List of codepointers|codepointer]] causes a weapon to flash.&lt;br /&gt;
*&#039;&#039;&#039;holdstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame jumped to by [[A_ReFire]] if the player is still holding the primary attack button.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;attackstate2&#039;&#039;&#039;, &#039;&#039;&#039;flashstate2&#039;&#039;&#039;, &#039;&#039;&#039;holdstate2&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
: The equivalent of &#039;&#039;&#039;attackstate&#039;&#039;&#039;, &#039;&#039;&#039;flashstate&#039;&#039;&#039;, and &#039;&#039;&#039;holdstate&#039;&#039;&#039;, but for alternate fire.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
	<entry>
		<id>https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4050</id>
		<title>EDF weapon reference</title>
		<link rel="alternate" type="text/html" href="https://eternity.youfailit.net/index.php?title=EDF_weapon_reference&amp;diff=4050"/>
		<updated>2017-07-11T13:31:35Z</updated>

		<summary type="html">&lt;p&gt;Altazimuth: Add ID and state parameters.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO: Initial spiel.&lt;br /&gt;
&lt;br /&gt;
{{See|User:Altazimuth/Weapon info flags}}&lt;br /&gt;
{{Backto|EDF}}&lt;br /&gt;
&lt;br /&gt;
==Eternity Alfheim syntax==&lt;br /&gt;
For versions of Eternity from Alfheim up, EDF weaponinfo support the following syntax. Make sure to add:&lt;br /&gt;
 setdialect(&amp;quot;ALFHEIM&amp;quot;)&lt;br /&gt;
before using this syntax:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt;, &amp;lt;dehackednum&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   &amp;lt;other attributes&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Header properties===&lt;br /&gt;
* &#039;&#039;&amp;lt;inherited weaponinfo&amp;gt;&#039;&#039; must be a value, even if the weaponinfo doesn&#039;t inherit from anything else. In that case, it must be &#039;&#039;&#039;Weapon&#039;&#039;&#039;, which is a placeholder value belonging to no real weaponinfo.&lt;br /&gt;
* &#039;&#039;&amp;lt;dehackednum&amp;gt;&#039;&#039; -1 if not used. If -1, it can be omitted, leaving just this:&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; : &amp;lt;inherited weaponinfo&amp;gt; {&amp;lt;attributes&amp;gt;}&lt;br /&gt;
* If header properties are used, the pre-Alfheim syntax &#039;&#039;&#039;inherits&#039;&#039;&#039; and &#039;&#039;&#039;dehackednum&#039;&#039;&#039; attributes are not used.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
 weaponinfo &amp;lt;unique name&amp;gt; [: &amp;lt;parent type&amp;gt; [, &amp;lt;dehackednum&amp;gt;]]&lt;br /&gt;
 {&lt;br /&gt;
   dehackednum            &amp;lt;unique number&amp;gt;&lt;br /&gt;
   inherits               &amp;lt;weaponinfo&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammotype               &amp;lt;artifact mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upstate                &amp;lt;frame&amp;gt;&lt;br /&gt;
   downstate              &amp;lt;frame&amp;gt;&lt;br /&gt;
   readystate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   attackstate            &amp;lt;frame&amp;gt;&lt;br /&gt;
   flashstate             &amp;lt;frame&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   ammouse                &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   nextincycle            &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   previncycle            &amp;lt;weapon info mnemonic&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   cflags                 &amp;lt;flag list&amp;gt;&lt;br /&gt;
   addflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   remflags               &amp;lt;flag list&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   mod                    &amp;lt;MOD name OR number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   recoil                 &amp;lt;number&amp;gt;&lt;br /&gt;
   hapticrecoil           &amp;lt;number&amp;gt;&lt;br /&gt;
   haptictime             &amp;lt;number&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   upsound                &amp;lt;sound&amp;gt;&lt;br /&gt;
   readysound             &amp;lt;sound&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   tracker                &amp;lt;string, TO BE REMOVED&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   firstdecoratestate     &amp;lt;frame&amp;gt;&lt;br /&gt;
   states                 &amp;lt;[[DECORATE state syntax]] heredoc&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
===Explanation of fields===&lt;br /&gt;
====ID / Type Info====&lt;br /&gt;
*&#039;&#039;&#039;dehackednum&#039;&#039;&#039;&lt;br /&gt;
:Default = -1&lt;br /&gt;
:Fake array index number, for Dehacked patch (BEX or DEH file) compatibility. It has to be an unique number if not -1. Safe numbers are from 10000 up.&lt;br /&gt;
*&#039;&#039;&#039;inherits&#039;&#039;&#039;&lt;br /&gt;
:Default = (nothing)&lt;br /&gt;
:Sets the weapon info from which this will copy properties. All of the properties except &#039;&#039;&#039;dehackednum&#039;&#039;&#039; will be copied from the base actor type.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====States====&lt;br /&gt;
*&#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039;&lt;br /&gt;
:Sets the first frame in a sequential list of dummy frames that use the internal Decorate-style defined &#039;&#039;&#039;states&#039;&#039;&#039; of this actor for [[EDF delta structures|framedelta]] compatibility. It&#039;s not required unless the intention is to make the Decorate states of this thing accessible from other thing types. Default games&#039; (Doom, Heretic) thing types use externalized frames for all thing types, for compatibility.&lt;br /&gt;
*&#039;&#039;&#039;states&#039;&#039;&#039;&lt;br /&gt;
{{see|DECORATE state syntax}}&lt;br /&gt;
:Default = nothing&lt;br /&gt;
:Defines frames using [http://zdoom.org/wiki/DECORATE DECORATE]-style state definitions. This means it won&#039;t be necessary to define separate [[frame]] blocks for each individual frame. See the DECORATE reference at the ZDoom wiki for documentation on its syntax. Using the &#039;&#039;&#039;states&#039;&#039;&#039; field instead of any of the ones below results in more concise text, but also the newly created frames won&#039;t be accessible from outside (other thingtypes, Dehacked patches or delta structures), unless you use the &#039;&#039;&#039;firstdecoratestate&#039;&#039;&#039; field as well. Like normally, [[List of codepointers|codepointers]] may or may not be preceded by &#039;&#039;&#039;A_&#039;&#039;&#039;. The DECORATE code has to be implemented via a heredoc: a text string that spans on multiple lines. Unlike a regular string which uses quotation marks, the heredoc is marked by @&amp;quot; and &amp;quot;@ respectively. Example on an shotgun-like (the &#039;=&#039; sign is optional):&lt;br /&gt;
 states =&lt;br /&gt;
   @&amp;quot;&lt;br /&gt;
   Ready:&lt;br /&gt;
      SHTG A 1 A_WeaponReady&lt;br /&gt;
      loop&lt;br /&gt;
   Deselect:&lt;br /&gt;
      SHTG A 1 A_Lower&lt;br /&gt;
      loop&lt;br /&gt;
   Select:&lt;br /&gt;
      SHTG A 1 A_Raise&lt;br /&gt;
      loop&lt;br /&gt;
   Fire:&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_FireShotgun&lt;br /&gt;
      SHTG BC 5&lt;br /&gt;
      SHTG D 4&lt;br /&gt;
      SHTG CB 5&lt;br /&gt;
      SHTG A 3&lt;br /&gt;
      SHTG A 7 A_ReFire&lt;br /&gt;
      goto Ready&lt;br /&gt;
   Flash:&lt;br /&gt;
      SHTF A 4 Bright A_Light1&lt;br /&gt;
      SHTF B 3 Bright A_Light2&lt;br /&gt;
      goto LightDone&lt;br /&gt;
  &amp;quot;@&lt;br /&gt;
*&#039;&#039;&#039;upstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is raised.If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;upstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;downstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon starts in when it is being lowered. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;downstate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;readystate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a thing starts in when it is ready to be fired. If the object is supposed to have any dynamic purpose or be visible, do not leave the &#039;&#039;&#039;readystate&#039;&#039;&#039; at S_NULL.&lt;br /&gt;
*&#039;&#039;&#039;attackstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon goes to if the user tries to perform a primary attack. Though not necessary, it is suggested for weapons to have an attackstate for primary firing purposes.&lt;br /&gt;
*&#039;&#039;&#039;flashstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame which a weapon jumps to if a [[List of codepointers|codepointer]] causes a weapon to flash.&lt;br /&gt;
*&#039;&#039;&#039;holdstate&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
:Sets the frame jumped to by [[A_ReFire]] if the player is still holding the primary attack button.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;attackstate2&#039;&#039;&#039;, &#039;&#039;&#039;flashstate2&#039;&#039;&#039;, &#039;&#039;&#039;holdstate2&#039;&#039;&#039;&lt;br /&gt;
:Default = S_NULL&lt;br /&gt;
: The equivalent of &#039;&#039;&#039;attackstate&#039;&#039;&#039;, &#039;&#039;&#039;flashstate&#039;&#039;&#039;, and &#039;&#039;&#039;holdstate&#039;&#039;&#039;, but for alternate fire.&lt;/div&gt;</summary>
		<author><name>Altazimuth</name></author>
	</entry>
</feed>