<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://3dfxdev.net/edgewiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Corbin</id>
		<title>3DGE Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://3dfxdev.net/edgewiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Corbin"/>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Special:Contributions/Corbin"/>
		<updated>2026-06-06T07:56:02Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.0</generator>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=IWAD&amp;diff=761</id>
		<title>IWAD</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=IWAD&amp;diff=761"/>
				<updated>2020-02-12T17:36:13Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: Clean up article, ROTT and added Wolf3D&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DoomWiki}}An '''IWAD''' - short for ''Internal WAD'' - is the main resource file for a [[Doom]]-engine game, containing all the game's original sounds, levels, and graphics. [[EDGE]] needs an IWAD file in order to play; without one the EDGE engine has no game data to use.&lt;br /&gt;
&lt;br /&gt;
==Supported IWADs==&lt;br /&gt;
'''Notes:''' &lt;br /&gt;
* Some file names are links to a page on the {{DoomWiki|nolink=|Entryway|Doom Wiki}}&lt;br /&gt;
 where you will find checksums for known versions of the concerned file.&lt;br /&gt;
* Some files have conflicting names; EDGE provides you with possible aliases. Note that an IWAD is actually identified by its content rather than its name. Also, any [[archive format]] supported by EDGE can technically be an IWAD.&lt;br /&gt;
&lt;br /&gt;
===Commercial games===&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}} style=&amp;quot;font-size: 95%;&amp;quot;&lt;br /&gt;
!Game!!Name!!File name!!File aliases!!Notes and download links&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; valign=&amp;quot;top&amp;quot; |[[File:MiniDoomLogoIcon.png|link=]]&lt;br /&gt;
| Doom (Registered) || {{c|{{dwicon|nolink=|DOOM.WAD|doom.wad}}}} || || rowspan=&amp;quot;2&amp;quot; | {{goglink|game/the_ultimate_doom|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/2280/|Buy on Steam}}&lt;br /&gt;
|-&lt;br /&gt;
| The Ultimate Doom || {{c|{{dwicon|nolink=|DOOM.WAD|doom.wad}}}} || {{c|doomu.wad}}&lt;br /&gt;
|-&lt;br /&gt;
| Doom &amp;quot;BFG Edition&amp;quot; || {{c|{{dwicon|nolink=|DOOM.WAD|doom.wad}}}} || {{c|bfgdoom.wad}}, {{c|doombfg.wad}} || {{goglink|game/doom_3_bfg_edition|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/208200/|Buy on Steam}} &amp;amp;mdash; Part of {{dw|Doom 3: BFG Edition}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; valign=&amp;quot;top&amp;quot; |[[File:MiniDoom2LogoIcon.png|link=]]&lt;br /&gt;
| [[Doom II]] || {{c|{{dwicon|nolink=|DOOM2.WAD|doom2.wad}}}} || || {{goglink|game/doom_ii_final_doom|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/2300/|Buy on Steam}}&lt;br /&gt;
|-&lt;br /&gt;
| Doom II &amp;quot;BFG Edition&amp;quot; || {{c|{{dwicon|nolink=|DOOM2.WAD|doom2.wad}}}} || {{c|bfgdoom2.wad}}, {{c|doom2bfg.wad}} || {{goglink|game/doom_3_bfg_edition|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/208200/|Buy on Steam}} &amp;amp;mdash; Part of {{dw|Doom 3: BFG Edition}}; also loads {{c|{{dwicon|nolink=|NERVE.WAD|nerve.wad}}}} &lt;br /&gt;
|-&lt;br /&gt;
| [[Final Doom]] &amp;amp;mdash; TNT: Evilution || {{c|{{dwicon|nolink=|TNT.WAD|tnt.wad}}}} || || rowspan=&amp;quot;2&amp;quot; | {{goglink|game/doom_ii_final_doom|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/2290/|Buy on Steam}}&lt;br /&gt;
|-&lt;br /&gt;
| Final Doom &amp;amp;mdash; The Plutonia Experiment || {{c|{{dwicon|nolink=|PLUTONIA.WAD|plutonia.wad}}}} ||&lt;br /&gt;
|-&lt;br /&gt;
| French Doom II || {{c|doom2f.wad}} || || No longer sold; {{idgames|id=16030||a patch is available}} for the original English version.&lt;br /&gt;
|-&lt;br /&gt;
| [[File:MiniHereticLogoIcon.png|link=]] || Heretic (Registered or Commercial) || {{c|{{dwicon|nolink=|HERETIC.WAD|heretic.wad}}}} || {{c|hereticsr.wad}} || {{steamlink|app/2390/|buy on Steam}}&lt;br /&gt;
|-&lt;br /&gt;
| [[File:MiniChexLogoIcon.png|link=]] || [[Chex Quest]] || {{c|{{dwicon|nolink=|CHEX.WAD|chex.wad}}}} ||  || No longer sold, originally distributed in cereal boxes.&lt;br /&gt;
|-&lt;br /&gt;
| [[File:ROTTLogoIcon.png|link=]] || [[Rise of the Triad]] || {{c|{{dwicon|nolink=|DARKWAR.WAD|darkwar.wad}}}} ||  || EDGE is the only DOOM engine that can read and support Rise of the Triad: Dark War. {devbuilds}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Wolfenstein 3D&lt;br /&gt;
|Registered&lt;br /&gt;
|*.WL6&lt;br /&gt;
|{WIP}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Free-to-play games===&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}} style=&amp;quot;font-size: 95%;&amp;quot;&lt;br /&gt;
!Game!!Name!!File name!!File aliases!!Notes and download links&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| [[File:MiniDoomLogoIcon.png|link=]] || [[Doom]] (Shareware) || {{c|{{dwicon|nolink=|DOOM1.WAD|doom1.wad}}}} || || {{idgames|id=7043|Doom shareware}}&lt;br /&gt;
|-&lt;br /&gt;
| [[File:MiniHereticLogoIcon.png|link=]] || [[Heretic]] (Shareware) || {{c|{{dwicon|nolink=|HERETIC1.WAD|heretic1.wad}}}} || || {{idgames|id=7044|Heretic shareware}}&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; valign=&amp;quot;top&amp;quot; |[[File:MiniFreedoomLogo.png|link=]]&lt;br /&gt;
| [[Freedoom]]: Phase 1 || {{c|freedoom1.wad}} || {{c|freedoomu.wad}} || [https://freedoom.github.io/download.html Official site]&lt;br /&gt;
|-&lt;br /&gt;
| [[Freedoom]]: Phase 2 || {{c|freedoom2.wad}} || {{c|freedoom.wad}} || [https://freedoom.github.io/download.html Official site]&lt;br /&gt;
|-&lt;br /&gt;
| FreeDM || {{c|freedm.wad}} ||  || [https://freedoom.github.io/download.html Official site]&lt;br /&gt;
|-&lt;br /&gt;
| [[File:MiniChex3LogoIcon.png|link=]] || [[Chex Quest 3]] || {{c|{{dwicon|nolink=|CHEX3.WAD|chex3.wad}}}} ||  || [http://www.chucktropolis.com/gamers.htm Official site]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot; | [[File:MiniHacxLogoIcon.png|link=]] || [[Hacx]] v1.2 || {{c|{{dwicon|nolink=|HACX.WAD|hacx.wad}}}} || || [http://drnostromo.com/hacx/page.php?content=download Official site]&lt;br /&gt;
|-&lt;br /&gt;
|Hacx v2.0 || {{c|hacx.wad}} || {{c|hacx2.wad}} || {{DRDForum|t=5771|WIP download thread}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In addition to them, some &amp;quot;total conversion&amp;quot;-type mods can be played as their own IWAD; however since they are not detected as such by EDGE, you need to use the -iwad [[command line parameter]].&lt;br /&gt;
&lt;br /&gt;
In order to play a custom level designed for any of the above games you have to have that particular game's full IWAD (loading PWAD with shareware, demo or teaser versions is disabled). If you do not have the necessary IWAD, or if you have an old, [[IWAD Patching|unpatched]] version of the IWAD in question, you might experience undefined behavior. (But often old versions are accepted too.)&lt;br /&gt;
&lt;br /&gt;
The IWAD file(s) should be placed in a directory where EDGE will find them. This includes the same directory as the EDGE executable, as well as those pointed to by the {{c|DOOMWADDIR}} environment variable. On Linux, the directories {{c|$HOME/.EDGE}} and {{c|/usr/local/share}} are checked by default. &lt;br /&gt;
&lt;br /&gt;
==Obtaining IWADs==&lt;br /&gt;
As noted above, some IWADs can be downloaded freely; however most &amp;quot;full&amp;quot; games are not and must be bought from one of the following sources:&lt;br /&gt;
;[http://www.gog.com/games#/#sort=bestselling&amp;amp;devpub=id_software&amp;amp;page=1 GOG.com]&lt;br /&gt;
:This store offers downloadable versions of ''Ultimate Doom'', ''Doom II: Hell on Earth'' (bundled with ''Final Doom'' and the ''Master Levels for Doom II''), and ''Strife''. The Final Doom version offered is the later Anthology version, which fixes many mapping errors (such as the infamous [[doomwiki:MAP31: Pharaoh (TNT: Evilution)#Bugs|missing key in TNT MAP31]]).&lt;br /&gt;
;[http://store.steampowered.com/search/?sort_by=Name&amp;amp;sort_order=ASC&amp;amp;publisher=id+Software&amp;amp;category2=2&amp;amp;price=0%2C10&amp;amp;genre=Action Steam]&lt;br /&gt;
:This store offers downloadable versions of ''Ultimate Doom'', ''Doom II: Hell on Earth'', ''Final Doom'', ''Heretic: Shadow of the Serpent Riders'', ''Hexen: Beyond Heretic'', ''Hexen: Deathkings of the Dark Citadel'', and ''Strife''; as well as the ''Master Levels for Doom II'' which is a set of PWAD, not an IWAD.&lt;br /&gt;
:Warning: following the release of ''{{dw|Doom 3: BFG Edition}}'', the ''Master Levels'' are no longer available to purchase individually but can be bought as part of the Doom Classic Complete Pack.&lt;br /&gt;
:'''Note:''' The version of ''Hexen: Death Kings'' available on Steam is not patched. You need to download and apply the [http://www.doomworld.com/idgames/index.php?id=7022 Death Kings 1.1 patch] first. (The &amp;quot;readme.txt&amp;quot; file it tries to patch has been renamed readme-dk.txt by Steam, but is not important.) All other IWADs from Steam are fully patched.&lt;br /&gt;
;[http://www.amazon.com/ Amazon.com], [http://www.ebay.com/ eBay.com], etc.&lt;br /&gt;
:Second-hand copies of the original games can be found on such sites.&lt;br /&gt;
;Flea markets, used-games bins in brick-and-mortar stores, etc.&lt;br /&gt;
:It's mostly a matter of luck, but they can still sometimes be found this way.&lt;br /&gt;
&lt;br /&gt;
==Custom IWADs==&lt;br /&gt;
EDGE is currently working on the ability to define any WAD/distro/archive as an IWAD or [[EPK]] (through EGM files) - currently this is only available by using the -iwad switch.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[WAD]]&lt;br /&gt;
*[[PWAD]]&lt;br /&gt;
[[Category:Glossary]]&lt;br /&gt;
[[Category:Supported games|*]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=System_Requirements&amp;diff=760</id>
		<title>System Requirements</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=System_Requirements&amp;diff=760"/>
				<updated>2020-02-12T17:32:47Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: Removal of WindowsXP support.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;====== &amp;lt;code&amp;gt;'''Please be aware that, for all Operating Systems, you *must* have a valid [[IWAD]] to run the engine!'''&amp;lt;/code&amp;gt; ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;0&amp;quot; width=&amp;quot;90%&amp;quot; style=&amp;quot;background:#f9f9f9; border: 1px solid #aaa;&amp;quot; cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
! width=&amp;quot;45%&amp;quot; |[[File:WindowsIcon.png|40px|Windows&amp;amp;reg; Logo 2002]] &amp;lt;b&amp;gt;Microsoft&amp;amp;reg; Windows&amp;amp;reg;&amp;lt;/b&amp;gt;&lt;br /&gt;
----&amp;lt;i&amp;gt;Windows&amp;amp;reg; Vista or higher (Windows&amp;amp;reg; 10 is highly recommended)&amp;lt;/i&amp;gt;&lt;br /&gt;
 ''(note: Windows XP support is currently deprecated in the latest devbuilds!)''&lt;br /&gt;
|}&lt;br /&gt;
* '''2 GHz Dual-Core CPU''' or faster ('''Quad-Core is strongly recommended for modern EDGE mods''').&lt;br /&gt;
** '''Your CPU must be SSE2 capable''' to run 3DGE 2.0 or higher! See [[wikipedia:SSE2#CPU_support|Supported CPUS]] on Wikipedia.&lt;br /&gt;
*** '''If you use Windows 8 and above''', your CPU is automatically SSE2 compatible.&lt;br /&gt;
&lt;br /&gt;
* '''2GB RAM''' (''1GB minimum.'' '''For ''Windows Vista'' and up,''' '''8GB or more is ''strongly recommended''''').&lt;br /&gt;
* '''Hardware accelerated 3D card''' with [[wikipedia:OpenGL|OpenGL]] drivers:&lt;br /&gt;
    * ''At least'' a Radeon HD or Geforce '''NV40 6 series''' class with '''1GB of RAM''' or higher is recommended.&lt;br /&gt;
    * For OpenGL3 mode, you need a card that supports '''Shader Model 3.0''' (recommended).&lt;br /&gt;
* '''''Windows Vista and higher (Windows 7/8/10 verified)''', 32-bit or 64-bit, '''is required.'''''&lt;br /&gt;
** '''Windows XP SP3''' is the lowest Windows version to be supported (in versions prior to 2.1.0). '''Please be aware:'''       &amp;lt;code&amp;gt;'''3DGE 2.1.0 and above no longer works with Windows 2000 and below'''&amp;lt;/code&amp;gt;. You can, however, build a version that supports those older operating systems yourself by compiling using the Windows Makefile with GCC, called makefile.xming. &amp;lt;code&amp;gt;Windows binaries of 3DGE are normally compiled with Visual Studio 2019.&amp;lt;/code&amp;gt;&lt;br /&gt;
* ''[https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads Visual Studio 2015/2017/2019 C++ Runtimes]'' are '''required to be installed''' - x86 or x64, depending on your CPU type. &lt;br /&gt;
** '''Windows XP SP3 users: compatibility will be dropped in 2.1.0-Final'''. We will no longer offer support.&lt;br /&gt;
&lt;br /&gt;
*  For Linux:&lt;br /&gt;
    SDL (Simple DirectMedia Layer) version 2.0.10.&lt;br /&gt;
    glibc 2.&lt;br /&gt;
&lt;br /&gt;
*  For MacOSX:&lt;br /&gt;
    TO-DO (WIP)&lt;br /&gt;
*  For Dreamcast:&lt;br /&gt;
    * Console manufactured before the year 2000 to play burned media.&lt;br /&gt;
    * Alternatively, an [[emulator]].&lt;br /&gt;
    * [[VMU]] with (X) Free Blocks to save game data.&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=3DGE&amp;diff=759</id>
		<title>3DGE</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=3DGE&amp;diff=759"/>
				<updated>2020-02-12T16:59:54Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: clean out previous '3DGE' article and link directly to 'EDGE'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[EDGE]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=DOSDoom&amp;diff=758</id>
		<title>DOSDoom</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=DOSDoom&amp;diff=758"/>
				<updated>2020-02-12T16:58:37Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: 3DGE -&amp;gt; EDGE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{InfoboxSourcePort&lt;br /&gt;
|title = DOSDoom&lt;br /&gt;
|developer = [[Chi Hoang]], [[DOSDoom Team]]&lt;br /&gt;
|baseparent = [[Linux Doom]] 1.10&lt;br /&gt;
|logo = [[File:DOSDoomlogo.png]]&lt;br /&gt;
|programming language = [[Wikipedia:C (Programming Language)|C]]&lt;br /&gt;
|status = Discontinued&lt;br /&gt;
|platform = DOS&lt;br /&gt;
|license = [[Doom Source License]], [[GPL]]&lt;br /&gt;
}}'''DOSDoom''' is the first [[source port]] of Doom, as well as the first [[Wikipedia:MS-DOS|DOS]] port of Doom after the release of the [[Doom source code]]. The initial versions were developed by [[Chi Hoang]] and the later ones by the [[DOSDoom Team]]. The port became the basis for a number of other source ports, including [[Boom]], [[Doom Legacy]] and directly continued as [[EDGE]]. It pioneered many features that other source ports would come to adopt; due to this, EDGE is considered the [[purest descendant]] of the port. Because of this, its history, development, and team members are heavily documented here.&lt;br /&gt;
&lt;br /&gt;
* Contrary to popular belief, DOSDoom was the first port to feature [[3D Floors]], a staple that many other ports [http://home.comcast.net/~mrrocket/doomlegacy/w3c_test3/concept.htm  would soon follow].&lt;br /&gt;
&lt;br /&gt;
* Chi Hoang released the initial version of DOSDoom on December 23, 1997, soon after the Doom source code came out. According to Hoang, &amp;quot;it took me 4-5 hours to port&amp;quot;. Hoang left the port with 0.63.&lt;br /&gt;
&lt;br /&gt;
* The final version of DOSDoom, 0.653, was released on April 10, 1999.&lt;br /&gt;
&lt;br /&gt;
Later DOSDoom versions added various [[:Category:New features|new features]] including [[free look]], [[translucency]], [[jump]]ing and [[Doom Definition File|DDF scripting]].&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
* Hi-Colour Mode&lt;br /&gt;
* Higher Resolutions (up to 1280x1024, compared to 320x200 in the original)&lt;br /&gt;
* 3 Levels of Translucency&lt;br /&gt;
* Jumping&lt;br /&gt;
* 180-degree turn&lt;br /&gt;
* user-definable gravity&lt;br /&gt;
* Controls Configurable in the Game&lt;br /&gt;
* 8-Player Support&lt;br /&gt;
* New gameplay options&lt;br /&gt;
* Mouse-look&lt;br /&gt;
* Radius Scripting for existing and new levels&lt;br /&gt;
* Music support for MP3, MOD and loads more&lt;br /&gt;
* CD Audio&lt;br /&gt;
* Overlap Map Function&lt;br /&gt;
* Rotate Map Function&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
The term &amp;quot;source port&amp;quot; originates from the DOSDoom release 0.2.&lt;br /&gt;
&lt;br /&gt;
There is a campaign at [http://www.doomworld.com/vb/source-ports/70442-salvaging-historic-dosdoom-versions/ Doomworld] to retrieve the &amp;quot;lost&amp;quot; versions of DOSDoom, as only 3 versions (with 2 having their source released) exist. &lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{AtomicGamer|id=1935|title=DOSDoom 0.653}}&lt;br /&gt;
* {{AtomicGamer|id=1850|title=DOSDoom 0.653 source code}}&lt;br /&gt;
* {{AtomicGamer|id=1844|title=DOSDoom 0.61 DOS version}}&lt;br /&gt;
* {{AtomicGamer|id=1843|title=DOSDoom 0.61 Linux version}}&lt;br /&gt;
* {{AtomicGamer|id=1845|title=DOSDoom 0.61 source code}}&lt;br /&gt;
* {{AtomicGamer|id=15072|title=DOSDoom 0.47 DOS version}}&lt;br /&gt;
* {{idgames|id=8801|title=DOSDoom 0.1}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Source ports]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Using_ZIPs_as_WAD_replacement&amp;diff=757</id>
		<title>Using ZIPs as WAD replacement</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Using_ZIPs_as_WAD_replacement&amp;diff=757"/>
				<updated>2019-11-26T06:05:36Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: Cleaned up slightly.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DoomWiki|PK3}}&amp;lt;!-- NOTE: Only v2.1.0 RC-1 and DRDTeam Builds are able to read compressed archives!  --&amp;gt;[[3DGE|EDGE]] allows using several compressed [[archive format]]s instead of the traditional [[WAD]]s. Most notably:&lt;br /&gt;
;[[EPK]]&lt;br /&gt;
:EDGE uses a modified ZIP container named '''EPK''' ('''E'''dge '''P'''aC'''K'''), which is the recommended extension for EDGE-specific mods. The main data-file for EDGE now uses this container format ('''edge.epk'''). It is a basically a ZIP/PK3 container renamed so other ports do not accidentally load EPK files. Though this is preferred, any archive format EDGE loads will still assume that data is stored in the proper namespaces.&lt;br /&gt;
&lt;br /&gt;
;{{wp|ZIP_(file_format)|ZIP}}&lt;br /&gt;
:A .zip file used as the container for a source port mods are usually given the '''.pk3 extension''', instead of .zip. While there is no technical differences, this helps avoid potential confusion from users thinking the mod should be extracted from it, and also prevents Windows from presenting it as a directory. EDGE supports several ZIP archiving methods: stored (no compression), shrunk, imploded, {{wp|DEFLATE|deflated}} (the most commonly used), {{wp|bzip2}} and {{wp|LZMA}} algorithms. Note that many ZIP utility only partially implement the ZIP standard and as a result their support is limited to stored and deflated files. This partial implementation also affects some [[editing tools]] which normally support the PK3 format, such as [[3DGE Builder|EDGE Builder]], Doom Builder 2, and [[Slumped]]. EDGE employs PhysicsFS for archive handling.&lt;br /&gt;
;{{wp|7z}}&lt;br /&gt;
:A .7z file used as the container for a EDGE mod is usually given the .pk7 extension, for similar reasons. This format offers much better compression ratio, however its reduced support, especially by modding utilities, make it less interesting overall. It also increases the memory footprint on the engine, so caution must be taken when choosing between a 7z and a PK3 format. A possibility would be to develop a mod as a PK3, then convert it to a PK7 once finished, to decrease the size of the archive to be distributed. However, keep in mind that decompression is quite slower than for zips, so loading times are increased.&lt;br /&gt;
;[http://quakewiki.org/wiki/.pak PAK]&lt;br /&gt;
: A .PAK file is used as an alternative container for EDGE mods; it follows Quake's PAK convention strictly. This also works for Quake II PAKs, as well as .SIN packfiles. It is nearly functionally identical to the WAD container format. EDGE mods wishing to use a custom IWAD replacement as a container over .WADs should prefer .PAK files.&lt;br /&gt;
: &lt;br /&gt;
Compressed archives have many advantages over PWADs and PAKs, even for storing content for Doom:&lt;br /&gt;
* Smaller file size due to compression&lt;br /&gt;
* Greatly reduced memory usage during play&lt;br /&gt;
* Proper use of directories instead of WAD namespaces (directories also shares the distinction of being referred to as namespaces)&lt;br /&gt;
* You no longer need dedicated WAD management tools like XWE for manipulating your data.&lt;br /&gt;
* More flexibility due to the use of full path names. Currently there is only limited support but it is planned to change everything that references lump names to support full paths.&lt;br /&gt;
&lt;br /&gt;
== How to ==&lt;br /&gt;
You can embed WADs inside the top level root of an archive. Any WAD file found in the root directory will be added to the lump directory as well. This allows loading many of the ZIPs distributed through /idgames without the need to extract them. If several wads are included in an archive, they will be loaded in alphabetical order. If maps wish to stay in the WAD format, they need to be given the explicit lump name (MAPxx, ExMx, or whatever custom format you define in Levels.ddf). They can also be extracted verbatim as uncompressed data (as in, the /maps directory would contain all map data and node information like a top level PWAD would).&lt;br /&gt;
&lt;br /&gt;
::'''WARNING:''' Loading WAD files inside of a ZIP or a PK3 can potentially cause memory issues to arise. EDGE will unpack each WAD file and use more memory to access the contents. This effect quickly adds up, especially in larger mods (with the exception of map wads in the maps/ folder, provided they follow the format explicitly -- see below). The bigger the mod is, the more likely it may run out of memory during play and crashing EDGE, or for '''memory corruption''' to occur. Thus, it is '''highly''' recommended to completely unpack the entire contents of any WADs inside, or part of the mod, into the sorted directories. &lt;br /&gt;
::'''Furthermore''', EDGE supports and promotes subdirectories under the main ones for sorting purposes (i.e. Sprites/Weapons/Cannon, Sprites/Monsters/Technodemon, etc). No extra effort is needed to indicate the sprites are present, as EDGE automatically scans all subdirectories as long as they reside in their proper namespaces. If Images are contained this way, some users wouldn’t even need to define the name entry in Images.DDF.&lt;br /&gt;
&lt;br /&gt;
Unlike WADs which do not have a true directory structure, the placement of data within ZIPs is much more strictly enforced in order to allow the engine to recognize it as a default lump. Any special data must be placed in the respective directory inside the ZIP or it will not be found. For the [[lump]] name, the first 8 characters of the file name are used, the extension is stripped. So for example, to place a [[COAL Manual|COALHUD]] into a ZIP file, you have to name your file '''coalhud1.TXT''', '''COALHUD1.LMP''' (or whatever extension you like) and place it in '''&amp;quot;./scripts&amp;quot;'''. The following sub directories are used to assign data to the existing WAD [[namespace]]s in EDGE:&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}} style=&amp;quot;font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Directory''' || '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;lt;s&amp;gt;acs/&amp;lt;/s&amp;gt;''' || &amp;lt;s&amp;gt;contains [[Libraries|ACS libraries]] normally found between '''A_START''' and '''A_END'''&amp;lt;/s&amp;gt; '''''Not yet implemented!'''''&lt;br /&gt;
|-&lt;br /&gt;
| '''cameras/''' || contains [[CAMDAT]] files for [[CAMERA-MAN_Manual|camera-man]] scripts.&lt;br /&gt;
|-&lt;br /&gt;
| '''colormaps/''' || contains [[Boom]] and [[3DGE|EDGE]] colormaps normally found between '''C_START''' and '''C_END'''.&lt;br /&gt;
|-&lt;br /&gt;
| '''doom_ddf/''' &lt;br /&gt;
'''her_ddf/''' '''wolf_ddf/''' &lt;br /&gt;
&lt;br /&gt;
'''rott_ddf/''' &lt;br /&gt;
|| ''OPTIONAL!'' Can contain all [[DDF]], [[RTS]], and [[COAL]] scripts here. This is not explicitly needed however, since they can be added in the root directory of the ZIP all the same. These folders also exists in the root EDGE directory by default, so this is only needed if you do not want to reference your script files externally. It is recommended to use the '''/scripts''' namespace instead as EDGE will automatically use /scripts instead of the default external DDF directories.&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;lt;s&amp;gt;filter/&amp;lt;/s&amp;gt;''' || &amp;lt;s&amp;gt;{{new}} contains lumps and directories that will only be loaded with specific games.&amp;lt;/s&amp;gt; '''Not yet implemented!'''&lt;br /&gt;
|-&lt;br /&gt;
| '''flats/''' || contains [[flat]]s normally found between '''FF_START''' and '''FF_END'''&lt;br /&gt;
|-&lt;br /&gt;
| '''graphics/''' || All special graphics like title pictures or font characters must go here. ''This namespace does not exist in WADs.''&lt;br /&gt;
|-&lt;br /&gt;
| '''hires/''' || contains high-resolution textures normally found between [[HI_START]] and [[HI_END]]&lt;br /&gt;
|-&lt;br /&gt;
| '''maps/''' || contains levels in form of WADs. These WADs must only contain the data for one single level (including GL nodes lumps if required). Any other data in such a WAD will be ignored. Note that the file name and not the map label inside the WAD determines how the map is named in the game, unless otherwise specified by [[LEVELS|Levels.DDF]]. EDGE will automatically build the GL nodes via glBSP if a map is found.&lt;br /&gt;
|-&lt;br /&gt;
| '''models/''' || contains [[MD2]], [[MD3]], or [[MD5]] models. ''This namespace does not exist in WADs''.&lt;br /&gt;
|-&lt;br /&gt;
| '''music/''' || contains all data that is used as music. ''This namespace does not exist in WADs.''&lt;br /&gt;
|-&lt;br /&gt;
| '''patches/''' || contains [[patch]]es normally found between '''PP_START''' and '''PP_END'''&lt;br /&gt;
|-&lt;br /&gt;
| '''scripts/''' || contains [[DDF]]/[[RTS]]/[[COAL]] script files. They can be named by their 8 character name, or their full names  as seen in EDGE's root directory, under /doom_ddf.&lt;br /&gt;
|-&lt;br /&gt;
| '''skins/''' || contains all skins to be loaded for 3D models. ''This namespace does not exist in WADs.''&lt;br /&gt;
|-&lt;br /&gt;
| '''sounds/''' || contains all sound files that are referenced by [[SOUNDS|DDFSFX]]. ''This namespace does not exist in WADs.''&lt;br /&gt;
|-&lt;br /&gt;
| '''sprites/''' || contains [[sprite]]s normally found between '''[[S_START]]''' and '''[[S_END]]''' (also known as '''SS_START''', '''SS_END''')&lt;br /&gt;
|-&lt;br /&gt;
| '''textures/''' || contains [[texture]]s normally found between [[TX_START]] and [[TX_END]]&lt;br /&gt;
|-&lt;br /&gt;
| '''voices/''' || contains ''[[Strife]]'' dialog sounds normally found between '''V_START''' and '''V_END'''&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;lt;s&amp;gt;voxels/&amp;lt;/s&amp;gt;''' || &amp;lt;s&amp;gt;contains [[voxel]] objects normally found between '''VX_START''' and '''VX_END'''&amp;lt;/s&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;code&amp;gt;(Note: Any lump found in the root directory is added to the global namespace.)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
* [https://github.com/sirjuddington/SLADE SLADE] or similar programs are recommended for creating the actual .zip file, to ensure programs like WinZIP or WinRAR do not create them with unsupported file compression. Otherwise, they may appear to be damaged, which may hinder modifications of the epk with SLADE, Slumped, etc.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/sirjuddington/SLADE SLADE] is also capable of reading and writing the .epk archive directly, where WinZIP and WinRAR natively cannot; WinRAR/7Z can still open epks though.&lt;br /&gt;
&lt;br /&gt;
* The ZIP file's directory is sorted alphabetically before adding it to the lump directory; any WAD files in the .zip are then loaded afterwards. Keep that in mind when creating data that relies on file name ordering. For most things, there is no need to depend on ordering, with the exception of texture animations of type ''range'' that animate textures from the flats/ or textures/ subdirectories.&lt;br /&gt;
&lt;br /&gt;
* Any file not in one of the reserved directories is not added to the WAD directory and can only be used by code that looks for full path names. Currently that is only the music code but it will be gradually extended so that everything that references a lump name can do it.&lt;br /&gt;
&lt;br /&gt;
* Sprite lumps for the '''\''' frame in a WAD (such as '''VILE\*''' for one of the Arch-Vile's healing frames) can be put in a ZIP file, the backslash character just has to be changed to a caret character ('''^'''). So, '''VILE^1''' to '''VILE^8''' in a ZIP file will be interpreted as the '''VILE\1''' to '''VILE\8''' lumps. This replacement only works for sprites, any other lump name should not contain backslashes anywhere. As it is possible to use multiple sprite names for an actor with [[DDF]], frames beyond '''Z''' need not be used however.&lt;br /&gt;
&lt;br /&gt;
* '''It is ''strongly'' recommended to use the .EPK extension, not .zip or .pk3, when creating a file meant to be loaded directly into EDGE'''. The average user is used to opening a .zip file and extracting a .wad from it, so naming the actual game file a .zip will often cause unwanted confusion.&lt;br /&gt;
&lt;br /&gt;
* '''The contents of the files inside the ZIP must be identical to the lumps in a WAD.''' This is especially important for graphics. Even though that is the most likely format you will encounter, importing them with a WAD manager will convert them to Doom's internal format. [[XWE]] converts graphics encoded in Doom's internal format to .BMP during export. [[SLumpEd]] can export these graphics as raw Doom lumps. In order for EDGE to recognize graphics as such, they have to be either in Doom's internal format or a supported [[DDFIMAGE|image format]] such as [[PNG]].&lt;br /&gt;
&lt;br /&gt;
* '''Beware of hidden files!''' If you add a full directory, or directory tree, to a EPK, it is possible that unwanted system files (such as Windows' &amp;lt;tt&amp;gt;thumbs.db&amp;lt;/tt&amp;gt; file that tends to be created in any folder containing pictures) will be included as well. They will needlessly increase the file size and can possibly trigger warning messages when loading EDGE. [[Slumped]] frequently crashes when browsing through an EPK's resources, as it expects thumbs.db to be a graphic and obtain incoherent values.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compatibility ==&lt;br /&gt;
Currently the only editors which support this format are [[3DGE Builder|EDGE Builder]], [[Doom Builder]] 2, [[SLumpEd]] and [[Slade]] 3, but of course you can also use any Zip tool available if you do not need access to Doom specific features like texture definitions or graphics offsets.&lt;br /&gt;
&lt;br /&gt;
[[ZDoom]], [[Eternity]], [[Vavoom]] and [[Doomsday]] largely use PK3 files for their resources; '''however their subdirectory organization differ'''. Adapting a mod from one of these ports to work in EDGE may therefore require repackaging, in addition to conversion of enhanced features to their EDGE equivalent. The [[Eternity Engine]], '''which uses the PKE format''', adopted a model mostly similar to ZDoom's, but different enough for incompatibility to be possible in both ways. EDGE is also similar to ZDoom's.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Tips for using ZIPs as WAD replacement]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Guides]]&lt;br /&gt;
[[Category:Technical aspects]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=ANIMS&amp;diff=756</id>
		<title>ANIMS</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=ANIMS&amp;diff=756"/>
				<updated>2019-11-26T05:52:33Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: Minor edits.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
=Animations=&lt;br /&gt;
&lt;br /&gt;
'''Stored in the anims.ddf file or in the DDFANIM data lump.'''&lt;br /&gt;
&lt;br /&gt;
Anims.ddf allows you to change floor and ceiling animations, wall animation sequences, or even graphic animations. Each entry consists of a unique name, enclosed in square brackets, plus a series of commands that specify the first and last frames of the animation, as well as how frequently it changes.&lt;br /&gt;
&lt;br /&gt;
Names should be descriptive, but are used in the map editor when adding animations to your maps, so should be no longer than 8 characters (without spaces).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #f2e0ce; border: 2px solid #bfb1a3; padding: 0.6em; margin-top: 0.8em;&amp;quot;&amp;gt;You can add your own graphics, but they need to be defined in [[IMAGES|DDFIMAGE]] before they can be used properly.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==COMMANDS==&lt;br /&gt;
&lt;br /&gt;
The commands used for animation entries are as follows:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#C8F4FF&amp;quot; &lt;br /&gt;
! &amp;lt;B&amp;gt;COMMAND&amp;lt;/B&amp;gt;&lt;br /&gt;
! &amp;lt;B&amp;gt;TYPE&amp;lt;/B&amp;gt;&lt;br /&gt;
! &amp;lt;B&amp;gt;EXPLANATION&amp;lt;/B&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| TYPE&lt;br /&gt;
| [special] &lt;br /&gt;
| &lt;br /&gt;
Either 'FLAT' for a floor texture animation, or 'TEXTURE' for a wall texture animation.&lt;br /&gt;
|- &lt;br /&gt;
| FIRST&lt;br /&gt;
| [string]&lt;br /&gt;
| &lt;br /&gt;
The first texture in the animation -- Refer to name of entry in wadfile.&lt;br /&gt;
|- &lt;br /&gt;
| LAST&lt;br /&gt;
| [string]&lt;br /&gt;
| &lt;br /&gt;
The last texture in the animation -- Refer to name of entry in wadfile.&lt;br /&gt;
|- &lt;br /&gt;
| SPEED&lt;br /&gt;
| [time] &lt;br /&gt;
| &lt;br /&gt;
The time to display each frame in tics(T). Where 8T is normal Doom speed and 4T is double normal speed.&lt;br /&gt;
|- &lt;br /&gt;
| SEQUENCE&lt;br /&gt;
| [string] &lt;br /&gt;
| &lt;br /&gt;
Use it to specify the full animation sequence.  Names cannot be used twice.  &amp;lt;br&amp;gt;For example: SEQUENCE = TEX1, TEX2, TEX3, TEX5, TEX8;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NOTES=&lt;br /&gt;
The full animation sequence consists of all the flats / textures in the WAD file between the first and last entry.&lt;br /&gt;
&lt;br /&gt;
You should make sure that you don't muddle up your entries in the wad:&lt;br /&gt;
&lt;br /&gt;
'''Correct Order:'''&lt;br /&gt;
*MYANIMA&lt;br /&gt;
*MYANIMB&lt;br /&gt;
*MYANIMC&lt;br /&gt;
&lt;br /&gt;
'''Incorrect Order:''' &lt;br /&gt;
*MYANIMB&lt;br /&gt;
*MYANIMA&lt;br /&gt;
*MYANIMC&lt;br /&gt;
&lt;br /&gt;
If you don't do your flats/ textures properly, EDGE might give you an error message.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also use quotes around names with an underscore in it:&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	[MY_ANIM]&lt;br /&gt;
        TYPE  = FLAT;&lt;br /&gt;
	FIRST = &amp;quot;MY_AN_1&amp;quot;;&lt;br /&gt;
	LAST  = &amp;quot;MY_AN_2&amp;quot;;&lt;br /&gt;
	SPEED = 8T;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you leave out the quotes, DDF converts an underscore to a space, so the&lt;br /&gt;
name MY_AN_1 would be read as &amp;quot;MY AN 1&amp;quot;. The other obvious solution is to&lt;br /&gt;
never use an underscore in texture names you plan on animating.&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;95%&amp;quot; border=&amp;quot;1&amp;quot; frame=&amp;quot;box&amp;quot; cellpadding=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#FFE4B5&amp;quot;&lt;br /&gt;
| &amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt; //Flat Animation Entry &amp;lt;br /&amp;gt;[NUKAGE1] &amp;lt;br /&amp;gt;TYPE = FLAT; &amp;lt;br /&amp;gt;FIRST= &amp;quot;NUKAGE1&amp;quot;; &amp;lt;br /&amp;gt;LAST = &amp;quot;NUKAGE3&amp;quot;; &amp;lt;br /&amp;gt;SPEED=8t; &amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;95%&amp;quot; border=&amp;quot;1&amp;quot; frame=&amp;quot;box&amp;quot; cellpadding=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#FFE4B5&amp;quot;&lt;br /&gt;
| &amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt; //Texture Animation Entry &amp;lt;br /&amp;gt;[BLODGR1] &amp;lt;br /&amp;gt;TYPE = TEXTURE; &amp;lt;br /&amp;gt;FIRST= &amp;quot;BLODGR1&amp;quot;; &amp;lt;br /&amp;gt;LAST = &amp;quot;BLODGR4&amp;quot;; &amp;lt;br /&amp;gt;SPEED=8t; &amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{DDF}}&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Using_ZIPs_as_WAD_replacement&amp;diff=755</id>
		<title>Using ZIPs as WAD replacement</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Using_ZIPs_as_WAD_replacement&amp;diff=755"/>
				<updated>2019-06-14T05:47:43Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: Updated article with more verbosity&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DoomWiki|PK3}}&amp;lt;!-- NOTE: Only v2.1.0 RC-1 and DRDTeam Builds are able to read compressed archives!  --&amp;gt;[[3DGE|EDGE]] allows using several compressed [[archive format]]s instead of the traditional [[WAD]]s. Most notably:&lt;br /&gt;
;[[EPK]]&lt;br /&gt;
:EDGE uses a modified ZIP container named '''EPK''' ('''E'''dge '''P'''a'''K'''), which is the recommended extension for EDGE-specific mods. The main data-file for EDGE now uses this container format ('''edge.epk'''). It is a basically a ZIP/PK3 container renamed so other ports do not accidentally load EPK files.&lt;br /&gt;
&lt;br /&gt;
;{{wp|ZIP_(file_format)|ZIP}}&lt;br /&gt;
:A .zip file used as the container for an EDGE mod is  usually given the '''.pk3 extension''', instead of .zip. While there is no technical differences, this helps avoid potential confusion from users thinking the mod should be extracted from it, and also prevents Windows from presenting it as a directory. EDGE supports several ZIP archiving methods: stored (no compression), shrunk, imploded, {{wp|DEFLATE|deflated}} (the most commonly used), {{wp|bzip2}} and {{wp|LZMA}} algorithms. Note that many ZIP utility only partially implement the ZIP standard and as a result their support is limited to stored and deflated files. This partial implementation also affects some [[editing tools]] which normally support the PK3 format, such as [[3DGE Builder|EDGE Builder]], Doom Builder 2, and [[Slumped]].&lt;br /&gt;
;{{wp|7z}}&lt;br /&gt;
:A .7z file used as the container for a EDGE mod is usually given the .pk7 extension, for similar reasons. This format offers much better compression ratio, however its reduced support, especially by modding utilities, make it less interesting overall. It also increases the memory footprint on the engine, so caution must be taken when choosing between a 7z and a PK3 format. A possibility would be to develop a mod as a PK3, then convert it to a PK7 once finished, to decrease the size of the archive to be distributed. However, keep in mind that decompression is quite slower than for zips, so loading times are increased.&lt;br /&gt;
;[http://quakewiki.org/wiki/.pak PAK]&lt;br /&gt;
: A .PAK file is used as an alternative container for EDGE mods; it follows Quake's PAK convention strictly. This also works for Quake II PAKs, as well as .SIN packfiles. It is nearly functionally identical to the WAD container format.&lt;br /&gt;
: &lt;br /&gt;
Compressed archives have many advantages over PWADs and PAKs, even for storing content for Doom:&lt;br /&gt;
* Smaller file size due to compression&lt;br /&gt;
* Greatly reduced memory usage during play&lt;br /&gt;
* Proper use of directories instead of WAD namespaces&lt;br /&gt;
* You no longer need dedicated WAD management tools like XWE for manipulating your data.&lt;br /&gt;
* More flexibility due to the use of full path names. Currently there is only limited support but it is planned to change everything that references lump names to support full paths.&lt;br /&gt;
&lt;br /&gt;
== How to ==&lt;br /&gt;
You can embed WADs inside ZIPs. Any WAD file found in the root directory will be added to the lump directory as well. This allows loading many of the ZIPs distributed through /idgames without the need to extract them. If several wads are included in an archive, they will be loaded in alphabetical order.&lt;br /&gt;
&lt;br /&gt;
::'''WARNING:''' Loading WAD files inside of a ZIP or a PK3 will cause memory issues to arise. EDGE will unpack each WAD file and use more memory to access the contents. This effect quickly adds up, especially in larger mods (with the exception of map wads in the maps/ folder, provided they follow the format explicitly -- see below). The bigger the mod is, the more likely it may run out of memory during play and crashing EDGE, or for '''memory corruption''' to occur. Thus, it is '''highly''' recommended to completely unpack the entire contents of any WADs inside, or part of the mod, into the sorted directories. &lt;br /&gt;
::'''Furthermore''', EDGE supports and promotes subdirectories under the main ones for sorting purposes (i.e. Sprites/Weapons/Cannon, Sprites/Monsters/Technodemon, etc). No extra effort is needed to indicate the sprites are present, as EDGE automatically scans all subdirectories (though PNG and JPG images will still need to be defined in [[IMAGES|IMAGES.DDF]].&lt;br /&gt;
&lt;br /&gt;
Unlike WADs which do not have a true directory structure, the placement of data within ZIPs is much more strictly enforced in order to allow the engine to recognize it as a default lump. Any special data must be placed in the respective directory inside the ZIP or it will not be found. For the [[lump]] name, the first 8 characters of the file name are used, the extension is stripped. So for example, to place a [[COAL Manual|COALHUD]] into a ZIP file, you have to name your file '''coalhud1.TXT''', '''COALHUD1.LMP''' (or whatever extension you like) and place it in '''&amp;quot;./scripts&amp;quot;'''. The following sub directories are used to assign data to the existing WAD [[namespace]]s in EDGE:&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}} style=&amp;quot;font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Directory''' || '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;lt;s&amp;gt;acs/&amp;lt;/s&amp;gt;''' || &amp;lt;s&amp;gt;contains [[Libraries|ACS libraries]] normally found between '''A_START''' and '''A_END'''&amp;lt;/s&amp;gt; '''''Not yet implemented!'''''&lt;br /&gt;
|-&lt;br /&gt;
| '''cameras/''' || contains [[CAMDAT]] files for [[CAMERA-MAN_Manual|camera-man]] scripts.&lt;br /&gt;
|-&lt;br /&gt;
| '''colormaps/''' || contains [[Boom]] and [[3DGE|EDGE]] colormaps normally found between '''C_START''' and '''C_END'''.&lt;br /&gt;
|-&lt;br /&gt;
| '''doom_ddf/''' &lt;br /&gt;
'''her_ddf/''' '''wolf_ddf/''' &lt;br /&gt;
&lt;br /&gt;
'''rott_ddf/''' &lt;br /&gt;
|| ''OPTIONAL!'' Can contain all [[DDF]], [[RTS]], and [[COAL]] scripts here. This is not explicitly needed however, since they can be added in the root directory of the ZIP all the same. These folders also exists in the root EDGE directory by default, so this is only needed if you do not want to reference your script files externally. It is recommended to use the '''/scripts''' namespace instead as EDGE will automatically use /scripts instead of the default external DDF directories.&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;lt;s&amp;gt;filter/&amp;lt;/s&amp;gt;''' || &amp;lt;s&amp;gt;{{new}} contains lumps and directories that will only be loaded with specific games.&amp;lt;/s&amp;gt; '''Not yet implemented!'''&lt;br /&gt;
|-&lt;br /&gt;
| '''flats/''' || contains [[flat]]s normally found between '''FF_START''' and '''FF_END'''&lt;br /&gt;
|-&lt;br /&gt;
| '''graphics/''' || All special graphics like title pictures or font characters must go here. ''This namespace does not exist in WADs.''&lt;br /&gt;
|-&lt;br /&gt;
| '''hires/''' || contains high-resolution textures normally found between [[HI_START]] and [[HI_END]]&lt;br /&gt;
|-&lt;br /&gt;
| '''maps/''' || contains levels in form of WADs. These WADs must only contain the data for one single level (including GL nodes lumps if required). Any other data in such a WAD will be ignored. Note that the file name and not the map label inside the WAD determines how the map is named in the game, unless otherwise specified by [[LEVELS|Levels.DDF]]. EDGE will automatically build the GL nodes via glBSP if a map is found.&lt;br /&gt;
|-&lt;br /&gt;
| '''models/''' || contains [[MD2]], [[MD3]], or [[MD5]] models. ''This namespace does not exist in WADs''.&lt;br /&gt;
|-&lt;br /&gt;
| '''music/''' || contains all data that is used as music. ''This namespace does not exist in WADs.''&lt;br /&gt;
|-&lt;br /&gt;
| '''patches/''' || contains [[patch]]es normally found between '''PP_START''' and '''PP_END'''&lt;br /&gt;
|-&lt;br /&gt;
| '''scripts/''' || contains [[DDF]]/[[RTS]]/[[COAL]] script files. They can be named by their 8 character name, or their full names  as seen in EDGE's root directory, under /doom_ddf.&lt;br /&gt;
|-&lt;br /&gt;
| '''skins/''' || contains all skins to be loaded for 3D models. ''This namespace does not exist in WADs.''&lt;br /&gt;
|-&lt;br /&gt;
| '''sounds/''' || contains all sound files that are referenced by [[SOUNDS|DDFSFX]]. ''This namespace does not exist in WADs.''&lt;br /&gt;
|-&lt;br /&gt;
| '''sprites/''' || contains [[sprite]]s normally found between '''[[S_START]]''' and '''[[S_END]]''' (also known as '''SS_START''', '''SS_END''')&lt;br /&gt;
|-&lt;br /&gt;
| '''textures/''' || contains [[texture]]s normally found between [[TX_START]] and [[TX_END]]&lt;br /&gt;
|-&lt;br /&gt;
| '''voices/''' || contains ''[[Strife]]'' dialog sounds normally found between '''V_START''' and '''V_END'''&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;lt;s&amp;gt;voxels/&amp;lt;/s&amp;gt;''' || &amp;lt;s&amp;gt;contains [[voxel]] objects normally found between '''VX_START''' and '''VX_END'''&amp;lt;/s&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;code&amp;gt;(Note: Any lump found in the root directory is added to the global namespace.)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
* [https://github.com/sirjuddington/SLADE SLADE] or similar programs are recommended for creating the actual .zip file, to ensure programs like WinZIP or WinRAR do not create them with unsupported file compression. Otherwise, they may appear to be damaged, which may hinder modifications of the epk with SLADE, Slumped, etc.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/sirjuddington/SLADE SLADE] is also capable of creating the .epk file directly, where WinZIP and WinRAR cannot; WinRAR/7Z can still open epks though.&lt;br /&gt;
&lt;br /&gt;
* The ZIP file's directory is sorted alphabetically before adding it to the lump directory; any WAD files in the .zip are then loaded afterwards. Keep that in mind when creating data that relies on file name ordering. For most things, there is no need to depend on ordering, with the exception of texture animations of type ''range'' that animate textures from the flats/ or textures/ subdirectories.&lt;br /&gt;
&lt;br /&gt;
* Any file not in one of the reserved directories is not added to the WAD directory and can only be used by code that looks for full path names. Currently that is only the music code but it will be gradually extended so that everything that references a lump name can do it.&lt;br /&gt;
&lt;br /&gt;
* Sprite lumps for the '''\''' frame in a WAD (such as '''VILE\*''' for one of the Arch-Vile's healing frames) can be put in a ZIP file, the backslash character just has to be changed to a caret character ('''^'''). So, '''VILE^1''' to '''VILE^8''' in a ZIP file will be interpreted as the '''VILE\1''' to '''VILE\8''' lumps. This replacement only works for sprites, any other lump name should not contain backslashes anywhere. As it is possible to use multiple sprite names for an actor with [[DDF]], frames beyond '''Z''' need not be used however.&lt;br /&gt;
&lt;br /&gt;
* '''It is ''strongly'' recommended to use the .EPK extension, not .zip, when creating a file meant to be loaded directly into EDGE'''. The average user is used to opening a .zip file and extracting a .wad from it, so naming the actual game file a .zip will often cause unwanted confusion.&lt;br /&gt;
&lt;br /&gt;
* '''The contents of the files inside the ZIP must be identical to the lumps in a WAD.''' This is especially important for graphics. '''EDGE does not read .BMP files!''' Even though that is the most likely format you will encounter, importing them with a WAD manager will convert them to Doom's internal format. [[XWE]] converts graphics encoded in Doom's internal format to .BMP during export. [[SLumpEd]] can export these graphics as raw Doom lumps. In order for EDGE to recognize graphics as such, they have to be either in Doom's internal format or a supported [[image format]] such as [[PNG]].&lt;br /&gt;
&lt;br /&gt;
* '''Beware of hidden files!''' If you add a full directory, or directory tree, to a EPK, it is possible that unwanted system files (such as Windows' &amp;lt;tt&amp;gt;thumbs.db&amp;lt;/tt&amp;gt; file that tends to be created in any folder containing pictures) will be included as well. They will needlessly increase the file size and can possibly trigger warning messages when loading EDGE. [[Slumped]] frequently crashes when browsing through an EPK's resources, as it expects thumbs.db to be a graphic and obtain incoherent values.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compatibility ==&lt;br /&gt;
Currently the only editors which support this format are [[3DGE Builder|EDGE Builder]], [[Doom Builder]] 2, [[SLumpEd]] and [[Slade]] 3, but of course you can also use any Zip tool available if you do not need access to Doom specific features like texture definitions or graphics offsets.&lt;br /&gt;
&lt;br /&gt;
[[ZDoom]], [[Eternity]], [[Vavoom]] and [[Doomsday]] largely use PK3 files for their resources; '''however their subdirectory organization differ'''. Adapting a mod from one of these ports to work in EDGE may therefore require repackaging, in addition to conversion of enhanced features to their EDGE equivalent. The [[Eternity Engine]], '''which uses the PKE format''', adopted a model mostly similar to ZDoom's, but different enough for incompatibility to be possible in both ways. EDGE is also similar to ZDoom's.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Tips for using ZIPs as WAD replacement]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Guides]]&lt;br /&gt;
[[Category:Technical aspects]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Improving_Performance&amp;diff=754</id>
		<title>Improving Performance</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Improving_Performance&amp;diff=754"/>
				<updated>2018-12-10T05:03:27Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: Small stub for AMD Radeon users&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you have installed '''EDGE''' and are still getting performance penalties, this is the page for you. Below are some tips for managing and, in most ways, increasing performance of the engine on your computer.&lt;br /&gt;
&lt;br /&gt;
== Low Framerate? ==&lt;br /&gt;
If you are suffering from a low framerate and are on a desktop with a video card (i.e. not integrated graphics), here are some things to try.&lt;br /&gt;
&lt;br /&gt;
=== AMD Radeon Users: ===&lt;br /&gt;
* Update your drivers - '''this is critical'''.&lt;br /&gt;
* If you've already updated, check your configuration in EDGE. In particular, play with the vsync and shader settings (viewable by typing in 'showvars' in the console). If those are correct and you have a fairly decent video card, this is almost certainly a driver issue.&lt;br /&gt;
&lt;br /&gt;
Open your Radeon Settings from the taskbar, and add 'EDGE' to your Gaming tab (found on the bottom). Once you have the ''''EDGE.exe'''&amp;lt;nowiki/&amp;gt;' loaded, you will see a screen similar to below:&lt;br /&gt;
[[File:AMD Settings.png|center|thumb|&amp;lt;code&amp;gt;Match your settings to ours found above&amp;lt;/code&amp;gt;&lt;br /&gt;
''(using a 4GB Radeon RX580)''&lt;br /&gt;
]]&lt;br /&gt;
'''Make sure the following settings match those above'''. The entries highlighted in '''BOLD''' are the ones you need to make sure are checked/enabled, '''especially ''OpenGL Triple Buffering'''''&amp;lt;nowiki/&amp;gt;'':''&lt;br /&gt;
* '''Anti-aliasing mode''': Enhance application settings&lt;br /&gt;
* '''Anti-aliasing method''': Adaptive multisampling&lt;br /&gt;
* Morphological Filtering: Off&lt;br /&gt;
* '''Anisotropic Filtering Mode''': Override application settings&lt;br /&gt;
* '''Anisotropic Filtering Level''': 4x&lt;br /&gt;
* '''Texture Filtering Quality''': Performance&lt;br /&gt;
* '''Surface Format Optimization''': On&lt;br /&gt;
* Wait for Vertical Refresh: Always off&lt;br /&gt;
* '''OpenGL Triple Buffering''': On&lt;br /&gt;
* Shader Cache: AMD optimized&lt;br /&gt;
* Tessellation Mode: AMD optimized&lt;br /&gt;
* AMD FreeSync: AMD optimized&lt;br /&gt;
* Frame Rate Target Control: Disabled&lt;br /&gt;
&lt;br /&gt;
Once those are saved, you can close/minimize the application, and re-launch EDGE. If everything went according to plan, your frame-rate (viewable by typing in '''idinfo''&amp;lt;nowiki/&amp;gt;' in-game) should jump from 40~50 to 178 or higher! The game engine will run much smoother and vsync will work as intended, even with shaders enabled.&lt;br /&gt;
&lt;br /&gt;
Check back here for more tips on improving performance!&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=File:AMD_Settings.png&amp;diff=753</id>
		<title>File:AMD Settings.png</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=File:AMD_Settings.png&amp;diff=753"/>
				<updated>2018-12-10T04:29:04Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Settings snapshot for EDGE&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Improving_Performance&amp;diff=752</id>
		<title>Improving Performance</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Improving_Performance&amp;diff=752"/>
				<updated>2018-12-10T04:25:07Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: Created page with &amp;quot;If you have installed EDGE and are still getting performance penalties, this is the page for you. Below are some tips for managing and in most ways, increasing performance of...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you have installed EDGE and are still getting performance penalties, this is the page for you. Below are some tips for managing and in most ways, increasing performance of the engine on your computer.&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Installation_and_execution_of_3DGE&amp;diff=751</id>
		<title>Installation and execution of 3DGE</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Installation_and_execution_of_3DGE&amp;diff=751"/>
				<updated>2018-11-12T23:35:25Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== How to install EDGE under Windows ==&lt;br /&gt;
&amp;lt;!-- If you are not using Windows, please see the Install Guides for Linux or MacOSX! --&amp;gt;&amp;lt;code&amp;gt;This is a short guide on how to install EDGE under Windows.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;For users running Windows XP, '''you will only be able to run the x86 builds of EDGE!'''&amp;lt;/u&amp;gt; &lt;br /&gt;
# Download and Install the newest version of EDGE ('''stable''': {{latestS}}, '''devbuilds''': {{latestT}}).&lt;br /&gt;
# Extract all files from 7Z/RAR to a new directory.&lt;br /&gt;
# Use a [[compatible IWAD]]. If two DOOM IWADS are found, EDGE will load them in order and only one at a time, starting with DOOM II. However, you can also load DOOM and DOOM II together and play them in one contained session. &amp;lt;!--  While this works in good faith with DOOM and DOOM II/TNT/PLUTONIA, it will not work correctly with HERETIC. Per Se, it will attempt to load all data together. This can be used to play DOOM's game inside of Heretic, and vice versa, though with unexpected results. Alternatively, you can set the DOOMWADDIR environment variable to point to the directory in which the IWADs are kept. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to start EDGE ==&lt;br /&gt;
&lt;br /&gt;
*'''Depending on what version of EDGE you have, the executable name might be different. Starting with 1.36F, the name will always be &amp;quot;EDGE&amp;quot;.exe'''.&lt;br /&gt;
&lt;br /&gt;
To play an unmodified game, simply double-click EDGE.exe, or a shortcut to it, or call it from a command line.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- These methods are for Windows; for Linux or Mac OS X you will have to extrapolate. --&amp;gt;For playing mods, you need to tell EDGE to load the relevant mod files. Since EDGE does not integrate a front end for choosing mods, the following are just a series of standard methods to open an executable with one or several files as parameters. &lt;br /&gt;
===Using a front-end===&lt;br /&gt;
&lt;br /&gt;
This might be the best method. Select a [[frontend]] and install it. Instead of starting EDGE directly, start the frontend. This will let you select which mod to load and set additional [[command line parameters]] as well. Said front-end should come with documentation.&lt;br /&gt;
&lt;br /&gt;
=== Drag-and-drop ===&lt;br /&gt;
&lt;br /&gt;
The simplest method. Select the mod files to load, and then drag and drop them over EDGE's executable. If the mod files are not in the same directory as EDGE, you will need to open a file manager window in each directory. You can also drag the mod file over a shortcut to the EDGE executable.&lt;br /&gt;
&lt;br /&gt;
=== Send to ===&lt;br /&gt;
&lt;br /&gt;
Add a shortcut to EDGE in your SendTo folder. Depending on the version of Windows you use, the path to the &amp;lt;code&amp;gt;SendTo&amp;lt;/code&amp;gt; folder may differ. In XP, it is in ''C:\Documents and Settings\&amp;lt;userid&amp;gt;\SendTo''. In Vista or 7, it is in ''%APPDATA%\Microsoft\Windows\SendTo''.&lt;br /&gt;
&lt;br /&gt;
Simply add a shortcut to EDGE in that folder, and now you can right-click-&amp;gt;send to-&amp;gt;EDGE any file you want. You can edit the shortcut to add command line parameters to it as well.&lt;br /&gt;
&lt;br /&gt;
Note that you may need to set Windows Explorer to show hidden and system files for it to accept to show you the SendTo folder.&lt;br /&gt;
&lt;br /&gt;
=== Open with ===&lt;br /&gt;
&lt;br /&gt;
In Windows Explorer, select Tools -&amp;gt; Folder Options, then under &amp;quot;File Types&amp;quot; associate the file types wad with EDGE.exe. (If .wad is not listed in the &amp;quot;Extension&amp;quot; column, click on &amp;quot;New&amp;quot; to create it.) Once this is done, you can double-click on a wad file and it'll launch EDGE with that file automatically. If the file type is associated with several programs (for example, EDGE and other source ports), then use right-click -&amp;gt; Open With to select EDGE.&lt;br /&gt;
&lt;br /&gt;
=== Shell extension ===&lt;br /&gt;
&lt;br /&gt;
You can create shell extensions in Windows Explorer to make new context menu entries. As for the &amp;quot;Open With&amp;quot; method, select Tools -&amp;gt; Folder Options, then under 'File Types', select the wad extension (if it is not already present, create it), then click on &amp;quot;Advanced&amp;quot; near it. Click &amp;quot;New...&amp;quot; to create a new action. In the &amp;quot;Action&amp;quot; field, describe what you want the shell extension to display, for example, &amp;quot;Play with EDGE&amp;quot;. In the &amp;quot;Application used to perform action&amp;quot; field, place an instruction for the shell extension to activate, with the full path to EDGE.exe (between quotes if there are spaces in a directory name), followed by -file &amp;quot;%1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Right clicking on WAD files should now list whatever you marked earlier in the Action field, and should perform the action listed in the second field. Again, you will have to do this for each file type.&lt;br /&gt;
&lt;br /&gt;
=== With the command line ===&lt;br /&gt;
&lt;br /&gt;
A simple command line window can be shown with Start-&amp;gt;Run (or the Windows key + R keyboard shortcut). Click on &amp;quot;Browse&amp;quot; to find EDGE.exe, and then you can add command line parameters as needed; for example to load &amp;quot;foobar.wad&amp;quot; from the same directory, simply add &amp;quot;foobar.wad&amp;quot; after EDGE.exe on that command line.&lt;br /&gt;
&lt;br /&gt;
Another possibility is to open a command line window. With Vista or 7, hold shift while right-clicking in an empty area of the EDGE folder, or on the EDGE folder itself. The &amp;quot;Open command window here&amp;quot; option will appear. You can now type your command line with the appropriate parameters, as explained above.&lt;br /&gt;
&lt;br /&gt;
=== With batch files ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Note that you may need to set Windows Explorer not to hide known file extensions in order to actually change a text file's extension from .txt to .bat. --&amp;gt;You can create batch files for combinations of mods and other command line parameters that you use often. Just type the command line in a text file, rename it with a .bat extension, and then you can double-click on the batch file. &lt;br /&gt;
=== DOOMWADPATH, DOOMWADDIR ===&lt;br /&gt;
EDGE supports those naming conventions so you don't need the IWAD in the directory to play the game.&lt;br /&gt;
&lt;br /&gt;
=== Logfile ===&lt;br /&gt;
&lt;br /&gt;
When EDGE begins to load it sets up the required environment and checks for possible errors. You can see remnants of this in the [[console]] when the '''''TITLEPIC''''' is displayed.&lt;br /&gt;
&lt;br /&gt;
To access this log,&lt;br /&gt;
* Open up [[EDGE2.LOG]] for general information. &lt;br /&gt;
* For advanced users, [[DEBUG.txt]] is also generated.&lt;br /&gt;
&lt;br /&gt;
== DDF Folder Setup  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- NOTE: Supported games each have their own DDF folders (doom_ddf, her_ddf, rott_ddf, etc)! --&amp;gt;When EDGE is extracted, you will notice that there are a few folders, suffixed with '''_ddf'''. These folders tell EDGE how to load all of the [[Doom Definition File]], [[Radius Trigger Script]], and [[COAL Manual|COAL]] gamecode. &lt;br /&gt;
&lt;br /&gt;
Some mods have their Data embedded in the WADfile or Archive, or in another folder not named &amp;quot;''doom_ddf''&amp;quot;. The mods that ''do not'' do this will need their doom_ddf folders renamed. Alternatively, you can set the path of your (original or modified) DDF files with the [[-DDF]] parameter. &lt;br /&gt;
&lt;br /&gt;
Regardless, EDGE will need access to the original ddf folders at all times, unless the mod is a [[Total Conversion]] or a separate game, which incorporates what EDGE needs at run-time. Alternatively, you can self-contain the script [[LUMPS]].&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Installation_and_execution_of_3DGE&amp;diff=750</id>
		<title>Installation and execution of 3DGE</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Installation_and_execution_of_3DGE&amp;diff=750"/>
				<updated>2018-11-12T23:33:24Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== &amp;lt;!-- If you are not using Windows, please see the Install Guides for Linux or MacOSX! --&amp;gt;How to install EDGE under Windows ==&lt;br /&gt;
&amp;lt;code&amp;gt;This is a short guide on how to install EDGE under Windows.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;For users running Windows XP, '''you will only be able to run the x86 builds of EDGE!'''&amp;lt;/u&amp;gt; &lt;br /&gt;
# Download and Install the newest version of EDGE ('''stable''': {{latestS}}, '''devbuilds''': {{latestT}}).&lt;br /&gt;
# Extract all files from 7Z/RAR to a new directory.&lt;br /&gt;
# Use a [[compatible IWAD]]. If two DOOM IWADS are found, EDGE will load them in order and only one at a time, starting with DOOM II. However, you can also load DOOM and DOOM II together and play them in one contained session. &amp;lt;!--  While this works in good faith with DOOM and DOOM II/TNT/PLUTONIA, it will not work correctly with HERETIC. Per Se, it will attempt to load all data together. This can be used to play DOOM's game inside of Heretic, and vice versa, though with unexpected results. Alternatively, you can set the DOOMWADDIR environment variable to point to the directory in which the IWADs are kept. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to start EDGE ==&lt;br /&gt;
&lt;br /&gt;
*'''Depending on what version of EDGE you have, the executable name might be different. Starting with 1.36F, the name will always be &amp;quot;EDGE&amp;quot;.exe'''.&lt;br /&gt;
&lt;br /&gt;
To play an unmodified game, simply double-click EDGE.exe, or a shortcut to it, or call it from a command line.&lt;br /&gt;
&lt;br /&gt;
For playing mods, you need to tell EDGE to load the relevant mod files. Since EDGE does not integrate a front end for choosing mods, the following are just a series of standard methods to open an executable with one or several files as parameters. &amp;lt;!-- These methods are for Windows; for Linux or Mac OS X you will have to extrapolate. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using a front-end===&lt;br /&gt;
&lt;br /&gt;
This might be the best method. Select a [[frontend]] and install it. Instead of starting EDGE directly, start the frontend. This will let you select which mod to load and set additional [[command line parameters]] as well. Said front-end should come with documentation.&lt;br /&gt;
&lt;br /&gt;
=== Drag-and-drop ===&lt;br /&gt;
&lt;br /&gt;
The simplest method. Select the mod files to load, and then drag and drop them over EDGE's executable. If the mod files are not in the same directory as EDGE, you will need to open a file manager window in each directory. You can also drag the mod file over a shortcut to the EDGE executable.&lt;br /&gt;
&lt;br /&gt;
=== Send to ===&lt;br /&gt;
&lt;br /&gt;
Add a shortcut to EDGE in your SendTo folder. Depending on the version of Windows you use, the path to the &amp;lt;code&amp;gt;SendTo&amp;lt;/code&amp;gt; folder may differ. In XP, it is in ''C:\Documents and Settings\&amp;lt;userid&amp;gt;\SendTo''. In Vista or 7, it is in ''%APPDATA%\Microsoft\Windows\SendTo''.&lt;br /&gt;
&lt;br /&gt;
Simply add a shortcut to EDGE in that folder, and now you can right-click-&amp;gt;send to-&amp;gt;EDGE any file you want. You can edit the shortcut to add command line parameters to it as well.&lt;br /&gt;
&lt;br /&gt;
Note that you may need to set Windows Explorer to show hidden and system files for it to accept to show you the SendTo folder.&lt;br /&gt;
&lt;br /&gt;
=== Open with ===&lt;br /&gt;
&lt;br /&gt;
In Windows Explorer, select Tools -&amp;gt; Folder Options, then under &amp;quot;File Types&amp;quot; associate the file types wad with EDGE.exe. (If .wad is not listed in the &amp;quot;Extension&amp;quot; column, click on &amp;quot;New&amp;quot; to create it.) Once this is done, you can double-click on a wad file and it'll launch EDGE with that file automatically. If the file type is associated with several programs (for example, EDGE and other source ports), then use right-click -&amp;gt; Open With to select EDGE.&lt;br /&gt;
&lt;br /&gt;
=== Shell extension ===&lt;br /&gt;
&lt;br /&gt;
You can create shell extensions in Windows Explorer to make new context menu entries. As for the &amp;quot;Open With&amp;quot; method, select Tools -&amp;gt; Folder Options, then under 'File Types', select the wad extension (if it is not already present, create it), then click on &amp;quot;Advanced&amp;quot; near it. Click &amp;quot;New...&amp;quot; to create a new action. In the &amp;quot;Action&amp;quot; field, describe what you want the shell extension to display, for example, &amp;quot;Play with EDGE&amp;quot;. In the &amp;quot;Application used to perform action&amp;quot; field, place an instruction for the shell extension to activate, with the full path to EDGE.exe (between quotes if there are spaces in a directory name), followed by -file &amp;quot;%1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Right clicking on WAD files should now list whatever you marked earlier in the Action field, and should perform the action listed in the second field. Again, you will have to do this for each file type.&lt;br /&gt;
&lt;br /&gt;
=== With the command line ===&lt;br /&gt;
&lt;br /&gt;
A simple command line window can be shown with Start-&amp;gt;Run (or the Windows key + R keyboard shortcut). Click on &amp;quot;Browse&amp;quot; to find EDGE.exe, and then you can add command line parameters as needed; for example to load &amp;quot;foobar.wad&amp;quot; from the same directory, simply add &amp;quot;foobar.wad&amp;quot; after EDGE.exe on that command line.&lt;br /&gt;
&lt;br /&gt;
Another possibility is to open a command line window. With Vista or 7, hold shift while right-clicking in an empty area of the EDGE folder, or on the EDGE folder itself. The &amp;quot;Open command window here&amp;quot; option will appear. You can now type your command line with the appropriate parameters, as explained above.&lt;br /&gt;
&lt;br /&gt;
=== With batch files ===&lt;br /&gt;
&lt;br /&gt;
You can create batch files for combinations of mods and other command line parameters that you use often. Just type the command line in a text file, rename it with a .bat extension, and then you can double-click on the batch file. &amp;lt;!-- Note that you may need to set Windows Explorer not to hide known file extensions in order to actually change a text file's extension from .txt to .bat. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DOOMWADPATH, DOOMWADDIR ===&lt;br /&gt;
EDGE supports those naming conventions so you don't need the IWAD in the directory to play the game.&lt;br /&gt;
&lt;br /&gt;
=== Logfile ===&lt;br /&gt;
&lt;br /&gt;
When EDGE begins to load it sets up the required environment and checks for possible errors. You can see remnants of this in the [[console]] when the '''''TITLEPIC''''' is displayed.&lt;br /&gt;
&lt;br /&gt;
To access this log,&lt;br /&gt;
* Open up [[EDGE2.LOG]] for general information. &lt;br /&gt;
* For advanced users, [[DEBUG.txt]] is also generated.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;!-- NOTE: Supported games each have their own DDF folders (doom_ddf, her_ddf, rott_ddf, etc)! --&amp;gt;DDF Folder Setup  ==&lt;br /&gt;
&lt;br /&gt;
When EDGE is extracted, you will notice that there are a few folders, suffixed with '''_ddf'''. These folders tell EDGE how to load all of the [[Doom Definition File]], [[Radius Trigger Script]], and [[COAL Manual|COAL]] gamecode. &lt;br /&gt;
&lt;br /&gt;
Some mods have their Data embedded in the WADfile or Archive, or in another folder not named &amp;quot;''doom_ddf''&amp;quot;. The mods that ''do not'' do this will need their doom_ddf folders renamed. Alternatively, you can set the path of your (original or modified) DDF files with the [[-DDF]] parameter. &lt;br /&gt;
&lt;br /&gt;
Regardless, EDGE will need access to the original ddf folders at all times, unless the mod is a [[Total Conversion]] or a separate game, which incorporates what EDGE needs at run-time. Alternatively, you can self-contain the script [[LUMPS]].&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Andy_Baker_(darkknight)&amp;diff=749</id>
		<title>Andy Baker (darkknight)</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Andy_Baker_(darkknight)&amp;diff=749"/>
				<updated>2018-11-12T23:31:51Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: Created page with &amp;quot;'''Andrew Baker''' (also known as '''darkknight''' or '''AndrewB''') is a developer who worked on DOSDoom and EDGE. He is notable for working with Chi Hoang in the...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Andrew Baker''' (also known as '''darkknight''' or '''AndrewB''') is a developer who worked on [[DOSDoom]] and [[EDGE]]. He is notable for working with [[Chi Hoang]] in the development of the DOSDoom source port, and later, spearheading EDGE alongside [[Andrew Apted]]. He officially retired from the EDGE project in 2010.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://edge.sourceforge.net/ EDGE Home]&lt;br /&gt;
* [https://www.doomworld.com/profile/5-andrewb/ Doomworld Profile]&lt;br /&gt;
* [https://github.com/3dfxdev/hyper3DGE/blob/master/log/andy.log/ EDGE Development Log]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Baker, Andrew}}&lt;br /&gt;
[[Category:Programmers]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Installation_and_execution_of_3DGE&amp;diff=748</id>
		<title>Installation and execution of 3DGE</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Installation_and_execution_of_3DGE&amp;diff=748"/>
				<updated>2018-11-12T23:30:46Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: Several changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== &amp;lt;!-- If you are not using Windows, please see the Install Guides for Linux or MacOSX! --&amp;gt;How to install EDGE under Windows ==&lt;br /&gt;
&amp;lt;code&amp;gt;This is a short guide on how to install EDGE under Windows.&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;For users running Windows XP, '''you will only be able to run the x86 builds of EDGE!'''&amp;lt;/u&amp;gt; &lt;br /&gt;
# Download and Install the newest version of EDGE ('''stable''': {{latestS}}, '''devbuilds''': {{latestT}}).&lt;br /&gt;
# Extract all files from 7Z/RAR to a new directory.&lt;br /&gt;
# Use a [[compatible IWAD]]. If two DOOM IWADS are found, EDGE will load them in order and only one at a time, starting with DOOM II. However, you can also load DOOM and DOOM II together and play them in one contained session. &amp;lt;!--  While this works in good faith with DOOM and DOOM II/TNT/PLUTONIA, it will not work correctly with HERETIC. Per Se, it will attempt to load all data together. This can be used to play DOOM's game inside of Heretic, and vice versa, though with unexpected results. Alternatively, you can set the DOOMWADDIR environment variable to point to the directory in which the IWADs are kept. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to start EDGE ==&lt;br /&gt;
&lt;br /&gt;
*'''Depending on what version of EDGE you have, the executable name might be different. Starting with 1.36F, the name will always be &amp;quot;EDGE&amp;quot;.exe'''.&lt;br /&gt;
&lt;br /&gt;
To play an unmodified game, simply double-click EDGE.exe, or a shortcut to it, or call it from a command line.&lt;br /&gt;
&lt;br /&gt;
For playing mods, you need to tell EDGE to load the relevant mod files. Since EDGE does not integrate a front end for choosing mods, the following are just a series of standard methods to open an executable with one or several files as parameters. &amp;lt;!-- These methods are for Windows; for Linux or Mac OS X you will have to extrapolate. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using a front-end===&lt;br /&gt;
&lt;br /&gt;
This might be the best method. Select a [[frontend]] and install it. Instead of starting EDGE directly, start the frontend. This will let you select which mod to load and set additional [[command line parameters]] as well. Said front-end should come with documentation.&lt;br /&gt;
&lt;br /&gt;
=== Drag-and-drop ===&lt;br /&gt;
&lt;br /&gt;
The simplest method. Select the mod files to load, and then drag and drop them over EDGE's executable. If the mod files are not in the same directory as EDGE, you will need to open a file manager window in each directory. You can also drag the mod file over a shortcut to the EDGE executable.&lt;br /&gt;
&lt;br /&gt;
=== Send to ===&lt;br /&gt;
&lt;br /&gt;
Add a shortcut to EDGE in your SendTo folder. Depending on the version of Windows you use, the path to the &amp;lt;code&amp;gt;SendTo&amp;lt;/code&amp;gt; folder may differ. In XP, it is in ''C:\Documents and Settings\&amp;lt;userid&amp;gt;\SendTo''. In Vista or 7, it is in ''%APPDATA%\Microsoft\Windows\SendTo''.&lt;br /&gt;
&lt;br /&gt;
Simply add a shortcut to EDGE in that folder, and now you can right-click-&amp;gt;send to-&amp;gt;EDGE any file you want. You can edit the shortcut to add command line parameters to it as well.&lt;br /&gt;
&lt;br /&gt;
Note that you may need to set Windows Explorer to show hidden and system files for it to accept to show you the SendTo folder.&lt;br /&gt;
&lt;br /&gt;
=== Open with ===&lt;br /&gt;
&lt;br /&gt;
In Windows Explorer, select Tools -&amp;gt; Folder Options, then under &amp;quot;File Types&amp;quot; associate the file types wad with EDGE.exe. (If .wad is not listed in the &amp;quot;Extension&amp;quot; column, click on &amp;quot;New&amp;quot; to create it.) Once this is done, you can double-click on a wad file and it'll launch EDGE with that file automatically. If the file type is associated with several programs (for example, EDGE and other source ports), then use right-click -&amp;gt; Open With to select EDGE.&lt;br /&gt;
&lt;br /&gt;
=== Shell extension ===&lt;br /&gt;
&lt;br /&gt;
You can create shell extensions in Windows Explorer to make new context menu entries. As for the &amp;quot;Open With&amp;quot; method, select Tools -&amp;gt; Folder Options, then under 'File Types', select the wad extension (if it is not already present, create it), then click on &amp;quot;Advanced&amp;quot; near it. Click &amp;quot;New...&amp;quot; to create a new action. In the &amp;quot;Action&amp;quot; field, describe what you want the shell extension to display, for example, &amp;quot;Play with EDGE&amp;quot;. In the &amp;quot;Application used to perform action&amp;quot; field, place an instruction for the shell extension to activate, with the full path to EDGE.exe (between quotes if there are spaces in a directory name), followed by -file &amp;quot;%1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Right clicking on WAD files should now list whatever you marked earlier in the Action field, and should perform the action listed in the second field. Again, you will have to do this for each file type.&lt;br /&gt;
&lt;br /&gt;
=== With the command line ===&lt;br /&gt;
&lt;br /&gt;
A simple command line window can be shown with Start-&amp;gt;Run (or the Windows key + R keyboard shortcut). Click on &amp;quot;Browse&amp;quot; to find EDGE.exe, and then you can add command line parameters as needed; for example to load &amp;quot;foobar.wad&amp;quot; from the same directory, simply add &amp;quot;foobar.wad&amp;quot; after EDGE.exe on that command line.&lt;br /&gt;
&lt;br /&gt;
Another possibility is to open a command line window. With Vista or 7, hold shift while right-clicking in an empty area of the EDGE folder, or on the EDGE folder itself. The &amp;quot;Open command window here&amp;quot; option will appear. You can now type your command line with the appropriate parameters, as explained above.&lt;br /&gt;
&lt;br /&gt;
=== With batch files ===&lt;br /&gt;
&lt;br /&gt;
You can create batch files for combinations of mods and other command line parameters that you use often. Just type the command line in a text file, rename it with a .bat extension, and then you can double-click on the batch file. &amp;lt;!-- Note that you may need to set Windows Explorer not to hide known file extensions in order to actually change a text file's extension from .txt to .bat. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DOOMWADPATH, DOOMWADDIR ===&lt;br /&gt;
EDGE supports those naming conventions so you don't need the IWAD in the directory to play the game.&lt;br /&gt;
&lt;br /&gt;
=== Logfile ===&lt;br /&gt;
&lt;br /&gt;
When EDGE begins to load it sets up the required environment and checks for possible errors. You can see remnants of this in the [[console]] when the '''''TITLEPIC''''' is displayed.&lt;br /&gt;
&lt;br /&gt;
To access this log,&lt;br /&gt;
* Open up [[EDGE2.LOG]] for general information. &lt;br /&gt;
* For advanced users, [[DEBUG.txt]] is also generated.&lt;br /&gt;
&lt;br /&gt;
== DDF Folder Setup &amp;lt;!-- NOTE: Supported games each have their own DDF folders (doom_ddf, her_ddf, rott_ddf, etc)! --&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
When EDGE is extracted, you will notice that there are a few folders, suffixed with '''_ddf'''. These folders tell EDGE how to load all of the [[Doom Definition File]], [[Radius Trigger Script]], and [[COAL Manual|COAL]] gamecode. &lt;br /&gt;
&lt;br /&gt;
Some mods have their Data embedded in the WADfile or Archive, or in another folder not named &amp;quot;''doom_ddf''&amp;quot;. The mods that ''do not'' do this will need their doom_ddf folders renamed. Alternatively, you can set the path of your (original or modified) DDF files with the [[-DDF]] parameter. &lt;br /&gt;
&lt;br /&gt;
Regardless, EDGE will need access to the original ddf folders at all times, unless the mod is a [[Total Conversion]] or a separate game, which incorporates what EDGE needs at run-time. Alternatively, you can self-contain the script [[LUMPS]].&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Main_Page&amp;diff=747</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Main_Page&amp;diff=747"/>
				<updated>2018-11-12T23:22:02Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTITLE__&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!-- Note: The mf-home div demarcates the start of main page content for the Mobile Frontend --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ********** Start of left column - introduction, atlas, trivia - dynamic width --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mf-home&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;frontpage-columns&amp;quot; style=&amp;quot;overflow: hidden; clear: both;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;frontpage-column-left&amp;quot;&amp;gt;&lt;br /&gt;
{{HeadingA|The EDGEwiki}}&lt;br /&gt;
[[File:3DGElogo.gif||right|link=http://edge2.sf.net]]&lt;br /&gt;
The '''EDGE Wiki''' is an extensive effort to document everything related to the [[EDGE]] source port, while providing as much information about its predecessor [[DOSDoom]]. We have created '''{{NUMBEROFARTICLES}}''' articles to date.&lt;br /&gt;
&lt;br /&gt;
This site is a [[wiki]], so everyone is encouraged to create and edit articles. We need all the help we can get indexing these three source ports! For community discussion and support, visit [http://tdgmods.net/smf the EDGE forum board].&lt;br /&gt;
&lt;br /&gt;
{{HeadingA|Article Index}}&lt;br /&gt;
{{col-begin|id=frontpage-atlas-table}}&lt;br /&gt;
{{col-2}}&lt;br /&gt;
&amp;lt;div id=&amp;quot;Using 3DGE&amp;quot; class=&amp;quot;dw-fp-div&amp;quot; data-expandtext=&amp;quot;+&amp;quot; data-collapsetext=&amp;quot;-&amp;quot;&amp;gt;&lt;br /&gt;
; Using EDGE&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
* [[Installation|Installation and execution of EDGE]]&lt;br /&gt;
* [[System Requirements]]&lt;br /&gt;
* [[IWAD|List of supported games]]&lt;br /&gt;
* [[Compliance (BOOM, etc)|Compliance]]&lt;br /&gt;
* [[Console|The console]] and [[menus]]&lt;br /&gt;
* [[Command line parameters]]&lt;br /&gt;
* [[Frontend|Frontends and launchers]]  &lt;br /&gt;
* [[How to autoload files]]	&lt;br /&gt;
* [[Use Custom Timidity Patches]]&lt;br /&gt;
* [[Multiplayer]] and [[demo]]s&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;frontpage-community&amp;quot; class=&amp;quot;dw-fp-div&amp;quot; data-expandtext=&amp;quot;+&amp;quot; data-collapsetext=&amp;quot;-&amp;quot;&amp;gt;&lt;br /&gt;
; Community&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
* [[Helping the wiki]]&lt;br /&gt;
* [[Downloading the 3DGE Wiki|Downloading / Viewing the wiki off-line]]&lt;br /&gt;
* [[Frequently Asked Questions]]&lt;br /&gt;
* [[DOSDoom]] History&lt;br /&gt;
* [[Source port|Source Ports]]&lt;br /&gt;
* [[Recommended software]]&lt;br /&gt;
* [[EDGE For Dummies]]  &lt;br /&gt;
* [[EDGE documentation project]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{col-2}}&lt;br /&gt;
&amp;lt;div id=&amp;quot;frontpage-3DGE Modding Guide&amp;quot; class=&amp;quot;dw-fp-div&amp;quot; data-expandtext=&amp;quot;+&amp;quot; data-collapsetext=&amp;quot;-&amp;quot;&amp;gt;&lt;br /&gt;
; EDGE Modding Guide&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
* [[Doom Definition File]]&lt;br /&gt;
* [[Radius Trigger Script]]&lt;br /&gt;
* [[COAL|COAL Scripting Language]]&lt;br /&gt;
* [[3DGE_Builder|EDGE Builder, a 3D level editor]]&lt;br /&gt;
* [[Line Types]]&lt;br /&gt;
* [[Sector Types]]&lt;br /&gt;
* [[Thing Types]] &lt;br /&gt;
* [[Tutorials]]&lt;br /&gt;
* [[Supported data formats]]&lt;br /&gt;
* [[Specifications]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;frontpage-3DGE Mods&amp;quot; class=&amp;quot;dw-fp-div&amp;quot; data-expandtext=&amp;quot;+&amp;quot; data-collapsetext=&amp;quot;-&amp;quot;&amp;gt;&lt;br /&gt;
; EDGE Mods&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
* [[:Category:WADs created for 3DGE|WADs created for EDGE 2.x]]&lt;br /&gt;
* [[:Category:WADs created for EDGE|WADs created for EDGE 1.x]]&lt;br /&gt;
* [[:Category:WADs In Progress|EDGE WADs In Progress]]&lt;br /&gt;
* [[:Category:Screenshots|Screenshots]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{col-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- ********** Start of right-column - help, stuff to do, new articles - 300px width --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;frontpage-column-right&amp;quot;&amp;gt;&lt;br /&gt;
{{HeadingB|Download Engine}}&lt;br /&gt;
[[File:enginegraphic.png|right|50px]]&lt;br /&gt;
'''Stable version: {{latestS}}'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''Unstable version: {{latestT}}&amp;lt;br&amp;gt;'''&lt;br /&gt;
'''GitHub [https://github.com/3dfxdev/hyper3DGE Source]&amp;lt;br&amp;gt;'''&lt;br /&gt;
'''EDGE [[version history]]&amp;lt;br&amp;gt;'''&lt;br /&gt;
'''Engine [[Next_version|Roadmap]]'''&lt;br /&gt;
{{HeadingB|Common Questions and Guides}}&lt;br /&gt;
Find out how to get into the world of EDGE quickly with these step-by-step guides:&lt;br /&gt;
* [http://www.tdgmods.net/smf/viewforum.php?f=26 Active Mods/Project Listings]&lt;br /&gt;
* [[Compatible IWAD|What games does this engine support?]]&lt;br /&gt;
* [[LegacyHelp|Is EDGE 1.x or DOSDoom still supported?]]&lt;br /&gt;
* [[Tutorials|I need help with the editing features!]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{HeadingB|Trivia}}&lt;br /&gt;
&lt;br /&gt;
{{Did you know}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- End of Mobile Frontend Content --&amp;gt;&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=EDGE&amp;diff=746</id>
		<title>EDGE</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=EDGE&amp;diff=746"/>
				<updated>2018-11-12T23:17:32Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: /* External links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{InfoboxSourcePort&lt;br /&gt;
|title = EDGE, 3DGE, Hyper3DGE, Dream3DGE&lt;br /&gt;
|developer = [[Coraline_(Chu)|Cora Annis]], [[Joseph Fenton]], [[Rachael Alexanderson (Eruanna)]], [[Brendan Doe]], [[Damir Srpčič]], [[Maciej Kadlubowski]], [[Andrew Apted]], [[Andy Baker (darkknight)]], [[Darren Salt]], [[Erik Sandberg]], [[David Leatherdale]]&lt;br /&gt;
|nondeveloper = [[Chris Mullen (CeeJay)]], [[UsernameAK]], [[gameblabla]], [[Josh Pearson]], [[Benjamin Moir]], [[Luke Brennan (Lobo)]], [[Marc A. Pullen (Fanatic)]]&lt;br /&gt;
|baseparent = [[DOSDoom]]&lt;br /&gt;
|logo = [[File:EDGE LogoNew.jpg]]&lt;br /&gt;
|programming language = [[Wikipedia:C++|C++]], [[Wikipedia:QuakeC|QuakeC (modified)]]&lt;br /&gt;
|status = Active&lt;br /&gt;
|initialdate = 2000-06-20&lt;br /&gt;
|initialversion = 1.22&lt;br /&gt;
|platform = Cross-Platform&lt;br /&gt;
|license = {{GPL||2+}}&lt;br /&gt;
|website = [http://edge2.sourceforge.net/ SourceForge]&lt;br /&gt;
|repourl = [https://github.com/3dfxdev/hyper3DGE GitHub]&lt;br /&gt;
}}&lt;br /&gt;
'''EDGE''' (Enhanced Doom Gaming Engine) is a collaborative Open Source project based upon the [[Doom source code]]. EDGE is derived from an earlier project called [[DOSDoom]], and started development in 1999 immediately after DOSDoom 0.65 was released. '''EDGE''' is sometimes referred to as '''3DGE''', or '''hyper3DGE''' due to the long-standing development of the '''3DGE''' fork, which was initially released on April 11, 2011; it was originally created to power the ''Hypertension'' TC, and absorbed back into EDGE seven years later. The first official EDGE version was released on June 20, 2000. The latest stable version is &amp;lt;!--{{:{{PAGENAME}}/Version}}--&amp;gt;2.0.4, released on &amp;lt;!--{{:{{PAGENAME}}/Date}}--&amp;gt;December 13, 2016. The team releases *[https://devbuilds.drdteam.org/3dge/ DRDT] semi-regular development builds via [[DRD Team]].&lt;br /&gt;
&lt;br /&gt;
EDGE includes ports to many popular operating systems, including x86/x64 Windows, Linux, BeOS, Raspberry PI, Sega Dreamcast, and Mac OSX. The project is hardware-accelerated only, and also implements support for PowerVR2 CLX2 (through KallistiOS) for the Dreamcast platform. Previous versions of EDGE incorporated both software-rendered and hardware-accelerated versions, though the former was dropped with the release of version 1.29.&lt;br /&gt;
&lt;br /&gt;
The most attractive feature of EDGE is its [[DDF]] system, which originated from DOSDoom. DDF describes all game behavior inside text files external to the executable file. As a result, it is popular among modders who use the extensibility to add many new weapons and features with many fewer of the limits present in other source ports. With DDF, for example, it is possible to create monsters which can possess multiple missile and melee attacks, or create custom pain and death states for monsters when hit by specific weapons or projectiles. Combined together with [[RTS]] and the more modular, modern language [[COAL]], EDGE can rival what other popular ports are capable of through their respective scripting language implementations.&lt;br /&gt;
&lt;br /&gt;
'''Dream3DGE''' was a [[Sega]] Dreamcast-only port of EDGE 1.29, and has high compatibility with pre-1.31 mods, as it cannot currently run anything created with EDGE 1.31 or above. It must be built with KallistOS. It contains most, if not all, functionality from the parent port. This branch (and EDGE 1.29, on which it was based) was abandoned officially and rewritten and integrated back into 3DGE with version 2.0. The Dreamcast code utilizes KallistiGL instead of OpenGL for important rendering functions concerning the SH-4 CPU.&lt;br /&gt;
&lt;br /&gt;
== Early History ==&lt;br /&gt;
&lt;br /&gt;
DOSDoom began development in 1997, initially by [[Chi Hoang]] and coined the term source-port. [[Andy Baker (darkknight)]] was a frequent collaborator, and soon amassed a team of developers known as the [[DOSDoom Team]]. The entirety of the DOSDoom team began developing pioneering systems that other ports did not have at the time, including [[DDF]] and [[RTS]] scripting languages - the first such human-readable systems for DOOM. It is worth noting that the scripting systems were wholly different from [[DeHacked]] at the time because they did not need to modify the executable directly, and were split into several different files that could control much more at a granular level than DeHacked ever could. The [[DOSDoom Team]] consisted of Hoang, Baker, [[Erik Sandberg]], [[Kester Maddock]], [[Martin Howe]], [[John Cole]] and [[David Leatherdale]].&lt;br /&gt;
&lt;br /&gt;
Into 1998, the community was ripe with the emergence of other source-ports, including [[ZDoom]], [[Doom Legacy]], [[Boom]], as well as the first [[Wikipedia:OpenGL|OpenGL]] accelerated engine, [[glDoom]]. glDoom especially made an impact on the team into 1999 as OpenGL was seen as a major advancement at the time - this would be highly influential later in development. DOSDoom continued to be a major powerhouse for modders well into development of EDGE.&lt;br /&gt;
&lt;br /&gt;
In mid 1998, [[TeamTNT]] discussed with the [[DOSDoom Team]] about merging their project, [[OGRE]], directly into [[DOSDoom]]. The collaboration was announced in late 1998 and generated much interest as TeamTNT previously developed another ground-breaking port named [[BOOM]]; discussions were even joined by the inclusion of [[John Carmack]]. However, difficulties ensued for all parties and the project was abandoned. OGRE was quite possibly the progenitor of [[EDGE]] as several of the ideas both teams wanted to do was further realized with the development of EDGE. The failed merger didn't affect DOSDoom's ultimate standing and the port continued to be popular; though, possibly as a result of the planned/failed merger of DOSDoom and OGRE, Hoang left the DOSDoom Team and the DOOM community after v0.63 was released, followed by other DOSDoom members.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
In early 1999, several more source-ports were released, all offering their own features. [[3D floor]]s were pioneered with DOSDoom which generated much interest, but the DOSDoom Team began rifting as some members left the community altogether, or joined different projects. Andrew Baker and his team devised that a re-haul of DOSDoom was inevitable; the primary motivation being that the port was no longer limited to the DOS operating system.&lt;br /&gt;
 &lt;br /&gt;
It was also around this time that [[Andrew Apted]] had joined the team; it was decided that the DOSDoom name would change to better reflect its status as the most advanced 3D source-port of its time. [[TADE]] was seen as a possible name before the team ultimately settled on EDGE; the port was in development before DOSDoom saw its final public release.&lt;br /&gt;
&lt;br /&gt;
DOSDoom v0.653 was released in April 10, 1999, which would be its final version. The surviving members of the DOSDoom Team [Baker, Erik Sandberg, and David Leatherdale], with Andrew Apted, immediately formed the EDGE team from the existing code-base.&lt;br /&gt;
&lt;br /&gt;
EDGE was officially released on June 20, 2000 after more than a year and a half being in secret development; it was seen as a milestone as the DDF and RTS systems were more fully realized, as well as becoming an early adopter of [[Wikipedia:OpenGL|OpenGL]] rendering. At the time, EDGE was the most advanced port as several other emergent technologies were realized in tandem, including [[glBSP]], the first true 3D node-builder for DOOM.&lt;br /&gt;
&lt;br /&gt;
The development of Marc A. Pullen's [[QDoom]] was seen as a major motivating factor for the EDGE team in its early years; its release was very popular and helped elevate EDGE's status as a true modder-centric engine. [[Cory Whittle]] was also a frequent developer of EDGE modifications that also kept the port healthy.&lt;br /&gt;
&lt;br /&gt;
EDGE development continued into the next decade; while the early years were notable for EDGE being the supreme choice for modders and OpenGL enthusiasts, the team began to experience strain in the mid 2000's. As most members of the DOSDoom team had left by 2004, development was primarily being shouldered by Andrew Baker and Andrew Apted. Later, with the major rewrites of the engine between 1.27 and 1.29, development was shifted primarily between the last two active developers; because of the burden of a largely two-man team, the engine was perceived as being somewhat unstable. With the release of 1.31, EDGE's standing improved and modders began returning to the engine, though [[ZDoom]] was tearing much of the share away. Since the engine had once again experienced large rendering and game-play rewrites between 1.29 and 1.31, the remainder of development was primarily headed by Andrew Apted.&lt;br /&gt;
&lt;br /&gt;
Sometime in 2010, Andrew Baker had fully retired from the team, and Andrew Apted was growing more interested in other projects. He was beginning to make plans to fix up any outstanding issues with EDGE and make the final release. Perhaps as a result of ZDoom's popularity, Andrew Apted could not keep up with all of the feature requests, as he had invested much work and time into the 1.3x branch of EDGE. He began hinting at his desire to shift to other projects, notably [[Eureka]] and [[OBLIGE]], which were later released to much acclaim.&lt;br /&gt;
&lt;br /&gt;
Into 2011, the community was well aware of his plans to retire from development with the release of 1.35. At the time, a major TC named [[Hypertension]] was perhaps the biggest project to be developed on the engine recently. The team of that TC [Isotope SoftWorks] foresaw the closing, and development of a fork named '''3DGE''' began to continue development as the modding team still required features that were only possible if they did it themselves.&lt;br /&gt;
&lt;br /&gt;
The EDGE 1.x team consisted of [[Andrew Apted]] and [[Andy Baker (darkknight)]] as the primary developers, and [[Marc A. Pullen (Fanatic)]] and [[Luke Brennan (Lobo)]] as distributors/promoters. [[Darren Salt]] was also a frequent developer and contributed a lot of code and bugfixes.&lt;br /&gt;
&lt;br /&gt;
== Later History and Current Status ==&lt;br /&gt;
&lt;br /&gt;
On April 9, 2011, Andrew Apted announced his retirement from EDGE development, leaving EDGE without a maintainer for over seven years. The last version of EDGE 1.x (1.35), was released on the same day. Two days later, the first version of '''3DGE''' was released as a hot-fix to 1.35, having merged from an abandoned earlier rewrite of EDGE itself. &lt;br /&gt;
&lt;br /&gt;
EDGE development (under the name ''3DGE'') therefore continued from 2011 well into 2018, introducing major long-requested features which were seen as somewhat standard for other modder-centric ports, including [[UDMF]], archive support, [[GLSL]] shaders, and much improved and expanded features for the [[DDF]], [[RTS]], and [[COAL]] systems; lots of hard work was put into the port since the last version was released in 2016. &lt;br /&gt;
&lt;br /&gt;
EDGE's persistent popularity and perseverance earned the respect and occasional development contributions from several other major developers in the community, including GZDoom programmers [[dpJudas]], [[Rachael Alexanderson (Eruanna)]] and [[Graf Zahl]]. Andrew Apted would occasionally assist the team by providing assistance as needed.&lt;br /&gt;
&lt;br /&gt;
On September 18th, 2018, [[Coraline_(Chu)|Cora Annis]] made an announcement of the next major version of EDGE, which would have been the first full version released by the new team since 2016. With Andrew Apted's support and blessing, the separated 3DGE fork (which was long thought as confusing due to naming and version issues) was officially absorbed back into EDGE. The impending release of 2.1.0 (stable) will mark the first version of EDGE officially released since 2011. EDGE is therefore split into two categories as far as releases are concerned - the 1.x branches, and the 2.x branches.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
* [[Wikipedia:OpenGL|OpenGL]] 1.1/3.1 Renderer Paths, with Mipmapping, Smoothing, Dynamic Lighting, mirrors, portals, and [[Wikipedia:GLSL|GLSL]] shader support; Bump-Mapping/GLSL is only supported in the 3.1 rendering path.&lt;br /&gt;
* 64-bit support&lt;br /&gt;
* SDL2 integration&lt;br /&gt;
* [[UDMF]] support&lt;br /&gt;
* PAK/[[PK3]]/PK7/[[EPK]] [[Using_ZIPs_as_WAD_replacement|archive support]]&lt;br /&gt;
* Rendering interpolation and Vsync support&lt;br /&gt;
* JPEG, PNG, TGA, BMP, PSD, GIF, HDR, PIC, PNM high-res textures; including support for [[TX_START]]/TX_END and [[HI_START]]/HI_END texture namespaces, and grAb offset support for [[PNG]] images.&lt;br /&gt;
* [[OPL]] synth playback (using nukeyT's OPLlib)&lt;br /&gt;
* Basic shadows restored from EDGE 1.27&lt;br /&gt;
* Integration of [[ZDBSP]] and improvements to [[glBSP]], including building nodes from archives; overall better 3D rendering of both existing Doom levels and newer levels.&lt;br /&gt;
* Several major and minor bugs squashed from the [[EDGE]] 1.x releases&lt;br /&gt;
* [[Heretic]]/[[Chex Quest]] IWAD support&lt;br /&gt;
* [[MD3]] and [[MD5]] model support&lt;br /&gt;
* Two-player [[splitscreen]] [[co-op]] or [[deathmatch]] (local only)&lt;br /&gt;
* [[multimedia:RoQ|RoQ]] video support for cinematics&lt;br /&gt;
* Runs on the [[Wikipedia:Dreamcast|Sega Dreamcast]] console.&lt;br /&gt;
* Normal, specular and bright-map support on models&lt;br /&gt;
* [[DDF]]/[[RTS]]/[[COAL]] enhancements and bug-fixes&lt;br /&gt;
* [[Polyobject]]s (more types will be supported in the future)&lt;br /&gt;
* [[CAMERA-MAN|Camera-Man scripts]]: New scripting language which utilizes cameras for complete camera control.&lt;br /&gt;
* Support for up to 64 defined [[weapon]]s at once through DDF&lt;br /&gt;
* 16 Ammo types: BULLETS, SHELLS, ROCKETS, CELLS, and AMMO5 to AMMO16. (EDGE 1.29 only. AMMO1 to AMMO4 can be used as aliases for the 4 main ammo types.)&lt;br /&gt;
* [[3D floor|Extrafloors]] feature allows modders to create submersible liquids, [[room-over-room]], or catwalks, as well as vertically moving platforms not embedded into the floor.&lt;br /&gt;
* Four [[armor]] types: GREEN (33% reduction), BLUE (50% reduction), YELLOW (75% reduction) and RED (90% reduction).&lt;br /&gt;
* [[Automap]] can be made to be stationary instead of rotating with the player's facing angle, through [[COAL]]. Automap can also be applied as a secondary layer over the normal viewing screen opposed to replacing it, allowing the player to fight enemies and keep track of their position at one time.&lt;br /&gt;
* Weapons can have secondary attacks. Weapons can also be made to be manually reloaded, or have idle stats as well. Integration through COAL and RTS means Weapons and animations can be granularity customized.&lt;br /&gt;
* Support for [[MUS]], MIDI, IT/MOD, and Ogg Vorbis music formats.&lt;br /&gt;
* [[DDF]] files allow the editing of many features (such monsters, attacks, and levels).&lt;br /&gt;
* [[Sprite]]s can be viewed from 16 angles.&lt;br /&gt;
* [[RTS]] scripting format includes an option known as &amp;quot;Start_Map ALL&amp;quot; that allows global scripts to be created that affect all maps in the game without copying the script under each individual map.&lt;br /&gt;
* [[COAL]] virtual machine scripting language allow a more powerful alternative to functions normally found in DDF/RTS, as well as controlling the entirety of the HUD module.&lt;br /&gt;
* [[Door#Sliding doors|Sliding doors]], which are done separately without using PolyObjects.&lt;br /&gt;
&lt;br /&gt;
== In-Progress ==&lt;br /&gt;
* [[Wikipedia:OpenAL|OpenAL]] for audio subsystem (being restored from EDGE 1.28, replacing SDL2), which will allow for various 3D environmental effects&lt;br /&gt;
* RoQ Render-to-Texture (for models, world textures, and menus/backgrounds)&lt;br /&gt;
* New [[DDF]] types: Terrains.ddf, Sprites.ddf, Inventory.ddf and Shaders.ddf&lt;br /&gt;
* Cross-platform IWAD selector &lt;br /&gt;
* Dynamic GLSL shader compilation&lt;br /&gt;
* Normal, specular, and brightmap support on world textures&lt;br /&gt;
* True [[inventory]] support&lt;br /&gt;
* Dynamic planar shadow system for [[dynamic light]]s&lt;br /&gt;
* [[Wikipedia:Open_Asset_Import_Library|AssImp]] 3D model back-end support for more model formats&lt;br /&gt;
* ''Quake 3: Arena''-style shader-based sky system&lt;br /&gt;
* Better [[Boom]] compatibility&lt;br /&gt;
* [[Decal]]s on all surfaces (using planned Decals.ddf)&lt;br /&gt;
* ''[[Wolfenstein_3D]]'' support (WLF_*)&lt;br /&gt;
* ''[[Rise of the Triad]]'' support (ROTT_*)&lt;br /&gt;
* ''Blake Stone'' support (BLK_*)&lt;br /&gt;
* ''[[Strife]]'' support&lt;br /&gt;
&lt;br /&gt;
Heretic support is being finalized, and is in beta as of version 2.1.0 test 3, using a similarly named definition file called HDF (Heretic Definition File). The HDF definitions were written initially by CeeJay, before the 3DGE Team took over to write proper IWAD support.&lt;br /&gt;
&lt;br /&gt;
== Popular add-ons ==&lt;br /&gt;
EDGE also brings its own unique set of popular add-ons to the Doom community. Although some dislike EDGE for its perceived instability, the following mods have in one way or another made their mark on the community.&lt;br /&gt;
&lt;br /&gt;
A few notable mods in active development are Duke it Out in DOOM and Doom Forever, both by Chris Mullen (CeeJay), and a sequel to the [[Marc A. Pullen (Fanatic)]] mod QDOOM. ''SLaVE'' and ''Hypertension: Harmony of Darkness'' are two commercial products using this engine, both being developed by Isotope Softworks and published by Goat Store Publishing.&lt;br /&gt;
&lt;br /&gt;
''Note that, as with any port enjoying such a long lifespan, backward compatibility for older mods can be hit and miss. Certain mods might run only with the application version they were designed for; the move to EDGE 2.x in particular is known to have broken support for a number of mods. Keep this in mind, and report any problems encountered if any of the below legacy mods are not running correctly.''&lt;br /&gt;
&lt;br /&gt;
* [[Don's Challenge]] — Created by [[Cory Whittle]], Don's Challenge is a 3-episode modification based around the supernatural adventures of Don P. Tello, a veteran cop who is summoned into Hell by Mortis, the incarnation of Death, to challenge thousands of hellspawned creatures that his soul might be deemed worthy by her as a vessel. At the end of Episode 1, Don transforms Mortis into a cat. However, her brother Fate summons Mortis to Hell and takes Don with her. In the third episode, Don and Mortis return to Earth, only to find it overrun by Demons and Don's own family dead; Don and Mortis attempt to take vengeance for the deaths. This mod became popular due to the use of new monsters, weapons, and levels. One weapon (cigarettes) could even be used to heal the player. Another weapon (Booze) could be used to increase armor value, but took away a small portion of health as well.  As of now, only one episode is fully released, but Episode 2 is reportedly on the way.&lt;br /&gt;
* [[Immoral Conduct]] - Created by [[Cory Whittle]], Immoral Conduct is a weapons modification for both EDGE and ZDoom (although the ZDoom version does not have as many features as its EDGE counterpart). The EDGE version contains the following: Knife, .45 Pistols, Stock 12g Pump Shotgun, Customized Pump Shotgun (fires 'slasher rounds'), 12g Hand Cannon, 9mm Uzi SMG, Fragment Hand Grenades, 40mm Grenade/Tear Gas Gun, Assault Rifle with M203, Infantry Rifle with Bayonet, Minigun, 12g Sawed-off Shotgun, Beretta 9mm Pistol, Chrome Magnum Revolver, Sentry Turret Kit (summons helper turrets to attack enemies), Gas-Powered Chainsaw, Remote/Proximity Satchel Charges, and Marking/Visibility Flares. New items included a 50% medikit and Nightvision Goggles. New helper monsters included the Marine Corporal and Marine Private. Monsters have also been modified (for example, the baron of Hell's blood is green), and shells are ejected from weapons. It is a [[partial conversion]], sometimes mistaken for a [[total conversion]], and in Whittle's words, &amp;quot;With my stuff, you have all the millions of user-made Doom and Doom II levels at your disposal to be enhanced with new weapons and items.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* [[Covert Ops]] — an EDGE version of [[Twilight Warrior]]. It has many features, such as new weapons and interesting scripts.&lt;br /&gt;
&lt;br /&gt;
* [[QDoom]] (Quake Doom) — Created by [[Marc &amp;quot;Fanatic&amp;quot; Pullen]], QDoom is a total conversion of Quake to Doom. &lt;br /&gt;
&lt;br /&gt;
* [[EarthBound Doom|EBDoom]] (Earthbound Doom) - Created by [[Baron of Sigma]], this modification has generated mixed opinions. It is not a complete game, and many consider it more of a &amp;quot;monster modification&amp;quot; since roughly 100+ different species of monsters exist, most of them imported and emulated from [[Heretic]], [[Hexen]], Duke Nukem 3D, Shadow Warrior, and Blood, and 'evolved' versions of existing game monsters, such as Chainsaw Zombies, Gold Liches, and Elder Mancubi. The game also appears to use a near-perfect emulation of the [[Sigil]] from Strife as an Easter egg weapon. In addition, the player has hit points instead of a health percentage, and can take much more damage than the common version of [[Doomguy]]. There are also several 'helper' characters based on the heroes of many of the Doom-engine games, including [[Doomguy]], [[Corvus]], and the player classes in Hexen. Certain bosses are also among the few in many modifications to have over 50,000 HP, with at least one boss having over 6,000,000 HP. The weapons are more 'mystical' and energy-based, with few traditional Doom-style weapons. Another unique feature in EBDoom is that all melee attacks used either by the player or other monsters/allies can inflict &amp;quot;critical hits&amp;quot; up to 4x damage at times, as in an RPG. Despite the community's mixed opinions of the mod, it is often used as a resource wad by other modders who want to quickly import foreign monsters into their own mods (as the author appears not to mind this). It is also one of the three mods in the Doom community to use [[Hissy]] as a central plot player, and makes many references to another EDGE mod known as [[Cacodemon Squad]]. This modification was last updated at 6.56 on January 12, 2006.&lt;br /&gt;
&lt;br /&gt;
* [[GoldenEye Doom2]] - A fairly large in-progress TC. Featuring a load of weapons in both single and multiplayer maps.  Multiple versions are available: A single player DEH version compatible with Doom Legacy and Zdoom 1.22. Multiplayer levels for standard Doom2.  An enhanced single player EDGE 1.27+ version.  The Edge version contains the following weapons:  punch/kick, Knives, Watch lazer, _Soviet_Tank_, Silencedable PP7, Dostovie, Cougar Magnum, Automatic Shotgun, pathetic Klobb, Duestch, Zmg, KF7, Sniper Rifle, Ak47, Moon Raker Laser, RCP-90, Golden Gun, Golden PP7, Rocket Launcher, and Grenades. Most of the weapons have alternate firing modes and some weapons can be dual-wielded.&lt;br /&gt;
&lt;br /&gt;
* [[Cold Hard Cash]] - An unique weapons mod offering a larger variety of weapons. Cold Hard Cash's spin on the weapons mod is that instead of just finding weapons laying around or dropped from enemies, the player must mug monsters for money to use at special weapons dispensers, which replace the original weapons, and sometimes artifacts and appear in their place. An example is that the Chainsaw is now a dispenser that allows the player to buy a Knife, a Crowbar, and other melee-type items. Most dispensers have a special offer on it, usually an upgrade to an existing weapon, which requires the said weapon in question to be held by the player before they can use it. It is also the first EDGE mod to use the &amp;quot;Start_Map ALL&amp;quot; RTS function, introduced in the 3rd release candidate of EDGE 1.29,  which allows the same scripts to be usable on all maps instead of having to add the same ones to each map individually.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
*{{dwforums|id=102456|title=EDGE 2.1.0 Impending Release}}&lt;br /&gt;
*{{zdforums|p=1073199|3DGE 2.1.0 Test3 Released}}&lt;br /&gt;
*[[Next_version|Development Roadmap]]&lt;br /&gt;
*[https://www.youtube.com/watch?v=PpzvWcz7uDY Heretic support demonstration]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
*[http://edge2.sourceforge.net Official EDGE site]&lt;br /&gt;
*[https://sourceforge.net/projects/edge2/files/3DGE%20binaries/ EDGE release packages], hosted by {{wp|SourceForge}}&lt;br /&gt;
*[https://sourceforge.net/projects/edge/files/EDGE%20Binaries/ Legacy EDGE binary releases], hosted by {{wp|SourceForge}}&lt;br /&gt;
*[https://github.com/3dfxdev/hyper3DGE 3DGE git repository], hosted by {{wp|github}}&lt;br /&gt;
*[https://devbuilds.drdteam.org/3dge/ Compiled SVN builds] for Windows, Linux, Mac, and Dreamcast at [[DRD Team]]&lt;br /&gt;
*[[Main Page|Documentation]]&lt;br /&gt;
*Dream3DGE:&lt;br /&gt;
:* [https://sourceforge.net/projects/edge2/files/3DGE%20SOURCE/DreamEDGE/ Source code repository], hosted by {{wp|SourceForge}}&lt;br /&gt;
:* [http://gamedev.allusion.net/softprj/kos/ KallistOS]&lt;br /&gt;
:* [http://www.segatech.com/technical/cpu/ SH-4 CPU]&lt;br /&gt;
*Mapsets and add-ons:&lt;br /&gt;
:* [http://www.tdgmods.net/smf/viewforum.php?f=26/ All known projects including WIPs]&lt;br /&gt;
:* [http://www.moddb.com/mods/duke-it-out-in-doom/ Duke it Out in DOOM]&lt;br /&gt;
:* {{Dwforums|id=66125|title=Doom Forever}}&lt;br /&gt;
:* {{Dwforums|id=64491|title=QDOOM sequel}}&lt;br /&gt;
:* [http://facebook.com/slavefps/ SLaVE]&lt;br /&gt;
:* [https://www.facebook.com/pages/Isotope-TDGMods/232903863419077/ Hypertension: Harmony of Darkness]&lt;br /&gt;
:* [https://www.facebook.com/Isotope-TDGMods-232903863419077/ Isotope Softworks]&lt;br /&gt;
:* [http://www.goatstorepublishing.com/ Goat Store Publishing]&lt;br /&gt;
&lt;br /&gt;
{{s-start}}&lt;br /&gt;
{{s-port}}&lt;br /&gt;
{{s-cond}}&lt;br /&gt;
{{s-bef-cond|rows=2|before=[[DOSDoom]]}}&lt;br /&gt;
{{s-ttl|rows=2|title=EDGE 1.x}}&lt;br /&gt;
{{s-aft-cond|after=3DGE}}&lt;br /&gt;
{{s-aft-cond|after=Dream3DGE}}&lt;br /&gt;
{{s-bef-cond|before=EDGE 1.x}}&lt;br /&gt;
{{s-ttl|title=3DGE}}&lt;br /&gt;
{{s-aft-cond|after=EDGE 2.x}}&lt;br /&gt;
{{s-bef-cond|before=EDGE 1.x}}&lt;br /&gt;
{{s-ttl|title=Dream3DGE}}&lt;br /&gt;
{{s-aft-cond|after=None}}&lt;br /&gt;
{{s-end}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Source ports]]&lt;br /&gt;
[[Category:Boom compatible]]&lt;br /&gt;
[[Category:Doom ports]]&lt;br /&gt;
[[Category:Limit removing source ports]]&lt;br /&gt;
[[Category:OpenGL ports]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Template:Ig&amp;diff=745</id>
		<title>Template:Ig</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Template:Ig&amp;diff=745"/>
				<updated>2018-11-12T23:16:31Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: Created page with &amp;quot;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.doomworld.com/idgames/?{{#if:{{{file|}}}|file={{{file}}}|{{#if:{{{id|}}}|id={{{id}}}|}}}} {{{1|{{{title|Doomworld/idgames}}}}}}]&amp;lt;/span&amp;gt;&amp;lt;n...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.doomworld.com/idgames/?{{#if:{{{file|}}}|file={{{file}}}|{{#if:{{{id|}}}|id={{{id}}}|}}}} {{{1|{{{title|Doomworld/idgames}}}}}}]&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;[[Category:External link templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Template:Maplinkgen&amp;diff=744</id>
		<title>Template:Maplinkgen</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Template:Maplinkgen&amp;diff=744"/>
				<updated>2018-11-12T23:15:26Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: Created page with &amp;quot;}}&amp;lt;noinclude&amp;gt; ==Usage== Fully generic map article generation template that hand...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[{{{1}}}:_{{{2}}}{{#if:{{{3|}}}|_({{{3}}})|}}|{{{1}}}: {{{2}}}{{#if:{{{4|}}}|&amp;amp;nbsp;({{{3}}})|}}]]&amp;lt;noinclude&amp;gt;&lt;br /&gt;
==Usage==&lt;br /&gt;
Fully generic map article generation template that handles 99% of map article linking needs. Arguments:&lt;br /&gt;
* {{c|1}}: The [[WAD]] file &amp;quot;slot&amp;quot; that this map occupies. For E1M1 of the original [[Doom]], this is {{c|E1M1}}.&lt;br /&gt;
* {{c|2}}: Undecorated name of the map. For E1M1 again, this is {{c|Hangar}}.&lt;br /&gt;
* {{c|3}}: [[Commercial games|Game]] or [[PWAD]], if specified (optional). For E1M1, this is {{c|Doom}}.&lt;br /&gt;
* {{c|4}}: If specified with any value, the game name will appear in the visible link text. Default is to not show it.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;{{maplinkgen|E1M1|Hangar|Doom}}&amp;lt;/nowiki&amp;gt;: [[E1M1: Hangar (Doom)|E1M1: Hangar]]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;{{maplinkgen|Hub 1|Brackenwood}}&amp;lt;/nowiki&amp;gt;: [[Hub 1: Brackenwood]]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;{{maplinkgen|MAP01|Entryway|Doom II|true}}&amp;lt;/nowiki&amp;gt;: [[MAP01: Entryway (Doom II)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Internal link templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Andrew_Apted&amp;diff=743</id>
		<title>Andrew Apted</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Andrew_Apted&amp;diff=743"/>
				<updated>2018-11-12T23:15:01Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Andrew J. Apted''' ('''ajapted''' or '''andrewj''') is a developer who worked on [[EDGE]] and created the random level generator [[OBLIGE]]. He also contributed to a number of community projects.&lt;br /&gt;
&lt;br /&gt;
== Body of work ==&lt;br /&gt;
&lt;br /&gt;
===2000===&lt;br /&gt;
* [[EDGE]]&lt;br /&gt;
* [[glBSP]]&lt;br /&gt;
&lt;br /&gt;
===2005===&lt;br /&gt;
* [[2 Sectors]] ({{ig|id=13939}})&lt;br /&gt;
** [[MAP03 (2 Sectors)|MAP03]]&lt;br /&gt;
&lt;br /&gt;
===2007===&lt;br /&gt;
* [[OBLIGE]]&lt;br /&gt;
* [[32in24-5]] ({{ig|id=16807}})&lt;br /&gt;
** {{maplinkgen|MAP02|Court of the Crimson Schwing|32in24-5}} ''(with [[Shaikoten]] and [[Sarah Mancuso (esselfortium)]])''&lt;br /&gt;
** {{maplinkgen|MAP06|Compound of Dripping Filth|32in24-5}} ''(with [[Matt Cibulas (RottKing)]])''&lt;br /&gt;
** {{maplinkgen|MAP15|Frozen Maiden|32in24-5}} ''(with Sarah Mancuso (esselfortium))''&lt;br /&gt;
* [[Diet 32in24]] ({{ig|id=15456}})&lt;br /&gt;
** {{maplinkgen|MAP10|Satanic Base|Diet 32in24}} ''(with [[Chris Harriman (Impboy)]])''&lt;br /&gt;
&lt;br /&gt;
===2011===&lt;br /&gt;
* [[Eureka]]&lt;br /&gt;
&lt;br /&gt;
===2016===&lt;br /&gt;
* [[32in24-16: DOOT CTF]] ({{ig|id=18910}})&lt;br /&gt;
** {{maplinkgen|MAP27|Castles of the Cyber-Creeps|32in24-16}}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://edge.sourceforge.net/ EDGE Home]&lt;br /&gt;
* [http://glbsp.sourceforge.net/ glBSP Home]&lt;br /&gt;
* [http://oblige.sourceforge.net/ OBLIGE Home]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Apted, Andrew}}&lt;br /&gt;
[[Category:Mappers]]&lt;br /&gt;
[[Category:Programmers]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=EDGE&amp;diff=742</id>
		<title>EDGE</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=EDGE&amp;diff=742"/>
				<updated>2018-11-12T23:14:00Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{InfoboxSourcePort&lt;br /&gt;
|title = EDGE, 3DGE, Hyper3DGE, Dream3DGE&lt;br /&gt;
|developer = [[Coraline_(Chu)|Cora Annis]], [[Joseph Fenton]], [[Rachael Alexanderson (Eruanna)]], [[Brendan Doe]], [[Damir Srpčič]], [[Maciej Kadlubowski]], [[Andrew Apted]], [[Andy Baker (darkknight)]], [[Darren Salt]], [[Erik Sandberg]], [[David Leatherdale]]&lt;br /&gt;
|nondeveloper = [[Chris Mullen (CeeJay)]], [[UsernameAK]], [[gameblabla]], [[Josh Pearson]], [[Benjamin Moir]], [[Luke Brennan (Lobo)]], [[Marc A. Pullen (Fanatic)]]&lt;br /&gt;
|baseparent = [[DOSDoom]]&lt;br /&gt;
|logo = [[File:EDGE LogoNew.jpg]]&lt;br /&gt;
|programming language = [[Wikipedia:C++|C++]], [[Wikipedia:QuakeC|QuakeC (modified)]]&lt;br /&gt;
|status = Active&lt;br /&gt;
|initialdate = 2000-06-20&lt;br /&gt;
|initialversion = 1.22&lt;br /&gt;
|platform = Cross-Platform&lt;br /&gt;
|license = {{GPL||2+}}&lt;br /&gt;
|website = [http://edge2.sourceforge.net/ SourceForge]&lt;br /&gt;
|repourl = [https://github.com/3dfxdev/hyper3DGE GitHub]&lt;br /&gt;
}}&lt;br /&gt;
'''EDGE''' (Enhanced Doom Gaming Engine) is a collaborative Open Source project based upon the [[Doom source code]]. EDGE is derived from an earlier project called [[DOSDoom]], and started development in 1999 immediately after DOSDoom 0.65 was released. '''EDGE''' is sometimes referred to as '''3DGE''', or '''hyper3DGE''' due to the long-standing development of the '''3DGE''' fork, which was initially released on April 11, 2011; it was originally created to power the ''Hypertension'' TC, and absorbed back into EDGE seven years later. The first official EDGE version was released on June 20, 2000. The latest stable version is &amp;lt;!--{{:{{PAGENAME}}/Version}}--&amp;gt;2.0.4, released on &amp;lt;!--{{:{{PAGENAME}}/Date}}--&amp;gt;December 13, 2016. The team releases *[https://devbuilds.drdteam.org/3dge/ DRDT] semi-regular development builds via [[DRD Team]].&lt;br /&gt;
&lt;br /&gt;
EDGE includes ports to many popular operating systems, including x86/x64 Windows, Linux, BeOS, Raspberry PI, Sega Dreamcast, and Mac OSX. The project is hardware-accelerated only, and also implements support for PowerVR2 CLX2 (through KallistiOS) for the Dreamcast platform. Previous versions of EDGE incorporated both software-rendered and hardware-accelerated versions, though the former was dropped with the release of version 1.29.&lt;br /&gt;
&lt;br /&gt;
The most attractive feature of EDGE is its [[DDF]] system, which originated from DOSDoom. DDF describes all game behavior inside text files external to the executable file. As a result, it is popular among modders who use the extensibility to add many new weapons and features with many fewer of the limits present in other source ports. With DDF, for example, it is possible to create monsters which can possess multiple missile and melee attacks, or create custom pain and death states for monsters when hit by specific weapons or projectiles. Combined together with [[RTS]] and the more modular, modern language [[COAL]], EDGE can rival what other popular ports are capable of through their respective scripting language implementations.&lt;br /&gt;
&lt;br /&gt;
'''Dream3DGE''' was a [[Sega]] Dreamcast-only port of EDGE 1.29, and has high compatibility with pre-1.31 mods, as it cannot currently run anything created with EDGE 1.31 or above. It must be built with KallistOS. It contains most, if not all, functionality from the parent port. This branch (and EDGE 1.29, on which it was based) was abandoned officially and rewritten and integrated back into 3DGE with version 2.0. The Dreamcast code utilizes KallistiGL instead of OpenGL for important rendering functions concerning the SH-4 CPU.&lt;br /&gt;
&lt;br /&gt;
== Early History ==&lt;br /&gt;
&lt;br /&gt;
DOSDoom began development in 1997, initially by [[Chi Hoang]] and coined the term source-port. [[Andy Baker (darkknight)]] was a frequent collaborator, and soon amassed a team of developers known as the [[DOSDoom Team]]. The entirety of the DOSDoom team began developing pioneering systems that other ports did not have at the time, including [[DDF]] and [[RTS]] scripting languages - the first such human-readable systems for DOOM. It is worth noting that the scripting systems were wholly different from [[DeHacked]] at the time because they did not need to modify the executable directly, and were split into several different files that could control much more at a granular level than DeHacked ever could. The [[DOSDoom Team]] consisted of Hoang, Baker, [[Erik Sandberg]], [[Kester Maddock]], [[Martin Howe]], [[John Cole]] and [[David Leatherdale]].&lt;br /&gt;
&lt;br /&gt;
Into 1998, the community was ripe with the emergence of other source-ports, including [[ZDoom]], [[Doom Legacy]], [[Boom]], as well as the first [[Wikipedia:OpenGL|OpenGL]] accelerated engine, [[glDoom]]. glDoom especially made an impact on the team into 1999 as OpenGL was seen as a major advancement at the time - this would be highly influential later in development. DOSDoom continued to be a major powerhouse for modders well into development of EDGE.&lt;br /&gt;
&lt;br /&gt;
In mid 1998, [[TeamTNT]] discussed with the [[DOSDoom Team]] about merging their project, [[OGRE]], directly into [[DOSDoom]]. The collaboration was announced in late 1998 and generated much interest as TeamTNT previously developed another ground-breaking port named [[BOOM]]; discussions were even joined by the inclusion of [[John Carmack]]. However, difficulties ensued for all parties and the project was abandoned. OGRE was quite possibly the progenitor of [[EDGE]] as several of the ideas both teams wanted to do was further realized with the development of EDGE. The failed merger didn't affect DOSDoom's ultimate standing and the port continued to be popular; though, possibly as a result of the planned/failed merger of DOSDoom and OGRE, Hoang left the DOSDoom Team and the DOOM community after v0.63 was released, followed by other DOSDoom members.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
In early 1999, several more source-ports were released, all offering their own features. [[3D floor]]s were pioneered with DOSDoom which generated much interest, but the DOSDoom Team began rifting as some members left the community altogether, or joined different projects. Andrew Baker and his team devised that a re-haul of DOSDoom was inevitable; the primary motivation being that the port was no longer limited to the DOS operating system.&lt;br /&gt;
 &lt;br /&gt;
It was also around this time that [[Andrew Apted]] had joined the team; it was decided that the DOSDoom name would change to better reflect its status as the most advanced 3D source-port of its time. [[TADE]] was seen as a possible name before the team ultimately settled on EDGE; the port was in development before DOSDoom saw its final public release.&lt;br /&gt;
&lt;br /&gt;
DOSDoom v0.653 was released in April 10, 1999, which would be its final version. The surviving members of the DOSDoom Team [Baker, Erik Sandberg, and David Leatherdale], with Andrew Apted, immediately formed the EDGE team from the existing code-base.&lt;br /&gt;
&lt;br /&gt;
EDGE was officially released on June 20, 2000 after more than a year and a half being in secret development; it was seen as a milestone as the DDF and RTS systems were more fully realized, as well as becoming an early adopter of [[Wikipedia:OpenGL|OpenGL]] rendering. At the time, EDGE was the most advanced port as several other emergent technologies were realized in tandem, including [[glBSP]], the first true 3D node-builder for DOOM.&lt;br /&gt;
&lt;br /&gt;
The development of Marc A. Pullen's [[QDoom]] was seen as a major motivating factor for the EDGE team in its early years; its release was very popular and helped elevate EDGE's status as a true modder-centric engine. [[Cory Whittle]] was also a frequent developer of EDGE modifications that also kept the port healthy.&lt;br /&gt;
&lt;br /&gt;
EDGE development continued into the next decade; while the early years were notable for EDGE being the supreme choice for modders and OpenGL enthusiasts, the team began to experience strain in the mid 2000's. As most members of the DOSDoom team had left by 2004, development was primarily being shouldered by Andrew Baker and Andrew Apted. Later, with the major rewrites of the engine between 1.27 and 1.29, development was shifted primarily between the last two active developers; because of the burden of a largely two-man team, the engine was perceived as being somewhat unstable. With the release of 1.31, EDGE's standing improved and modders began returning to the engine, though [[ZDoom]] was tearing much of the share away. Since the engine had once again experienced large rendering and game-play rewrites between 1.29 and 1.31, the remainder of development was primarily headed by Andrew Apted.&lt;br /&gt;
&lt;br /&gt;
Sometime in 2010, Andrew Baker had fully retired from the team, and Andrew Apted was growing more interested in other projects. He was beginning to make plans to fix up any outstanding issues with EDGE and make the final release. Perhaps as a result of ZDoom's popularity, Andrew Apted could not keep up with all of the feature requests, as he had invested much work and time into the 1.3x branch of EDGE. He began hinting at his desire to shift to other projects, notably [[Eureka]] and [[OBLIGE]], which were later released to much acclaim.&lt;br /&gt;
&lt;br /&gt;
Into 2011, the community was well aware of his plans to retire from development with the release of 1.35. At the time, a major TC named [[Hypertension]] was perhaps the biggest project to be developed on the engine recently. The team of that TC [Isotope SoftWorks] foresaw the closing, and development of a fork named '''3DGE''' began to continue development as the modding team still required features that were only possible if they did it themselves.&lt;br /&gt;
&lt;br /&gt;
The EDGE 1.x team consisted of [[Andrew Apted]] and [[Andy Baker (darkknight)]] as the primary developers, and [[Marc A. Pullen (Fanatic)]] and [[Luke Brennan (Lobo)]] as distributors/promoters. [[Darren Salt]] was also a frequent developer and contributed a lot of code and bugfixes.&lt;br /&gt;
&lt;br /&gt;
== Later History and Current Status ==&lt;br /&gt;
&lt;br /&gt;
On April 9, 2011, Andrew Apted announced his retirement from EDGE development, leaving EDGE without a maintainer for over seven years. The last version of EDGE 1.x (1.35), was released on the same day. Two days later, the first version of '''3DGE''' was released as a hot-fix to 1.35, having merged from an abandoned earlier rewrite of EDGE itself. &lt;br /&gt;
&lt;br /&gt;
EDGE development (under the name ''3DGE'') therefore continued from 2011 well into 2018, introducing major long-requested features which were seen as somewhat standard for other modder-centric ports, including [[UDMF]], archive support, [[GLSL]] shaders, and much improved and expanded features for the [[DDF]], [[RTS]], and [[COAL]] systems; lots of hard work was put into the port since the last version was released in 2016. &lt;br /&gt;
&lt;br /&gt;
EDGE's persistent popularity and perseverance earned the respect and occasional development contributions from several other major developers in the community, including GZDoom programmers [[dpJudas]], [[Rachael Alexanderson (Eruanna)]] and [[Graf Zahl]]. Andrew Apted would occasionally assist the team by providing assistance as needed.&lt;br /&gt;
&lt;br /&gt;
On September 18th, 2018, [[Coraline_(Chu)|Cora Annis]] made an announcement of the next major version of EDGE, which would have been the first full version released by the new team since 2016. With Andrew Apted's support and blessing, the separated 3DGE fork (which was long thought as confusing due to naming and version issues) was officially absorbed back into EDGE. The impending release of 2.1.0 (stable) will mark the first version of EDGE officially released since 2011. EDGE is therefore split into two categories as far as releases are concerned - the 1.x branches, and the 2.x branches.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
* [[Wikipedia:OpenGL|OpenGL]] 1.1/3.1 Renderer Paths, with Mipmapping, Smoothing, Dynamic Lighting, mirrors, portals, and [[Wikipedia:GLSL|GLSL]] shader support; Bump-Mapping/GLSL is only supported in the 3.1 rendering path.&lt;br /&gt;
* 64-bit support&lt;br /&gt;
* SDL2 integration&lt;br /&gt;
* [[UDMF]] support&lt;br /&gt;
* PAK/[[PK3]]/PK7/[[EPK]] [[Using_ZIPs_as_WAD_replacement|archive support]]&lt;br /&gt;
* Rendering interpolation and Vsync support&lt;br /&gt;
* JPEG, PNG, TGA, BMP, PSD, GIF, HDR, PIC, PNM high-res textures; including support for [[TX_START]]/TX_END and [[HI_START]]/HI_END texture namespaces, and grAb offset support for [[PNG]] images.&lt;br /&gt;
* [[OPL]] synth playback (using nukeyT's OPLlib)&lt;br /&gt;
* Basic shadows restored from EDGE 1.27&lt;br /&gt;
* Integration of [[ZDBSP]] and improvements to [[glBSP]], including building nodes from archives; overall better 3D rendering of both existing Doom levels and newer levels.&lt;br /&gt;
* Several major and minor bugs squashed from the [[EDGE]] 1.x releases&lt;br /&gt;
* [[Heretic]]/[[Chex Quest]] IWAD support&lt;br /&gt;
* [[MD3]] and [[MD5]] model support&lt;br /&gt;
* Two-player [[splitscreen]] [[co-op]] or [[deathmatch]] (local only)&lt;br /&gt;
* [[multimedia:RoQ|RoQ]] video support for cinematics&lt;br /&gt;
* Runs on the [[Wikipedia:Dreamcast|Sega Dreamcast]] console.&lt;br /&gt;
* Normal, specular and bright-map support on models&lt;br /&gt;
* [[DDF]]/[[RTS]]/[[COAL]] enhancements and bug-fixes&lt;br /&gt;
* [[Polyobject]]s (more types will be supported in the future)&lt;br /&gt;
* [[CAMERA-MAN|Camera-Man scripts]]: New scripting language which utilizes cameras for complete camera control.&lt;br /&gt;
* Support for up to 64 defined [[weapon]]s at once through DDF&lt;br /&gt;
* 16 Ammo types: BULLETS, SHELLS, ROCKETS, CELLS, and AMMO5 to AMMO16. (EDGE 1.29 only. AMMO1 to AMMO4 can be used as aliases for the 4 main ammo types.)&lt;br /&gt;
* [[3D floor|Extrafloors]] feature allows modders to create submersible liquids, [[room-over-room]], or catwalks, as well as vertically moving platforms not embedded into the floor.&lt;br /&gt;
* Four [[armor]] types: GREEN (33% reduction), BLUE (50% reduction), YELLOW (75% reduction) and RED (90% reduction).&lt;br /&gt;
* [[Automap]] can be made to be stationary instead of rotating with the player's facing angle, through [[COAL]]. Automap can also be applied as a secondary layer over the normal viewing screen opposed to replacing it, allowing the player to fight enemies and keep track of their position at one time.&lt;br /&gt;
* Weapons can have secondary attacks. Weapons can also be made to be manually reloaded, or have idle stats as well. Integration through COAL and RTS means Weapons and animations can be granularity customized.&lt;br /&gt;
* Support for [[MUS]], MIDI, IT/MOD, and Ogg Vorbis music formats.&lt;br /&gt;
* [[DDF]] files allow the editing of many features (such monsters, attacks, and levels).&lt;br /&gt;
* [[Sprite]]s can be viewed from 16 angles.&lt;br /&gt;
* [[RTS]] scripting format includes an option known as &amp;quot;Start_Map ALL&amp;quot; that allows global scripts to be created that affect all maps in the game without copying the script under each individual map.&lt;br /&gt;
* [[COAL]] virtual machine scripting language allow a more powerful alternative to functions normally found in DDF/RTS, as well as controlling the entirety of the HUD module.&lt;br /&gt;
* [[Door#Sliding doors|Sliding doors]], which are done separately without using PolyObjects.&lt;br /&gt;
&lt;br /&gt;
== In-Progress ==&lt;br /&gt;
* [[Wikipedia:OpenAL|OpenAL]] for audio subsystem (being restored from EDGE 1.28, replacing SDL2), which will allow for various 3D environmental effects&lt;br /&gt;
* RoQ Render-to-Texture (for models, world textures, and menus/backgrounds)&lt;br /&gt;
* New [[DDF]] types: Terrains.ddf, Sprites.ddf, Inventory.ddf and Shaders.ddf&lt;br /&gt;
* Cross-platform IWAD selector &lt;br /&gt;
* Dynamic GLSL shader compilation&lt;br /&gt;
* Normal, specular, and brightmap support on world textures&lt;br /&gt;
* True [[inventory]] support&lt;br /&gt;
* Dynamic planar shadow system for [[dynamic light]]s&lt;br /&gt;
* [[Wikipedia:Open_Asset_Import_Library|AssImp]] 3D model back-end support for more model formats&lt;br /&gt;
* ''Quake 3: Arena''-style shader-based sky system&lt;br /&gt;
* Better [[Boom]] compatibility&lt;br /&gt;
* [[Decal]]s on all surfaces (using planned Decals.ddf)&lt;br /&gt;
* ''[[Wolfenstein_3D]]'' support (WLF_*)&lt;br /&gt;
* ''[[Rise of the Triad]]'' support (ROTT_*)&lt;br /&gt;
* ''Blake Stone'' support (BLK_*)&lt;br /&gt;
* ''[[Strife]]'' support&lt;br /&gt;
&lt;br /&gt;
Heretic support is being finalized, and is in beta as of version 2.1.0 test 3, using a similarly named definition file called HDF (Heretic Definition File). The HDF definitions were written initially by CeeJay, before the 3DGE Team took over to write proper IWAD support.&lt;br /&gt;
&lt;br /&gt;
== Popular add-ons ==&lt;br /&gt;
EDGE also brings its own unique set of popular add-ons to the Doom community. Although some dislike EDGE for its perceived instability, the following mods have in one way or another made their mark on the community.&lt;br /&gt;
&lt;br /&gt;
A few notable mods in active development are Duke it Out in DOOM and Doom Forever, both by Chris Mullen (CeeJay), and a sequel to the [[Marc A. Pullen (Fanatic)]] mod QDOOM. ''SLaVE'' and ''Hypertension: Harmony of Darkness'' are two commercial products using this engine, both being developed by Isotope Softworks and published by Goat Store Publishing.&lt;br /&gt;
&lt;br /&gt;
''Note that, as with any port enjoying such a long lifespan, backward compatibility for older mods can be hit and miss. Certain mods might run only with the application version they were designed for; the move to EDGE 2.x in particular is known to have broken support for a number of mods. Keep this in mind, and report any problems encountered if any of the below legacy mods are not running correctly.''&lt;br /&gt;
&lt;br /&gt;
* [[Don's Challenge]] — Created by [[Cory Whittle]], Don's Challenge is a 3-episode modification based around the supernatural adventures of Don P. Tello, a veteran cop who is summoned into Hell by Mortis, the incarnation of Death, to challenge thousands of hellspawned creatures that his soul might be deemed worthy by her as a vessel. At the end of Episode 1, Don transforms Mortis into a cat. However, her brother Fate summons Mortis to Hell and takes Don with her. In the third episode, Don and Mortis return to Earth, only to find it overrun by Demons and Don's own family dead; Don and Mortis attempt to take vengeance for the deaths. This mod became popular due to the use of new monsters, weapons, and levels. One weapon (cigarettes) could even be used to heal the player. Another weapon (Booze) could be used to increase armor value, but took away a small portion of health as well.  As of now, only one episode is fully released, but Episode 2 is reportedly on the way.&lt;br /&gt;
* [[Immoral Conduct]] - Created by [[Cory Whittle]], Immoral Conduct is a weapons modification for both EDGE and ZDoom (although the ZDoom version does not have as many features as its EDGE counterpart). The EDGE version contains the following: Knife, .45 Pistols, Stock 12g Pump Shotgun, Customized Pump Shotgun (fires 'slasher rounds'), 12g Hand Cannon, 9mm Uzi SMG, Fragment Hand Grenades, 40mm Grenade/Tear Gas Gun, Assault Rifle with M203, Infantry Rifle with Bayonet, Minigun, 12g Sawed-off Shotgun, Beretta 9mm Pistol, Chrome Magnum Revolver, Sentry Turret Kit (summons helper turrets to attack enemies), Gas-Powered Chainsaw, Remote/Proximity Satchel Charges, and Marking/Visibility Flares. New items included a 50% medikit and Nightvision Goggles. New helper monsters included the Marine Corporal and Marine Private. Monsters have also been modified (for example, the baron of Hell's blood is green), and shells are ejected from weapons. It is a [[partial conversion]], sometimes mistaken for a [[total conversion]], and in Whittle's words, &amp;quot;With my stuff, you have all the millions of user-made Doom and Doom II levels at your disposal to be enhanced with new weapons and items.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* [[Covert Ops]] — an EDGE version of [[Twilight Warrior]]. It has many features, such as new weapons and interesting scripts.&lt;br /&gt;
&lt;br /&gt;
* [[QDoom]] (Quake Doom) — Created by [[Marc &amp;quot;Fanatic&amp;quot; Pullen]], QDoom is a total conversion of Quake to Doom. &lt;br /&gt;
&lt;br /&gt;
* [[EarthBound Doom|EBDoom]] (Earthbound Doom) - Created by [[Baron of Sigma]], this modification has generated mixed opinions. It is not a complete game, and many consider it more of a &amp;quot;monster modification&amp;quot; since roughly 100+ different species of monsters exist, most of them imported and emulated from [[Heretic]], [[Hexen]], Duke Nukem 3D, Shadow Warrior, and Blood, and 'evolved' versions of existing game monsters, such as Chainsaw Zombies, Gold Liches, and Elder Mancubi. The game also appears to use a near-perfect emulation of the [[Sigil]] from Strife as an Easter egg weapon. In addition, the player has hit points instead of a health percentage, and can take much more damage than the common version of [[Doomguy]]. There are also several 'helper' characters based on the heroes of many of the Doom-engine games, including [[Doomguy]], [[Corvus]], and the player classes in Hexen. Certain bosses are also among the few in many modifications to have over 50,000 HP, with at least one boss having over 6,000,000 HP. The weapons are more 'mystical' and energy-based, with few traditional Doom-style weapons. Another unique feature in EBDoom is that all melee attacks used either by the player or other monsters/allies can inflict &amp;quot;critical hits&amp;quot; up to 4x damage at times, as in an RPG. Despite the community's mixed opinions of the mod, it is often used as a resource wad by other modders who want to quickly import foreign monsters into their own mods (as the author appears not to mind this). It is also one of the three mods in the Doom community to use [[Hissy]] as a central plot player, and makes many references to another EDGE mod known as [[Cacodemon Squad]]. This modification was last updated at 6.56 on January 12, 2006.&lt;br /&gt;
&lt;br /&gt;
* [[GoldenEye Doom2]] - A fairly large in-progress TC. Featuring a load of weapons in both single and multiplayer maps.  Multiple versions are available: A single player DEH version compatible with Doom Legacy and Zdoom 1.22. Multiplayer levels for standard Doom2.  An enhanced single player EDGE 1.27+ version.  The Edge version contains the following weapons:  punch/kick, Knives, Watch lazer, _Soviet_Tank_, Silencedable PP7, Dostovie, Cougar Magnum, Automatic Shotgun, pathetic Klobb, Duestch, Zmg, KF7, Sniper Rifle, Ak47, Moon Raker Laser, RCP-90, Golden Gun, Golden PP7, Rocket Launcher, and Grenades. Most of the weapons have alternate firing modes and some weapons can be dual-wielded.&lt;br /&gt;
&lt;br /&gt;
* [[Cold Hard Cash]] - An unique weapons mod offering a larger variety of weapons. Cold Hard Cash's spin on the weapons mod is that instead of just finding weapons laying around or dropped from enemies, the player must mug monsters for money to use at special weapons dispensers, which replace the original weapons, and sometimes artifacts and appear in their place. An example is that the Chainsaw is now a dispenser that allows the player to buy a Knife, a Crowbar, and other melee-type items. Most dispensers have a special offer on it, usually an upgrade to an existing weapon, which requires the said weapon in question to be held by the player before they can use it. It is also the first EDGE mod to use the &amp;quot;Start_Map ALL&amp;quot; RTS function, introduced in the 3rd release candidate of EDGE 1.29,  which allows the same scripts to be usable on all maps instead of having to add the same ones to each map individually.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
*{{dwforums|id=102456|title=EDGE 2.1.0 Impending Release}}&lt;br /&gt;
*{{zdforums|p=1073199|3DGE 2.1.0 Test3 Released}}&lt;br /&gt;
*[[Next_version|Development Roadmap]]&lt;br /&gt;
*[https://www.youtube.com/watch?v=PpzvWcz7uDY Heretic support demonstration]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
*[http://edge2.sourceforge.net Official EDGE site]&lt;br /&gt;
*[https://sourceforge.net/projects/edge2/files/3DGE%20binaries/ EDGE release packages], hosted by {{wp|SourceForge}}&lt;br /&gt;
*[https://sourceforge.net/projects/edge/files/EDGE%20Binaries/ Legacy EDGE binary releases], hosted by {{wp|SourceForge}}&lt;br /&gt;
*[https://github.com/3dfxdev/hyper3DGE 3DGE git repository], hosted by {{wp|github}}&lt;br /&gt;
*[https://devbuilds.drdteam.org/3dge/ Compiled SVN builds] for Windows, Linux, Mac, and Dreamcast at [[DRD Team]]&lt;br /&gt;
*{{edgewiki|Main Page|Documentation}}&lt;br /&gt;
*Dream3DGE:&lt;br /&gt;
:* [https://sourceforge.net/projects/edge2/files/3DGE%20SOURCE/DreamEDGE/ Source code repository], hosted by {{wp|SourceForge}}&lt;br /&gt;
:* [http://gamedev.allusion.net/softprj/kos/ KallistOS]&lt;br /&gt;
:* [http://www.segatech.com/technical/cpu/ SH-4 CPU]&lt;br /&gt;
*Mapsets and add-ons:&lt;br /&gt;
:* [http://www.tdgmods.net/smf/viewforum.php?f=26/ All known projects including WIPs]&lt;br /&gt;
:* [http://www.moddb.com/mods/duke-it-out-in-doom/ Duke it Out in DOOM]&lt;br /&gt;
:* {{Dwforums|id=66125|title=Doom Forever}}&lt;br /&gt;
:* {{Dwforums|id=64491|title=QDOOM sequel}}&lt;br /&gt;
:* [http://facebook.com/slavefps/ SLaVE]&lt;br /&gt;
:* [https://www.facebook.com/pages/Isotope-TDGMods/232903863419077/ Hypertension: Harmony of Darkness]&lt;br /&gt;
:* [https://www.facebook.com/Isotope-TDGMods-232903863419077/ Isotope Softworks]&lt;br /&gt;
:* [http://www.goatstorepublishing.com/ Goat Store Publishing]&lt;br /&gt;
&lt;br /&gt;
{{s-start}}&lt;br /&gt;
{{s-port}}&lt;br /&gt;
{{s-cond}}&lt;br /&gt;
{{s-bef-cond|rows=2|before=[[DOSDoom]]}}&lt;br /&gt;
{{s-ttl|rows=2|title=EDGE 1.x}}&lt;br /&gt;
{{s-aft-cond|after=3DGE}}&lt;br /&gt;
{{s-aft-cond|after=Dream3DGE}}&lt;br /&gt;
{{s-bef-cond|before=EDGE 1.x}}&lt;br /&gt;
{{s-ttl|title=3DGE}}&lt;br /&gt;
{{s-aft-cond|after=EDGE 2.x}}&lt;br /&gt;
{{s-bef-cond|before=EDGE 1.x}}&lt;br /&gt;
{{s-ttl|title=Dream3DGE}}&lt;br /&gt;
{{s-aft-cond|after=None}}&lt;br /&gt;
{{s-end}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Source ports]]&lt;br /&gt;
[[Category:Boom compatible]]&lt;br /&gt;
[[Category:Doom ports]]&lt;br /&gt;
[[Category:Limit removing source ports]]&lt;br /&gt;
[[Category:OpenGL ports]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=EDGE&amp;diff=741</id>
		<title>EDGE</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=EDGE&amp;diff=741"/>
				<updated>2018-11-12T23:11:04Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: /* Sources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{InfoboxSourcePort&lt;br /&gt;
|title = EDGE, 3DGE, Hyper3DGE, Dream3DGE&lt;br /&gt;
|developer = [[Coraline_(Chu)|Cora Annis]], [[Joseph Fenton]], [[Rachael Alexanderson (Eruanna)]], [[Brendan Doe]], [[Damir Srpčič]], [[Maciej Kadlubowski]], [[Andrew Apted]], [[Andy Baker (darkknight)]], [[Darren Salt]], [[Erik Sandberg]], [[David Leatherdale]]&lt;br /&gt;
|nondeveloper = [[Chris Mullen (CeeJay)]], [[UsernameAK]], [[gameblabla]], [[Josh Pearson]], [[Benjamin Moir]], [[Luke Brennan (Lobo)]], [[Marc A. Pullen (Fanatic)]]&lt;br /&gt;
|baseparent = [[DOSDoom]]&lt;br /&gt;
|logo = [[File:EDGE LogoNew.jpg]]&lt;br /&gt;
|programming language = [[Wikipedia:C++|C++]], [[Wikipedia:QuakeC|QuakeC (modified)]]&lt;br /&gt;
|status = Active&lt;br /&gt;
|initialdate = 2000-06-20&lt;br /&gt;
|initialversion = 1.22&lt;br /&gt;
|platform = Cross-Platform&lt;br /&gt;
|license = {{GPL||2+}}&lt;br /&gt;
|website = [http://edge2.sourceforge.net/ SourceForge]&lt;br /&gt;
|repourl = [https://github.com/3dfxdev/hyper3DGE GitHub]&lt;br /&gt;
}}&lt;br /&gt;
'''EDGE''' (Enhanced Doom Gaming Engine) is a collaborative Open Source project based upon the [[Doom source code]]. EDGE is derived from an earlier project called [[DOSDoom]], and started development in 1999 immediately after DOSDoom 0.65 was released. '''EDGE''' is sometimes referred to as '''3DGE''', or '''hyper3DGE''' due to the long-standing development of the '''3DGE''' fork, which was initially released on April 11, 2011; it was originally created to power the ''Hypertension'' TC, and absorbed back into EDGE seven years later. The first official EDGE version was released on June 20, 2000. The latest stable version is &amp;lt;!--{{:{{PAGENAME}}/Version}}--&amp;gt;2.0.4, released on &amp;lt;!--{{:{{PAGENAME}}/Date}}--&amp;gt;December 13, 2016. The team releases *[https://devbuilds.drdteam.org/3dge/ DRDT] semi-regular development builds via [[DRD Team]].&lt;br /&gt;
&lt;br /&gt;
EDGE includes ports to many popular operating systems, including x86/x64 Windows, Linux, BeOS, Raspberry PI, Sega Dreamcast, and Mac OSX. The project is hardware-accelerated only, and also implements support for PowerVR2 CLX2 (through KallistiOS) for the Dreamcast platform. Previous versions of EDGE incorporated both software-rendered and hardware-accelerated versions, though the former was dropped with the release of version 1.29.&lt;br /&gt;
&lt;br /&gt;
The most attractive feature of EDGE is its [[DDF]] system, which originated from DOSDoom. DDF describes all game behavior inside text files external to the executable file. As a result, it is popular among modders who use the extensibility to add many new weapons and features with many fewer of the limits present in other source ports. With DDF, for example, it is possible to create monsters which can possess multiple missile and melee attacks, or create custom pain and death states for monsters when hit by specific weapons or projectiles. Combined together with [[RTS]] and the more modular, modern language [[COAL]], EDGE can rival what other popular ports are capable of through their respective scripting language implementations.&lt;br /&gt;
&lt;br /&gt;
'''Dream3DGE''' was a [[Sega]] Dreamcast-only port of EDGE 1.29, and has high compatibility with pre-1.31 mods, as it cannot currently run anything created with EDGE 1.31 or above. It must be built with KallistOS. It contains most, if not all, functionality from the parent port. This branch (and EDGE 1.29, on which it was based) was abandoned officially and rewritten and integrated back into 3DGE with version 2.0. The Dreamcast code utilizes KallistiGL instead of OpenGL for important rendering functions concerning the SH-4 CPU.&lt;br /&gt;
&lt;br /&gt;
== Early History ==&lt;br /&gt;
&lt;br /&gt;
DOSDoom began development in 1997, initially by [[Chi Hoang]] and coined the term source-port. [[Andy Baker (darkknight)]] was a frequent collaborator, and soon amassed a team of developers known as the {{3dgewiki|DOSDoom_Team|DOSDoom Team|linkonly=1}}. The entirety of the DOSDoom team began developing pioneering systems that other ports did not have at the time, including [[DDF]] and [[RTS]] scripting languages - the first such human-readable systems for DOOM. It is worth noting that the scripting systems were wholly different from [[DeHacked]] at the time because they did not need to modify the executable directly, and were split into several different files that could control much more at a granular level than DeHacked ever could. The {{3dgewiki|DOSDoom_Team|DOSDoom Team|linkonly=1}} consisted of Hoang, Baker, [[Erik Sandberg]], [[Kester Maddock]], [[Martin Howe]], [[John Cole]] and [[David Leatherdale]].&lt;br /&gt;
&lt;br /&gt;
Into 1998, the community was ripe with the emergence of other source-ports, including [[ZDoom]], [[Doom Legacy]], [[Boom]], as well as the first [[Wikipedia:OpenGL|OpenGL]] accelerated engine, [[glDoom]]. glDoom especially made an impact on the team into 1999 as OpenGL was seen as a major advancement at the time - this would be highly influential later in development. DOSDoom continued to be a major powerhouse for modders well into development of EDGE.&lt;br /&gt;
&lt;br /&gt;
In mid 1998, [[TeamTNT]] discussed with the {{3dgewiki|DOSDoom_Team|DOSDoom Team|linkonly=1}} about merging their project, [[OGRE]], directly into [[DOSDoom]]. The collaboration was announced in late 1998 and generated much interest as TeamTNT previously developed another ground-breaking port named [[BOOM]]; discussions were even joined by the inclusion of [[John Carmack]]. However, difficulties ensued for all parties and the project was abandoned. OGRE was quite possibly the progenitor of [[EDGE]] as several of the ideas both teams wanted to do was further realized with the development of EDGE. The failed merger didn't affect DOSDoom's ultimate standing and the port continued to be popular; though, possibly as a result of the planned/failed merger of DOSDoom and OGRE, Hoang left the DOSDoom Team and the DOOM community after v0.63 was released, followed by other DOSDoom members.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
In early 1999, several more source-ports were released, all offering their own features. [[3D floor]]s were pioneered with DOSDoom which generated much interest, but the DOSDoom Team began rifting as some members left the community altogether, or joined different projects. Andrew Baker and his team devised that a re-haul of DOSDoom was inevitable; the primary motivation being that the port was no longer limited to the DOS operating system.&lt;br /&gt;
 &lt;br /&gt;
It was also around this time that [[Andrew Apted]] had joined the team; it was decided that the DOSDoom name would change to better reflect its status as the most advanced 3D source-port of its time. *{{3dgewiki|TADE|TADE|linkonly=1}} was seen as a possible name before the team ultimately settled on EDGE; the port was in development before DOSDoom saw its final public release.&lt;br /&gt;
&lt;br /&gt;
DOSDoom v0.653 was released in April 10, 1999, which would be its final version. The surviving members of the DOSDoom Team [Baker, Erik Sandberg, and David Leatherdale], with Andrew Apted, immediately formed the EDGE team from the existing code-base.&lt;br /&gt;
&lt;br /&gt;
EDGE was officially released on June 20, 2000 after more than a year and a half being in secret development; it was seen as a milestone as the DDF and RTS systems were more fully realized, as well as becoming an early adopter of [[Wikipedia:OpenGL|OpenGL]] rendering. At the time, EDGE was the most advanced port as several other emergent technologies were realized in tandem, including [[glBSP]], the first true 3D node-builder for DOOM.&lt;br /&gt;
&lt;br /&gt;
The development of Marc A. Pullen's [[QDoom]] was seen as a major motivating factor for the EDGE team in its early years; its release was very popular and helped elevate EDGE's status as a true modder-centric engine. [[Cory Whittle]] was also a frequent developer of EDGE modifications that also kept the port healthy.&lt;br /&gt;
&lt;br /&gt;
EDGE development continued into the next decade; while the early years were notable for EDGE being the supreme choice for modders and OpenGL enthusiasts, the team began to experience strain in the mid 2000's. As most members of the DOSDoom team had left by 2004, development was primarily being shouldered by Andrew Baker and Andrew Apted. Later, with the major rewrites of the engine between 1.27 and 1.29, development was shifted primarily between the last two active developers; because of the burden of a largely two-man team, the engine was perceived as being somewhat unstable. With the release of 1.31, EDGE's standing improved and modders began returning to the engine, though [[ZDoom]] was tearing much of the share away. Since the engine had once again experienced large rendering and game-play rewrites between 1.29 and 1.31, the remainder of development was primarily headed by Andrew Apted.&lt;br /&gt;
&lt;br /&gt;
Sometime in 2010, Andrew Baker had fully retired from the team, and Andrew Apted was growing more interested in other projects. He was beginning to make plans to fix up any outstanding issues with EDGE and make the final release. Perhaps as a result of ZDoom's popularity, Andrew Apted could not keep up with all of the feature requests, as he had invested much work and time into the 1.3x branch of EDGE. He began hinting at his desire to shift to other projects, notably [[Eureka]] and [[OBLIGE]], which were later released to much acclaim.&lt;br /&gt;
&lt;br /&gt;
Into 2011, the community was well aware of his plans to retire from development with the release of 1.35. At the time, a major TC named [[Hypertension]] was perhaps the biggest project to be developed on the engine recently. The team of that TC [Isotope SoftWorks] foresaw the closing, and development of a fork named '''3DGE''' began to continue development as the modding team still required features that were only possible if they did it themselves.&lt;br /&gt;
&lt;br /&gt;
The EDGE 1.x team consisted of [[Andrew Apted]] and [[Andy Baker (darkknight)]] as the primary developers, and [[Marc A. Pullen (Fanatic)]] and [[Luke Brennan (Lobo)]] as distributors/promoters. [[Darren Salt]] was also a frequent developer and contributed a lot of code and bugfixes.&lt;br /&gt;
&lt;br /&gt;
== Later History and Current Status ==&lt;br /&gt;
&lt;br /&gt;
On April 9, 2011, Andrew Apted announced his retirement from EDGE development, leaving EDGE without a maintainer for over seven years. The last version of EDGE 1.x (1.35), was released on the same day. Two days later, the first version of '''3DGE''' was released as a hot-fix to 1.35, having merged from an abandoned earlier rewrite of EDGE itself. &lt;br /&gt;
&lt;br /&gt;
EDGE development (under the name ''3DGE'') therefore continued from 2011 well into 2018, introducing major long-requested features which were seen as somewhat standard for other modder-centric ports, including [[UDMF]], archive support, [[GLSL]] shaders, and much improved and expanded features for the [[DDF]], [[RTS]], and [[COAL]] systems; lots of hard work was put into the port since the last version was released in 2016. &lt;br /&gt;
&lt;br /&gt;
EDGE's persistent popularity and perseverance earned the respect and occasional development contributions from several other major developers in the community, including GZDoom programmers [[dpJudas]], [[Rachael Alexanderson (Eruanna)]] and [[Graf Zahl]]. Andrew Apted would occasionally assist the team by providing assistance as needed.&lt;br /&gt;
&lt;br /&gt;
On September 18th, 2018, [[Coraline_(Chu)|Cora Annis]] made an announcement of the next major version of EDGE, which would have been the first full version released by the new team since 2016. With Andrew Apted's support and blessing, the separated 3DGE fork (which was long thought as confusing due to naming and version issues) was officially absorbed back into EDGE. The impending release of 2.1.0 (stable) will mark the first version of EDGE officially released since 2011. EDGE is therefore split into two categories as far as releases are concerned - the 1.x branches, and the 2.x branches.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
* [[Wikipedia:OpenGL|OpenGL]] 1.1/3.1 Renderer Paths, with Mipmapping, Smoothing, Dynamic Lighting, mirrors, portals, and [[Wikipedia:GLSL|GLSL]] shader support; Bump-Mapping/GLSL is only supported in the 3.1 rendering path.&lt;br /&gt;
* 64-bit support&lt;br /&gt;
* SDL2 integration&lt;br /&gt;
* [[UDMF]] support&lt;br /&gt;
* PAK/[[PK3]]/PK7/{{3dgewiki|EPK|EPK|linkonly=1}} {{3dgewiki|Using_ZIPs_as_WAD_replacement|archive support|linkonly=1}}&lt;br /&gt;
* Rendering interpolation and Vsync support&lt;br /&gt;
* JPEG, PNG, TGA, BMP, PSD, GIF, HDR, PIC, PNM high-res textures; including support for [[TX_START]]/TX_END and [[HI_START]]/HI_END texture namespaces, and grAb offset support for [[PNG]] images.&lt;br /&gt;
* [[OPL]] synth playback (using nukeyT's OPLlib)&lt;br /&gt;
* Basic shadows restored from EDGE 1.27&lt;br /&gt;
* Integration of [[ZDBSP]] and improvements to [[glBSP]], including building nodes from archives; overall better 3D rendering of both existing Doom levels and newer levels.&lt;br /&gt;
* Several major and minor bugs squashed from the [[EDGE]] 1.x releases&lt;br /&gt;
* [[Heretic]]/[[Chex Quest]] IWAD support&lt;br /&gt;
* {{3dgewiki|MD3|MD3|linkonly=1}} and {{3dgewiki|MD5|MD5|linkonly=1}} model support&lt;br /&gt;
* Two-player [[splitscreen]] [[co-op]] or [[deathmatch]] (local only)&lt;br /&gt;
* [[multimedia:RoQ|RoQ]] video support for cinematics&lt;br /&gt;
* Runs on the [[Wikipedia:Dreamcast|Sega Dreamcast]] console.&lt;br /&gt;
* Normal, specular and bright-map support on models&lt;br /&gt;
* [[DDF]]/[[RTS]]/[[COAL]] enhancements and bug-fixes&lt;br /&gt;
* [[Polyobject]]s (more types will be supported in the future)&lt;br /&gt;
* {{3dgewiki|CAMERA-MAN|Camera-Man scripts|linkonly=1}}: New scripting language which utilizes cameras for complete camera control.&lt;br /&gt;
* Support for up to 64 defined [[weapon]]s at once through DDF&lt;br /&gt;
* 16 Ammo types: BULLETS, SHELLS, ROCKETS, CELLS, and AMMO5 to AMMO16. (EDGE 1.29 only. AMMO1 to AMMO4 can be used as aliases for the 4 main ammo types.)&lt;br /&gt;
* [[3D floor|Extrafloors]] feature allows modders to create submersible liquids, [[room-over-room]], or catwalks, as well as vertically moving platforms not embedded into the floor.&lt;br /&gt;
* Four [[armor]] types: GREEN (33% reduction), BLUE (50% reduction), YELLOW (75% reduction) and RED (90% reduction).&lt;br /&gt;
* [[Automap]] can be made to be stationary instead of rotating with the player's facing angle, through [[COAL]]. Automap can also be applied as a secondary layer over the normal viewing screen opposed to replacing it, allowing the player to fight enemies and keep track of their position at one time.&lt;br /&gt;
* Weapons can have secondary attacks. Weapons can also be made to be manually reloaded, or have idle stats as well. Integration through COAL and RTS means Weapons and animations can be granularity customized.&lt;br /&gt;
* Support for [[MUS]], MIDI, IT/MOD, and Ogg Vorbis music formats.&lt;br /&gt;
* [[DDF]] files allow the editing of many features (such monsters, attacks, and levels).&lt;br /&gt;
* [[Sprite]]s can be viewed from 16 angles.&lt;br /&gt;
* [[RTS]] scripting format includes an option known as &amp;quot;Start_Map ALL&amp;quot; that allows global scripts to be created that affect all maps in the game without copying the script under each individual map.&lt;br /&gt;
* [[COAL]] virtual machine scripting language allow a more powerful alternative to functions normally found in DDF/RTS, as well as controlling the entirety of the HUD module.&lt;br /&gt;
* [[Door#Sliding doors|Sliding doors]], which are done separately without using PolyObjects.&lt;br /&gt;
&lt;br /&gt;
== In-Progress ==&lt;br /&gt;
* [[Wikipedia:OpenAL|OpenAL]] for audio subsystem (being restored from EDGE 1.28, replacing SDL2), which will allow for various 3D environmental effects&lt;br /&gt;
* RoQ Render-to-Texture (for models, world textures, and menus/backgrounds)&lt;br /&gt;
* New [[DDF]] types: Terrains.ddf, Sprites.ddf, Inventory.ddf and Shaders.ddf&lt;br /&gt;
* Cross-platform IWAD selector &lt;br /&gt;
* Dynamic GLSL shader compilation&lt;br /&gt;
* Normal, specular, and brightmap support on world textures&lt;br /&gt;
* True [[inventory]] support&lt;br /&gt;
* Dynamic planar shadow system for [[dynamic light]]s&lt;br /&gt;
* [[Wikipedia:Open_Asset_Import_Library|AssImp]] 3D model back-end support for more model formats&lt;br /&gt;
* ''Quake 3: Arena''-style shader-based sky system&lt;br /&gt;
* Better [[Boom]] compatibility&lt;br /&gt;
* [[Decal]]s on all surfaces (using planned Decals.ddf)&lt;br /&gt;
* ''[[Wolfenstein_3D]]'' support (WLF_*)&lt;br /&gt;
* ''[[Rise of the Triad]]'' support (ROTT_*)&lt;br /&gt;
* ''Blake Stone'' support (BLK_*)&lt;br /&gt;
* ''[[Strife]]'' support&lt;br /&gt;
&lt;br /&gt;
Heretic support is being finalized, and is in beta as of version 2.1.0 test 3, using a similarly named definition file called HDF (Heretic Definition File). The HDF definitions were written initially by CeeJay, before the 3DGE Team took over to write proper IWAD support.&lt;br /&gt;
&lt;br /&gt;
== Popular add-ons ==&lt;br /&gt;
EDGE also brings its own unique set of popular add-ons to the Doom community. Although some dislike EDGE for its perceived instability, the following mods have in one way or another made their mark on the community.&lt;br /&gt;
&lt;br /&gt;
A few notable mods in active development are Duke it Out in DOOM and Doom Forever, both by Chris Mullen (CeeJay), and a sequel to the [[Marc A. Pullen (Fanatic)]] mod QDOOM. ''SLaVE'' and ''Hypertension: Harmony of Darkness'' are two commercial products using this engine, both being developed by Isotope Softworks and published by Goat Store Publishing.&lt;br /&gt;
&lt;br /&gt;
''Note that, as with any port enjoying such a long lifespan, backward compatibility for older mods can be hit and miss. Certain mods might run only with the application version they were designed for; the move to EDGE 2.x in particular is known to have broken support for a number of mods. Keep this in mind, and report any problems encountered if any of the below legacy mods are not running correctly.''&lt;br /&gt;
&lt;br /&gt;
* [[Don's Challenge]] — Created by [[Cory Whittle]], Don's Challenge is a 3-episode modification based around the supernatural adventures of Don P. Tello, a veteran cop who is summoned into Hell by Mortis, the incarnation of Death, to challenge thousands of hellspawned creatures that his soul might be deemed worthy by her as a vessel. At the end of Episode 1, Don transforms Mortis into a cat. However, her brother Fate summons Mortis to Hell and takes Don with her. In the third episode, Don and Mortis return to Earth, only to find it overrun by Demons and Don's own family dead; Don and Mortis attempt to take vengeance for the deaths. This mod became popular due to the use of new monsters, weapons, and levels. One weapon (cigarettes) could even be used to heal the player. Another weapon (Booze) could be used to increase armor value, but took away a small portion of health as well.  As of now, only one episode is fully released, but Episode 2 is reportedly on the way.&lt;br /&gt;
* [[Immoral Conduct]] - Created by [[Cory Whittle]], Immoral Conduct is a weapons modification for both EDGE and ZDoom (although the ZDoom version does not have as many features as its EDGE counterpart). The EDGE version contains the following: Knife, .45 Pistols, Stock 12g Pump Shotgun, Customized Pump Shotgun (fires 'slasher rounds'), 12g Hand Cannon, 9mm Uzi SMG, Fragment Hand Grenades, 40mm Grenade/Tear Gas Gun, Assault Rifle with M203, Infantry Rifle with Bayonet, Minigun, 12g Sawed-off Shotgun, Beretta 9mm Pistol, Chrome Magnum Revolver, Sentry Turret Kit (summons helper turrets to attack enemies), Gas-Powered Chainsaw, Remote/Proximity Satchel Charges, and Marking/Visibility Flares. New items included a 50% medikit and Nightvision Goggles. New helper monsters included the Marine Corporal and Marine Private. Monsters have also been modified (for example, the baron of Hell's blood is green), and shells are ejected from weapons. It is a [[partial conversion]], sometimes mistaken for a [[total conversion]], and in Whittle's words, &amp;quot;With my stuff, you have all the millions of user-made Doom and Doom II levels at your disposal to be enhanced with new weapons and items.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* [[Covert Ops]] — an EDGE version of [[Twilight Warrior]]. It has many features, such as new weapons and interesting scripts.&lt;br /&gt;
&lt;br /&gt;
* [[QDoom]] (Quake Doom) — Created by [[Marc &amp;quot;Fanatic&amp;quot; Pullen]], QDoom is a total conversion of Quake to Doom. &lt;br /&gt;
&lt;br /&gt;
* [[EarthBound Doom|EBDoom]] (Earthbound Doom) - Created by [[Baron of Sigma]], this modification has generated mixed opinions. It is not a complete game, and many consider it more of a &amp;quot;monster modification&amp;quot; since roughly 100+ different species of monsters exist, most of them imported and emulated from [[Heretic]], [[Hexen]], Duke Nukem 3D, Shadow Warrior, and Blood, and 'evolved' versions of existing game monsters, such as Chainsaw Zombies, Gold Liches, and Elder Mancubi. The game also appears to use a near-perfect emulation of the [[Sigil]] from Strife as an Easter egg weapon. In addition, the player has hit points instead of a health percentage, and can take much more damage than the common version of [[Doomguy]]. There are also several 'helper' characters based on the heroes of many of the Doom-engine games, including [[Doomguy]], [[Corvus]], and the player classes in Hexen. Certain bosses are also among the few in many modifications to have over 50,000 HP, with at least one boss having over 6,000,000 HP. The weapons are more 'mystical' and energy-based, with few traditional Doom-style weapons. Another unique feature in EBDoom is that all melee attacks used either by the player or other monsters/allies can inflict &amp;quot;critical hits&amp;quot; up to 4x damage at times, as in an RPG. Despite the community's mixed opinions of the mod, it is often used as a resource wad by other modders who want to quickly import foreign monsters into their own mods (as the author appears not to mind this). It is also one of the three mods in the Doom community to use [[Hissy]] as a central plot player, and makes many references to another EDGE mod known as [[Cacodemon Squad]]. This modification was last updated at 6.56 on January 12, 2006.&lt;br /&gt;
&lt;br /&gt;
* [[GoldenEye Doom2]] - A fairly large in-progress TC. Featuring a load of weapons in both single and multiplayer maps.  Multiple versions are available: A single player DEH version compatible with Doom Legacy and Zdoom 1.22. Multiplayer levels for standard Doom2.  An enhanced single player EDGE 1.27+ version.  The Edge version contains the following weapons:  punch/kick, Knives, Watch lazer, _Soviet_Tank_, Silencedable PP7, Dostovie, Cougar Magnum, Automatic Shotgun, pathetic Klobb, Duestch, Zmg, KF7, Sniper Rifle, Ak47, Moon Raker Laser, RCP-90, Golden Gun, Golden PP7, Rocket Launcher, and Grenades. Most of the weapons have alternate firing modes and some weapons can be dual-wielded.&lt;br /&gt;
&lt;br /&gt;
* [[Cold Hard Cash]] - An unique weapons mod offering a larger variety of weapons. Cold Hard Cash's spin on the weapons mod is that instead of just finding weapons laying around or dropped from enemies, the player must mug monsters for money to use at special weapons dispensers, which replace the original weapons, and sometimes artifacts and appear in their place. An example is that the Chainsaw is now a dispenser that allows the player to buy a Knife, a Crowbar, and other melee-type items. Most dispensers have a special offer on it, usually an upgrade to an existing weapon, which requires the said weapon in question to be held by the player before they can use it. It is also the first EDGE mod to use the &amp;quot;Start_Map ALL&amp;quot; RTS function, introduced in the 3rd release candidate of EDGE 1.29,  which allows the same scripts to be usable on all maps instead of having to add the same ones to each map individually.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
*{{dwforums|id=102456|title=EDGE 2.1.0 Impending Release}}&lt;br /&gt;
*{{zdforums|p=1073199|3DGE 2.1.0 Test3 Released}}&lt;br /&gt;
*[[Next_version|Development Roadmap]]&lt;br /&gt;
*[https://www.youtube.com/watch?v=PpzvWcz7uDY Heretic support demonstration]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
*[http://edge2.sourceforge.net Official EDGE site]&lt;br /&gt;
*[https://sourceforge.net/projects/edge2/files/3DGE%20binaries/ EDGE release packages], hosted by {{wp|SourceForge}}&lt;br /&gt;
*[https://sourceforge.net/projects/edge/files/EDGE%20Binaries/ Legacy EDGE binary releases], hosted by {{wp|SourceForge}}&lt;br /&gt;
*[https://github.com/3dfxdev/hyper3DGE 3DGE git repository], hosted by {{wp|github}}&lt;br /&gt;
*[https://devbuilds.drdteam.org/3dge/ Compiled SVN builds] for Windows, Linux, Mac, and Dreamcast at [[DRD Team]]&lt;br /&gt;
*{{edgewiki|Main Page|Documentation}}&lt;br /&gt;
*Dream3DGE:&lt;br /&gt;
:* [https://sourceforge.net/projects/edge2/files/3DGE%20SOURCE/DreamEDGE/ Source code repository], hosted by {{wp|SourceForge}}&lt;br /&gt;
:* [http://gamedev.allusion.net/softprj/kos/ KallistOS]&lt;br /&gt;
:* [http://www.segatech.com/technical/cpu/ SH-4 CPU]&lt;br /&gt;
*Mapsets and add-ons:&lt;br /&gt;
:* [http://www.tdgmods.net/smf/viewforum.php?f=26/ All known projects including WIPs]&lt;br /&gt;
:* [http://www.moddb.com/mods/duke-it-out-in-doom/ Duke it Out in DOOM]&lt;br /&gt;
:* {{Dwforums|id=66125|title=Doom Forever}}&lt;br /&gt;
:* {{Dwforums|id=64491|title=QDOOM sequel}}&lt;br /&gt;
:* [http://facebook.com/slavefps/ SLaVE]&lt;br /&gt;
:* [https://www.facebook.com/pages/Isotope-TDGMods/232903863419077/ Hypertension: Harmony of Darkness]&lt;br /&gt;
:* [https://www.facebook.com/Isotope-TDGMods-232903863419077/ Isotope Softworks]&lt;br /&gt;
:* [http://www.goatstorepublishing.com/ Goat Store Publishing]&lt;br /&gt;
&lt;br /&gt;
{{s-start}}&lt;br /&gt;
{{s-port}}&lt;br /&gt;
{{s-cond}}&lt;br /&gt;
{{s-bef-cond|rows=2|before=[[DOSDoom]]}}&lt;br /&gt;
{{s-ttl|rows=2|title=EDGE 1.x}}&lt;br /&gt;
{{s-aft-cond|after=3DGE}}&lt;br /&gt;
{{s-aft-cond|after=Dream3DGE}}&lt;br /&gt;
{{s-bef-cond|before=EDGE 1.x}}&lt;br /&gt;
{{s-ttl|title=3DGE}}&lt;br /&gt;
{{s-aft-cond|after=EDGE 2.x}}&lt;br /&gt;
{{s-bef-cond|before=EDGE 1.x}}&lt;br /&gt;
{{s-ttl|title=Dream3DGE}}&lt;br /&gt;
{{s-aft-cond|after=None}}&lt;br /&gt;
{{s-end}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Source ports]]&lt;br /&gt;
[[Category:Boom compatible]]&lt;br /&gt;
[[Category:Doom ports]]&lt;br /&gt;
[[Category:Limit removing source ports]]&lt;br /&gt;
[[Category:OpenGL ports]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=EDGE&amp;diff=740</id>
		<title>EDGE</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=EDGE&amp;diff=740"/>
				<updated>2018-11-12T23:09:37Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: /* Sources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{InfoboxSourcePort&lt;br /&gt;
|title = EDGE, 3DGE, Hyper3DGE, Dream3DGE&lt;br /&gt;
|developer = [[Coraline_(Chu)|Cora Annis]], [[Joseph Fenton]], [[Rachael Alexanderson (Eruanna)]], [[Brendan Doe]], [[Damir Srpčič]], [[Maciej Kadlubowski]], [[Andrew Apted]], [[Andy Baker (darkknight)]], [[Darren Salt]], [[Erik Sandberg]], [[David Leatherdale]]&lt;br /&gt;
|nondeveloper = [[Chris Mullen (CeeJay)]], [[UsernameAK]], [[gameblabla]], [[Josh Pearson]], [[Benjamin Moir]], [[Luke Brennan (Lobo)]], [[Marc A. Pullen (Fanatic)]]&lt;br /&gt;
|baseparent = [[DOSDoom]]&lt;br /&gt;
|logo = [[File:EDGE LogoNew.jpg]]&lt;br /&gt;
|programming language = [[Wikipedia:C++|C++]], [[Wikipedia:QuakeC|QuakeC (modified)]]&lt;br /&gt;
|status = Active&lt;br /&gt;
|initialdate = 2000-06-20&lt;br /&gt;
|initialversion = 1.22&lt;br /&gt;
|platform = Cross-Platform&lt;br /&gt;
|license = {{GPL||2+}}&lt;br /&gt;
|website = [http://edge2.sourceforge.net/ SourceForge]&lt;br /&gt;
|repourl = [https://github.com/3dfxdev/hyper3DGE GitHub]&lt;br /&gt;
}}&lt;br /&gt;
'''EDGE''' (Enhanced Doom Gaming Engine) is a collaborative Open Source project based upon the [[Doom source code]]. EDGE is derived from an earlier project called [[DOSDoom]], and started development in 1999 immediately after DOSDoom 0.65 was released. '''EDGE''' is sometimes referred to as '''3DGE''', or '''hyper3DGE''' due to the long-standing development of the '''3DGE''' fork, which was initially released on April 11, 2011; it was originally created to power the ''Hypertension'' TC, and absorbed back into EDGE seven years later. The first official EDGE version was released on June 20, 2000. The latest stable version is &amp;lt;!--{{:{{PAGENAME}}/Version}}--&amp;gt;2.0.4, released on &amp;lt;!--{{:{{PAGENAME}}/Date}}--&amp;gt;December 13, 2016. The team releases *[https://devbuilds.drdteam.org/3dge/ DRDT] semi-regular development builds via [[DRD Team]].&lt;br /&gt;
&lt;br /&gt;
EDGE includes ports to many popular operating systems, including x86/x64 Windows, Linux, BeOS, Raspberry PI, Sega Dreamcast, and Mac OSX. The project is hardware-accelerated only, and also implements support for PowerVR2 CLX2 (through KallistiOS) for the Dreamcast platform. Previous versions of EDGE incorporated both software-rendered and hardware-accelerated versions, though the former was dropped with the release of version 1.29.&lt;br /&gt;
&lt;br /&gt;
The most attractive feature of EDGE is its [[DDF]] system, which originated from DOSDoom. DDF describes all game behavior inside text files external to the executable file. As a result, it is popular among modders who use the extensibility to add many new weapons and features with many fewer of the limits present in other source ports. With DDF, for example, it is possible to create monsters which can possess multiple missile and melee attacks, or create custom pain and death states for monsters when hit by specific weapons or projectiles. Combined together with [[RTS]] and the more modular, modern language [[COAL]], EDGE can rival what other popular ports are capable of through their respective scripting language implementations.&lt;br /&gt;
&lt;br /&gt;
'''Dream3DGE''' was a [[Sega]] Dreamcast-only port of EDGE 1.29, and has high compatibility with pre-1.31 mods, as it cannot currently run anything created with EDGE 1.31 or above. It must be built with KallistOS. It contains most, if not all, functionality from the parent port. This branch (and EDGE 1.29, on which it was based) was abandoned officially and rewritten and integrated back into 3DGE with version 2.0. The Dreamcast code utilizes KallistiGL instead of OpenGL for important rendering functions concerning the SH-4 CPU.&lt;br /&gt;
&lt;br /&gt;
== Early History ==&lt;br /&gt;
&lt;br /&gt;
DOSDoom began development in 1997, initially by [[Chi Hoang]] and coined the term source-port. [[Andy Baker (darkknight)]] was a frequent collaborator, and soon amassed a team of developers known as the {{3dgewiki|DOSDoom_Team|DOSDoom Team|linkonly=1}}. The entirety of the DOSDoom team began developing pioneering systems that other ports did not have at the time, including [[DDF]] and [[RTS]] scripting languages - the first such human-readable systems for DOOM. It is worth noting that the scripting systems were wholly different from [[DeHacked]] at the time because they did not need to modify the executable directly, and were split into several different files that could control much more at a granular level than DeHacked ever could. The {{3dgewiki|DOSDoom_Team|DOSDoom Team|linkonly=1}} consisted of Hoang, Baker, [[Erik Sandberg]], [[Kester Maddock]], [[Martin Howe]], [[John Cole]] and [[David Leatherdale]].&lt;br /&gt;
&lt;br /&gt;
Into 1998, the community was ripe with the emergence of other source-ports, including [[ZDoom]], [[Doom Legacy]], [[Boom]], as well as the first [[Wikipedia:OpenGL|OpenGL]] accelerated engine, [[glDoom]]. glDoom especially made an impact on the team into 1999 as OpenGL was seen as a major advancement at the time - this would be highly influential later in development. DOSDoom continued to be a major powerhouse for modders well into development of EDGE.&lt;br /&gt;
&lt;br /&gt;
In mid 1998, [[TeamTNT]] discussed with the {{3dgewiki|DOSDoom_Team|DOSDoom Team|linkonly=1}} about merging their project, [[OGRE]], directly into [[DOSDoom]]. The collaboration was announced in late 1998 and generated much interest as TeamTNT previously developed another ground-breaking port named [[BOOM]]; discussions were even joined by the inclusion of [[John Carmack]]. However, difficulties ensued for all parties and the project was abandoned. OGRE was quite possibly the progenitor of [[EDGE]] as several of the ideas both teams wanted to do was further realized with the development of EDGE. The failed merger didn't affect DOSDoom's ultimate standing and the port continued to be popular; though, possibly as a result of the planned/failed merger of DOSDoom and OGRE, Hoang left the DOSDoom Team and the DOOM community after v0.63 was released, followed by other DOSDoom members.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
In early 1999, several more source-ports were released, all offering their own features. [[3D floor]]s were pioneered with DOSDoom which generated much interest, but the DOSDoom Team began rifting as some members left the community altogether, or joined different projects. Andrew Baker and his team devised that a re-haul of DOSDoom was inevitable; the primary motivation being that the port was no longer limited to the DOS operating system.&lt;br /&gt;
 &lt;br /&gt;
It was also around this time that [[Andrew Apted]] had joined the team; it was decided that the DOSDoom name would change to better reflect its status as the most advanced 3D source-port of its time. *{{3dgewiki|TADE|TADE|linkonly=1}} was seen as a possible name before the team ultimately settled on EDGE; the port was in development before DOSDoom saw its final public release.&lt;br /&gt;
&lt;br /&gt;
DOSDoom v0.653 was released in April 10, 1999, which would be its final version. The surviving members of the DOSDoom Team [Baker, Erik Sandberg, and David Leatherdale], with Andrew Apted, immediately formed the EDGE team from the existing code-base.&lt;br /&gt;
&lt;br /&gt;
EDGE was officially released on June 20, 2000 after more than a year and a half being in secret development; it was seen as a milestone as the DDF and RTS systems were more fully realized, as well as becoming an early adopter of [[Wikipedia:OpenGL|OpenGL]] rendering. At the time, EDGE was the most advanced port as several other emergent technologies were realized in tandem, including [[glBSP]], the first true 3D node-builder for DOOM.&lt;br /&gt;
&lt;br /&gt;
The development of Marc A. Pullen's [[QDoom]] was seen as a major motivating factor for the EDGE team in its early years; its release was very popular and helped elevate EDGE's status as a true modder-centric engine. [[Cory Whittle]] was also a frequent developer of EDGE modifications that also kept the port healthy.&lt;br /&gt;
&lt;br /&gt;
EDGE development continued into the next decade; while the early years were notable for EDGE being the supreme choice for modders and OpenGL enthusiasts, the team began to experience strain in the mid 2000's. As most members of the DOSDoom team had left by 2004, development was primarily being shouldered by Andrew Baker and Andrew Apted. Later, with the major rewrites of the engine between 1.27 and 1.29, development was shifted primarily between the last two active developers; because of the burden of a largely two-man team, the engine was perceived as being somewhat unstable. With the release of 1.31, EDGE's standing improved and modders began returning to the engine, though [[ZDoom]] was tearing much of the share away. Since the engine had once again experienced large rendering and game-play rewrites between 1.29 and 1.31, the remainder of development was primarily headed by Andrew Apted.&lt;br /&gt;
&lt;br /&gt;
Sometime in 2010, Andrew Baker had fully retired from the team, and Andrew Apted was growing more interested in other projects. He was beginning to make plans to fix up any outstanding issues with EDGE and make the final release. Perhaps as a result of ZDoom's popularity, Andrew Apted could not keep up with all of the feature requests, as he had invested much work and time into the 1.3x branch of EDGE. He began hinting at his desire to shift to other projects, notably [[Eureka]] and [[OBLIGE]], which were later released to much acclaim.&lt;br /&gt;
&lt;br /&gt;
Into 2011, the community was well aware of his plans to retire from development with the release of 1.35. At the time, a major TC named [[Hypertension]] was perhaps the biggest project to be developed on the engine recently. The team of that TC [Isotope SoftWorks] foresaw the closing, and development of a fork named '''3DGE''' began to continue development as the modding team still required features that were only possible if they did it themselves.&lt;br /&gt;
&lt;br /&gt;
The EDGE 1.x team consisted of [[Andrew Apted]] and [[Andy Baker (darkknight)]] as the primary developers, and [[Marc A. Pullen (Fanatic)]] and [[Luke Brennan (Lobo)]] as distributors/promoters. [[Darren Salt]] was also a frequent developer and contributed a lot of code and bugfixes.&lt;br /&gt;
&lt;br /&gt;
== Later History and Current Status ==&lt;br /&gt;
&lt;br /&gt;
On April 9, 2011, Andrew Apted announced his retirement from EDGE development, leaving EDGE without a maintainer for over seven years. The last version of EDGE 1.x (1.35), was released on the same day. Two days later, the first version of '''3DGE''' was released as a hot-fix to 1.35, having merged from an abandoned earlier rewrite of EDGE itself. &lt;br /&gt;
&lt;br /&gt;
EDGE development (under the name ''3DGE'') therefore continued from 2011 well into 2018, introducing major long-requested features which were seen as somewhat standard for other modder-centric ports, including [[UDMF]], archive support, [[GLSL]] shaders, and much improved and expanded features for the [[DDF]], [[RTS]], and [[COAL]] systems; lots of hard work was put into the port since the last version was released in 2016. &lt;br /&gt;
&lt;br /&gt;
EDGE's persistent popularity and perseverance earned the respect and occasional development contributions from several other major developers in the community, including GZDoom programmers [[dpJudas]], [[Rachael Alexanderson (Eruanna)]] and [[Graf Zahl]]. Andrew Apted would occasionally assist the team by providing assistance as needed.&lt;br /&gt;
&lt;br /&gt;
On September 18th, 2018, [[Coraline_(Chu)|Cora Annis]] made an announcement of the next major version of EDGE, which would have been the first full version released by the new team since 2016. With Andrew Apted's support and blessing, the separated 3DGE fork (which was long thought as confusing due to naming and version issues) was officially absorbed back into EDGE. The impending release of 2.1.0 (stable) will mark the first version of EDGE officially released since 2011. EDGE is therefore split into two categories as far as releases are concerned - the 1.x branches, and the 2.x branches.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
* [[Wikipedia:OpenGL|OpenGL]] 1.1/3.1 Renderer Paths, with Mipmapping, Smoothing, Dynamic Lighting, mirrors, portals, and [[Wikipedia:GLSL|GLSL]] shader support; Bump-Mapping/GLSL is only supported in the 3.1 rendering path.&lt;br /&gt;
* 64-bit support&lt;br /&gt;
* SDL2 integration&lt;br /&gt;
* [[UDMF]] support&lt;br /&gt;
* PAK/[[PK3]]/PK7/{{3dgewiki|EPK|EPK|linkonly=1}} {{3dgewiki|Using_ZIPs_as_WAD_replacement|archive support|linkonly=1}}&lt;br /&gt;
* Rendering interpolation and Vsync support&lt;br /&gt;
* JPEG, PNG, TGA, BMP, PSD, GIF, HDR, PIC, PNM high-res textures; including support for [[TX_START]]/TX_END and [[HI_START]]/HI_END texture namespaces, and grAb offset support for [[PNG]] images.&lt;br /&gt;
* [[OPL]] synth playback (using nukeyT's OPLlib)&lt;br /&gt;
* Basic shadows restored from EDGE 1.27&lt;br /&gt;
* Integration of [[ZDBSP]] and improvements to [[glBSP]], including building nodes from archives; overall better 3D rendering of both existing Doom levels and newer levels.&lt;br /&gt;
* Several major and minor bugs squashed from the [[EDGE]] 1.x releases&lt;br /&gt;
* [[Heretic]]/[[Chex Quest]] IWAD support&lt;br /&gt;
* {{3dgewiki|MD3|MD3|linkonly=1}} and {{3dgewiki|MD5|MD5|linkonly=1}} model support&lt;br /&gt;
* Two-player [[splitscreen]] [[co-op]] or [[deathmatch]] (local only)&lt;br /&gt;
* [[multimedia:RoQ|RoQ]] video support for cinematics&lt;br /&gt;
* Runs on the [[Wikipedia:Dreamcast|Sega Dreamcast]] console.&lt;br /&gt;
* Normal, specular and bright-map support on models&lt;br /&gt;
* [[DDF]]/[[RTS]]/[[COAL]] enhancements and bug-fixes&lt;br /&gt;
* [[Polyobject]]s (more types will be supported in the future)&lt;br /&gt;
* {{3dgewiki|CAMERA-MAN|Camera-Man scripts|linkonly=1}}: New scripting language which utilizes cameras for complete camera control.&lt;br /&gt;
* Support for up to 64 defined [[weapon]]s at once through DDF&lt;br /&gt;
* 16 Ammo types: BULLETS, SHELLS, ROCKETS, CELLS, and AMMO5 to AMMO16. (EDGE 1.29 only. AMMO1 to AMMO4 can be used as aliases for the 4 main ammo types.)&lt;br /&gt;
* [[3D floor|Extrafloors]] feature allows modders to create submersible liquids, [[room-over-room]], or catwalks, as well as vertically moving platforms not embedded into the floor.&lt;br /&gt;
* Four [[armor]] types: GREEN (33% reduction), BLUE (50% reduction), YELLOW (75% reduction) and RED (90% reduction).&lt;br /&gt;
* [[Automap]] can be made to be stationary instead of rotating with the player's facing angle, through [[COAL]]. Automap can also be applied as a secondary layer over the normal viewing screen opposed to replacing it, allowing the player to fight enemies and keep track of their position at one time.&lt;br /&gt;
* Weapons can have secondary attacks. Weapons can also be made to be manually reloaded, or have idle stats as well. Integration through COAL and RTS means Weapons and animations can be granularity customized.&lt;br /&gt;
* Support for [[MUS]], MIDI, IT/MOD, and Ogg Vorbis music formats.&lt;br /&gt;
* [[DDF]] files allow the editing of many features (such monsters, attacks, and levels).&lt;br /&gt;
* [[Sprite]]s can be viewed from 16 angles.&lt;br /&gt;
* [[RTS]] scripting format includes an option known as &amp;quot;Start_Map ALL&amp;quot; that allows global scripts to be created that affect all maps in the game without copying the script under each individual map.&lt;br /&gt;
* [[COAL]] virtual machine scripting language allow a more powerful alternative to functions normally found in DDF/RTS, as well as controlling the entirety of the HUD module.&lt;br /&gt;
* [[Door#Sliding doors|Sliding doors]], which are done separately without using PolyObjects.&lt;br /&gt;
&lt;br /&gt;
== In-Progress ==&lt;br /&gt;
* [[Wikipedia:OpenAL|OpenAL]] for audio subsystem (being restored from EDGE 1.28, replacing SDL2), which will allow for various 3D environmental effects&lt;br /&gt;
* RoQ Render-to-Texture (for models, world textures, and menus/backgrounds)&lt;br /&gt;
* New [[DDF]] types: Terrains.ddf, Sprites.ddf, Inventory.ddf and Shaders.ddf&lt;br /&gt;
* Cross-platform IWAD selector &lt;br /&gt;
* Dynamic GLSL shader compilation&lt;br /&gt;
* Normal, specular, and brightmap support on world textures&lt;br /&gt;
* True [[inventory]] support&lt;br /&gt;
* Dynamic planar shadow system for [[dynamic light]]s&lt;br /&gt;
* [[Wikipedia:Open_Asset_Import_Library|AssImp]] 3D model back-end support for more model formats&lt;br /&gt;
* ''Quake 3: Arena''-style shader-based sky system&lt;br /&gt;
* Better [[Boom]] compatibility&lt;br /&gt;
* [[Decal]]s on all surfaces (using planned Decals.ddf)&lt;br /&gt;
* ''[[Wolfenstein_3D]]'' support (WLF_*)&lt;br /&gt;
* ''[[Rise of the Triad]]'' support (ROTT_*)&lt;br /&gt;
* ''Blake Stone'' support (BLK_*)&lt;br /&gt;
* ''[[Strife]]'' support&lt;br /&gt;
&lt;br /&gt;
Heretic support is being finalized, and is in beta as of version 2.1.0 test 3, using a similarly named definition file called HDF (Heretic Definition File). The HDF definitions were written initially by CeeJay, before the 3DGE Team took over to write proper IWAD support.&lt;br /&gt;
&lt;br /&gt;
== Popular add-ons ==&lt;br /&gt;
EDGE also brings its own unique set of popular add-ons to the Doom community. Although some dislike EDGE for its perceived instability, the following mods have in one way or another made their mark on the community.&lt;br /&gt;
&lt;br /&gt;
A few notable mods in active development are Duke it Out in DOOM and Doom Forever, both by Chris Mullen (CeeJay), and a sequel to the [[Marc A. Pullen (Fanatic)]] mod QDOOM. ''SLaVE'' and ''Hypertension: Harmony of Darkness'' are two commercial products using this engine, both being developed by Isotope Softworks and published by Goat Store Publishing.&lt;br /&gt;
&lt;br /&gt;
''Note that, as with any port enjoying such a long lifespan, backward compatibility for older mods can be hit and miss. Certain mods might run only with the application version they were designed for; the move to EDGE 2.x in particular is known to have broken support for a number of mods. Keep this in mind, and report any problems encountered if any of the below legacy mods are not running correctly.''&lt;br /&gt;
&lt;br /&gt;
* [[Don's Challenge]] — Created by [[Cory Whittle]], Don's Challenge is a 3-episode modification based around the supernatural adventures of Don P. Tello, a veteran cop who is summoned into Hell by Mortis, the incarnation of Death, to challenge thousands of hellspawned creatures that his soul might be deemed worthy by her as a vessel. At the end of Episode 1, Don transforms Mortis into a cat. However, her brother Fate summons Mortis to Hell and takes Don with her. In the third episode, Don and Mortis return to Earth, only to find it overrun by Demons and Don's own family dead; Don and Mortis attempt to take vengeance for the deaths. This mod became popular due to the use of new monsters, weapons, and levels. One weapon (cigarettes) could even be used to heal the player. Another weapon (Booze) could be used to increase armor value, but took away a small portion of health as well.  As of now, only one episode is fully released, but Episode 2 is reportedly on the way.&lt;br /&gt;
* [[Immoral Conduct]] - Created by [[Cory Whittle]], Immoral Conduct is a weapons modification for both EDGE and ZDoom (although the ZDoom version does not have as many features as its EDGE counterpart). The EDGE version contains the following: Knife, .45 Pistols, Stock 12g Pump Shotgun, Customized Pump Shotgun (fires 'slasher rounds'), 12g Hand Cannon, 9mm Uzi SMG, Fragment Hand Grenades, 40mm Grenade/Tear Gas Gun, Assault Rifle with M203, Infantry Rifle with Bayonet, Minigun, 12g Sawed-off Shotgun, Beretta 9mm Pistol, Chrome Magnum Revolver, Sentry Turret Kit (summons helper turrets to attack enemies), Gas-Powered Chainsaw, Remote/Proximity Satchel Charges, and Marking/Visibility Flares. New items included a 50% medikit and Nightvision Goggles. New helper monsters included the Marine Corporal and Marine Private. Monsters have also been modified (for example, the baron of Hell's blood is green), and shells are ejected from weapons. It is a [[partial conversion]], sometimes mistaken for a [[total conversion]], and in Whittle's words, &amp;quot;With my stuff, you have all the millions of user-made Doom and Doom II levels at your disposal to be enhanced with new weapons and items.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* [[Covert Ops]] — an EDGE version of [[Twilight Warrior]]. It has many features, such as new weapons and interesting scripts.&lt;br /&gt;
&lt;br /&gt;
* [[QDoom]] (Quake Doom) — Created by [[Marc &amp;quot;Fanatic&amp;quot; Pullen]], QDoom is a total conversion of Quake to Doom. &lt;br /&gt;
&lt;br /&gt;
* [[EarthBound Doom|EBDoom]] (Earthbound Doom) - Created by [[Baron of Sigma]], this modification has generated mixed opinions. It is not a complete game, and many consider it more of a &amp;quot;monster modification&amp;quot; since roughly 100+ different species of monsters exist, most of them imported and emulated from [[Heretic]], [[Hexen]], Duke Nukem 3D, Shadow Warrior, and Blood, and 'evolved' versions of existing game monsters, such as Chainsaw Zombies, Gold Liches, and Elder Mancubi. The game also appears to use a near-perfect emulation of the [[Sigil]] from Strife as an Easter egg weapon. In addition, the player has hit points instead of a health percentage, and can take much more damage than the common version of [[Doomguy]]. There are also several 'helper' characters based on the heroes of many of the Doom-engine games, including [[Doomguy]], [[Corvus]], and the player classes in Hexen. Certain bosses are also among the few in many modifications to have over 50,000 HP, with at least one boss having over 6,000,000 HP. The weapons are more 'mystical' and energy-based, with few traditional Doom-style weapons. Another unique feature in EBDoom is that all melee attacks used either by the player or other monsters/allies can inflict &amp;quot;critical hits&amp;quot; up to 4x damage at times, as in an RPG. Despite the community's mixed opinions of the mod, it is often used as a resource wad by other modders who want to quickly import foreign monsters into their own mods (as the author appears not to mind this). It is also one of the three mods in the Doom community to use [[Hissy]] as a central plot player, and makes many references to another EDGE mod known as [[Cacodemon Squad]]. This modification was last updated at 6.56 on January 12, 2006.&lt;br /&gt;
&lt;br /&gt;
* [[GoldenEye Doom2]] - A fairly large in-progress TC. Featuring a load of weapons in both single and multiplayer maps.  Multiple versions are available: A single player DEH version compatible with Doom Legacy and Zdoom 1.22. Multiplayer levels for standard Doom2.  An enhanced single player EDGE 1.27+ version.  The Edge version contains the following weapons:  punch/kick, Knives, Watch lazer, _Soviet_Tank_, Silencedable PP7, Dostovie, Cougar Magnum, Automatic Shotgun, pathetic Klobb, Duestch, Zmg, KF7, Sniper Rifle, Ak47, Moon Raker Laser, RCP-90, Golden Gun, Golden PP7, Rocket Launcher, and Grenades. Most of the weapons have alternate firing modes and some weapons can be dual-wielded.&lt;br /&gt;
&lt;br /&gt;
* [[Cold Hard Cash]] - An unique weapons mod offering a larger variety of weapons. Cold Hard Cash's spin on the weapons mod is that instead of just finding weapons laying around or dropped from enemies, the player must mug monsters for money to use at special weapons dispensers, which replace the original weapons, and sometimes artifacts and appear in their place. An example is that the Chainsaw is now a dispenser that allows the player to buy a Knife, a Crowbar, and other melee-type items. Most dispensers have a special offer on it, usually an upgrade to an existing weapon, which requires the said weapon in question to be held by the player before they can use it. It is also the first EDGE mod to use the &amp;quot;Start_Map ALL&amp;quot; RTS function, introduced in the 3rd release candidate of EDGE 1.29,  which allows the same scripts to be usable on all maps instead of having to add the same ones to each map individually.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
*{{dwforums|id=102456|title=EDGE 2.1.0 Impending Release}}&lt;br /&gt;
*{{zdforums|p=1073199|3DGE 2.1.0 Test3 Released}}&lt;br /&gt;
*{{Next version|Development roadmap}}&lt;br /&gt;
*[https://www.youtube.com/watch?v=PpzvWcz7uDY Heretic support demonstration]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
*[http://edge2.sourceforge.net Official EDGE site]&lt;br /&gt;
*[https://sourceforge.net/projects/edge2/files/3DGE%20binaries/ EDGE release packages], hosted by {{wp|SourceForge}}&lt;br /&gt;
*[https://sourceforge.net/projects/edge/files/EDGE%20Binaries/ Legacy EDGE binary releases], hosted by {{wp|SourceForge}}&lt;br /&gt;
*[https://github.com/3dfxdev/hyper3DGE 3DGE git repository], hosted by {{wp|github}}&lt;br /&gt;
*[https://devbuilds.drdteam.org/3dge/ Compiled SVN builds] for Windows, Linux, Mac, and Dreamcast at [[DRD Team]]&lt;br /&gt;
*{{edgewiki|Main Page|Documentation}}&lt;br /&gt;
*Dream3DGE:&lt;br /&gt;
:* [https://sourceforge.net/projects/edge2/files/3DGE%20SOURCE/DreamEDGE/ Source code repository], hosted by {{wp|SourceForge}}&lt;br /&gt;
:* [http://gamedev.allusion.net/softprj/kos/ KallistOS]&lt;br /&gt;
:* [http://www.segatech.com/technical/cpu/ SH-4 CPU]&lt;br /&gt;
*Mapsets and add-ons:&lt;br /&gt;
:* [http://www.tdgmods.net/smf/viewforum.php?f=26/ All known projects including WIPs]&lt;br /&gt;
:* [http://www.moddb.com/mods/duke-it-out-in-doom/ Duke it Out in DOOM]&lt;br /&gt;
:* {{Dwforums|id=66125|title=Doom Forever}}&lt;br /&gt;
:* {{Dwforums|id=64491|title=QDOOM sequel}}&lt;br /&gt;
:* [http://facebook.com/slavefps/ SLaVE]&lt;br /&gt;
:* [https://www.facebook.com/pages/Isotope-TDGMods/232903863419077/ Hypertension: Harmony of Darkness]&lt;br /&gt;
:* [https://www.facebook.com/Isotope-TDGMods-232903863419077/ Isotope Softworks]&lt;br /&gt;
:* [http://www.goatstorepublishing.com/ Goat Store Publishing]&lt;br /&gt;
&lt;br /&gt;
{{s-start}}&lt;br /&gt;
{{s-port}}&lt;br /&gt;
{{s-cond}}&lt;br /&gt;
{{s-bef-cond|rows=2|before=[[DOSDoom]]}}&lt;br /&gt;
{{s-ttl|rows=2|title=EDGE 1.x}}&lt;br /&gt;
{{s-aft-cond|after=3DGE}}&lt;br /&gt;
{{s-aft-cond|after=Dream3DGE}}&lt;br /&gt;
{{s-bef-cond|before=EDGE 1.x}}&lt;br /&gt;
{{s-ttl|title=3DGE}}&lt;br /&gt;
{{s-aft-cond|after=EDGE 2.x}}&lt;br /&gt;
{{s-bef-cond|before=EDGE 1.x}}&lt;br /&gt;
{{s-ttl|title=Dream3DGE}}&lt;br /&gt;
{{s-aft-cond|after=None}}&lt;br /&gt;
{{s-end}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Source ports]]&lt;br /&gt;
[[Category:Boom compatible]]&lt;br /&gt;
[[Category:Doom ports]]&lt;br /&gt;
[[Category:Limit removing source ports]]&lt;br /&gt;
[[Category:OpenGL ports]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Template:Zdforums&amp;diff=739</id>
		<title>Template:Zdforums</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Template:Zdforums&amp;diff=739"/>
				<updated>2018-11-12T23:08:11Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;[https://forum.zdoom.org/viewtopic.php?{{#if:{{{2|}}}|t={{{1}}} {{{2}}}|{{#if:{{{f|}}}|f={{{f}}}&amp;amp;}}{{#if:{{{t|}}}|t={{{t}}}&amp;amp;}}{{#if:{{{p|}}}|p={{{p}}}#p{{{p}}}}}...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;[https://forum.zdoom.org/viewtopic.php?{{#if:{{{2|}}}|t={{{1}}} {{{2}}}|{{#if:{{{f|}}}|f={{{f}}}&amp;amp;}}{{#if:{{{t|}}}|t={{{t}}}&amp;amp;}}{{#if:{{{p|}}}|p={{{p}}}#p{{{p}}}}} {{{1|ZDoom forum thread}}}}}]&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Creates a link to a thread over the [[ZDoom]] forums.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Usage&amp;lt;/u&amp;gt;&lt;br /&gt;
: '''&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;{{zdforums|somethread|somename}}&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;'''&lt;br /&gt;
: '''&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;{{zdforums|t=somethread|somename}}&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;'''&lt;br /&gt;
: '''&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;{{zdforums|f=someforum|t=somethread|somename}}&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;'''&lt;br /&gt;
: '''&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;{{zdforums|p=somepost|somename}}&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
where ''somethread'' is the thread ID and ''somename'' the thread title or the name you want to give to the link. The thread ID is a number unique to each thread. Optionally, ''someforum'' can be specified with the forum ID. For example, in this URL:&lt;br /&gt;
: &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;https://forum.zdoom.org/viewtopic.php?f=4&amp;amp;t=20573&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
the thread ID is 20573 and the forum ID is 4.&lt;br /&gt;
&lt;br /&gt;
Alternatively, ''somepost'' is the post ID, unique to a post in any forum and thread. For example, in this URL:&lt;br /&gt;
: &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;https://forum.zdoom.org/viewtopic.php?p=403186#p403186&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
the post ID is 403186.&lt;br /&gt;
&lt;br /&gt;
*If no title is given, the template uses a generic &amp;quot;ZDoom forums thread&amp;quot; title.&lt;br /&gt;
[[Category:External link templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Template:Dwforums&amp;diff=738</id>
		<title>Template:Dwforums</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Template:Dwforums&amp;diff=738"/>
				<updated>2018-11-12T23:07:41Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: Created page with &amp;quot;&amp;lt;onlyinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{#if:{{{1|{{{id|}}}}}}|&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.doomworld.com/vb/thread/{{{id|{{{1}}}}}} {{{title|{{{2|Doomworld forums thread}}}}}}]&amp;lt;/...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{#if:{{{1|{{{id|}}}}}}|&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.doomworld.com/vb/thread/{{{id|{{{1}}}}}} {{{title|{{{2|Doomworld forums thread}}}}}}]&amp;lt;/span&amp;gt;|Error: no id given, see [[Template:Dwforums|the instructions]] to use this template.}}&amp;lt;/includeonly&amp;gt;&amp;lt;/onlyinclude&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Creates a link to a thread over the Doomworld forums.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Usage&amp;lt;/u&amp;gt;&lt;br /&gt;
: '''&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;{{Dwforums|id=somenumber|title=somename}}&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
where ''somenumber'' is the thread ID and ''somename'' the thread title or the name you want to give to the link. The thread ID is a number unique to each thread. For example, in this URL:&lt;br /&gt;
: &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;https://www.doomworld.com/vb/doomworld-news/6148-the-newstuff-chronicles-75/&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
the thread ID is 6148.&lt;br /&gt;
&lt;br /&gt;
''Example:'' &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;{{Dwforums|id=6148|title=Newstuff Chronicles #75}}&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; becomes {{Dwforums|id=6148|title=Newstuff Chronicles #75}}&lt;br /&gt;
&lt;br /&gt;
*The ID can also be the first, unnamed parameter: &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;{{dwforums|6148|title=tNC75}}&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; becomes {{dwforums|6148|title=tNC75}}.&lt;br /&gt;
*The title can also be the second unnamed parameter: &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;{{dwforums|6148|tNC75}}&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; becomes {{dwforums|6148|tNC75}}.&lt;br /&gt;
*If no title is given, the template uses a generic &amp;quot;Doomworld forums thread&amp;quot; title.&lt;br /&gt;
*If no id is given, the template displays an error message: {{dwforums}}&lt;br /&gt;
&lt;br /&gt;
[[Category:External link templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=File:EDGE_LogoNew.jpg&amp;diff=737</id>
		<title>File:EDGE LogoNew.jpg</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=File:EDGE_LogoNew.jpg&amp;diff=737"/>
				<updated>2018-11-12T23:06:05Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=EDGE&amp;diff=736</id>
		<title>EDGE</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=EDGE&amp;diff=736"/>
				<updated>2018-11-12T23:05:40Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{InfoboxSourcePort&lt;br /&gt;
|title = EDGE, 3DGE, Hyper3DGE, Dream3DGE&lt;br /&gt;
|developer = [[Coraline_(Chu)|Cora Annis]], [[Joseph Fenton]], [[Rachael Alexanderson (Eruanna)]], [[Brendan Doe]], [[Damir Srpčič]], [[Maciej Kadlubowski]], [[Andrew Apted]], [[Andy Baker (darkknight)]], [[Darren Salt]], [[Erik Sandberg]], [[David Leatherdale]]&lt;br /&gt;
|nondeveloper = [[Chris Mullen (CeeJay)]], [[UsernameAK]], [[gameblabla]], [[Josh Pearson]], [[Benjamin Moir]], [[Luke Brennan (Lobo)]], [[Marc A. Pullen (Fanatic)]]&lt;br /&gt;
|baseparent = [[DOSDoom]]&lt;br /&gt;
|logo = [[File:EDGE LogoNew.jpg]]&lt;br /&gt;
|programming language = [[Wikipedia:C++|C++]], [[Wikipedia:QuakeC|QuakeC (modified)]]&lt;br /&gt;
|status = Active&lt;br /&gt;
|initialdate = 2000-06-20&lt;br /&gt;
|initialversion = 1.22&lt;br /&gt;
|platform = Cross-Platform&lt;br /&gt;
|license = {{GPL||2+}}&lt;br /&gt;
|website = [http://edge2.sourceforge.net/ SourceForge]&lt;br /&gt;
|repourl = [https://github.com/3dfxdev/hyper3DGE GitHub]&lt;br /&gt;
}}&lt;br /&gt;
'''EDGE''' (Enhanced Doom Gaming Engine) is a collaborative Open Source project based upon the [[Doom source code]]. EDGE is derived from an earlier project called [[DOSDoom]], and started development in 1999 immediately after DOSDoom 0.65 was released. '''EDGE''' is sometimes referred to as '''3DGE''', or '''hyper3DGE''' due to the long-standing development of the '''3DGE''' fork, which was initially released on April 11, 2011; it was originally created to power the ''Hypertension'' TC, and absorbed back into EDGE seven years later. The first official EDGE version was released on June 20, 2000. The latest stable version is &amp;lt;!--{{:{{PAGENAME}}/Version}}--&amp;gt;2.0.4, released on &amp;lt;!--{{:{{PAGENAME}}/Date}}--&amp;gt;December 13, 2016. The team releases *[https://devbuilds.drdteam.org/3dge/ DRDT] semi-regular development builds via [[DRD Team]].&lt;br /&gt;
&lt;br /&gt;
EDGE includes ports to many popular operating systems, including x86/x64 Windows, Linux, BeOS, Raspberry PI, Sega Dreamcast, and Mac OSX. The project is hardware-accelerated only, and also implements support for PowerVR2 CLX2 (through KallistiOS) for the Dreamcast platform. Previous versions of EDGE incorporated both software-rendered and hardware-accelerated versions, though the former was dropped with the release of version 1.29.&lt;br /&gt;
&lt;br /&gt;
The most attractive feature of EDGE is its [[DDF]] system, which originated from DOSDoom. DDF describes all game behavior inside text files external to the executable file. As a result, it is popular among modders who use the extensibility to add many new weapons and features with many fewer of the limits present in other source ports. With DDF, for example, it is possible to create monsters which can possess multiple missile and melee attacks, or create custom pain and death states for monsters when hit by specific weapons or projectiles. Combined together with [[RTS]] and the more modular, modern language [[COAL]], EDGE can rival what other popular ports are capable of through their respective scripting language implementations.&lt;br /&gt;
&lt;br /&gt;
'''Dream3DGE''' was a [[Sega]] Dreamcast-only port of EDGE 1.29, and has high compatibility with pre-1.31 mods, as it cannot currently run anything created with EDGE 1.31 or above. It must be built with KallistOS. It contains most, if not all, functionality from the parent port. This branch (and EDGE 1.29, on which it was based) was abandoned officially and rewritten and integrated back into 3DGE with version 2.0. The Dreamcast code utilizes KallistiGL instead of OpenGL for important rendering functions concerning the SH-4 CPU.&lt;br /&gt;
&lt;br /&gt;
== Early History ==&lt;br /&gt;
&lt;br /&gt;
DOSDoom began development in 1997, initially by [[Chi Hoang]] and coined the term source-port. [[Andy Baker (darkknight)]] was a frequent collaborator, and soon amassed a team of developers known as the {{3dgewiki|DOSDoom_Team|DOSDoom Team|linkonly=1}}. The entirety of the DOSDoom team began developing pioneering systems that other ports did not have at the time, including [[DDF]] and [[RTS]] scripting languages - the first such human-readable systems for DOOM. It is worth noting that the scripting systems were wholly different from [[DeHacked]] at the time because they did not need to modify the executable directly, and were split into several different files that could control much more at a granular level than DeHacked ever could. The {{3dgewiki|DOSDoom_Team|DOSDoom Team|linkonly=1}} consisted of Hoang, Baker, [[Erik Sandberg]], [[Kester Maddock]], [[Martin Howe]], [[John Cole]] and [[David Leatherdale]].&lt;br /&gt;
&lt;br /&gt;
Into 1998, the community was ripe with the emergence of other source-ports, including [[ZDoom]], [[Doom Legacy]], [[Boom]], as well as the first [[Wikipedia:OpenGL|OpenGL]] accelerated engine, [[glDoom]]. glDoom especially made an impact on the team into 1999 as OpenGL was seen as a major advancement at the time - this would be highly influential later in development. DOSDoom continued to be a major powerhouse for modders well into development of EDGE.&lt;br /&gt;
&lt;br /&gt;
In mid 1998, [[TeamTNT]] discussed with the {{3dgewiki|DOSDoom_Team|DOSDoom Team|linkonly=1}} about merging their project, [[OGRE]], directly into [[DOSDoom]]. The collaboration was announced in late 1998 and generated much interest as TeamTNT previously developed another ground-breaking port named [[BOOM]]; discussions were even joined by the inclusion of [[John Carmack]]. However, difficulties ensued for all parties and the project was abandoned. OGRE was quite possibly the progenitor of [[EDGE]] as several of the ideas both teams wanted to do was further realized with the development of EDGE. The failed merger didn't affect DOSDoom's ultimate standing and the port continued to be popular; though, possibly as a result of the planned/failed merger of DOSDoom and OGRE, Hoang left the DOSDoom Team and the DOOM community after v0.63 was released, followed by other DOSDoom members.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
In early 1999, several more source-ports were released, all offering their own features. [[3D floor]]s were pioneered with DOSDoom which generated much interest, but the DOSDoom Team began rifting as some members left the community altogether, or joined different projects. Andrew Baker and his team devised that a re-haul of DOSDoom was inevitable; the primary motivation being that the port was no longer limited to the DOS operating system.&lt;br /&gt;
 &lt;br /&gt;
It was also around this time that [[Andrew Apted]] had joined the team; it was decided that the DOSDoom name would change to better reflect its status as the most advanced 3D source-port of its time. *{{3dgewiki|TADE|TADE|linkonly=1}} was seen as a possible name before the team ultimately settled on EDGE; the port was in development before DOSDoom saw its final public release.&lt;br /&gt;
&lt;br /&gt;
DOSDoom v0.653 was released in April 10, 1999, which would be its final version. The surviving members of the DOSDoom Team [Baker, Erik Sandberg, and David Leatherdale], with Andrew Apted, immediately formed the EDGE team from the existing code-base.&lt;br /&gt;
&lt;br /&gt;
EDGE was officially released on June 20, 2000 after more than a year and a half being in secret development; it was seen as a milestone as the DDF and RTS systems were more fully realized, as well as becoming an early adopter of [[Wikipedia:OpenGL|OpenGL]] rendering. At the time, EDGE was the most advanced port as several other emergent technologies were realized in tandem, including [[glBSP]], the first true 3D node-builder for DOOM.&lt;br /&gt;
&lt;br /&gt;
The development of Marc A. Pullen's [[QDoom]] was seen as a major motivating factor for the EDGE team in its early years; its release was very popular and helped elevate EDGE's status as a true modder-centric engine. [[Cory Whittle]] was also a frequent developer of EDGE modifications that also kept the port healthy.&lt;br /&gt;
&lt;br /&gt;
EDGE development continued into the next decade; while the early years were notable for EDGE being the supreme choice for modders and OpenGL enthusiasts, the team began to experience strain in the mid 2000's. As most members of the DOSDoom team had left by 2004, development was primarily being shouldered by Andrew Baker and Andrew Apted. Later, with the major rewrites of the engine between 1.27 and 1.29, development was shifted primarily between the last two active developers; because of the burden of a largely two-man team, the engine was perceived as being somewhat unstable. With the release of 1.31, EDGE's standing improved and modders began returning to the engine, though [[ZDoom]] was tearing much of the share away. Since the engine had once again experienced large rendering and game-play rewrites between 1.29 and 1.31, the remainder of development was primarily headed by Andrew Apted.&lt;br /&gt;
&lt;br /&gt;
Sometime in 2010, Andrew Baker had fully retired from the team, and Andrew Apted was growing more interested in other projects. He was beginning to make plans to fix up any outstanding issues with EDGE and make the final release. Perhaps as a result of ZDoom's popularity, Andrew Apted could not keep up with all of the feature requests, as he had invested much work and time into the 1.3x branch of EDGE. He began hinting at his desire to shift to other projects, notably [[Eureka]] and [[OBLIGE]], which were later released to much acclaim.&lt;br /&gt;
&lt;br /&gt;
Into 2011, the community was well aware of his plans to retire from development with the release of 1.35. At the time, a major TC named [[Hypertension]] was perhaps the biggest project to be developed on the engine recently. The team of that TC [Isotope SoftWorks] foresaw the closing, and development of a fork named '''3DGE''' began to continue development as the modding team still required features that were only possible if they did it themselves.&lt;br /&gt;
&lt;br /&gt;
The EDGE 1.x team consisted of [[Andrew Apted]] and [[Andy Baker (darkknight)]] as the primary developers, and [[Marc A. Pullen (Fanatic)]] and [[Luke Brennan (Lobo)]] as distributors/promoters. [[Darren Salt]] was also a frequent developer and contributed a lot of code and bugfixes.&lt;br /&gt;
&lt;br /&gt;
== Later History and Current Status ==&lt;br /&gt;
&lt;br /&gt;
On April 9, 2011, Andrew Apted announced his retirement from EDGE development, leaving EDGE without a maintainer for over seven years. The last version of EDGE 1.x (1.35), was released on the same day. Two days later, the first version of '''3DGE''' was released as a hot-fix to 1.35, having merged from an abandoned earlier rewrite of EDGE itself. &lt;br /&gt;
&lt;br /&gt;
EDGE development (under the name ''3DGE'') therefore continued from 2011 well into 2018, introducing major long-requested features which were seen as somewhat standard for other modder-centric ports, including [[UDMF]], archive support, [[GLSL]] shaders, and much improved and expanded features for the [[DDF]], [[RTS]], and [[COAL]] systems; lots of hard work was put into the port since the last version was released in 2016. &lt;br /&gt;
&lt;br /&gt;
EDGE's persistent popularity and perseverance earned the respect and occasional development contributions from several other major developers in the community, including GZDoom programmers [[dpJudas]], [[Rachael Alexanderson (Eruanna)]] and [[Graf Zahl]]. Andrew Apted would occasionally assist the team by providing assistance as needed.&lt;br /&gt;
&lt;br /&gt;
On September 18th, 2018, [[Coraline_(Chu)|Cora Annis]] made an announcement of the next major version of EDGE, which would have been the first full version released by the new team since 2016. With Andrew Apted's support and blessing, the separated 3DGE fork (which was long thought as confusing due to naming and version issues) was officially absorbed back into EDGE. The impending release of 2.1.0 (stable) will mark the first version of EDGE officially released since 2011. EDGE is therefore split into two categories as far as releases are concerned - the 1.x branches, and the 2.x branches.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
* [[Wikipedia:OpenGL|OpenGL]] 1.1/3.1 Renderer Paths, with Mipmapping, Smoothing, Dynamic Lighting, mirrors, portals, and [[Wikipedia:GLSL|GLSL]] shader support; Bump-Mapping/GLSL is only supported in the 3.1 rendering path.&lt;br /&gt;
* 64-bit support&lt;br /&gt;
* SDL2 integration&lt;br /&gt;
* [[UDMF]] support&lt;br /&gt;
* PAK/[[PK3]]/PK7/{{3dgewiki|EPK|EPK|linkonly=1}} {{3dgewiki|Using_ZIPs_as_WAD_replacement|archive support|linkonly=1}}&lt;br /&gt;
* Rendering interpolation and Vsync support&lt;br /&gt;
* JPEG, PNG, TGA, BMP, PSD, GIF, HDR, PIC, PNM high-res textures; including support for [[TX_START]]/TX_END and [[HI_START]]/HI_END texture namespaces, and grAb offset support for [[PNG]] images.&lt;br /&gt;
* [[OPL]] synth playback (using nukeyT's OPLlib)&lt;br /&gt;
* Basic shadows restored from EDGE 1.27&lt;br /&gt;
* Integration of [[ZDBSP]] and improvements to [[glBSP]], including building nodes from archives; overall better 3D rendering of both existing Doom levels and newer levels.&lt;br /&gt;
* Several major and minor bugs squashed from the [[EDGE]] 1.x releases&lt;br /&gt;
* [[Heretic]]/[[Chex Quest]] IWAD support&lt;br /&gt;
* {{3dgewiki|MD3|MD3|linkonly=1}} and {{3dgewiki|MD5|MD5|linkonly=1}} model support&lt;br /&gt;
* Two-player [[splitscreen]] [[co-op]] or [[deathmatch]] (local only)&lt;br /&gt;
* [[multimedia:RoQ|RoQ]] video support for cinematics&lt;br /&gt;
* Runs on the [[Wikipedia:Dreamcast|Sega Dreamcast]] console.&lt;br /&gt;
* Normal, specular and bright-map support on models&lt;br /&gt;
* [[DDF]]/[[RTS]]/[[COAL]] enhancements and bug-fixes&lt;br /&gt;
* [[Polyobject]]s (more types will be supported in the future)&lt;br /&gt;
* {{3dgewiki|CAMERA-MAN|Camera-Man scripts|linkonly=1}}: New scripting language which utilizes cameras for complete camera control.&lt;br /&gt;
* Support for up to 64 defined [[weapon]]s at once through DDF&lt;br /&gt;
* 16 Ammo types: BULLETS, SHELLS, ROCKETS, CELLS, and AMMO5 to AMMO16. (EDGE 1.29 only. AMMO1 to AMMO4 can be used as aliases for the 4 main ammo types.)&lt;br /&gt;
* [[3D floor|Extrafloors]] feature allows modders to create submersible liquids, [[room-over-room]], or catwalks, as well as vertically moving platforms not embedded into the floor.&lt;br /&gt;
* Four [[armor]] types: GREEN (33% reduction), BLUE (50% reduction), YELLOW (75% reduction) and RED (90% reduction).&lt;br /&gt;
* [[Automap]] can be made to be stationary instead of rotating with the player's facing angle, through [[COAL]]. Automap can also be applied as a secondary layer over the normal viewing screen opposed to replacing it, allowing the player to fight enemies and keep track of their position at one time.&lt;br /&gt;
* Weapons can have secondary attacks. Weapons can also be made to be manually reloaded, or have idle stats as well. Integration through COAL and RTS means Weapons and animations can be granularity customized.&lt;br /&gt;
* Support for [[MUS]], MIDI, IT/MOD, and Ogg Vorbis music formats.&lt;br /&gt;
* [[DDF]] files allow the editing of many features (such monsters, attacks, and levels).&lt;br /&gt;
* [[Sprite]]s can be viewed from 16 angles.&lt;br /&gt;
* [[RTS]] scripting format includes an option known as &amp;quot;Start_Map ALL&amp;quot; that allows global scripts to be created that affect all maps in the game without copying the script under each individual map.&lt;br /&gt;
* [[COAL]] virtual machine scripting language allow a more powerful alternative to functions normally found in DDF/RTS, as well as controlling the entirety of the HUD module.&lt;br /&gt;
* [[Door#Sliding doors|Sliding doors]], which are done separately without using PolyObjects.&lt;br /&gt;
&lt;br /&gt;
== In-Progress ==&lt;br /&gt;
* [[Wikipedia:OpenAL|OpenAL]] for audio subsystem (being restored from EDGE 1.28, replacing SDL2), which will allow for various 3D environmental effects&lt;br /&gt;
* RoQ Render-to-Texture (for models, world textures, and menus/backgrounds)&lt;br /&gt;
* New [[DDF]] types: Terrains.ddf, Sprites.ddf, Inventory.ddf and Shaders.ddf&lt;br /&gt;
* Cross-platform IWAD selector &lt;br /&gt;
* Dynamic GLSL shader compilation&lt;br /&gt;
* Normal, specular, and brightmap support on world textures&lt;br /&gt;
* True [[inventory]] support&lt;br /&gt;
* Dynamic planar shadow system for [[dynamic light]]s&lt;br /&gt;
* [[Wikipedia:Open_Asset_Import_Library|AssImp]] 3D model back-end support for more model formats&lt;br /&gt;
* ''Quake 3: Arena''-style shader-based sky system&lt;br /&gt;
* Better [[Boom]] compatibility&lt;br /&gt;
* [[Decal]]s on all surfaces (using planned Decals.ddf)&lt;br /&gt;
* ''[[Wolfenstein_3D]]'' support (WLF_*)&lt;br /&gt;
* ''[[Rise of the Triad]]'' support (ROTT_*)&lt;br /&gt;
* ''Blake Stone'' support (BLK_*)&lt;br /&gt;
* ''[[Strife]]'' support&lt;br /&gt;
&lt;br /&gt;
Heretic support is being finalized, and is in beta as of version 2.1.0 test 3, using a similarly named definition file called HDF (Heretic Definition File). The HDF definitions were written initially by CeeJay, before the 3DGE Team took over to write proper IWAD support.&lt;br /&gt;
&lt;br /&gt;
== Popular add-ons ==&lt;br /&gt;
EDGE also brings its own unique set of popular add-ons to the Doom community. Although some dislike EDGE for its perceived instability, the following mods have in one way or another made their mark on the community.&lt;br /&gt;
&lt;br /&gt;
A few notable mods in active development are Duke it Out in DOOM and Doom Forever, both by Chris Mullen (CeeJay), and a sequel to the [[Marc A. Pullen (Fanatic)]] mod QDOOM. ''SLaVE'' and ''Hypertension: Harmony of Darkness'' are two commercial products using this engine, both being developed by Isotope Softworks and published by Goat Store Publishing.&lt;br /&gt;
&lt;br /&gt;
''Note that, as with any port enjoying such a long lifespan, backward compatibility for older mods can be hit and miss. Certain mods might run only with the application version they were designed for; the move to EDGE 2.x in particular is known to have broken support for a number of mods. Keep this in mind, and report any problems encountered if any of the below legacy mods are not running correctly.''&lt;br /&gt;
&lt;br /&gt;
* [[Don's Challenge]] — Created by [[Cory Whittle]], Don's Challenge is a 3-episode modification based around the supernatural adventures of Don P. Tello, a veteran cop who is summoned into Hell by Mortis, the incarnation of Death, to challenge thousands of hellspawned creatures that his soul might be deemed worthy by her as a vessel. At the end of Episode 1, Don transforms Mortis into a cat. However, her brother Fate summons Mortis to Hell and takes Don with her. In the third episode, Don and Mortis return to Earth, only to find it overrun by Demons and Don's own family dead; Don and Mortis attempt to take vengeance for the deaths. This mod became popular due to the use of new monsters, weapons, and levels. One weapon (cigarettes) could even be used to heal the player. Another weapon (Booze) could be used to increase armor value, but took away a small portion of health as well.  As of now, only one episode is fully released, but Episode 2 is reportedly on the way.&lt;br /&gt;
* [[Immoral Conduct]] - Created by [[Cory Whittle]], Immoral Conduct is a weapons modification for both EDGE and ZDoom (although the ZDoom version does not have as many features as its EDGE counterpart). The EDGE version contains the following: Knife, .45 Pistols, Stock 12g Pump Shotgun, Customized Pump Shotgun (fires 'slasher rounds'), 12g Hand Cannon, 9mm Uzi SMG, Fragment Hand Grenades, 40mm Grenade/Tear Gas Gun, Assault Rifle with M203, Infantry Rifle with Bayonet, Minigun, 12g Sawed-off Shotgun, Beretta 9mm Pistol, Chrome Magnum Revolver, Sentry Turret Kit (summons helper turrets to attack enemies), Gas-Powered Chainsaw, Remote/Proximity Satchel Charges, and Marking/Visibility Flares. New items included a 50% medikit and Nightvision Goggles. New helper monsters included the Marine Corporal and Marine Private. Monsters have also been modified (for example, the baron of Hell's blood is green), and shells are ejected from weapons. It is a [[partial conversion]], sometimes mistaken for a [[total conversion]], and in Whittle's words, &amp;quot;With my stuff, you have all the millions of user-made Doom and Doom II levels at your disposal to be enhanced with new weapons and items.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* [[Covert Ops]] — an EDGE version of [[Twilight Warrior]]. It has many features, such as new weapons and interesting scripts.&lt;br /&gt;
&lt;br /&gt;
* [[QDoom]] (Quake Doom) — Created by [[Marc &amp;quot;Fanatic&amp;quot; Pullen]], QDoom is a total conversion of Quake to Doom. &lt;br /&gt;
&lt;br /&gt;
* [[EarthBound Doom|EBDoom]] (Earthbound Doom) - Created by [[Baron of Sigma]], this modification has generated mixed opinions. It is not a complete game, and many consider it more of a &amp;quot;monster modification&amp;quot; since roughly 100+ different species of monsters exist, most of them imported and emulated from [[Heretic]], [[Hexen]], Duke Nukem 3D, Shadow Warrior, and Blood, and 'evolved' versions of existing game monsters, such as Chainsaw Zombies, Gold Liches, and Elder Mancubi. The game also appears to use a near-perfect emulation of the [[Sigil]] from Strife as an Easter egg weapon. In addition, the player has hit points instead of a health percentage, and can take much more damage than the common version of [[Doomguy]]. There are also several 'helper' characters based on the heroes of many of the Doom-engine games, including [[Doomguy]], [[Corvus]], and the player classes in Hexen. Certain bosses are also among the few in many modifications to have over 50,000 HP, with at least one boss having over 6,000,000 HP. The weapons are more 'mystical' and energy-based, with few traditional Doom-style weapons. Another unique feature in EBDoom is that all melee attacks used either by the player or other monsters/allies can inflict &amp;quot;critical hits&amp;quot; up to 4x damage at times, as in an RPG. Despite the community's mixed opinions of the mod, it is often used as a resource wad by other modders who want to quickly import foreign monsters into their own mods (as the author appears not to mind this). It is also one of the three mods in the Doom community to use [[Hissy]] as a central plot player, and makes many references to another EDGE mod known as [[Cacodemon Squad]]. This modification was last updated at 6.56 on January 12, 2006.&lt;br /&gt;
&lt;br /&gt;
* [[GoldenEye Doom2]] - A fairly large in-progress TC. Featuring a load of weapons in both single and multiplayer maps.  Multiple versions are available: A single player DEH version compatible with Doom Legacy and Zdoom 1.22. Multiplayer levels for standard Doom2.  An enhanced single player EDGE 1.27+ version.  The Edge version contains the following weapons:  punch/kick, Knives, Watch lazer, _Soviet_Tank_, Silencedable PP7, Dostovie, Cougar Magnum, Automatic Shotgun, pathetic Klobb, Duestch, Zmg, KF7, Sniper Rifle, Ak47, Moon Raker Laser, RCP-90, Golden Gun, Golden PP7, Rocket Launcher, and Grenades. Most of the weapons have alternate firing modes and some weapons can be dual-wielded.&lt;br /&gt;
&lt;br /&gt;
* [[Cold Hard Cash]] - An unique weapons mod offering a larger variety of weapons. Cold Hard Cash's spin on the weapons mod is that instead of just finding weapons laying around or dropped from enemies, the player must mug monsters for money to use at special weapons dispensers, which replace the original weapons, and sometimes artifacts and appear in their place. An example is that the Chainsaw is now a dispenser that allows the player to buy a Knife, a Crowbar, and other melee-type items. Most dispensers have a special offer on it, usually an upgrade to an existing weapon, which requires the said weapon in question to be held by the player before they can use it. It is also the first EDGE mod to use the &amp;quot;Start_Map ALL&amp;quot; RTS function, introduced in the 3rd release candidate of EDGE 1.29,  which allows the same scripts to be usable on all maps instead of having to add the same ones to each map individually.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
*{{dwforums|id=102456|title=EDGE 2.1.0 Impending Release}}&lt;br /&gt;
*{{zdforums|p=1073199|3DGE 2.1.0 Test3 Released}}&lt;br /&gt;
*{{edgewiki|Next version|Development roadmap}}&lt;br /&gt;
*[https://www.youtube.com/watch?v=PpzvWcz7uDY Heretic support demonstration]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
*[http://edge2.sourceforge.net Official EDGE site]&lt;br /&gt;
*[https://sourceforge.net/projects/edge2/files/3DGE%20binaries/ EDGE release packages], hosted by {{wp|SourceForge}}&lt;br /&gt;
*[https://sourceforge.net/projects/edge/files/EDGE%20Binaries/ Legacy EDGE binary releases], hosted by {{wp|SourceForge}}&lt;br /&gt;
*[https://github.com/3dfxdev/hyper3DGE 3DGE git repository], hosted by {{wp|github}}&lt;br /&gt;
*[https://devbuilds.drdteam.org/3dge/ Compiled SVN builds] for Windows, Linux, Mac, and Dreamcast at [[DRD Team]]&lt;br /&gt;
*{{edgewiki|Main Page|Documentation}}&lt;br /&gt;
*Dream3DGE:&lt;br /&gt;
:* [https://sourceforge.net/projects/edge2/files/3DGE%20SOURCE/DreamEDGE/ Source code repository], hosted by {{wp|SourceForge}}&lt;br /&gt;
:* [http://gamedev.allusion.net/softprj/kos/ KallistOS]&lt;br /&gt;
:* [http://www.segatech.com/technical/cpu/ SH-4 CPU]&lt;br /&gt;
*Mapsets and add-ons:&lt;br /&gt;
:* [http://www.tdgmods.net/smf/viewforum.php?f=26/ All known projects including WIPs]&lt;br /&gt;
:* [http://www.moddb.com/mods/duke-it-out-in-doom/ Duke it Out in DOOM]&lt;br /&gt;
:* {{Dwforums|id=66125|title=Doom Forever}}&lt;br /&gt;
:* {{Dwforums|id=64491|title=QDOOM sequel}}&lt;br /&gt;
:* [http://facebook.com/slavefps/ SLaVE]&lt;br /&gt;
:* [https://www.facebook.com/pages/Isotope-TDGMods/232903863419077/ Hypertension: Harmony of Darkness]&lt;br /&gt;
:* [https://www.facebook.com/Isotope-TDGMods-232903863419077/ Isotope Softworks]&lt;br /&gt;
:* [http://www.goatstorepublishing.com/ Goat Store Publishing]&lt;br /&gt;
&lt;br /&gt;
{{s-start}}&lt;br /&gt;
{{s-port}}&lt;br /&gt;
{{s-cond}}&lt;br /&gt;
{{s-bef-cond|rows=2|before=[[DOSDoom]]}}&lt;br /&gt;
{{s-ttl|rows=2|title=EDGE 1.x}}&lt;br /&gt;
{{s-aft-cond|after=3DGE}}&lt;br /&gt;
{{s-aft-cond|after=Dream3DGE}}&lt;br /&gt;
{{s-bef-cond|before=EDGE 1.x}}&lt;br /&gt;
{{s-ttl|title=3DGE}}&lt;br /&gt;
{{s-aft-cond|after=EDGE 2.x}}&lt;br /&gt;
{{s-bef-cond|before=EDGE 1.x}}&lt;br /&gt;
{{s-ttl|title=Dream3DGE}}&lt;br /&gt;
{{s-aft-cond|after=None}}&lt;br /&gt;
{{s-end}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Source ports]]&lt;br /&gt;
[[Category:Boom compatible]]&lt;br /&gt;
[[Category:Doom ports]]&lt;br /&gt;
[[Category:Limit removing source ports]]&lt;br /&gt;
[[Category:OpenGL ports]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=COAL_Manual&amp;diff=735</id>
		<title>COAL Manual</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=COAL_Manual&amp;diff=735"/>
				<updated>2018-10-02T17:31:27Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: added player.add_tactile() to the COAL Manual&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== OVERVIEW ==&lt;br /&gt;
&lt;br /&gt;
[[COAL|COAL]] is a new scripting language which has been developed especially for 3DGE. At the moment, 3DGE uses this to define custom HUD modules. This manual is designed to get you up-to-speed on all of the functions that COAL provides.&amp;lt;blockquote&amp;gt;The standard Coal scripts for drawing the DOOM HUD is loaded from this file: &amp;lt;code&amp;gt;doom_ddf/coal_hud.ec&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;The API that COAL itself is contained in is loaded from &amp;lt;code&amp;gt;doom_ddf/coal_api.ec&amp;lt;/code&amp;gt;, which is a good reference to look at while developing your HUD. Take note that the API is hard-coded to 3DGE.&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;Additionally, each archive may contain a lump called &amp;quot;&amp;lt;code&amp;gt;COALHUDS&amp;lt;/code&amp;gt;&amp;quot; which is automatically loaded (which can reside in the PAK/PK3 namespace ''&amp;lt;sub&amp;gt;&amp;lt;code&amp;gt;./scripts&amp;lt;/code&amp;gt;&amp;lt;/sub&amp;gt;''). Later scripts are able to replace any definitions (functions etc) in earlier scripts.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FILES CONTENTS ==&lt;br /&gt;
&lt;br /&gt;
=== The contents of each file or lump is simply the text of the COAL code. ===&lt;br /&gt;
The engine provides two modules: the &amp;quot;hud&amp;quot; module provides drawing functions and general queries, whereas the &amp;quot;player&amp;quot; module provides query functions about the current player. All of their functions and variables are described in separate sections below.&lt;br /&gt;
&lt;br /&gt;
In order to customize the default HUDs, your COAL code ''needs'' to redefine one of the existing functions, as follows:&amp;lt;blockquote&amp;gt;&amp;lt;big&amp;gt;'''doom_status_bar()'''&amp;lt;/big&amp;gt; ''':''' &amp;lt;code&amp;gt;replace this function if you only want to customize the full status bar (including the one shown in the automap screen). The size has to be the same (width 320, height 32).&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;big&amp;gt;'''overlay_status_bar()'''&amp;lt;/big&amp;gt; ''':''' &amp;lt;code&amp;gt;write your own version of this function if you only want to change the overlay status bar.&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;big&amp;gt;'''doom_automap()'''&amp;lt;/big&amp;gt; ''':''' &amp;lt;code&amp;gt;this function draws the automap screen (including the status bar at the bottom). Replacing it means you can show other information here instead of (or in addition to) the automap.&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;big&amp;gt;'''draw_all()'''&amp;lt;/big&amp;gt; ''':''' &amp;lt;code&amp;gt;this is the function which EDGE calls to draw everything. The normal version (in EDGE.WAD) will call the above functions depending on the user's current HUD and whether the automap is active or not. Replacing this function gives you total control: you could provide more hud configurations (or less) than the usual three, ignore the automap mode completely if you wanted, or even draw the view from multiple players.&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HUD MODULE ==&lt;br /&gt;
&lt;br /&gt;
=== General Queries ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.check_automap() : float'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''This function returns true while the user is viewing the automap (by pressing TAB) and false for the normal view.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.which_hud() : float'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''This variable returns the current HUD number which the user cycles through when pressing '+' and '-' keys. It ranges from 0 to 119, allowing 120 different HUD screens, but in reality you must use the modulo operator '%' to convert this number to a smaller range.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''For example, the standard code uses hud.which_hud() % 3 to select between three different huds (none, normal and overlay).''&amp;lt;/code&amp;gt; &amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''The following are good modulo numbers: 2,3,4,5,6,8 and 10 (because they divide into 120).''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;For a HUD which never changes, simply ignore this value.&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.get_time() : float&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''This function returns the current time, in terms of &amp;quot;tics&amp;quot; where there are 35 tics per second. In other words, after each 1/35th of a second the value of '''hud.now_time''' increases by one. It keeps going even during menus or while the game is paused.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.passed_time&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''This variable is updated by the '''hud.grab_times()''' call, and contains the number of &amp;quot;tics&amp;quot; that have passed since the last time the '''draw_all()''' function was called. Note that a result of zero is possible.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.game_mode() : string&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''This function returns a string for the current game mode: &amp;quot;sp&amp;quot; (Single Player), &amp;quot;coop&amp;quot; (Cooperative), or &amp;quot;dm&amp;quot; (Deathmatch).''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.game_name() : string&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;This function returns the DDF name of the current game being played (the one defined in [[GAMES|GAMES.DDF]]).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.map_name() : string&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;This function returns the DDF name of the current map being played (the one defined in [[LEVELS|LEVELS.DDF]]).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.map_title() : string&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;This function returns the title of the map being played, mainly to be displayed on the automap.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== * Drawing Stuff ==&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.coord_sys(w, h)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;In the original DOOM, the screen size was always 320x200, and by default all of the drawing functions here use screen coordinates as if that were the case (even when EDGE is running in different modes likes 640x480 or 1024x768). This function allows you to set a different &amp;quot;virtual&amp;quot; resolution, for example 640x400, and then all coordinates will be for this new system, plus the size of images and text characters will be affected as well.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.text_font(name)'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Sets the current text font, where the 'name' parameter refers to an entry in [[FONTS|FONTS.DDF]]. The default font is &amp;quot;DOOM&amp;quot; and is reset after each frame.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.text_color(name)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Sets the current text color, which must refer to an entry in [[COLMAP|COLMAPS.DDF]], or can be the empty string &amp;quot;&amp;quot; which causes the text to be drawn normally (without being colormapped). The default is &amp;quot;&amp;quot; and is reset after each frame.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.set_scale(value)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Sets the scaling for drawing text and for '''hud.draw_image()'''. Larger values make the text/image bigger. The default scale is 1.0 and is reset after each frame.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.set_alpha(value)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Set the alpha value (translucency) for drawing text, lines, boxes and images. The 'value' parameter ranges from 0.0 (completely invisible) to 1.0 (completely solid). The default alpha is 1.0 and is reset after each frame.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.solid_box(x, y, w, h, color)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Draws a solid rectangle consisting of a single color. The 'x' and 'y' parameters are the coordinates of the top left corner, whereas 'w' and 'h' are the width and height. The current alpha value is also applied.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;The 'color' parameter can take two different forms. Firstly it may be a string with the same notation as DDF and HTML, which begins with a &amp;quot;#&amp;quot; character and is followed by 6 hexadecimal digits. For example &amp;quot;#FF0000&amp;quot; for red and &amp;quot;#0000FF&amp;quot; for blue. Secondly it can be a Lua table with fields called 'r', 'g' and 'b' (for red, green and blue). Each of these fields is a number from 0 to 255. For example: { r=255, g=170, b=0 } for orange.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.solid_line(x1, y1, x2, y2, color)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Draws a solid line between the start coordinate (x1,y1) to the end coordinate (x2, y2). The 'color' parameter is the same as for hud.solid_box(), and the current alpha value is also applied.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.thin_box(x, y, w, h, color)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Similar to '''hud.solid_box()''', but only draws the outline of a rectangle. The inside area is not affected. The sides are always two pixels thick, and never go outside the specified area. The 'color' parameter is the same as for '''hud.solid_box()''', and the current alpha value is also applied.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.gradient_box(x, y, w, h, TL, BL, TR, BR)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Similar to '''hud.solid_box()''', but the colors for each corner are specified individually: 'TL' for top left, 'BL' for bottom left, 'TR' for top right and 'BR' for bottom right. The current alpha value will also be applied.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.draw_image(x, y, name)'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Draws an image at the given coordinates, which specify the top/left corner of the image. The current alpha and scaling factors are applied as well.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.stretch_image(x, y, w, h, name)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Similar to '''hud.draw_image()''', but the image will be stretched or squashed so that it fits exactly into the given rectangle on the screen. The current alpha value is also applied.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.tile_image(x, y, w, h, name, [x_offset, y_offset])&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Draws an image (usually a texture or flat) on the screen, where the image is tiled (repeated) to fill up the given rectangle. The current alpha and scaling factors are also applied. The 'x_offset' and 'y_offset' parameters are optional, and can be used to offset the texture by a certain number of pixels.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.draw_text(x, y, str)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Draws some text on the screen using the current text font, color, alpha and scaling values. Newlines (&amp;quot;\n&amp;quot;) in the string can be used to draw multi-line text.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.draw_num2(x, y, len, num)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Draws a number (an integer) on the screen using the current text font, color, alpha and scaling. The number is right-aligned, in other words the 'x' parameter specified the right-most pixel, and the 'len' parameter gives the maximum number of characters (including the minus sign if the number is negative).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.render_world(x, y, w, h)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Renders the view for the player on the screen, in a rectangle with the given coordinates. The player's weapon is also drawn. The views of different players can be rendered by using the '''hud.set_render_who()''' function below.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.render_automap(x, y, w, h, [options])&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Renders the automap for the player on the screen, in a rectangle with the given coordinates. Note that no background is drawn, hence you can use this function to create an overlay automap (drawn over the top of the player's view). If you need a solid color behind it, use the '''hud.solid_box()''' function first.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;The 'options' parameter is optional, when present it is a table containing a set of variables which modify the way the automap is drawn. Variables which are not present in the table are not affected (stay the same as the user's normal automap). The following list shows all the possible variables:&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;Variable	 Description&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;zoom	 Set a fixed zoom factor, where 1.0 shows the whole map, and larger values make the map bigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** &amp;lt;code&amp;gt;grid	 force the grid lines on/off&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;rotate	 force map rotation on/off&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;follow	 force follow-player mode on/off&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;things	 draw all things&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;walls	 draw all walls (like IDDT cheat)&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;allmap	 draw walls like All-Map powerup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.set_render_who(index)'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Sets the current player for rendering the world or the automap. The 'index' parameter is a small number: 1 for the &amp;quot;main player&amp;quot; on this computer (the person at the keyboard), 2 for the next player in the list, etc... upto the number of players in the game.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.automap_colors(table)'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;This function can be used to change some or all of the colors used when drawing the automap. The 'table' parameter is a Lua table where the names are automap parts and the values are the colors. For example: { grid = &amp;quot;#006666&amp;quot;, wall = &amp;quot;#FFFFFF&amp;quot; }. Parts that are not present in the table are not affected (stay the same as before). Here is a list of all the automap parts that can be changed:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;Automap Part	 Description&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** grid	 Grid lines&lt;br /&gt;
** wall	 One sided walls&lt;br /&gt;
** step	 Floor height change, climable&lt;br /&gt;
** ledge	 Floor drop-off, too high to climb&lt;br /&gt;
** ceil	 Ceiling height difference&lt;br /&gt;
** secret	 Secret doors&lt;br /&gt;
** allmap	 Unseen walls when you have the All-Map&lt;br /&gt;
** player	 Player object&lt;br /&gt;
** monster	 Monsters&lt;br /&gt;
** corpse	 Dead monsters&lt;br /&gt;
** item	 Pickup items&lt;br /&gt;
** missile	 Missiles, fireballs, etc&lt;br /&gt;
** scenery	 Scenery items&lt;br /&gt;
&lt;br /&gt;
== * Audio Functions ==&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.play_sound(name)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Plays the given sound, which must be an entry in SOUNDS.DDF.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PLAYER MODULE ==&lt;br /&gt;
&lt;br /&gt;
=== General Queries ===&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_bot()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if the current player is a bot.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.get_name()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns the name of the current player.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.get_angle()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns the angle of the current player.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.get_pos()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns the position of the current player.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.get_mlook()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns the mlook (mouse-look) angle of the current player.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.health()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the health of the current player. The result will normally be in the range 0 to 100, regardless of the SPAWNHEALTH setting for the player in DDF (in other words, the result is a percentage value of the spawn health). Values higher than 100 are possible when the player has bonus health (e.g. from the Soul Sphere pickup).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.armor(type)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;For the given armor type, returns the amount the player is currently wearing. The 'type' parameter is a number in the range 1-5, but the following names can be used for more readable code:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ARMORS.green&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ARMORS.blue&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ARMORS.purple&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ARMORS.yellow&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ARMORS.red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.total_armor(type)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the total amount of armor the player has.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.frags()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Number of frags the player has (for Deathmatch games).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.move_speed()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns a number for how fast the player is currently moving, roughly the number of map units per tic (there are 35 tics per second).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.air_in_lungs()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns amount of air in the player lungs, as a percentage value from 0 to 100. Only guaranteed to be valid while the player is underwater.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.has_key(key)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if the player currently has the specified key, which is a number from 1 to 16. For more readable code, the following names can be used:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.blue_card	KEYS.gold_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.red_card	KEYS.brass_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.yellow_card	KEYS.steel_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.green_card	KEYS.fire_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.blue_skull	KEYS.silver_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.red_skull	KEYS.copper_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.yellow_skull	KEYS.wooden_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.green_skull	KEYS.water_key&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.has_power(power)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if the player currently has the specified powerup. The 'power' parameter is a number from 1 to 16. For more readable code, the following names can be used:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.invuln&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.berserk&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.invis&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.acid_suit&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.automap&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.goggles&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.jet_pack&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.night_vis&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.scuba&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.power_left(power)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the number of seconds remaining for the specified powerup, or zero when the player does not have it. The berserk powerup only counts down the red-screen effect, and returns -1 when that is finished. The automap powerup returns a large value when active and it never counts down. The result for invulnerability is not affected by the God-mode cheat.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== * Weapon Stuff ==&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.has_weapon(name)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns true if the player currently owns the weapon, where 'name' is the DDF name of the weapon.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.has_weapon_slot(slot)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if the player currently owns any weapon which uses the given 'slot', which is a number for 0 to 9 (same as the BINDKEY command in the DDF).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.cur_weapon()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the DDF name of the weapon the player is currently holding, or the special value &amp;quot;none&amp;quot; when the player is holding no weapon at all, or &amp;quot;change&amp;quot; while the weapon is switching to a new one.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.cur_weapon_slot()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the slot number (i.e. BINDKEY) of the weapon the player is currently holding, or -1 when the player is holding no weapon at all.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.ammo(type)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the amount of ammo the player is carrying (not including any ammo inside the clips of weapons). The 'type' parameter is a number in the range 1-16. For more readable code, one of the following names can be used instead:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;AMMOS.bullets	AMMOS.pellets&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;AMMOS.shells	AMMOS.nails&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;AMMOS.rockets	AMMOS.grenades&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;AMMOS.cells	AMMOS.gas&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''player.ammomax(type)'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the maximum amount of ammo the player can carry (not including weapon clips). The 'type' parameter is the same as the '''player.ammo()''' function.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.main_ammo()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns the main ammo quantity for the player's current weapon. This is zero for weapons that don't use any ammo (like the FIST). If the weapon has a clip and the SHOWCLIP command (in DDF) is true, then the amount of ammo inside the clip is returned instead. Note that only the primary attack is checked, the secondary attack (if present) will be ignored.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.ammo_type(ATK)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the ammo type of the player's current weapon for the given attack (primary or secondary). The result is in the range 1-16, or can be 0 for the special case of NOAMMO. The 'ATK' parameter is 1 for the primary attack, 2 for the secondary attack, and is compulsory.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.ammo_pershot(ATK)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns the ammo used up per shot by the current weapon for the given attack (primary or secondary). Same as the AMMOPERSHOT commands in WEAPONS.DDF. The 'ATK' parameter is 1 for the primary attack, 2 for the secondary attack, and is compulsory.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.clip_ammo(ATK)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the current amount of ammo the clip in the player's current weapon is holding, or zero if the weapon has no clip. The 'ATK' parameter is 1 for the primary attack, 2 for the secondary attack, and is compulsory.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.clip_size(ATK)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the maximum amount of ammo the clip in the player's current weapon can hold, or zero if the weapon has no clip. The 'ATK' parameter is 1 for the primary attack, 2 for the secondary attack, and is compulsory.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.clip_is_shared()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if the player's current weapon is sharing a single clip between primary and secondary attackes (the SHARED_CLIP command).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== * Conditions ==&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.on_ground()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is standing on solid ground.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.under_water()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is in AIRLESS water and doesn't have the Scuba powerup.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_swimming()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is in swimmable water (i.e. the SWIM sector special).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_jumping()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is jumping.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_crouching()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is crouching.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.get_side_move()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is strafing from side-to-side.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_attacking()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is firing his weapon (either first or second attack).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_rampaging()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player has been firing his weapon for two seconds or more.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_using()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is holding the USE button down.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_grinning()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is grinning (after picking up a weapon).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== * Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.num_players()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the total number of players in the game, including bots.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.set_who(index)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Sets who the current player is. The 'index' parameter is a small number: 1 for the &amp;quot;main player&amp;quot; on this computer (the person at the keyboard), 2 for the next player in the list, for instance the split-screen player) etc... up to the number of players in the game. All the player query functions described here return their results for the current player.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.hurt_by()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;If the player has been hurt in the last few seconds, this returns a string describing what did the damage. Otherwise this function returns nil. The result is usually &amp;quot;enemy&amp;quot;, but could be &amp;quot;friend&amp;quot; for friendly fire. If the player hurt himself with his own damn stupidity then the result is &amp;quot;self&amp;quot;, whereas damaging floors and crushers will return &amp;quot;other&amp;quot;.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.hurt_mon()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;If the player has been hurt in the last few seconds, this returns the name of the monster or other player. Otherwise this function returns nil.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.hurt_pain()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;If the player was just hurt, this returns the damage amount, otherwise this function returns 0.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.hurt_dir()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;If the player was just hurt, this returns a direction relative to the player where the attacker was: -1 for the left side, +1 for the right side, and 0 for all other cases.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.hurt_angle()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Like player.hurt_dir(), except this returns the map angle from the player to his attacker. The result is in degrees (ranging from 0 to 359), where East is 0 and North is 90.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''player.add_tactile(id, freq, amp)'''&amp;lt;/code&amp;gt;&amp;lt;!-- This function is a FORCE_FEEDBACK call as well - joysticks that have rumble support will rumble at function link. --&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;This function can be called to add a screen-shaking effect to the player's view. The three integers above are explained below. This can be used in conjunction with others like player.hurt_dir(), or RTS commands that call COAL directly.&amp;lt;/code&amp;gt; &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* '''The following integers for player.add_tactile are as described:'''&lt;br /&gt;
** &amp;lt;code&amp;gt;'''id''': the player whom is receiving the shake (integer)&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;'''freq''': the frequency at which the screen shakes at (integer)&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;'''amp''': the intensity at which the screen shakes (integer)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== * CAMERA MODULE ==&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;cam.set_vert_bob(f)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Sets the Player bobbing. The parameter flags above are as follows:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;blockquote&amp;gt;Parameter is a ''Float'' for controlling the vertical bobbing. This was previously encapsulated in DDF where it is now controlled via COAL.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;blockquote&amp;gt;The default value is 1.2 - setting it to 0.0 will completely disable bobbing.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;cam.set_roll_bob(f)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Parameter is a ''Float'' for customizing camera rolling. Note that this can be combined with set_vert_bob, OR can be called from other functions (such as being combined with player.get_side_move() or combined with player.hurt_pain()).&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;By Default the camera set_roll_bob amount is 0.0.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CAMERA-MAN MODULE ==&lt;br /&gt;
The new Camera-Man system is in reality a COAL module, and can be completely configured through COAL. However, due to its complexity and the fact that the format is not in the QC extension (which is actually done with Console Commands), it has its own article and how-to's. [[CAMERA-MAN|You can visit that guide by clicking on this sentence.]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=COAL&amp;diff=734</id>
		<title>COAL</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=COAL&amp;diff=734"/>
				<updated>2018-09-30T20:28:39Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''COAL''' is a [https://en.wikipedia.org/wiki/QuakeC QuakeC-derived language] used for controlling the heads-up display and player interactions in [[EDGE]]. It replaces plain [[LUA]] from earlier versions of ''EDGE''. COAL is based heavily on QuakeC itself.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''See the brand-new [[COAL Manual|COAL HUD MANUAL]] for specific descriptions of all available functions.'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Loading==&lt;br /&gt;
In EDGE there are two files with hard-coded names (&amp;lt;code&amp;gt;./doom_ddf/coal_api.ec&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;./doom_ddf/coal_hud.ec&amp;lt;/code&amp;gt;) which get loaded. As you can see, these scripts use the &amp;quot;'''EC'''&amp;quot; extension (&amp;lt;code&amp;gt;as opposed to the &amp;quot;QC&amp;quot; extension from QuakeC&amp;lt;/code&amp;gt;). &amp;lt;blockquote&amp;gt;Coal scripts can also get loaded from wads, each wad given with &amp;lt;code&amp;gt;-file&amp;lt;/code&amp;gt; can contain a lump called [[COALHUDS]] which will be loaded, and functions (such as [[COAL Manual|draw_al]]&amp;lt;nowiki/&amp;gt;l) can be replaced.&amp;lt;/blockquote&amp;gt;Messages about loading and compiling errors get printed on the console and both EDGE.LOG and DEBUG.TXT.&amp;lt;!-- Like most compilers, the first error can cause lots of bogus error messages on later lines (COAL is pretty bad here, due to the removal of semicolons from the syntax). --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==Type System==&lt;br /&gt;
Coal is ''statically typed'', which means variables and function parameters can only use a single type. For example if the variable takes strings, you cannot assign a number to it. &amp;lt;!-- (This is a big difference from Lua where values have a fixed type and variables can take any kind of values). --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The available types are: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;blockquote&amp;gt;'''float''' : used for numbers (''floating point''), e.g. &amp;lt;code&amp;gt;123&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;-7.654&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
*&amp;lt;blockquote&amp;gt;'''string''' : used for strings, which are specified with double quotes, e.g. &amp;quot;foobar&amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
*&amp;lt;blockquote&amp;gt;'''vector''' : used for a 3D coordinate in the world. Vector constants are three numbers surrounded by a single quote, such as '0 -1 2'&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operators==&lt;br /&gt;
&lt;br /&gt;
* ! boolean not, e.g. !0 == 1 &lt;br /&gt;
&lt;br /&gt;
* ^ raise to the power, e.g. 2^3 == 8 &lt;br /&gt;
* &amp;amp; integer bit-and, e.g. 3 &amp;amp; 6 == 4 &lt;br /&gt;
* | integer bit-or, e.g. 3 | 6 == 7 &lt;br /&gt;
&lt;br /&gt;
* * multiplication &lt;br /&gt;
* / division &lt;br /&gt;
* % modulo &lt;br /&gt;
* + addition &lt;br /&gt;
* - subtraction &lt;br /&gt;
&lt;br /&gt;
* == equals &lt;br /&gt;
* != not equals &lt;br /&gt;
* &amp;lt; less than &lt;br /&gt;
* &amp;gt; greater than &lt;br /&gt;
* &amp;lt;= less than or equals &lt;br /&gt;
* &amp;gt;= greater than or equals &lt;br /&gt;
&lt;br /&gt;
* &amp;amp;&amp;amp; boolean and &lt;br /&gt;
* || boolean or &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Precedence table (highest to lowest):'''&lt;br /&gt;
* ^ * / % &amp;amp; | &lt;br /&gt;
* + - &lt;br /&gt;
* == != &amp;lt; &amp;gt; &amp;lt;= &amp;gt;= &lt;br /&gt;
* &amp;amp;&amp;amp; || &lt;br /&gt;
&lt;br /&gt;
The * operator can be used on two vectors, and the result is the dot product (i.e. A * B calculates A.x * B.x + A.y * B.y + A.z * B.z). &lt;br /&gt;
&lt;br /&gt;
The + operator can concatenate two strings, or a string and a float or vector (but the string must be on the left side). Hence a useful idiom is doing &amp;quot;&amp;quot; + x to convert a number to a string. &lt;br /&gt;
&lt;br /&gt;
There is no unary - operator, to negate a value you need to do this: 0 - x &lt;br /&gt;
&lt;br /&gt;
The &amp;amp;&amp;amp; and || boolean operators are short-circuit, which means that the right side is not evaluated if the result is known from the left side only. For example: (1 &amp;amp;&amp;amp; somefunc()) will never call that function. &lt;br /&gt;
&lt;br /&gt;
==Declaration Kinds==&lt;br /&gt;
&lt;br /&gt;
The following things can be declared globally: variables, constants, functions, and modules. &lt;br /&gt;
&lt;br /&gt;
All of those (except for modules) can also be declared inside modules. &lt;br /&gt;
&lt;br /&gt;
Within functions only variables can be declared (not constants, functions etc). &lt;br /&gt;
&lt;br /&gt;
Global variables, constants and functions can be redeclared by later code (especially by a newer file), so long as the types are the same. Redefining a constant means that previous code using that constant will use the new value (in COAL constants are really just read-only variables). &lt;br /&gt;
&lt;br /&gt;
Modules do not get redeclared, instead if the module already exists then the new contents are simply added to the existing module, and previous stuff can be redefined too. &lt;br /&gt;
&lt;br /&gt;
==Syntax for Variables and Constants==&lt;br /&gt;
Variables are declared like this. When the type is not specified, float is assumed. &lt;br /&gt;
&lt;br /&gt;
var name &lt;br /&gt;
var name : type &lt;br /&gt;
&lt;br /&gt;
You can also give the initial value (otherwise the value defaults to 0 for numbers, &amp;quot;&amp;quot; for strings). &lt;br /&gt;
&lt;br /&gt;
var foo = 123 &lt;br /&gt;
var bar : string = &amp;quot;qwerty&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Constants always have a value and never use a typename (after ':') because the type is known from the value. &lt;br /&gt;
&lt;br /&gt;
constant TIMEOUT = 300 &lt;br /&gt;
&lt;br /&gt;
==Syntax for Modules==&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;module name  {  .....declarations here.....  }&amp;lt;/code&amp;gt; ====&lt;br /&gt;
==Syntax for functions== &lt;br /&gt;
&lt;br /&gt;
Ordinary functions use the following syntax. The return type (and the ':') is optional, when omitted then the function does not return any value, like void functions in C. &amp;lt;!-- Note too the equals sign before the function body, which is compulsory. --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
function name(arguments....) : type = &lt;br /&gt;
{ &lt;br /&gt;
.....code here..... &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
Native functions are implemented by the host environment (EDGE) , and hence you cannot add your own. For completeness their syntax looks like this: &lt;br /&gt;
&lt;br /&gt;
function name(arguments....) : type = native&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=COAL&amp;diff=733</id>
		<title>COAL</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=COAL&amp;diff=733"/>
				<updated>2018-09-30T20:25:14Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''COAL''' is a [https://en.wikipedia.org/wiki/QuakeC QuakeC-derived language] used for controlling the heads-up display and player interactions in [[EDGE]]. It replaces plain [[LUA]] from earlier versions of ''EDGE''. COAL is based heavily on QuakeC itself.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''See the brand-new [[COAL Manual|COAL HUD MANUAL]] for specific descriptions of all available functions.'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Loading==&lt;br /&gt;
In EDGE there are two files with hard-coded names (&amp;lt;code&amp;gt;./doom_ddf/coal_api.ec&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;./doom_ddf/coal_hud.ec&amp;lt;/code&amp;gt;) which get loaded. As you can see, these scripts use the &amp;quot;'''EC'''&amp;quot; extension (&amp;lt;code&amp;gt;as opposed to the &amp;quot;QC&amp;quot; extension from QuakeC&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Coal scripts can also get loaded from wads, each wad given with -file can contain a lump called [[COALHUDS]] which will be loaded, and functions (such as [[COAL Manual|draw_al]]&amp;lt;nowiki/&amp;gt;l) can be replaced. &lt;br /&gt;
&lt;br /&gt;
Messages about loading and compiling errors get printed on the console and both EDGE.LOG and DEBUG.TXT.&amp;lt;!-- Like most compilers, the first error can cause lots of bogus error messages on later lines (COAL is pretty bad here, due to the removal of semicolons from the syntax). --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==Type System==&lt;br /&gt;
Coal is ''statically typed'', which means variables and function parameters can only use a single type. For example if the variable takes strings, you cannot assign a number to it. &amp;lt;!-- (This is a big difference from Lua where values have a fixed type and variables can take any kind of values). --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The available types are: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;blockquote&amp;gt;'''float''' : used for numbers (''floating point''), e.g. &amp;lt;code&amp;gt;123&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;-7.654&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
*&amp;lt;blockquote&amp;gt;'''string''' : used for strings, which are specified with double quotes, e.g. &amp;quot;foobar&amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
*&amp;lt;blockquote&amp;gt;'''vector''' : used for a 3D coordinate in the world. Vector constants are three numbers surrounded by a single quote, such as '0 -1 2'&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operators==&lt;br /&gt;
&lt;br /&gt;
* ! boolean not, e.g. !0 == 1 &lt;br /&gt;
&lt;br /&gt;
* ^ raise to the power, e.g. 2^3 == 8 &lt;br /&gt;
* &amp;amp; integer bit-and, e.g. 3 &amp;amp; 6 == 4 &lt;br /&gt;
* | integer bit-or, e.g. 3 | 6 == 7 &lt;br /&gt;
&lt;br /&gt;
* * multiplication &lt;br /&gt;
* / division &lt;br /&gt;
* % modulo &lt;br /&gt;
* + addition &lt;br /&gt;
* - subtraction &lt;br /&gt;
&lt;br /&gt;
* == equals &lt;br /&gt;
* != not equals &lt;br /&gt;
* &amp;lt; less than &lt;br /&gt;
* &amp;gt; greater than &lt;br /&gt;
* &amp;lt;= less than or equals &lt;br /&gt;
* &amp;gt;= greater than or equals &lt;br /&gt;
&lt;br /&gt;
* &amp;amp;&amp;amp; boolean and &lt;br /&gt;
* || boolean or &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Precedence table (highest to lowest):'''&lt;br /&gt;
* ^ * / % &amp;amp; | &lt;br /&gt;
* + - &lt;br /&gt;
* == != &amp;lt; &amp;gt; &amp;lt;= &amp;gt;= &lt;br /&gt;
* &amp;amp;&amp;amp; || &lt;br /&gt;
&lt;br /&gt;
The * operator can be used on two vectors, and the result is the dot product (i.e. A * B calculates A.x * B.x + A.y * B.y + A.z * B.z). &lt;br /&gt;
&lt;br /&gt;
The + operator can concatenate two strings, or a string and a float or vector (but the string must be on the left side). Hence a useful idiom is doing &amp;quot;&amp;quot; + x to convert a number to a string. &lt;br /&gt;
&lt;br /&gt;
There is no unary - operator, to negate a value you need to do this: 0 - x &lt;br /&gt;
&lt;br /&gt;
The &amp;amp;&amp;amp; and || boolean operators are short-circuit, which means that the right side is not evaluated if the result is known from the left side only. For example: (1 &amp;amp;&amp;amp; somefunc()) will never call that function. &lt;br /&gt;
&lt;br /&gt;
==Declaration Kinds==&lt;br /&gt;
&lt;br /&gt;
The following things can be declared globally: variables, constants, functions, and modules. &lt;br /&gt;
&lt;br /&gt;
All of those (except for modules) can also be declared inside modules. &lt;br /&gt;
&lt;br /&gt;
Within functions only variables can be declared (not constants, functions etc). &lt;br /&gt;
&lt;br /&gt;
Global variables, constants and functions can be redeclared by later code (especially by a newer file), so long as the types are the same. Redefining a constant means that previous code using that constant will use the new value (in COAL constants are really just read-only variables). &lt;br /&gt;
&lt;br /&gt;
Modules do not get redeclared, instead if the module already exists then the new contents are simply added to the existing module, and previous stuff can be redefined too. &lt;br /&gt;
&lt;br /&gt;
==Syntax for Variables and Constants==&lt;br /&gt;
Variables are declared like this. When the type is not specified, float is assumed. &lt;br /&gt;
&lt;br /&gt;
var name &lt;br /&gt;
var name : type &lt;br /&gt;
&lt;br /&gt;
You can also give the initial value (otherwise the value defaults to 0 for numbers, &amp;quot;&amp;quot; for strings). &lt;br /&gt;
&lt;br /&gt;
var foo = 123 &lt;br /&gt;
var bar : string = &amp;quot;qwerty&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Constants always have a value and never use a typename (after ':') because the type is known from the value. &lt;br /&gt;
&lt;br /&gt;
constant TIMEOUT = 300 &lt;br /&gt;
&lt;br /&gt;
==Syntax for Modules==&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;module name  {  .....declarations here.....  }&amp;lt;/code&amp;gt; ====&lt;br /&gt;
==Syntax for functions== &lt;br /&gt;
&lt;br /&gt;
Ordinary functions use the following syntax. The return type (and the ':') is optional, when omitted then the function does not return any value, like void functions in C. &amp;lt;!-- Note too the equals sign before the function body, which is compulsory. --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
function name(arguments....) : type = &lt;br /&gt;
{ &lt;br /&gt;
.....code here..... &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
Native functions are implemented by the host environment (EDGE) , and hence you cannot add your own. For completeness their syntax looks like this: &lt;br /&gt;
&lt;br /&gt;
function name(arguments....) : type = native&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=TADE&amp;diff=732</id>
		<title>TADE</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=TADE&amp;diff=732"/>
				<updated>2018-09-30T19:36:55Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''TADE''', or &amp;quot;Text-Accessible Doom Engine&amp;quot; was to be the original planned name for [[EDGE]], while [[DOSDoom]] was in the last stages of its development. The following is a communication between the developers internally from [[Andrew Apted]]:&amp;lt;blockquote&amp;gt;I joined the EDGE project near the start, I can remember the&lt;br /&gt;
discussions about what to call the project.  One suggestion was&lt;br /&gt;
&amp;quot;TADE&amp;quot;, I don't recall what the &amp;quot;A&amp;quot; meant but the whole thing was&lt;br /&gt;
&lt;br /&gt;
something like &amp;quot;Text Accessible Doom Engine&amp;quot;.&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;I think version 1.00 was where it all started, and there was 1.01,&lt;br /&gt;
1.02 etc.... which were all developed privately until the first public&lt;br /&gt;
release.  Marc Pullen was part of the team, and features for his QDoom&lt;br /&gt;
&lt;br /&gt;
project drove a lot of that early development.&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;Cheers,&lt;br /&gt;
-- Andrew&amp;lt;/blockquote&amp;gt;&amp;lt;ref&amp;gt;Referenced in an email dated 10/26/2014.&amp;lt;/ref&amp;gt; ''Date of communication was 10/24/2014.''&lt;br /&gt;
&lt;br /&gt;
[[Category:Trivia]]&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=TADE&amp;diff=731</id>
		<title>TADE</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=TADE&amp;diff=731"/>
				<updated>2018-09-30T19:33:45Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''TADE''', or &amp;quot;Text-Accessible Doom Engine&amp;quot; was to be the original planned name for [[EDGE]]. The following is a communication between the developers internally from [[Andrew Apted]]:&amp;lt;blockquote&amp;gt;I joined the EDGE project near the start, I can remember the&lt;br /&gt;
discussions about what to call the project.  One suggestion was&lt;br /&gt;
&amp;quot;TADE&amp;quot;, I don't recall what the &amp;quot;A&amp;quot; meant but the whole thing was&lt;br /&gt;
something like &amp;quot;Text Accessible Doom Engine&amp;quot;.&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;I think version 1.00 was where it all started, and there was 1.01,&lt;br /&gt;
1.02 etc.... which were all developed privately until the first public&lt;br /&gt;
release.  Marc Pullen was part of the team, and features for his QDoom&lt;br /&gt;
project drove a lot of that early development.&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;Cheers,&lt;br /&gt;
-- Andrew&amp;lt;/blockquote&amp;gt;&amp;lt;ref&amp;gt;Referenced in an email dated 10/26/2014.&amp;lt;/ref&amp;gt; ''Date of communication was 10/24/2014.''&lt;br /&gt;
&lt;br /&gt;
[[Category:Trivia]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=TADE&amp;diff=730</id>
		<title>TADE</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=TADE&amp;diff=730"/>
				<updated>2018-09-30T19:32:53Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''TADE''', or &amp;quot;Text-Accessible Doom Engine&amp;quot; was to be the original planned name for [[EDGE]]. The following is a communication between the developers internally from [[Andrew Apted]]:&amp;lt;blockquote&amp;gt;I joined the EDGE project near the start, I can remember the&lt;br /&gt;
discussions about what to call the project.  One suggestion was&lt;br /&gt;
&amp;quot;TADE&amp;quot;, I don't recall what the &amp;quot;A&amp;quot; meant but the whole thing was&lt;br /&gt;
something like &amp;quot;Text Accessible Doom Engine&amp;quot;.&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;I think version 1.00 was where it all started, and there was 1.01,&lt;br /&gt;
1.02 etc.... which were all developed privately until the first public&lt;br /&gt;
release.  Marc Pullen was part of the team, and features for his QDoom&lt;br /&gt;
project drove a lot of that early development.&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;Cheers,&lt;br /&gt;
-- Andrew&amp;lt;/blockquote&amp;gt;&amp;lt;ref&amp;gt;Referenced in an email dated 10/26/2014.&amp;lt;/ref&amp;gt; ''Date of communication was 10/24/2014.''&lt;br /&gt;
[[Category:DeveloperTrivia]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=TADE&amp;diff=729</id>
		<title>TADE</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=TADE&amp;diff=729"/>
				<updated>2018-09-30T19:29:31Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: created TADE for reference primarily on DoomWiki, but added new category &amp;quot;DeveloperTrivia&amp;quot; for references.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''TADE''', or &amp;quot;Text-Accessible Doom Engine&amp;quot; was to be the original planned name for [[EDGE]]. The following is a communication between the developers internally, which was in 2014:&lt;br /&gt;
&lt;br /&gt;
I joined the EDGE project near the start, I can remember the&lt;br /&gt;
discussions about what to call the project.  One suggestion was&lt;br /&gt;
&amp;quot;TADE&amp;quot;, I don't recall what the &amp;quot;A&amp;quot; meant but the whole thing was&lt;br /&gt;
something like &amp;quot;Text Accessible Doom Engine&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
I think version 1.00 was where it all started, and there was 1.01,&lt;br /&gt;
1.02 etc.... which were all developed privately until the first public&lt;br /&gt;
release.  Marc Pullen was part of the team, and features for his QDoom&lt;br /&gt;
project drove a lot of that early development.&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
-- Andrew&lt;br /&gt;
&lt;br /&gt;
[[Category:DeveloperTrivia]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=IWAD&amp;diff=728</id>
		<title>IWAD</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=IWAD&amp;diff=728"/>
				<updated>2018-09-30T19:11:26Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DoomWiki}}An '''IWAD''' - short for ''Internal WAD'' - is the main resource file for a [[Doom]]-engine game, containing all the game's original sounds, levels, and graphics. [[EDGE]] needs an IWAD file in order to play; without one the EDGE engine has no game data to use.&lt;br /&gt;
&lt;br /&gt;
==Supported IWADs==&lt;br /&gt;
'''Notes:''' &lt;br /&gt;
* Some file names are links to a page on the {{DoomWiki|nolink=|Entryway|Doom Wiki}} where you will find checksums for known versions of the concerned file.&lt;br /&gt;
* Some files have conflicting names; EDGE provides you with possible aliases. Note that an IWAD is actually identified by its content rather than its name. Also, any [[archive format]] supported by EDGE can technically be an IWAD.&lt;br /&gt;
&lt;br /&gt;
===Commercial games===&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
!Game!!Name!!File name!!File aliases!!Notes and download links&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot; valign=&amp;quot;top&amp;quot;|[[File:MiniDoomLogoIcon.png|link=]]&lt;br /&gt;
| Doom (Registered) || {{c|{{dwicon|nolink=|DOOM.WAD|doom.wad}}}} || ||rowspan=&amp;quot;2&amp;quot;| {{goglink|game/the_ultimate_doom|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/2280/|Buy on Steam}}&lt;br /&gt;
|-&lt;br /&gt;
| The Ultimate Doom || {{c|{{dwicon|nolink=|DOOM.WAD|doom.wad}}}} || {{c|doomu.wad}}&lt;br /&gt;
|-&lt;br /&gt;
| Doom &amp;quot;BFG Edition&amp;quot; || {{c|{{dwicon|nolink=|DOOM.WAD|doom.wad}}}} || {{c|bfgdoom.wad}}, {{c|doombfg.wad}} || {{goglink|game/doom_3_bfg_edition|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/208200/|Buy on Steam}} &amp;amp;mdash; Part of {{dw|Doom 3: BFG Edition}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;5&amp;quot; valign=&amp;quot;top&amp;quot;|[[File:MiniDoom2LogoIcon.png|link=]]&lt;br /&gt;
| [[Doom II]] || {{c|{{dwicon|nolink=|DOOM2.WAD|doom2.wad}}}} || || {{goglink|game/doom_ii_final_doom|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/2300/|Buy on Steam}}&lt;br /&gt;
|-&lt;br /&gt;
| Doom II &amp;quot;BFG Edition&amp;quot; || {{c|{{dwicon|nolink=|DOOM2.WAD|doom2.wad}}}} || {{c|bfgdoom2.wad}}, {{c|doom2bfg.wad}} || {{goglink|game/doom_3_bfg_edition|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/208200/|Buy on Steam}} &amp;amp;mdash; Part of {{dw|Doom 3: BFG Edition}}; also loads {{c|{{dwicon|nolink=|NERVE.WAD|nerve.wad}}}} &lt;br /&gt;
|-&lt;br /&gt;
| [[Final Doom]] &amp;amp;mdash; TNT: Evilution || {{c|{{dwicon|nolink=|TNT.WAD|tnt.wad}}}} || ||rowspan=&amp;quot;2&amp;quot;| {{goglink|game/doom_ii_final_doom|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/2290/|Buy on Steam}}&lt;br /&gt;
|-&lt;br /&gt;
| Final Doom &amp;amp;mdash; The Plutonia Experiment || {{c|{{dwicon|nolink=|PLUTONIA.WAD|plutonia.wad}}}} ||&lt;br /&gt;
|-&lt;br /&gt;
| French Doom II || {{c|doom2f.wad}} || || No longer sold; {{idgames|id=16030||a patch is available}} for the original English version.&lt;br /&gt;
|-&lt;br /&gt;
| [[File:MiniHereticLogoIcon.png|link=]] || Heretic (Registered or Commercial) || {{c|{{dwicon|nolink=|HERETIC.WAD|heretic.wad}}}} || {{c|hereticsr.wad}} || {{steamlink|app/2390/|buy on Steam}}&lt;br /&gt;
|-&lt;br /&gt;
| [[File:MiniChexLogoIcon.png|link=]] || [[Chex Quest]] || {{c|{{dwicon|nolink=|CHEX.WAD|chex.wad}}}} ||  || No longer sold, originally distributed in cereal boxes.&lt;br /&gt;
|-&lt;br /&gt;
| [[File:ROTTLogoIcon.png|link=]] || [[Rise of the Triad]] || {{c|{{dwicon|nolink=|DARKWAR.WAD|darkwar.wad}}}} ||  || EDGE is the only DOOM engine that can read and support Rise of the Triad: Dark War.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Free-to-play games===&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
!Game!!Name!!File name!!File aliases!!Notes and download links&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| [[File:MiniDoomLogoIcon.png|link=]] || [[Doom]] (Shareware) || {{c|{{dwicon|nolink=|DOOM1.WAD|doom1.wad}}}} || || {{idgames|id=7043|Doom shareware}}&lt;br /&gt;
|-&lt;br /&gt;
| [[File:MiniHereticLogoIcon.png|link=]] || [[Heretic]] (Shareware) || {{c|{{dwicon|nolink=|HERETIC1.WAD|heretic1.wad}}}} || || {{idgames|id=7044|Heretic shareware}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot; valign=&amp;quot;top&amp;quot;|[[File:MiniFreedoomLogo.png|link=]]&lt;br /&gt;
| [[Freedoom]]: Phase 1 || {{c|freedoom1.wad}} || {{c|freedoomu.wad}} || [https://freedoom.github.io/download.html Official site]&lt;br /&gt;
|-&lt;br /&gt;
| [[Freedoom]]: Phase 2 || {{c|freedoom2.wad}} || {{c|freedoom.wad}} || [https://freedoom.github.io/download.html Official site]&lt;br /&gt;
|-&lt;br /&gt;
| FreeDM || {{c|freedm.wad}} ||  || [https://freedoom.github.io/download.html Official site]&lt;br /&gt;
|-&lt;br /&gt;
| [[File:MiniChex3LogoIcon.png|link=]] || [[Chex Quest 3]] || {{c|{{dwicon|nolink=|CHEX3.WAD|chex3.wad}}}} ||  || [http://www.chucktropolis.com/gamers.htm Official site]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot;| [[File:MiniHacxLogoIcon.png|link=]] || [[Hacx]] v1.2 || {{c|{{dwicon|nolink=|HACX.WAD|hacx.wad}}}} || || [http://drnostromo.com/hacx/page.php?content=download Official site]&lt;br /&gt;
|-&lt;br /&gt;
|Hacx v2.0 || {{c|hacx.wad}} || {{c|hacx2.wad}} || {{DRDForum|t=5771|WIP download thread}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In addition to them, some &amp;quot;total conversion&amp;quot;-type mods can be played as their own IWAD; however since they are not detected as such by EDGE, you need to use the -iwad [[command line parameter]].&lt;br /&gt;
&lt;br /&gt;
In order to play a custom level designed for any of the above games you have to have that particular game's full IWAD (loading PWAD with shareware, demo or teaser versions is disabled). If you do not have the necessary IWAD, or if you have an old, [[IWAD Patching|unpatched]] version of the IWAD in question, you might experience undefined behavior. (But often old versions are accepted too.)&lt;br /&gt;
&lt;br /&gt;
The IWAD file(s) should be placed in a directory where EDGE will find them. This includes the same directory as the EDGE executable, as well as those pointed to by the {{c|DOOMWADDIR}} environment variable. On Linux, the directories {{c|$HOME/.EDGE}} and {{c|/usr/local/share}} are checked by default. &lt;br /&gt;
&lt;br /&gt;
==Obtaining IWADs==&lt;br /&gt;
As noted above, some IWADs can be downloaded freely; however most &amp;quot;full&amp;quot; games are not and must be bought from one of the following sources:&lt;br /&gt;
;[http://www.gog.com/games#/#sort=bestselling&amp;amp;devpub=id_software&amp;amp;page=1 GOG.com]&lt;br /&gt;
:This store offers downloadable versions of ''Ultimate Doom'', ''Doom II: Hell on Earth'' (bundled with ''Final Doom'' and the ''Master Levels for Doom II''), and ''Strife''. The Final Doom version offered is the later Anthology version, which fixes many mapping errors (such as the infamous [[doomwiki:MAP31: Pharaoh (TNT: Evilution)#Bugs|missing key in TNT MAP31]]).&lt;br /&gt;
;[http://store.steampowered.com/search/?sort_by=Name&amp;amp;sort_order=ASC&amp;amp;publisher=id+Software&amp;amp;category2=2&amp;amp;price=0%2C10&amp;amp;genre=Action Steam]&lt;br /&gt;
:This store offers downloadable versions of ''Ultimate Doom'', ''Doom II: Hell on Earth'', ''Final Doom'', ''Heretic: Shadow of the Serpent Riders'', ''Hexen: Beyond Heretic'', ''Hexen: Deathkings of the Dark Citadel'', and ''Strife''; as well as the ''Master Levels for Doom II'' which is a set of PWAD, not an IWAD.&lt;br /&gt;
:Warning: following the release of ''{{dw|Doom 3: BFG Edition}}'', the ''Master Levels'' are no longer available to purchase individually but can be bought as part of the Doom Classic Complete Pack.&lt;br /&gt;
:'''Note:''' The version of ''Hexen: Death Kings'' available on Steam is not patched. You need to download and apply the [http://www.doomworld.com/idgames/index.php?id=7022 Death Kings 1.1 patch] first. (The &amp;quot;readme.txt&amp;quot; file it tries to patch has been renamed readme-dk.txt by Steam, but is not important.) All other IWADs from Steam are fully patched.&lt;br /&gt;
;[http://www.amazon.com/ Amazon.com], [http://www.ebay.com/ eBay.com], etc.&lt;br /&gt;
:Second-hand copies of the original games can be found on such sites.&lt;br /&gt;
;Flea markets, used-games bins in brick-and-mortar stores, etc.&lt;br /&gt;
:It's mostly a matter of luck, but they can still sometimes be found this way.&lt;br /&gt;
&lt;br /&gt;
==Custom IWADs==&lt;br /&gt;
EDGE is currently working on the ability to define any WAD/distro/archive as an IWAD or [[IPK]] (IwadPacKage) - currently this is only available by using the -iwad switch.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[WAD]]&lt;br /&gt;
*[[PWAD]]&lt;br /&gt;
[[Category:Glossary]][[Category:Supported games|*]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=IWAD&amp;diff=727</id>
		<title>IWAD</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=IWAD&amp;diff=727"/>
				<updated>2018-09-30T19:09:34Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{dw}}An '''IWAD''' - short for ''Internal WAD'' - is the main resource file for a [[Doom]]-engine game, containing all the game's original sounds, levels, and graphics. [[EDGE]] needs an IWAD file in order to play; without one the EDGE engine has no game data to use.&lt;br /&gt;
&lt;br /&gt;
==Supported IWADs==&lt;br /&gt;
'''Notes:''' &lt;br /&gt;
* Some file names are links to a page on the {{dw|nolink=|Entryway|Doom Wiki}} where you will find checksums for known versions of the concerned file.&lt;br /&gt;
* Some files have conflicting names; EDGE provides you with possible aliases. Note that an IWAD is actually identified by its content rather than its name. Also, any [[archive format]] supported by EDGE can technically be an IWAD.&lt;br /&gt;
&lt;br /&gt;
===Commercial games===&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
!Game!!Name!!File name!!File aliases!!Notes and download links&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot; valign=&amp;quot;top&amp;quot;|[[File:MiniDoomLogoIcon.png|link=]]&lt;br /&gt;
| Doom (Registered) || {{c|{{dwicon|nolink=|DOOM.WAD|doom.wad}}}} || ||rowspan=&amp;quot;2&amp;quot;| {{goglink|game/the_ultimate_doom|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/2280/|Buy on Steam}}&lt;br /&gt;
|-&lt;br /&gt;
| The Ultimate Doom || {{c|{{dwicon|nolink=|DOOM.WAD|doom.wad}}}} || {{c|doomu.wad}}&lt;br /&gt;
|-&lt;br /&gt;
| Doom &amp;quot;BFG Edition&amp;quot; || {{c|{{dwicon|nolink=|DOOM.WAD|doom.wad}}}} || {{c|bfgdoom.wad}}, {{c|doombfg.wad}} || {{goglink|game/doom_3_bfg_edition|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/208200/|Buy on Steam}} &amp;amp;mdash; Part of {{dw|Doom 3: BFG Edition}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;5&amp;quot; valign=&amp;quot;top&amp;quot;|[[File:MiniDoom2LogoIcon.png|link=]]&lt;br /&gt;
| [[Doom II]] || {{c|{{dwicon|nolink=|DOOM2.WAD|doom2.wad}}}} || || {{goglink|game/doom_ii_final_doom|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/2300/|Buy on Steam}}&lt;br /&gt;
|-&lt;br /&gt;
| Doom II &amp;quot;BFG Edition&amp;quot; || {{c|{{dwicon|nolink=|DOOM2.WAD|doom2.wad}}}} || {{c|bfgdoom2.wad}}, {{c|doom2bfg.wad}} || {{goglink|game/doom_3_bfg_edition|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/208200/|Buy on Steam}} &amp;amp;mdash; Part of {{dw|Doom 3: BFG Edition}}; also loads {{c|{{dwicon|nolink=|NERVE.WAD|nerve.wad}}}} &lt;br /&gt;
|-&lt;br /&gt;
| [[Final Doom]] &amp;amp;mdash; TNT: Evilution || {{c|{{dwicon|nolink=|TNT.WAD|tnt.wad}}}} || ||rowspan=&amp;quot;2&amp;quot;| {{goglink|game/doom_ii_final_doom|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/2290/|Buy on Steam}}&lt;br /&gt;
|-&lt;br /&gt;
| Final Doom &amp;amp;mdash; The Plutonia Experiment || {{c|{{dwicon|nolink=|PLUTONIA.WAD|plutonia.wad}}}} ||&lt;br /&gt;
|-&lt;br /&gt;
| French Doom II || {{c|doom2f.wad}} || || No longer sold; {{idgames|id=16030||a patch is available}} for the original English version.&lt;br /&gt;
|-&lt;br /&gt;
| [[File:MiniHereticLogoIcon.png|link=]] || Heretic (Registered or Commercial) || {{c|{{dwicon|nolink=|HERETIC.WAD|heretic.wad}}}} || {{c|hereticsr.wad}} || {{steamlink|app/2390/|buy on Steam}}&lt;br /&gt;
|-&lt;br /&gt;
| [[File:MiniChexLogoIcon.png|link=]] || [[Chex Quest]] || {{c|{{dwicon|nolink=|CHEX.WAD|chex.wad}}}} ||  || No longer sold, originally distributed in cereal boxes.&lt;br /&gt;
|-&lt;br /&gt;
| [[File:ROTTLogoIcon.png|link=]] || [[Rise of the Triad]] || {{c|{{dwicon|nolink=|DARKWAR.WAD|darkwar.wad}}}} ||  || EDGE is the only DOOM engine that can read and support Rise of the Triad: Dark War.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Free-to-play games===&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
!Game!!Name!!File name!!File aliases!!Notes and download links&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| [[File:MiniDoomLogoIcon.png|link=]] || [[Doom]] (Shareware) || {{c|{{dwicon|nolink=|DOOM1.WAD|doom1.wad}}}} || || {{idgames|id=7043|Doom shareware}}&lt;br /&gt;
|-&lt;br /&gt;
| [[File:MiniHereticLogoIcon.png|link=]] || [[Heretic]] (Shareware) || {{c|{{dwicon|nolink=|HERETIC1.WAD|heretic1.wad}}}} || || {{idgames|id=7044|Heretic shareware}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot; valign=&amp;quot;top&amp;quot;|[[File:MiniFreedoomLogo.png|link=]]&lt;br /&gt;
| [[Freedoom]]: Phase 1 || {{c|freedoom1.wad}} || {{c|freedoomu.wad}} || [https://freedoom.github.io/download.html Official site]&lt;br /&gt;
|-&lt;br /&gt;
| [[Freedoom]]: Phase 2 || {{c|freedoom2.wad}} || {{c|freedoom.wad}} || [https://freedoom.github.io/download.html Official site]&lt;br /&gt;
|-&lt;br /&gt;
| FreeDM || {{c|freedm.wad}} ||  || [https://freedoom.github.io/download.html Official site]&lt;br /&gt;
|-&lt;br /&gt;
| [[File:MiniChex3LogoIcon.png|link=]] || [[Chex Quest 3]] || {{c|{{dwicon|nolink=|CHEX3.WAD|chex3.wad}}}} ||  || [http://www.chucktropolis.com/gamers.htm Official site]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot;| [[File:MiniHacxLogoIcon.png|link=]] || [[Hacx]] v1.2 || {{c|{{dwicon|nolink=|HACX.WAD|hacx.wad}}}} || || [http://drnostromo.com/hacx/page.php?content=download Official site]&lt;br /&gt;
|-&lt;br /&gt;
|Hacx v2.0 || {{c|hacx.wad}} || {{c|hacx2.wad}} || {{DRDForum|t=5771|WIP download thread}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In addition to them, some &amp;quot;total conversion&amp;quot;-type mods can be played as their own IWAD; however since they are not detected as such by EDGE, you need to use the -iwad [[command line parameter]].&lt;br /&gt;
&lt;br /&gt;
In order to play a custom level designed for any of the above games you have to have that particular game's full IWAD (loading PWAD with shareware, demo or teaser versions is disabled). If you do not have the necessary IWAD, or if you have an old, [[IWAD Patching|unpatched]] version of the IWAD in question, you might experience undefined behavior. (But often old versions are accepted too.)&lt;br /&gt;
&lt;br /&gt;
The IWAD file(s) should be placed in a directory where EDGE will find them. This includes the same directory as the EDGE executable, as well as those pointed to by the {{c|DOOMWADDIR}} environment variable. On Linux, the directories {{c|$HOME/.EDGE}} and {{c|/usr/local/share}} are checked by default. &lt;br /&gt;
&lt;br /&gt;
==Obtaining IWADs==&lt;br /&gt;
As noted above, some IWADs can be downloaded freely; however most &amp;quot;full&amp;quot; games are not and must be bought from one of the following sources:&lt;br /&gt;
;[http://www.gog.com/games#/#sort=bestselling&amp;amp;devpub=id_software&amp;amp;page=1 GOG.com]&lt;br /&gt;
:This store offers downloadable versions of ''Ultimate Doom'', ''Doom II: Hell on Earth'' (bundled with ''Final Doom'' and the ''Master Levels for Doom II''), and ''Strife''. The Final Doom version offered is the later Anthology version, which fixes many mapping errors (such as the infamous [[doomwiki:MAP31: Pharaoh (TNT: Evilution)#Bugs|missing key in TNT MAP31]]).&lt;br /&gt;
;[http://store.steampowered.com/search/?sort_by=Name&amp;amp;sort_order=ASC&amp;amp;publisher=id+Software&amp;amp;category2=2&amp;amp;price=0%2C10&amp;amp;genre=Action Steam]&lt;br /&gt;
:This store offers downloadable versions of ''Ultimate Doom'', ''Doom II: Hell on Earth'', ''Final Doom'', ''Heretic: Shadow of the Serpent Riders'', ''Hexen: Beyond Heretic'', ''Hexen: Deathkings of the Dark Citadel'', and ''Strife''; as well as the ''Master Levels for Doom II'' which is a set of PWAD, not an IWAD.&lt;br /&gt;
:Warning: following the release of ''{{dw|Doom 3: BFG Edition}}'', the ''Master Levels'' are no longer available to purchase individually but can be bought as part of the Doom Classic Complete Pack.&lt;br /&gt;
:'''Note:''' The version of ''Hexen: Death Kings'' available on Steam is not patched. You need to download and apply the [http://www.doomworld.com/idgames/index.php?id=7022 Death Kings 1.1 patch] first. (The &amp;quot;readme.txt&amp;quot; file it tries to patch has been renamed readme-dk.txt by Steam, but is not important.) All other IWADs from Steam are fully patched.&lt;br /&gt;
;[http://www.amazon.com/ Amazon.com], [http://www.ebay.com/ eBay.com], etc.&lt;br /&gt;
:Second-hand copies of the original games can be found on such sites.&lt;br /&gt;
;Flea markets, used-games bins in brick-and-mortar stores, etc.&lt;br /&gt;
:It's mostly a matter of luck, but they can still sometimes be found this way.&lt;br /&gt;
&lt;br /&gt;
==Custom IWADs==&lt;br /&gt;
EDGE is currently working on the ability to define any WAD/distro/archive as an IWAD or [[IPK]] (IwadPacKage) - currently this is only available by using the -iwad switch.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[WAD]]&lt;br /&gt;
*[[PWAD]]&lt;br /&gt;
[[Category:Glossary]][[Category:Supported games|*]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=File:ROTTLogoIcon.png&amp;diff=726</id>
		<title>File:ROTTLogoIcon.png</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=File:ROTTLogoIcon.png&amp;diff=726"/>
				<updated>2018-09-30T18:54:57Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=IWAD&amp;diff=725</id>
		<title>IWAD</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=IWAD&amp;diff=725"/>
				<updated>2018-09-30T18:51:50Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: completely redone IWAD page, using ZDoom's as a template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{doomwiki}}An '''IWAD''' - short for ''Internal WAD'' - is the main resource file for a [[Doom]]-engine game, containing all the game's original sounds, levels, and graphics. [[EDGE]] needs an IWAD file in order to play; without one the EDGE engine has no game data to use.&lt;br /&gt;
&lt;br /&gt;
==Supported IWADs==&lt;br /&gt;
'''Notes:''' &lt;br /&gt;
* Some file names are links to a page on the {{dwicon|nolink=|Entryway|Doom Wiki}} where you will find checksums for known versions of the concerned file.&lt;br /&gt;
* Some files have conflicting names; EDGE provides you with possible aliases. Note that an IWAD is actually identified by its content rather than its name. Also, any [[archive format]] supported by EDGE can technically be an IWAD.&lt;br /&gt;
&lt;br /&gt;
===Commercial games===&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
!Game!!Name!!File name!!File aliases!!Notes and download links&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot; valign=&amp;quot;top&amp;quot;|[[File:MiniDoomLogoIcon.png|link=]]&lt;br /&gt;
| Doom (Registered) || {{c|{{dwicon|nolink=|DOOM.WAD|doom.wad}}}} || ||rowspan=&amp;quot;2&amp;quot;| {{goglink|game/the_ultimate_doom|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/2280/|Buy on Steam}}&lt;br /&gt;
|-&lt;br /&gt;
| The Ultimate Doom || {{c|{{dwicon|nolink=|DOOM.WAD|doom.wad}}}} || {{c|doomu.wad}}&lt;br /&gt;
|-&lt;br /&gt;
| Doom &amp;quot;BFG Edition&amp;quot; || {{c|{{dwicon|nolink=|DOOM.WAD|doom.wad}}}} || {{c|bfgdoom.wad}}, {{c|doombfg.wad}} || {{goglink|game/doom_3_bfg_edition|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/208200/|Buy on Steam}} &amp;amp;mdash; Part of {{dw|Doom 3: BFG Edition}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;5&amp;quot; valign=&amp;quot;top&amp;quot;|[[File:MiniDoom2LogoIcon.png|link=]]&lt;br /&gt;
| [[Doom II]] || {{c|{{dwicon|nolink=|DOOM2.WAD|doom2.wad}}}} || || {{goglink|game/doom_ii_final_doom|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/2300/|Buy on Steam}}&lt;br /&gt;
|-&lt;br /&gt;
| Doom II &amp;quot;BFG Edition&amp;quot; || {{c|{{dwicon|nolink=|DOOM2.WAD|doom2.wad}}}} || {{c|bfgdoom2.wad}}, {{c|doom2bfg.wad}} || {{goglink|game/doom_3_bfg_edition|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/208200/|Buy on Steam}} &amp;amp;mdash; Part of {{dw|Doom 3: BFG Edition}}; also loads {{c|{{dwicon|nolink=|NERVE.WAD|nerve.wad}}}} &lt;br /&gt;
|-&lt;br /&gt;
| [[Final Doom]] &amp;amp;mdash; TNT: Evilution || {{c|{{dwicon|nolink=|TNT.WAD|tnt.wad}}}} || ||rowspan=&amp;quot;2&amp;quot;| {{goglink|game/doom_ii_final_doom|Buy on GOG.com}} &amp;amp;mdash; {{steamlink|app/2290/|Buy on Steam}}&lt;br /&gt;
|-&lt;br /&gt;
| Final Doom &amp;amp;mdash; The Plutonia Experiment || {{c|{{dwicon|nolink=|PLUTONIA.WAD|plutonia.wad}}}} ||&lt;br /&gt;
|-&lt;br /&gt;
| French Doom II || {{c|doom2f.wad}} || || No longer sold; {{idgames|id=16030||a patch is available}} for the original English version.&lt;br /&gt;
|-&lt;br /&gt;
| [[File:MiniHereticLogoIcon.png|link=]] || Heretic (Registered or Commercial) || {{c|{{dwicon|nolink=|HERETIC.WAD|heretic.wad}}}} || {{c|hereticsr.wad}} || {{steamlink|app/2390/|buy on Steam}}&lt;br /&gt;
|-&lt;br /&gt;
| [[File:MiniChexLogoIcon.png|link=]] || [[Chex Quest]] || {{c|{{dwicon|nolink=|CHEX.WAD|chex.wad}}}} ||  || No longer sold, originally distributed in cereal boxes.&lt;br /&gt;
|-&lt;br /&gt;
| [[File:ROTTLogoIcon.png|link=]] || [[Rise of the Triad]] || {{c|{{dwicon|nolink=|DARKWAR.WAD|darkwar.wad}}}} ||  || EDGE is the only DOOM engine that can read and support Rise of the Triad: Dark War.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Free-to-play games===&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
!Game!!Name!!File name!!File aliases!!Notes and download links&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| [[File:MiniDoomLogoIcon.png|link=]] || [[Doom]] (Shareware) || {{c|{{dwicon|nolink=|DOOM1.WAD|doom1.wad}}}} || || {{idgames|id=7043|Doom shareware}}&lt;br /&gt;
|-&lt;br /&gt;
| [[File:MiniHereticLogoIcon.png|link=]] || [[Heretic]] (Shareware) || {{c|{{dwicon|nolink=|HERETIC1.WAD|heretic1.wad}}}} || || {{idgames|id=7044|Heretic shareware}}&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot; valign=&amp;quot;top&amp;quot;|[[File:MiniFreedoomLogo.png|link=]]&lt;br /&gt;
| [[Freedoom]]: Phase 1 || {{c|freedoom1.wad}} || {{c|freedoomu.wad}} || [https://freedoom.github.io/download.html Official site]&lt;br /&gt;
|-&lt;br /&gt;
| [[Freedoom]]: Phase 2 || {{c|freedoom2.wad}} || {{c|freedoom.wad}} || [https://freedoom.github.io/download.html Official site]&lt;br /&gt;
|-&lt;br /&gt;
| FreeDM || {{c|freedm.wad}} ||  || [https://freedoom.github.io/download.html Official site]&lt;br /&gt;
|-&lt;br /&gt;
| [[File:MiniChex3LogoIcon.png|link=]] || [[Chex Quest 3]] || {{c|{{dwicon|nolink=|CHEX3.WAD|chex3.wad}}}} ||  || [http://www.chucktropolis.com/gamers.htm Official site]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot;| [[File:MiniHacxLogoIcon.png|link=]] || [[Hacx]] v1.2 || {{c|{{dwicon|nolink=|HACX.WAD|hacx.wad}}}} || || [http://drnostromo.com/hacx/page.php?content=download Official site]&lt;br /&gt;
|-&lt;br /&gt;
|Hacx v2.0 || {{c|hacx.wad}} || {{c|hacx2.wad}} || {{DRDForum|t=5771|WIP download thread}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In addition to them, some &amp;quot;total conversion&amp;quot;-type mods can be played as their own IWAD; however since they are not detected as such by EDGE, you need to use the -iwad [[command line parameter]].&lt;br /&gt;
&lt;br /&gt;
In order to play a custom level designed for any of the above games you have to have that particular game's full IWAD (loading PWAD with shareware, demo or teaser versions is disabled). If you do not have the necessary IWAD, or if you have an old, [[IWAD Patching|unpatched]] version of the IWAD in question, you might experience undefined behavior. (But often old versions are accepted too.)&lt;br /&gt;
&lt;br /&gt;
The IWAD file(s) should be placed in a directory where EDGE will find them. This includes the same directory as the EDGE executable, as well as those pointed to by the {{c|DOOMWADDIR}} environment variable. On Linux, the directories {{c|$HOME/.EDGE}} and {{c|/usr/local/share}} are checked by default. &lt;br /&gt;
&lt;br /&gt;
==Obtaining IWADs==&lt;br /&gt;
As noted above, some IWADs can be downloaded freely; however most &amp;quot;full&amp;quot; games are not and must be bought from one of the following sources:&lt;br /&gt;
;[http://www.gog.com/games#/#sort=bestselling&amp;amp;devpub=id_software&amp;amp;page=1 GOG.com]&lt;br /&gt;
:This store offers downloadable versions of ''Ultimate Doom'', ''Doom II: Hell on Earth'' (bundled with ''Final Doom'' and the ''Master Levels for Doom II''), and ''Strife''. The Final Doom version offered is the later Anthology version, which fixes many mapping errors (such as the infamous [[doomwiki:MAP31: Pharaoh (TNT: Evilution)#Bugs|missing key in TNT MAP31]]).&lt;br /&gt;
;[http://store.steampowered.com/search/?sort_by=Name&amp;amp;sort_order=ASC&amp;amp;publisher=id+Software&amp;amp;category2=2&amp;amp;price=0%2C10&amp;amp;genre=Action Steam]&lt;br /&gt;
:This store offers downloadable versions of ''Ultimate Doom'', ''Doom II: Hell on Earth'', ''Final Doom'', ''Heretic: Shadow of the Serpent Riders'', ''Hexen: Beyond Heretic'', ''Hexen: Deathkings of the Dark Citadel'', and ''Strife''; as well as the ''Master Levels for Doom II'' which is a set of PWAD, not an IWAD.&lt;br /&gt;
:Warning: following the release of ''{{dw|Doom 3: BFG Edition}}'', the ''Master Levels'' are no longer available to purchase individually but can be bought as part of the Doom Classic Complete Pack.&lt;br /&gt;
:'''Note:''' The version of ''Hexen: Death Kings'' available on Steam is not patched. You need to download and apply the [http://www.doomworld.com/idgames/index.php?id=7022 Death Kings 1.1 patch] first. (The &amp;quot;readme.txt&amp;quot; file it tries to patch has been renamed readme-dk.txt by Steam, but is not important.) All other IWADs from Steam are fully patched.&lt;br /&gt;
;[http://www.amazon.com/ Amazon.com], [http://www.ebay.com/ eBay.com], etc.&lt;br /&gt;
:Second-hand copies of the original games can be found on such sites.&lt;br /&gt;
;Flea markets, used-games bins in brick-and-mortar stores, etc.&lt;br /&gt;
:It's mostly a matter of luck, but they can still sometimes be found this way.&lt;br /&gt;
&lt;br /&gt;
==Custom IWADs==&lt;br /&gt;
EDGE is currently working on the ability to define any WAD/distro/archive as an IWAD or [[IPK]] (IwadPacKage) - currently this is only available by using the -iwad switch.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[WAD]]&lt;br /&gt;
*[[PWAD]]&lt;br /&gt;
[[Category:Glossary]][[Category:Supported games|*]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=EDGENEW&amp;diff=724</id>
		<title>EDGENEW</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=EDGENEW&amp;diff=724"/>
				<updated>2018-09-23T00:39:01Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: created for the DoomWiki, we can use this as a &amp;quot;sandbox&amp;quot; of sorts until we all agree on the final version.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{InfoboxSourcePort&lt;br /&gt;
|title = EDGE, 3DGE, Hyper3DGE, Dream3DGE&lt;br /&gt;
|developer = [[Cora Annis (Chu)]], [[Joseph Fenton]], [[Rachael Alexanderson (Eruanna)]], [[Brendan Doe]], [[Damir Srpčič]], [[Maciej Kadlubowski]], [[Andrew Apted]], [[Andy Baker (darkknight)]]&lt;br /&gt;
|nondeveloper = [[Chris Mullen (CeeJay)]], [[UsernameAK]], [[gameblabla]], [[Josh Pearson]], [[Benjamin Moir]], [[Luke Brennan (Lobo)]], [[Marc A. Pullen (Fanatic)]]&lt;br /&gt;
|baseparent = [[DOSDoom]]&lt;br /&gt;
|programming language = [[Wikipedia:C++|C++]], [[Wikipedia:QuakeC|QuakeC (modified)]]&lt;br /&gt;
|status = Active&lt;br /&gt;
|initialdate = 2000-06-20&lt;br /&gt;
|initialversion = 1.22&lt;br /&gt;
|platform = Cross-Platform&lt;br /&gt;
|license = {{GPL||2+}}&lt;br /&gt;
|website = [http://edge.sourceforge.net/ http://edge.sourceforge.net/]&lt;br /&gt;
|repourl = [https://github.com/3dfxdev/hyper3DGE GitHub]&lt;br /&gt;
|website = [http://edge2.sf.net/ http://edge2.sf.net/]&lt;br /&gt;
}}'''EDGE''' (Enhanced Doom Gaming Engine) is a collaborative Open Source project based upon the [[Doom source code]]. EDGE is derived from an earlier project called [[DOSDoom]], and started development in 1999 immediately after DOSDoom 0.65 was released. '''EDGE''' is sometimes referred to as '''3DGE''', or '''hyper3DGE''' due to the long-standing development of the '''3DGE''' fork, which was initially released on &amp;lt;!--{{:{{PAGENAME}}/Date}}--&amp;gt;2011-04-11; it was originally created to power the ''Hypertension'' TC, and absorbed back into EDGE seven years later. The first official EDGE version was released on June 20, 2000. The latest version of EDGE is &amp;lt;!--{{:{{PAGENAME}}/Version}}--&amp;gt;2.0.4, released on &amp;lt;!--{{:{{PAGENAME}}/Date}}--&amp;gt;2017-12-13. &lt;br /&gt;
&lt;br /&gt;
EDGE includes ports to many popular operating systems, including x86/x64 Windows, Linux, BeOS, Raspberry PI, Sega Dreamcast, and Mac OSX. The project is hardware-accelerated only, and also implements support for PowerVR2 CLX2 (through KallistiOS) for the Dreamcast platform. Previous versions of EDGE incorporated both software-rendered and hardware-accelerated versions, though the former was dropped with the release of version 1.29.&lt;br /&gt;
&lt;br /&gt;
The most attractive feature of EDGE is its DDF system, which originated from DOSDoom. DDF describes all game behavior inside text files external to the executable file. As a result, it is popular among modders who use the extensibility to add many new weapons and features with many fewer of the limits present in other source ports. With DDF, for example, it is possible to create monsters which can possess multiple missile and melee attacks, or create custom pain and death states for monsters when hit by specific weapons or projectiles.&lt;br /&gt;
&lt;br /&gt;
Combined together with [[RTS]] and the more modular, modern language [[COAL]], EDGE can rival what more modern source ports are capable of through their respective scripting language implementations.&lt;br /&gt;
&lt;br /&gt;
A few notable mods in active development are [http://www.moddb.com/mods/duke-it-out-in-doom/ Duke it Out in DOOM] and {{Dwforums|id=66125|title=Doom Forever}}, both by Chris Mullen (CeeJay), and a {{Dwforums|id=64491|title=sequel}} to the [[Marc A. Pullen (Fanatic)]] mod QDOOM. [http://facebook.com/slavefps/ SLaVE] and  [https://www.facebook.com/pages/Isotope-TDGMods/232903863419077/ Hypertension: Harmony of Darkness] are two commercial products using this engine, both being developed by [https://www.facebook.com/Isotope-TDGMods-232903863419077/ Isotope Softworks] and published by [http://www.goatstorepublishing.com/ Goat Store Publishing]. The full list of known and active mods are [http://www.tdgmods.net/smf/viewforum.php?f=26/ here].&lt;br /&gt;
&lt;br /&gt;
'''Dream3DGE''' was a [[Sega]] Dreamcast-only port of EDGE 1.29, and has high compatibility with pre-1.31 mods, as it cannot currently run anything created with EDGE 1.31 or above. It must be built with [http://gamedev.allusion.net/softprj/kos/ KallistOS]. It contains most, if not all, functionality from the parent port. This branch (and EDGE 1.29, on which it was based) was abandoned officially and rewritten and integrated back into 3DGE with version 2.0. The Dreamcast code utilitizes KallistiGL instead of OpenGL for important rendering functions concerning the [http://www.segatech.com/technical/cpu/ SH-4 CPU].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
DOSDoom began development in 1997, initially by [[Chi Hoang]] and became the first source-port. [[Andy Baker]] was a frequent collaborator, and soon amassed a team of developers known as the [[DOSDoom Team]]. The entirety of the DOSDoom team began developing pioneering systems that other ports did not have at the time, including [[DDF]] and [[RTS]] scripting languages - the first such human-readable systems for DOOM. It is worth noting that the scripting systems were wholly different from [[DeHacked]] at the time because they did not need to modify the executable directly, and were split into several different files that could control much more at a granular level than DeHacked ever could.&lt;br /&gt;
&lt;br /&gt;
Into 1998, the community was ripe with the emergence of other source-ports, including [[ZDoom]], [[Doom Legacy]], [[Boom]], as well as the first OpenGL accelerated engine, [[glDoom]]. glDoom especially made an impact on the team into 1999 as OpenGL was seen as a major advancement at the time - this would be highly influential later in development. DOSDoom continued to be a major powerhouse for modders well into development of EDGE.&lt;br /&gt;
&lt;br /&gt;
In mid 1998, [[TeamTNT]] discussed with the [[DOSDoom Team]] about merging their project, [[OGRE]] directly into [[DOSDoom]]. The collaberation was announced in late 1998 and generated much interest as TeamTNT previously developed another ground-breaking port named [[BOOM]]; discussions were even joined by the inclusion of [[John Carmack]]. However, difficulties ensued for all parties and the project was abandoned. OGRE was quite possibly the progenitor of [[EDGE]] as several of the ideas both teams wanted to do was further realized with the development of EDGE. The failed merger didn't affect DOSDoom's ultimate standing and the port continued to be popular; though, possibly as a result of the planned/failed merger of DOSDoom and OGRE, Hoang left the DOSDoom Team and the DOOM community after v0.63 was released, followed by other DOSDoom members.&lt;br /&gt;
&lt;br /&gt;
In early 1999, several more source-ports were released, all offering their own features. [[3D Floors]] were pioneered with DOSDoom which generated much interest, but the DOSDoom Team began rifting as some members left the community altogether, or joined different projects. Andrew Baker and his team devised that a re-haul of DOSDoom was inevitable; the primary motivation being that the port was no longer limited to the DOS operating system. In mid 1999, [[Andrew Apted]] joined the team and it was decided that the DOSDoom name would change to better reflect its status as the most advanced 3D source-port of its time. DOSDoom v0.653 was released in April 10, 1999, which would be its final version. What was left of the DOSDoom Team at the time, with Andrew Apted and Andrew Baker, immediately formed the EDGE project with the existing code-base.&lt;br /&gt;
&lt;br /&gt;
EDGE was officially released on June 20, 2000, which was seen as a milestone as the DDF and RTS systems were more fully realized, as well as becoming an early adopter of OpenGL rendering. At the time, EDGE was the most advanced port as several other emergent technologies were realized in tandem, including [[glBSP]], the first true 3D node-builder for DOOM. &lt;br /&gt;
&lt;br /&gt;
EDGE development continued into the next decade. While the early/mid part of the 2000's were notable for EDGE being the supreme choice for modders and OpenGL enthusiasts, the team began to experience strain. As most members of the DOSDoom team had left by 2001, development was primarily being shouldered by Andrew Baker and Andrew Apted. Later, with the major rewrites of the engine between 1.27 and 1.29, development was shifted primarily between the last two active developers; because of the strain of a largely two-man team, the engine was perceived as being somewhat unstable. With the release of 1.31, EDGE's standing improved and modders began returning to the engine, though [[ZDoom]] was tearing much of the share away. Since the engine had once again experienced large rendering and gameplay rewrites between 1.29 and 1.31, the remainder of development was primarily headed by Andrew Apted.&lt;br /&gt;
&lt;br /&gt;
In 2010, Andrew Baker had fully retired from the team, and Andrew Apted was growing more interested in other projects. He was beginning to make plans to fix up any outstanding issues with EDGE and make the final release. Perhaps as a result of ZDoom's popularity, Andrew Apted could not keep up with all of the feature requests, as he had invested much work and time into the 1.3x branch of EDGE. He began hinting at his desire to shift to other projects, notably [[Eureka]] and [[OBLIGE]], which were later released and once a part of the EDGE repository itself.&lt;br /&gt;
&lt;br /&gt;
Into 2011, the community was well aware of his plans to retire from development with the release of 1.35. At the time, a major TC named [[Hypertension]] was perhaps the biggest project to be developed on the engine recently. The team of that TC foresaw the closing, and development of a fork named '''3DGE''' began to continue development as the modding team still required features that were now not a possibility.&lt;br /&gt;
&lt;br /&gt;
On April 9, 2011, Andrew Apted announced his retirement from EDGE development, leaving EDGE without a maintainer for over seven years. The last version of EDGE, v1.35, was released. Two days later, the first version of '''3DGE''' was released as a hotfix to 1.35, having merged from an abandoned earlier rewrite of EDGE itself. &lt;br /&gt;
&lt;br /&gt;
3DGE development continued from 2011 well into 2018, introducing major features which were seen as somewhat standard for other modder-centric ports, including [[UDMF]], archive support, [[GLSL]] shaders, and much improved and expanded features for the [[DDF]], [[RTS]], and [[COAL]] systems; lots of hard work was put into the port since the last version was released in 2016. &lt;br /&gt;
&lt;br /&gt;
EDGE's popularity and perseverance earned the respect and occasional development contributions from several other major developers in the community, including GZDoom programmers [[dpJudas]], [[Rachael Alexanderson (Eruanna)]] and [[Graf Zahl]]. Andrew Apted would occasionally assist the team by providing assistance as needed.&lt;br /&gt;
&lt;br /&gt;
On September 18th, 2018, [[Corbin|Cora]] made an announcement of the next major version of EDGE, which would have been the first full version released by the new team since 2016. With Andrew Apted's support and blessing, the separated 3DGE fork (which was long thought as confusing due to naming and version issues) was officially absorbed back into EDGE. 2.1.0's ultimate release will mark the first version of EDGE officially released since 2011. EDGE is therefore split into two categories as far as releases are concerned - the 1x branches, and the 2.x branches.&lt;br /&gt;
&lt;br /&gt;
The former EDGE team consisted of [[Andrew Apted]] and [[Andy Baker (darkknight)]] as the primary developers, and [[Marc A. Pullen (Fanatic)]] and [[Luke Brennan (Lobo)]] as distributors/promoters. &lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
* OpenGL 1.1/2.1/3.1 Renderer Paths, with Mipmapping, Smoothing, Dynamic Lighting, mirrors, portals, and [[GLSL]] shader support; Bump-Mapping on model surfaces is only supported in the 3.1 and above rendering path.&lt;br /&gt;
* 64-bit support&lt;br /&gt;
* SDL2 integration&lt;br /&gt;
* [[UDMF]] support&lt;br /&gt;
* PAK/PK3/PK7/{{3dgewiki|EPK|EPK|linkonly=1}} {{3dgewiki|Using_ZIPs_as_WAD_replacement|archive support|linkonly=1}}&lt;br /&gt;
* Rendering interpolation and Vsync support&lt;br /&gt;
* JPEG, PNG, TGA, BMP, PSD, GIF, HDR, PIC, PNM texture support, including support for [[TX_START]]/TX_END and [[HI_START]]/HI_END texture namespaces.&lt;br /&gt;
* [[OPL]] synth playback (using nukeyT's OPLlib)&lt;br /&gt;
* Basic shadows restored from EDGE 1.27&lt;br /&gt;
* Integration of [[ZDBSP]] and improvements to [[glBSP]], including building nodes from archives; better 3D rendering of both existing Doom levels and newer levels.&lt;br /&gt;
* Several major and minor bugs squashed from [[EDGE]] 1.35&lt;br /&gt;
* [[Heretic]]/[[Chex Quest]] IWAD support&lt;br /&gt;
* {{3dgewiki|MD3|MD3|linkonly=1}} and {{3dgewiki|MD5|MD5|linkonly=1}} model support&lt;br /&gt;
* Two-player [[splitscreen]] [[co-op]] or [[deathmatch]] (local only)&lt;br /&gt;
* [[multimedia:RoQ|RoQ]] video support for cinematics&lt;br /&gt;
* [https://sourceforge.net/projects/edge2/files/3DGE%20SOURCE/DreamEDGE/ Runs] on the [[Wikipedia:Dreamcast|Sega Dreamcast]] console.&lt;br /&gt;
* Normal, specular and brightmap support on models&lt;br /&gt;
* [[DDF]]/[[RTS]]/[[COAL]] enhancements and bugfixes&lt;br /&gt;
* [[Polyobject]]s (more types will be supported in the future)&lt;br /&gt;
* {{3dgewiki|CAMERA-MAN|Camera-Man scripts|linkonly=1}}: New scripting language which utilizes cameras for complete camera control.&lt;br /&gt;
* Support for up to 64 defined weapons at once through DDF&lt;br /&gt;
* 16 Ammo types: BULLETS, SHELLS, ROCKETS, CELLS, and AMMO5 to AMMO16. (EDGE 1.29 only. AMMO1 to AMMO4 can be used as aliases for the 4 main ammo types.)&lt;br /&gt;
* [[3D floor|Extrafloors]] feature allows modders to create submersible liquids, [[Doom rendering engine|room-over-room]], or catwalks, as well as vertically moving platforms not embedded into the floor.&lt;br /&gt;
* Four armor types: GREEN (33% reduction), BLUE (50% reduction), YELLOW (75% reduction) and RED (90% reduction).&lt;br /&gt;
* Automap can be made to be stationary instead of rotating with the player's facing angle, through [[COAL]]. Automap can also be applied as a secondary layer over the normal viewing screen opposed to replacing it, allowing the player to fight enemies and keep track of their position at one time.&lt;br /&gt;
* Weapons can have secondary attacks. Weapons can also be made to be manually reloaded, or have idle stats as well. Integration through COAL and RTS means Weapons and animations can be granularity customized.&lt;br /&gt;
* Support for [[MUS]], MIDI, IT/MOD, and Ogg Vorbis music formats.&lt;br /&gt;
* [[DDF]] files allow the editing of many features (such monsters, attacks, and levels).&lt;br /&gt;
* Sprites can be viewed from 16 angles (see [[Sprite]]).&lt;br /&gt;
* RTS scripting format includes an option known as &amp;quot;Start_Map ALL&amp;quot; that allows global scripts to be created that affect all maps in the game without copying the script under each individual map.&lt;br /&gt;
* Sliding doors, which are done separately without using UDMF or PolyObjects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== In-Progress ==&lt;br /&gt;
* RoQ Render-to-Texture (for models, world textures, and menus/backgrounds)&lt;br /&gt;
* New [[DDF]] types: Terrains.ddf, Sprites.ddf, Inventory.ddf and Shaders.ddf&lt;br /&gt;
* Cross-platform IWAD selector &lt;br /&gt;
* Dynamic GLSL shader compilation&lt;br /&gt;
* Normal, specular, and brightmap support on textures&lt;br /&gt;
* True [[inventory]] support&lt;br /&gt;
* Dynamic planar shadow system for [[dynamic light]]s&lt;br /&gt;
* ''Half-Life'' MDL and MS3D Model format support&lt;br /&gt;
* ''Quake 3: Arena''-style shader-based sky system&lt;br /&gt;
* Better [[Boom]] compatibility&lt;br /&gt;
* [[Decal]]s on all surfaces (using Decals.ddf)&lt;br /&gt;
* ''[[Wolfenstein_3D]]'' support (WLF_*)&lt;br /&gt;
* ''[[Rise of the Triad]]'' support (ROTT_*)&lt;br /&gt;
* ''Blake Stone'' support (BLK_*)&lt;br /&gt;
* ''[[Strife]]'' support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=PpzvWcz7uDY Heretic support is being finalized] and is in beta as of {{:{{PAGENAME}}/Version}}, using a similarly named definition file called HDF (Heretic Definition File). The HDF definitions were written initially by CeeJay, before the 3DGE Team took over to write proper IWAD support.&lt;br /&gt;
&lt;br /&gt;
== Popular add-ons ==&lt;br /&gt;
EDGE also brings its own unique set of popular add-ons to the Doom community. Although some dislike EDGE for its perceived instability, the following mods have in one way or another made their mark on the community.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that the mods listed below were developed a long time ago, and might require legacy versions of EDGE to run properly. EDGE 2.x is known to have broken some support for old mods.&lt;br /&gt;
&lt;br /&gt;
* [[Don's Challenge]] — Created by [[Cory Whittle]], Don's Challenge is a 3-episode modification based around the supernatural adventures of Don P. Tello, a veteran cop who is summoned into Hell by Mortis, the incarnation of Death, to challenge thousands of hellspawned creatures that his soul might be deemed worthy by her as a vessel. At the end of Episode 1, Don transforms Mortis into a cat. However, her brother Fate summons Mortis to Hell and takes Don with her. In the third episode, Don and Mortis return to Earth, only to find it overrun by Demons and Don's own family dead; Don and Mortis attempt to take vengeance for the deaths. This mod became popular due to the use of new monsters, weapons, and levels. One weapon (cigarettes) could even be used to heal the player. Another weapon (Booze) could be used to increase armor value, but took away a small portion of health as well.  As of now, only one episode is fully released, but Episode 2 is reportedly on the way.&lt;br /&gt;
* [[Immoral Conduct]] - Created by [[Cory Whittle]], Immoral Conduct is a weapons modification for both EDGE and ZDoom (although the ZDoom version does not have as many features as its EDGE counterpart). The EDGE version contains the following: Knife, .45 Pistols, Stock 12g Pump Shotgun, Customized Pump Shotgun (fires 'slasher rounds'), 12g Hand Cannon, 9mm Uzi SMG, Fragment Hand Grenades, 40mm Grenade/Tear Gas Gun, Assault Rifle with M203, Infantry Rifle with Bayonet, Minigun, 12g Sawed-off Shotgun, Beretta 9mm Pistol, Chrome Magnum Revolver, Sentry Turret Kit (summons helper turrets to attack enemies), Gas-Powered Chainsaw, Remote/Proximity Satchel Charges, and Marking/Visibility Flares. New items included a 50% medikit and Nightvision Goggles. New helper monsters included the Marine Corporal and Marine Private. Monsters have also been modified (for example, the baron of Hell's blood is green), and shells are ejected from weapons. It is a [[partial conversion]], sometimes mistaken for a [[total conversion]], and in Whittle's words, &amp;quot;With my stuff, you have all the millions of user-made Doom and Doom II levels at your disposal to be enhanced with new weapons and items.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* [[Covert Ops]] — an EDGE version of [[Twilight Warrior]]. It has many features, such as new weapons and interesting scripts.&lt;br /&gt;
&lt;br /&gt;
* [[QDoom]] (Quake Doom) — Created by [[Marc &amp;quot;Fanatic&amp;quot; Pullen]], QDoom is a total conversion of Quake to Doom. &lt;br /&gt;
&lt;br /&gt;
* [[EarthBound Doom|EBDoom]] (Earthbound Doom) - Created by [[Baron of Sigma]], this modification has generated mixed opinions. It is not a complete game, and many consider it more of a &amp;quot;monster modification&amp;quot; since roughly 100+ different species of monsters exist, most of them imported and emulated from [[Heretic]], [[Hexen]], Duke Nukem 3D, Shadow Warrior, and Blood, and 'evolved' versions of existing game monsters, such as Chainsaw Zombies, Gold Liches, and Elder Mancubi. The game also appears to use a near-perfect emulation of the [[Sigil]] from Strife as an Easter egg weapon. In addition, the player has hit points instead of a health percentage, and can take much more damage than the common version of [[Doomguy]]. There are also several 'helper' characters based on the heroes of many of the Doom-engine games, including [[Doomguy]], [[Corvus]], and the player classes in Hexen. Certain bosses are also among the few in many modifications to have over 50,000 HP, with at least one boss having over 6,000,000 HP. The weapons are more 'mystical' and energy-based, with few traditional Doom-style weapons. Another unique feature in EBDoom is that all melee attacks used either by the player or other monsters/allies can inflict &amp;quot;critical hits&amp;quot; up to 4x damage at times, as in an RPG. Despite the community's mixed opinions of the mod, it is often used as a resource wad by other modders who want to quickly import foreign monsters into their own mods (as the author appears not to mind this). It is also one of the three mods in the Doom community to use [[Hissy]] as a central plot player, and makes many references to another EDGE mod known as [[Cacodemon Squad]]. This modification was last updated at 6.56 on January 12, 2006.&lt;br /&gt;
&lt;br /&gt;
* [[GoldenEye Doom2]] - A fairly large in-progress TC. Featuring a load of weapons in both single and multiplayer maps.  Multiple versions are available: A single player DEH version compatible with Doom Legacy and Zdoom 1.22. Multiplayer levels for standard Doom2.  An enhanced single player EDGE 1.27+ version.  The Edge version contains the following weapons:  punch/kick, Knives, Watch lazer, _Soviet_Tank_, Silencedable PP7, Dostovie, Cougar Magnum, Automatic Shotgun, pathetic Klobb, Duestch, Zmg, KF7, Sniper Rifle, Ak47, Moon Raker Laser, RCP-90, Golden Gun, Golden PP7, Rocket Launcher, and Grenades. Most of the weapons have alternate firing modes and some weapons can be dual-wielded.&lt;br /&gt;
&lt;br /&gt;
* [[Cold Hard Cash]] - An unique weapons mod offering a larger variety of weapons. Cold Hard Cash's spin on the weapons mod is that instead of just finding weapons laying around or dropped from enemies, the player must mug monsters for money to use at special weapons dispensers, which replace the original weapons, and sometimes artifacts and appear in their place. An example is that the Chainsaw is now a dispenser that allows the player to buy a Knife, a Crowbar, and other melee-type items. Most dispensers have a special offer on it, usually an upgrade to an existing weapon, which requires the said weapon in question to be held by the player before they can use it. It is also the first EDGE mod to use the &amp;quot;Start_Map ALL&amp;quot; RTS function, introduced in the 3rd release candidate of EDGE 1.29,  which allows the same scripts to be usable on all maps instead of having to add the same ones to each map individually.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
*[http://edge2.sourceforge.net Official EDGE site]&lt;br /&gt;
*[https://sourceforge.net/projects/edge2/files/3DGE%20binaries/ EDGE release packages], hosted by {{wp|SourceForge}}&lt;br /&gt;
*[https://sourceforge.net/projects/edge/files/EDGE%20Binaries/ Legacy EDGE binary releases, hosted by {{wp|SourceForge}}&lt;br /&gt;
*[https://github.com/3dfxdev/hyper3DGE 3DGE git repository], hosted by github&lt;br /&gt;
*[https://devbuilds.drdteam.org/3dge/ Compiled SVN builds] for Windows, Linux, Mac, and Dreamcast at [[DRD Team]]&lt;br /&gt;
*{{3dgewiki|Main Page|Documentation}}&lt;br /&gt;
{{s-start}}&lt;br /&gt;
{{s-port}}&lt;br /&gt;
{{s-bef|before=[[DOSDoom]]}}&lt;br /&gt;
{{s-ttl|title=EDGE}}&lt;br /&gt;
{{s-aft|after=[[EDGE 2.x]]}}&lt;br /&gt;
{{s-end}}&lt;br /&gt;
[[Category:Source ports]]&lt;br /&gt;
[[Category:Boom compatible]]&lt;br /&gt;
[[Category:Doom ports]]&lt;br /&gt;
[[Category:OpenGL ports]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Next_version&amp;diff=723</id>
		<title>Next version</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Next_version&amp;diff=723"/>
				<updated>2018-09-19T16:12:02Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Development RoadMap ==&lt;br /&gt;
&lt;br /&gt;
The features listed as In-Progress are features tied into the engine currently, which need to be finished up. &lt;br /&gt;
&lt;br /&gt;
== In-Progress ==&lt;br /&gt;
* PolyObjects (available in the latest devbuilds, more types will be supported in the future)&lt;br /&gt;
* Normal/Spec/Brightmap support on textures&lt;br /&gt;
* Rise of the Triad support (ROTT_*)&lt;br /&gt;
* Dynamic Planar Shadow System for Dynamic Lights (Models only)&lt;br /&gt;
* Quake 3: Arena-style shader-based sky system&lt;br /&gt;
* Better BOOM Compatibility&lt;br /&gt;
* Decals on all surfaces&lt;br /&gt;
* TERRAIN.DDF: new DDF type for floors, that can do all sorts of neat things according to what flat name is being accessed at the current time.&lt;br /&gt;
* SPRITES.DDF: new DDF type for plain sprites, to control things like Offsets, Brightmaps, etc.&lt;br /&gt;
* New Input system, for split-screen controls&lt;br /&gt;
* Wolfenstein 3D support (WLF_*)&lt;br /&gt;
&lt;br /&gt;
== FUTURE == &lt;br /&gt;
Future features are features that are not yet tied into the engine, but support will be coming soon for them.&lt;br /&gt;
&lt;br /&gt;
* DECALS.DDF: new DDF type for wall decals (bullet holes) and floor decals (splats, explosions, etc)&lt;br /&gt;
* IWAD Selection Dialogue Box (like ZDoom)&lt;br /&gt;
* Blake Stone support (BLK_*)&lt;br /&gt;
* Strife IWAD&lt;br /&gt;
* Completed Heretic support, including an Inventory system&lt;br /&gt;
* True Networking, for internet play&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=COAL_Manual&amp;diff=722</id>
		<title>COAL Manual</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=COAL_Manual&amp;diff=722"/>
				<updated>2018-09-14T21:09:49Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: /* PLAYER MODULE */ updated Player Module&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== OVERVIEW ==&lt;br /&gt;
&lt;br /&gt;
[[COAL|COAL]] is a new scripting language which has been developed especially for 3DGE. At the moment, 3DGE uses this to define custom HUD modules. This manual is designed to get you up-to-speed on all of the functions that COAL provides.&amp;lt;blockquote&amp;gt;The standard Coal scripts for drawing the DOOM HUD is loaded from this file: &amp;lt;code&amp;gt;doom_ddf/coal_hud.ec&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;The API that COAL itself is contained in is loaded from &amp;lt;code&amp;gt;doom_ddf/coal_api.ec&amp;lt;/code&amp;gt;, which is a good reference to look at while developing your HUD. Take note that the API is hard-coded to 3DGE.&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;Additionally, each archive may contain a lump called &amp;quot;&amp;lt;code&amp;gt;COALHUDS&amp;lt;/code&amp;gt;&amp;quot; which is automatically loaded (which can reside in the PAK/PK3 namespace ''&amp;lt;sub&amp;gt;&amp;lt;code&amp;gt;./scripts&amp;lt;/code&amp;gt;&amp;lt;/sub&amp;gt;''). Later scripts are able to replace any definitions (functions etc) in earlier scripts.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FILES CONTENTS ==&lt;br /&gt;
&lt;br /&gt;
=== The contents of each file or lump is simply the text of the COAL code. ===&lt;br /&gt;
The engine provides two modules: the &amp;quot;hud&amp;quot; module provides drawing functions and general queries, whereas the &amp;quot;player&amp;quot; module provides query functions about the current player. All of their functions and variables are described in separate sections below.&lt;br /&gt;
&lt;br /&gt;
In order to customize the default HUDs, your COAL code ''needs'' to redefine one of the existing functions, as follows:&amp;lt;blockquote&amp;gt;&amp;lt;big&amp;gt;'''doom_status_bar()'''&amp;lt;/big&amp;gt; ''':''' &amp;lt;code&amp;gt;replace this function if you only want to customize the full status bar (including the one shown in the automap screen). The size has to be the same (width 320, height 32).&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;big&amp;gt;'''overlay_status_bar()'''&amp;lt;/big&amp;gt; ''':''' &amp;lt;code&amp;gt;write your own version of this function if you only want to change the overlay status bar.&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;big&amp;gt;'''doom_automap()'''&amp;lt;/big&amp;gt; ''':''' &amp;lt;code&amp;gt;this function draws the automap screen (including the status bar at the bottom). Replacing it means you can show other information here instead of (or in addition to) the automap.&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;big&amp;gt;'''draw_all()'''&amp;lt;/big&amp;gt; ''':''' &amp;lt;code&amp;gt;this is the function which EDGE calls to draw everything. The normal version (in EDGE.WAD) will call the above functions depending on the user's current HUD and whether the automap is active or not. Replacing this function gives you total control: you could provide more hud configurations (or less) than the usual three, ignore the automap mode completely if you wanted, or even draw the view from multiple players.&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HUD MODULE ==&lt;br /&gt;
&lt;br /&gt;
=== General Queries ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.check_automap() : float'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''This function returns true while the user is viewing the automap (by pressing TAB) and false for the normal view.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.which_hud() : float'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''This variable returns the current HUD number which the user cycles through when pressing '+' and '-' keys. It ranges from 0 to 119, allowing 120 different HUD screens, but in reality you must use the modulo operator '%' to convert this number to a smaller range.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''For example, the standard code uses hud.which_hud() % 3 to select between three different huds (none, normal and overlay).''&amp;lt;/code&amp;gt; &amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''The following are good modulo numbers: 2,3,4,5,6,8 and 10 (because they divide into 120).''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;For a HUD which never changes, simply ignore this value.&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.get_time() : float&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''This function returns the current time, in terms of &amp;quot;tics&amp;quot; where there are 35 tics per second. In other words, after each 1/35th of a second the value of '''hud.now_time''' increases by one. It keeps going even during menus or while the game is paused.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.passed_time&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''This variable is updated by the '''hud.grab_times()''' call, and contains the number of &amp;quot;tics&amp;quot; that have passed since the last time the '''draw_all()''' function was called. Note that a result of zero is possible.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.game_mode() : string&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''This function returns a string for the current game mode: &amp;quot;sp&amp;quot; (Single Player), &amp;quot;coop&amp;quot; (Cooperative), or &amp;quot;dm&amp;quot; (Deathmatch).''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.game_name() : string&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;This function returns the DDF name of the current game being played (the one defined in [[GAMES|GAMES.DDF]]).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.map_name() : string&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;This function returns the DDF name of the current map being played (the one defined in [[LEVELS|LEVELS.DDF]]).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.map_title() : string&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;This function returns the title of the map being played, mainly to be displayed on the automap.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== * Drawing Stuff ==&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.coord_sys(w, h)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;In the original DOOM, the screen size was always 320x200, and by default all of the drawing functions here use screen coordinates as if that were the case (even when EDGE is running in different modes likes 640x480 or 1024x768). This function allows you to set a different &amp;quot;virtual&amp;quot; resolution, for example 640x400, and then all coordinates will be for this new system, plus the size of images and text characters will be affected as well.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.text_font(name)'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Sets the current text font, where the 'name' parameter refers to an entry in [[FONTS|FONTS.DDF]]. The default font is &amp;quot;DOOM&amp;quot; and is reset after each frame.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.text_color(name)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Sets the current text color, which must refer to an entry in [[COLMAP|COLMAPS.DDF]], or can be the empty string &amp;quot;&amp;quot; which causes the text to be drawn normally (without being colormapped). The default is &amp;quot;&amp;quot; and is reset after each frame.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.set_scale(value)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Sets the scaling for drawing text and for '''hud.draw_image()'''. Larger values make the text/image bigger. The default scale is 1.0 and is reset after each frame.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.set_alpha(value)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Set the alpha value (translucency) for drawing text, lines, boxes and images. The 'value' parameter ranges from 0.0 (completely invisible) to 1.0 (completely solid). The default alpha is 1.0 and is reset after each frame.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.solid_box(x, y, w, h, color)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Draws a solid rectangle consisting of a single color. The 'x' and 'y' parameters are the coordinates of the top left corner, whereas 'w' and 'h' are the width and height. The current alpha value is also applied.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;The 'color' parameter can take two different forms. Firstly it may be a string with the same notation as DDF and HTML, which begins with a &amp;quot;#&amp;quot; character and is followed by 6 hexadecimal digits. For example &amp;quot;#FF0000&amp;quot; for red and &amp;quot;#0000FF&amp;quot; for blue. Secondly it can be a Lua table with fields called 'r', 'g' and 'b' (for red, green and blue). Each of these fields is a number from 0 to 255. For example: { r=255, g=170, b=0 } for orange.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.solid_line(x1, y1, x2, y2, color)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Draws a solid line between the start coordinate (x1,y1) to the end coordinate (x2, y2). The 'color' parameter is the same as for hud.solid_box(), and the current alpha value is also applied.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.thin_box(x, y, w, h, color)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Similar to '''hud.solid_box()''', but only draws the outline of a rectangle. The inside area is not affected. The sides are always two pixels thick, and never go outside the specified area. The 'color' parameter is the same as for '''hud.solid_box()''', and the current alpha value is also applied.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.gradient_box(x, y, w, h, TL, BL, TR, BR)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Similar to '''hud.solid_box()''', but the colors for each corner are specified individually: 'TL' for top left, 'BL' for bottom left, 'TR' for top right and 'BR' for bottom right. The current alpha value will also be applied.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.draw_image(x, y, name)'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Draws an image at the given coordinates, which specify the top/left corner of the image. The current alpha and scaling factors are applied as well.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.stretch_image(x, y, w, h, name)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Similar to '''hud.draw_image()''', but the image will be stretched or squashed so that it fits exactly into the given rectangle on the screen. The current alpha value is also applied.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.tile_image(x, y, w, h, name, [x_offset, y_offset])&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Draws an image (usually a texture or flat) on the screen, where the image is tiled (repeated) to fill up the given rectangle. The current alpha and scaling factors are also applied. The 'x_offset' and 'y_offset' parameters are optional, and can be used to offset the texture by a certain number of pixels.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.draw_text(x, y, str)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Draws some text on the screen using the current text font, color, alpha and scaling values. Newlines (&amp;quot;\n&amp;quot;) in the string can be used to draw multi-line text.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.draw_num2(x, y, len, num)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Draws a number (an integer) on the screen using the current text font, color, alpha and scaling. The number is right-aligned, in other words the 'x' parameter specified the right-most pixel, and the 'len' parameter gives the maximum number of characters (including the minus sign if the number is negative).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.render_world(x, y, w, h)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Renders the view for the player on the screen, in a rectangle with the given coordinates. The player's weapon is also drawn. The views of different players can be rendered by using the '''hud.set_render_who()''' function below.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.render_automap(x, y, w, h, [options])&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Renders the automap for the player on the screen, in a rectangle with the given coordinates. Note that no background is drawn, hence you can use this function to create an overlay automap (drawn over the top of the player's view). If you need a solid color behind it, use the '''hud.solid_box()''' function first.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;The 'options' parameter is optional, when present it is a table containing a set of variables which modify the way the automap is drawn. Variables which are not present in the table are not affected (stay the same as the user's normal automap). The following list shows all the possible variables:&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;Variable	 Description&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;zoom	 Set a fixed zoom factor, where 1.0 shows the whole map, and larger values make the map bigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** &amp;lt;code&amp;gt;grid	 force the grid lines on/off&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;rotate	 force map rotation on/off&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;follow	 force follow-player mode on/off&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;things	 draw all things&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;walls	 draw all walls (like IDDT cheat)&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;allmap	 draw walls like All-Map powerup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.set_render_who(index)'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Sets the current player for rendering the world or the automap. The 'index' parameter is a small number: 1 for the &amp;quot;main player&amp;quot; on this computer (the person at the keyboard), 2 for the next player in the list, etc... upto the number of players in the game.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.automap_colors(table)'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;This function can be used to change some or all of the colors used when drawing the automap. The 'table' parameter is a Lua table where the names are automap parts and the values are the colors. For example: { grid = &amp;quot;#006666&amp;quot;, wall = &amp;quot;#FFFFFF&amp;quot; }. Parts that are not present in the table are not affected (stay the same as before). Here is a list of all the automap parts that can be changed:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;Automap Part	 Description&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** grid	 Grid lines&lt;br /&gt;
** wall	 One sided walls&lt;br /&gt;
** step	 Floor height change, climable&lt;br /&gt;
** ledge	 Floor drop-off, too high to climb&lt;br /&gt;
** ceil	 Ceiling height difference&lt;br /&gt;
** secret	 Secret doors&lt;br /&gt;
** allmap	 Unseen walls when you have the All-Map&lt;br /&gt;
** player	 Player object&lt;br /&gt;
** monster	 Monsters&lt;br /&gt;
** corpse	 Dead monsters&lt;br /&gt;
** item	 Pickup items&lt;br /&gt;
** missile	 Missiles, fireballs, etc&lt;br /&gt;
** scenery	 Scenery items&lt;br /&gt;
&lt;br /&gt;
== * Audio Functions ==&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.play_sound(name)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Plays the given sound, which must be an entry in SOUNDS.DDF.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PLAYER MODULE ==&lt;br /&gt;
&lt;br /&gt;
=== General Queries ===&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_bot()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if the current player is a bot.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.get_name()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns the name of the current player.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.get_angle()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns the angle of the current player.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.get_pos()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns the position of the current player.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.get_mlook()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns the mlook (mouse-look) angle of the current player.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.health()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the health of the current player. The result will normally be in the range 0 to 100, regardless of the SPAWNHEALTH setting for the player in DDF (in other words, the result is a percentage value of the spawn health). Values higher than 100 are possible when the player has bonus health (e.g. from the Soul Sphere pickup).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.armor(type)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;For the given armor type, returns the amount the player is currently wearing. The 'type' parameter is a number in the range 1-5, but the following names can be used for more readable code:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ARMORS.green&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ARMORS.blue&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ARMORS.purple&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ARMORS.yellow&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ARMORS.red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.total_armor(type)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the total amount of armor the player has.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.frags()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Number of frags the player has (for Deathmatch games).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.move_speed()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns a number for how fast the player is currently moving, roughly the number of map units per tic (there are 35 tics per second).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.air_in_lungs()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns amount of air in the player lungs, as a percentage value from 0 to 100. Only guaranteed to be valid while the player is underwater.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.has_key(key)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if the player currently has the specified key, which is a number from 1 to 16. For more readable code, the following names can be used:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.blue_card	KEYS.gold_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.red_card	KEYS.brass_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.yellow_card	KEYS.steel_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.green_card	KEYS.fire_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.blue_skull	KEYS.silver_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.red_skull	KEYS.copper_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.yellow_skull	KEYS.wooden_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.green_skull	KEYS.water_key&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.has_power(power)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if the player currently has the specified powerup. The 'power' parameter is a number from 1 to 16. For more readable code, the following names can be used:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.invuln&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.berserk&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.invis&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.acid_suit&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.automap&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.goggles&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.jet_pack&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.night_vis&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.scuba&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.power_left(power)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the number of seconds remaining for the specified powerup, or zero when the player does not have it. The berserk powerup only counts down the red-screen effect, and returns -1 when that is finished. The automap powerup returns a large value when active and it never counts down. The result for invulnerability is not affected by the God-mode cheat.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== * Weapon Stuff ==&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.has_weapon(name)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns true if the player currently owns the weapon, where 'name' is the DDF name of the weapon.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.has_weapon_slot(slot)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if the player currently owns any weapon which uses the given 'slot', which is a number for 0 to 9 (same as the BINDKEY command in the DDF).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.cur_weapon()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the DDF name of the weapon the player is currently holding, or the special value &amp;quot;none&amp;quot; when the player is holding no weapon at all, or &amp;quot;change&amp;quot; while the weapon is switching to a new one.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.cur_weapon_slot()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the slot number (i.e. BINDKEY) of the weapon the player is currently holding, or -1 when the player is holding no weapon at all.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.ammo(type)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the amount of ammo the player is carrying (not including any ammo inside the clips of weapons). The 'type' parameter is a number in the range 1-16. For more readable code, one of the following names can be used instead:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;AMMOS.bullets	AMMOS.pellets&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;AMMOS.shells	AMMOS.nails&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;AMMOS.rockets	AMMOS.grenades&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;AMMOS.cells	AMMOS.gas&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''player.ammomax(type)'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the maximum amount of ammo the player can carry (not including weapon clips). The 'type' parameter is the same as the '''player.ammo()''' function.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.main_ammo()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns the main ammo quantity for the player's current weapon. This is zero for weapons that don't use any ammo (like the FIST). If the weapon has a clip and the SHOWCLIP command (in DDF) is true, then the amount of ammo inside the clip is returned instead. Note that only the primary attack is checked, the secondary attack (if present) will be ignored.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.ammo_type(ATK)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the ammo type of the player's current weapon for the given attack (primary or secondary). The result is in the range 1-16, or can be 0 for the special case of NOAMMO. The 'ATK' parameter is 1 for the primary attack, 2 for the secondary attack, and is compulsory.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.ammo_pershot(ATK)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns the ammo used up per shot by the current weapon for the given attack (primary or secondary). Same as the AMMOPERSHOT commands in WEAPONS.DDF. The 'ATK' parameter is 1 for the primary attack, 2 for the secondary attack, and is compulsory.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.clip_ammo(ATK)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the current amount of ammo the clip in the player's current weapon is holding, or zero if the weapon has no clip. The 'ATK' parameter is 1 for the primary attack, 2 for the secondary attack, and is compulsory.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.clip_size(ATK)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the maximum amount of ammo the clip in the player's current weapon can hold, or zero if the weapon has no clip. The 'ATK' parameter is 1 for the primary attack, 2 for the secondary attack, and is compulsory.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.clip_is_shared()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if the player's current weapon is sharing a single clip between primary and secondary attackes (the SHARED_CLIP command).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== * Conditions ==&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.on_ground()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is standing on solid ground.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.under_water()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is in AIRLESS water and doesn't have the Scuba powerup.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_swimming()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is in swimmable water (i.e. the SWIM sector special).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_jumping()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is jumping.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_crouching()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is crouching.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.get_side_move()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is strafing from side-to-side.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_attacking()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is firing his weapon (either first or second attack).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_rampaging()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player has been firing his weapon for two seconds or more.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_using()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is holding the USE button down.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_grinning()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is grinning (after picking up a weapon).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== * Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.num_players()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the total number of players in the game, including bots.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.set_who(index)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Sets who the current player is. The 'index' parameter is a small number: 1 for the &amp;quot;main player&amp;quot; on this computer (the person at the keyboard), 2 for the next player in the list, for instance the split-screen player) etc... up to the number of players in the game. All the player query functions described here return their results for the current player.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.hurt_by()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;If the player has been hurt in the last few seconds, this returns a string describing what did the damage. Otherwise this function returns nil. The result is usually &amp;quot;enemy&amp;quot;, but could be &amp;quot;friend&amp;quot; for friendly fire. If the player hurt himself with his own damn stupidity then the result is &amp;quot;self&amp;quot;, whereas damaging floors and crushers will return &amp;quot;other&amp;quot;.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.hurt_mon()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;If the player has been hurt in the last few seconds, this returns the name of the monster or other player. Otherwise this function returns nil.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.hurt_pain()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;If the player was just hurt, this returns the damage amount, otherwise this function returns 0.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.hurt_dir()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;If the player was just hurt, this returns a direction relative to the player where the attacker was: -1 for the left side, +1 for the right side, and 0 for all other cases.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.hurt_angle()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Like player.hurt_dir(), except this returns the map angle from the player to his attacker. The result is in degrees (ranging from 0 to 359), where East is 0 and North is 90.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== * CAMERA MODULE ==&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;cam.set_vert_bob(f)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Sets the Player bobbing. The parameter flags above are as follows:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;blockquote&amp;gt;Parameter is a ''Float'' for controlling the vertical bobbing. This was previously encapsulated in DDF where it is now controlled via COAL.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;blockquote&amp;gt;The default value is 1.2 - setting it to 0.0 will completely disable bobbing.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;cam.set_roll_bob(f)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Parameter is a ''Float'' for customizing camera rolling. Note that this can be combined with set_vert_bob, OR can be called from other functions (such as being combined with player.get_side_move() or combined with player.hurt_pain()).&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;By Default the camera set_roll_bob amount is 0.0.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CAMERA-MAN MODULE ==&lt;br /&gt;
The new Camera-Man system is in reality a COAL module, and can be completely configured through COAL. However, due to its complexity and the fact that the format is not in the QC extension (which is actually done with Console Commands), it has its own article and how-to's. [[CAMERA-MAN|You can visit that guide by clicking on this sentence.]]&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=COAL_Manual&amp;diff=721</id>
		<title>COAL Manual</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=COAL_Manual&amp;diff=721"/>
				<updated>2018-09-14T20:25:36Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: Updated COAL documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== OVERVIEW ==&lt;br /&gt;
&lt;br /&gt;
[[COAL|COAL]] is a new scripting language which has been developed especially for 3DGE. At the moment, 3DGE uses this to define custom HUD modules. This manual is designed to get you up-to-speed on all of the functions that COAL provides.&amp;lt;blockquote&amp;gt;The standard Coal scripts for drawing the DOOM HUD is loaded from this file: &amp;lt;code&amp;gt;doom_ddf/coal_hud.ec&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;The API that COAL itself is contained in is loaded from &amp;lt;code&amp;gt;doom_ddf/coal_api.ec&amp;lt;/code&amp;gt;, which is a good reference to look at while developing your HUD. Take note that the API is hard-coded to 3DGE.&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;Additionally, each archive may contain a lump called &amp;quot;&amp;lt;code&amp;gt;COALHUDS&amp;lt;/code&amp;gt;&amp;quot; which is automatically loaded (which can reside in the PAK/PK3 namespace ''&amp;lt;sub&amp;gt;&amp;lt;code&amp;gt;./scripts&amp;lt;/code&amp;gt;&amp;lt;/sub&amp;gt;''). Later scripts are able to replace any definitions (functions etc) in earlier scripts.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FILES CONTENTS ==&lt;br /&gt;
&lt;br /&gt;
=== The contents of each file or lump is simply the text of the COAL code. ===&lt;br /&gt;
The engine provides two modules: the &amp;quot;hud&amp;quot; module provides drawing functions and general queries, whereas the &amp;quot;player&amp;quot; module provides query functions about the current player. All of their functions and variables are described in separate sections below.&lt;br /&gt;
&lt;br /&gt;
In order to customize the default HUDs, your COAL code ''needs'' to redefine one of the existing functions, as follows:&amp;lt;blockquote&amp;gt;&amp;lt;big&amp;gt;'''doom_status_bar()'''&amp;lt;/big&amp;gt; ''':''' &amp;lt;code&amp;gt;replace this function if you only want to customize the full status bar (including the one shown in the automap screen). The size has to be the same (width 320, height 32).&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;big&amp;gt;'''overlay_status_bar()'''&amp;lt;/big&amp;gt; ''':''' &amp;lt;code&amp;gt;write your own version of this function if you only want to change the overlay status bar.&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;big&amp;gt;'''doom_automap()'''&amp;lt;/big&amp;gt; ''':''' &amp;lt;code&amp;gt;this function draws the automap screen (including the status bar at the bottom). Replacing it means you can show other information here instead of (or in addition to) the automap.&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;big&amp;gt;'''draw_all()'''&amp;lt;/big&amp;gt; ''':''' &amp;lt;code&amp;gt;this is the function which EDGE calls to draw everything. The normal version (in EDGE.WAD) will call the above functions depending on the user's current HUD and whether the automap is active or not. Replacing this function gives you total control: you could provide more hud configurations (or less) than the usual three, ignore the automap mode completely if you wanted, or even draw the view from multiple players.&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HUD MODULE ==&lt;br /&gt;
&lt;br /&gt;
=== General Queries ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.check_automap() : float'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''This function returns true while the user is viewing the automap (by pressing TAB) and false for the normal view.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.which_hud() : float'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''This variable returns the current HUD number which the user cycles through when pressing '+' and '-' keys. It ranges from 0 to 119, allowing 120 different HUD screens, but in reality you must use the modulo operator '%' to convert this number to a smaller range.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''For example, the standard code uses hud.which_hud() % 3 to select between three different huds (none, normal and overlay).''&amp;lt;/code&amp;gt; &amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''The following are good modulo numbers: 2,3,4,5,6,8 and 10 (because they divide into 120).''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;For a HUD which never changes, simply ignore this value.&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.get_time() : float&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''This function returns the current time, in terms of &amp;quot;tics&amp;quot; where there are 35 tics per second. In other words, after each 1/35th of a second the value of '''hud.now_time''' increases by one. It keeps going even during menus or while the game is paused.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.passed_time&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''This variable is updated by the '''hud.grab_times()''' call, and contains the number of &amp;quot;tics&amp;quot; that have passed since the last time the '''draw_all()''' function was called. Note that a result of zero is possible.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.game_mode() : string&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''This function returns a string for the current game mode: &amp;quot;sp&amp;quot; (Single Player), &amp;quot;coop&amp;quot; (Cooperative), or &amp;quot;dm&amp;quot; (Deathmatch).''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.game_name() : string&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;This function returns the DDF name of the current game being played (the one defined in [[GAMES|GAMES.DDF]]).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.map_name() : string&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;This function returns the DDF name of the current map being played (the one defined in [[LEVELS|LEVELS.DDF]]).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.map_title() : string&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;This function returns the title of the map being played, mainly to be displayed on the automap.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== * Drawing Stuff ==&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.coord_sys(w, h)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;In the original DOOM, the screen size was always 320x200, and by default all of the drawing functions here use screen coordinates as if that were the case (even when EDGE is running in different modes likes 640x480 or 1024x768). This function allows you to set a different &amp;quot;virtual&amp;quot; resolution, for example 640x400, and then all coordinates will be for this new system, plus the size of images and text characters will be affected as well.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.text_font(name)'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Sets the current text font, where the 'name' parameter refers to an entry in [[FONTS|FONTS.DDF]]. The default font is &amp;quot;DOOM&amp;quot; and is reset after each frame.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.text_color(name)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Sets the current text color, which must refer to an entry in [[COLMAP|COLMAPS.DDF]], or can be the empty string &amp;quot;&amp;quot; which causes the text to be drawn normally (without being colormapped). The default is &amp;quot;&amp;quot; and is reset after each frame.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.set_scale(value)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Sets the scaling for drawing text and for '''hud.draw_image()'''. Larger values make the text/image bigger. The default scale is 1.0 and is reset after each frame.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.set_alpha(value)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Set the alpha value (translucency) for drawing text, lines, boxes and images. The 'value' parameter ranges from 0.0 (completely invisible) to 1.0 (completely solid). The default alpha is 1.0 and is reset after each frame.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.solid_box(x, y, w, h, color)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Draws a solid rectangle consisting of a single color. The 'x' and 'y' parameters are the coordinates of the top left corner, whereas 'w' and 'h' are the width and height. The current alpha value is also applied.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;The 'color' parameter can take two different forms. Firstly it may be a string with the same notation as DDF and HTML, which begins with a &amp;quot;#&amp;quot; character and is followed by 6 hexadecimal digits. For example &amp;quot;#FF0000&amp;quot; for red and &amp;quot;#0000FF&amp;quot; for blue. Secondly it can be a Lua table with fields called 'r', 'g' and 'b' (for red, green and blue). Each of these fields is a number from 0 to 255. For example: { r=255, g=170, b=0 } for orange.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.solid_line(x1, y1, x2, y2, color)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Draws a solid line between the start coordinate (x1,y1) to the end coordinate (x2, y2). The 'color' parameter is the same as for hud.solid_box(), and the current alpha value is also applied.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.thin_box(x, y, w, h, color)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Similar to '''hud.solid_box()''', but only draws the outline of a rectangle. The inside area is not affected. The sides are always two pixels thick, and never go outside the specified area. The 'color' parameter is the same as for '''hud.solid_box()''', and the current alpha value is also applied.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.gradient_box(x, y, w, h, TL, BL, TR, BR)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Similar to '''hud.solid_box()''', but the colors for each corner are specified individually: 'TL' for top left, 'BL' for bottom left, 'TR' for top right and 'BR' for bottom right. The current alpha value will also be applied.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.draw_image(x, y, name)'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Draws an image at the given coordinates, which specify the top/left corner of the image. The current alpha and scaling factors are applied as well.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.stretch_image(x, y, w, h, name)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Similar to '''hud.draw_image()''', but the image will be stretched or squashed so that it fits exactly into the given rectangle on the screen. The current alpha value is also applied.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.tile_image(x, y, w, h, name, [x_offset, y_offset])&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Draws an image (usually a texture or flat) on the screen, where the image is tiled (repeated) to fill up the given rectangle. The current alpha and scaling factors are also applied. The 'x_offset' and 'y_offset' parameters are optional, and can be used to offset the texture by a certain number of pixels.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.draw_text(x, y, str)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Draws some text on the screen using the current text font, color, alpha and scaling values. Newlines (&amp;quot;\n&amp;quot;) in the string can be used to draw multi-line text.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.draw_num2(x, y, len, num)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Draws a number (an integer) on the screen using the current text font, color, alpha and scaling. The number is right-aligned, in other words the 'x' parameter specified the right-most pixel, and the 'len' parameter gives the maximum number of characters (including the minus sign if the number is negative).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.render_world(x, y, w, h)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Renders the view for the player on the screen, in a rectangle with the given coordinates. The player's weapon is also drawn. The views of different players can be rendered by using the '''hud.set_render_who()''' function below.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.render_automap(x, y, w, h, [options])&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Renders the automap for the player on the screen, in a rectangle with the given coordinates. Note that no background is drawn, hence you can use this function to create an overlay automap (drawn over the top of the player's view). If you need a solid color behind it, use the '''hud.solid_box()''' function first.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;The 'options' parameter is optional, when present it is a table containing a set of variables which modify the way the automap is drawn. Variables which are not present in the table are not affected (stay the same as the user's normal automap). The following list shows all the possible variables:&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;Variable	 Description&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;zoom	 Set a fixed zoom factor, where 1.0 shows the whole map, and larger values make the map bigger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
** &amp;lt;code&amp;gt;grid	 force the grid lines on/off&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;rotate	 force map rotation on/off&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;follow	 force follow-player mode on/off&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;things	 draw all things&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;walls	 draw all walls (like IDDT cheat)&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;allmap	 draw walls like All-Map powerup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.set_render_who(index)'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Sets the current player for rendering the world or the automap. The 'index' parameter is a small number: 1 for the &amp;quot;main player&amp;quot; on this computer (the person at the keyboard), 2 for the next player in the list, etc... upto the number of players in the game.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''hud.automap_colors(table)'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;This function can be used to change some or all of the colors used when drawing the automap. The 'table' parameter is a Lua table where the names are automap parts and the values are the colors. For example: { grid = &amp;quot;#006666&amp;quot;, wall = &amp;quot;#FFFFFF&amp;quot; }. Parts that are not present in the table are not affected (stay the same as before). Here is a list of all the automap parts that can be changed:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;Automap Part	 Description&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** grid	 Grid lines&lt;br /&gt;
** wall	 One sided walls&lt;br /&gt;
** step	 Floor height change, climable&lt;br /&gt;
** ledge	 Floor drop-off, too high to climb&lt;br /&gt;
** ceil	 Ceiling height difference&lt;br /&gt;
** secret	 Secret doors&lt;br /&gt;
** allmap	 Unseen walls when you have the All-Map&lt;br /&gt;
** player	 Player object&lt;br /&gt;
** monster	 Monsters&lt;br /&gt;
** corpse	 Dead monsters&lt;br /&gt;
** item	 Pickup items&lt;br /&gt;
** missile	 Missiles, fireballs, etc&lt;br /&gt;
** scenery	 Scenery items&lt;br /&gt;
&lt;br /&gt;
== * Audio Functions ==&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;hud.play_sound(name)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Plays the given sound, which must be an entry in SOUNDS.DDF.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PLAYER MODULE ==&lt;br /&gt;
&lt;br /&gt;
=== General Queries ===&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_bot()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if the current player is a bot.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.get_name()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns the name of the current player.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.health()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the health of the current player. The result will normally be in the range 0 to 100, regardless of the SPAWNHEALTH setting for the player in DDF (in other words, the result is a percentage value of the spawn health). Values higher than 100 are possible when the player has bonus health (e.g. from the Soul Sphere pickup).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.armor(type)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;For the given armor type, returns the amount the player is currently wearing. The 'type' parameter is a number in the range 1-5, but the following names can be used for more readable code:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ARMORS.green&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ARMORS.blue&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ARMORS.purple&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ARMORS.yellow&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ARMORS.red&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.total_armor(type)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the total amount of armor the player has.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.frags()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Number of frags the player has (for Deathmatch games).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.move_speed()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns a number for how fast the player is currently moving, roughly the number of map units per tic (there are 35 tics per second).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.air_in_lungs()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns amount of air in the player lungs, as a percentage value from 0 to 100. Only guaranteed to be valid while the player is underwater.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.has_key(key)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if the player currently has the specified key, which is a number from 1 to 16. For more readable code, the following names can be used:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.blue_card	KEYS.gold_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.red_card	KEYS.brass_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.yellow_card	KEYS.steel_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.green_card	KEYS.fire_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.blue_skull	KEYS.silver_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.red_skull	KEYS.copper_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.yellow_skull	KEYS.wooden_key&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;KEYS.green_skull	KEYS.water_key&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.has_power(power)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if the player currently has the specified powerup. The 'power' parameter is a number from 1 to 16. For more readable code, the following names can be used:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.invuln&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.berserk&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.invis&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.acid_suit&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.automap&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.goggles&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.jet_pack&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.night_vis&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;POWERS.scuba&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.power_left(power)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the number of seconds remaining for the specified powerup, or zero when the player does not have it. The berserk powerup only counts down the red-screen effect, and returns -1 when that is finished. The automap powerup returns a large value when active and it never counts down. The result for invulnerability is not affected by the God-mode cheat.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== * Weapon Stuff ==&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.has_weapon(name)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns true if the player currently owns the weapon, where 'name' is the DDF name of the weapon.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.has_weapon_slot(slot)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if the player currently owns any weapon which uses the given 'slot', which is a number for 0 to 9 (same as the BINDKEY command in the DDF).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.cur_weapon()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the DDF name of the weapon the player is currently holding, or the special value &amp;quot;none&amp;quot; when the player is holding no weapon at all, or &amp;quot;change&amp;quot; while the weapon is switching to a new one.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.cur_weapon_slot()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the slot number (i.e. BINDKEY) of the weapon the player is currently holding, or -1 when the player is holding no weapon at all.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.ammo(type)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the amount of ammo the player is carrying (not including any ammo inside the clips of weapons). The 'type' parameter is a number in the range 1-16. For more readable code, one of the following names can be used instead:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;AMMOS.bullets	AMMOS.pellets&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;AMMOS.shells	AMMOS.nails&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;AMMOS.rockets	AMMOS.grenades&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;AMMOS.cells	AMMOS.gas&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;'''player.ammomax(type)'''&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the maximum amount of ammo the player can carry (not including weapon clips). The 'type' parameter is the same as the '''player.ammo()''' function.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.main_ammo()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns the main ammo quantity for the player's current weapon. This is zero for weapons that don't use any ammo (like the FIST). If the weapon has a clip and the SHOWCLIP command (in DDF) is true, then the amount of ammo inside the clip is returned instead. Note that only the primary attack is checked, the secondary attack (if present) will be ignored.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.ammo_type(ATK)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the ammo type of the player's current weapon for the given attack (primary or secondary). The result is in the range 1-16, or can be 0 for the special case of NOAMMO. The 'ATK' parameter is 1 for the primary attack, 2 for the secondary attack, and is compulsory.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.ammo_pershot(ATK)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Returns the ammo used up per shot by the current weapon for the given attack (primary or secondary). Same as the AMMOPERSHOT commands in WEAPONS.DDF. The 'ATK' parameter is 1 for the primary attack, 2 for the secondary attack, and is compulsory.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.clip_ammo(ATK)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the current amount of ammo the clip in the player's current weapon is holding, or zero if the weapon has no clip. The 'ATK' parameter is 1 for the primary attack, 2 for the secondary attack, and is compulsory.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.clip_size(ATK)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the maximum amount of ammo the clip in the player's current weapon can hold, or zero if the weapon has no clip. The 'ATK' parameter is 1 for the primary attack, 2 for the secondary attack, and is compulsory.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.clip_is_shared()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if the player's current weapon is sharing a single clip between primary and secondary attackes (the SHARED_CLIP command).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conditions ==&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.on_ground()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is standing on solid ground.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.under_water()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is in AIRLESS water and doesn't have the Scuba powerup.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_swimming()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is in swimmable water (i.e. the SWIM sector special).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_jumping()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is jumping.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_crouching()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is crouching.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.get_side_move()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is strafing from side-to-side.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_attacking()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is firing his weapon (either first or second attack).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_rampaging()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player has been firing his weapon for two seconds or more.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_using()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is holding the USE button down.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_grinning()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if player is grinning (after picking up a weapon).&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== * Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.num_players()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns the total number of players in the game, including bots.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.set_who(index)&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;''Sets who the current player is. The 'index' parameter is a small number: 1 for the &amp;quot;main player&amp;quot; on this computer (the person at the keyboard), 2 for the next player in the list, etc... upto the number of players in the game. All the player query functions described here return their results for the current player.''&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.hurt_by()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;If the player has been hurt in the last few seconds, this returns a string describing what did the damage. Otherwise this function returns nil. The result is usually &amp;quot;enemy&amp;quot;, but could be &amp;quot;friend&amp;quot; for friendly fire. If the player hurt himself with his own damn stupidity then the result is &amp;quot;self&amp;quot;, whereas damaging floors and crushers will return &amp;quot;other&amp;quot;.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.hurt_mon()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;If the player has been hurt in the last few seconds, this returns the name of the monster or other player. Otherwise this function returns nil.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.hurt_pain()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;If the player was just hurt, this returns the damage amount, otherwise this function returns 0.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.hurt_dir()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;If the player was just hurt, this returns a direction relative to the player where the attacker was: -1 for the left side, +1 for the right side, and 0 for all other cases.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.hurt_angle()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Like player.hurt_dir(), except this returns the map angle from the player to his attacker. The result is in degrees (ranging from 0 to 359), where East is 0 and North is 90.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CAMERA MODULE ==&lt;br /&gt;
'''&amp;lt;code&amp;gt;cam.set_bob(1|0, [, 1.0,0.0)&amp;lt;/code&amp;gt;'''&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Sets the Player bobbing. The parameter flags above are as follows:&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;blockquote&amp;gt;First Parameter is an '''Integer''' for enabling or disabling the camera bob. This can either be 1 or 0.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;blockquote&amp;gt;Second Parameter is a '''Float''' for controlling the Up/Down bobbing scale.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;blockquote&amp;gt;Third Parameter is a '''Float''' for controlling the camera roll bobbing scale.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GAME MODULE ==  &lt;br /&gt;
&lt;br /&gt;
==== '''&amp;lt;code&amp;gt;player.is_bot()&amp;lt;/code&amp;gt;''' ====&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''&amp;lt;code&amp;gt;Returns true if the current player is a bot.&amp;lt;/code&amp;gt;''&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Texture_Formats_(Dreamcast)&amp;diff=720</id>
		<title>Texture Formats (Dreamcast)</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Texture_Formats_(Dreamcast)&amp;diff=720"/>
				<updated>2018-09-03T18:10:30Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: Created page with &amp;quot;This tutorial will explain how you can store image data on the Dreamcast's PVR graphics chip for efficient drawing and compact storage.  List of texture formats: http://game...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial will explain how you can store image data on the Dreamcast's PVR graphics chip for efficient drawing and compact storage.&lt;br /&gt;
&lt;br /&gt;
List of texture formats: [[http://gamedev.allusion.net/docs/kos-current/group__pvr__txr__fmts.html]]&lt;br /&gt;
&lt;br /&gt;
= Color formats =&lt;br /&gt;
== Truecolor ==&lt;br /&gt;
This table describes the color information that can be stored in textures.&lt;br /&gt;
&lt;br /&gt;
{|RGB565 || 5 bits of red, 6 bits of green, 5 bits of blue, no transparency&lt;br /&gt;
|-&lt;br /&gt;
|ARGB1555 || each color channel has 5 bits, transparency is on or off&lt;br /&gt;
|-&lt;br /&gt;
|ARGB4444 || each channel has 4 bits, use if you need a transparent gradient&lt;br /&gt;
|-&lt;br /&gt;
|BUMP     || bumpmap format (stores angles for vertex displacement effects in lighting calculations), similar to a normal map&lt;br /&gt;
|-&lt;br /&gt;
|YUV422   || mostly used for video decoding, uncommonly used&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Paletted ==&lt;br /&gt;
There are also paletted texture formats which can be combined with the above color formats as well as ARGB8888.&lt;br /&gt;
&lt;br /&gt;
4BPP_PAL (or 8BPP_PAL)&lt;br /&gt;
# Define an array of 2^4 = 16 (or 2^8 = 256) color values.&lt;br /&gt;
# Copy the array to the graphics chip, then send textures that use 4-bit (or 8-bit) indices into that array instead of 16 bit argb as pixel values.&lt;br /&gt;
&lt;br /&gt;
ARGB8888 is slow when used with filtering.&lt;br /&gt;
&lt;br /&gt;
You can set multiple palettes on the graphics chip at the same time (1024 bytes total), so they're not per-texture at all, but global.&lt;br /&gt;
&lt;br /&gt;
Paletted textures are always twiddled and never strided.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Additional attributes =&lt;br /&gt;
Textures can be twiddled, VQ compressed, strided or mipmapped.&lt;br /&gt;
&lt;br /&gt;
== Twiddled ==&lt;br /&gt;
Pixels aren't stored row-by-row, but in a z-shape arrangement which puts neighboring pixels closer together. This makes texture filtering cheaper and you definitely want to use it. Twiddled textures must have power-of-two dimensions (e.g. 512x512, 256x1024).&lt;br /&gt;
&lt;br /&gt;
== VQ compressed ==&lt;br /&gt;
Vector Quantization is a lossy texture compression. The Dreamcast graphics chip has special hardware to decode it, so you suffer no performance loss for the decoding step when texture data is read by it for drawing. Textures will use less video memory.&lt;br /&gt;
&lt;br /&gt;
== Strided ==&lt;br /&gt;
A way to draw non-power-of-two textures by defining gaps.&lt;br /&gt;
&lt;br /&gt;
== Mipmapped ==&lt;br /&gt;
Each texture stores smaller versions of itself (512x256 -&amp;gt; 256x128 -&amp;gt; 128x64..). Makes textures 1/3 bigger, texture filtering cheaper and improves rendering performance when textures are displayed at a smaller than original size.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Converting art assets to Dreamcast texture formats =&lt;br /&gt;
It is more efficient to convert your PNG/TGA/etc. art assets during the build process of your game instead of during runtime.&lt;br /&gt;
&lt;br /&gt;
There are tools for conversion in the KOS utils folder. Be aware that the KOS conversion tool does not support non-square VQ textures, although it should.&lt;br /&gt;
This conversion tool by tvspelsfreak offers support for that in addition to a handy preview feature [[https://github.com/tvspelsfreak/texconv]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Comparison between uncompressed and compressed =&lt;br /&gt;
To see how useful applying the proper texture format is, check out [http://dcemulation.org/phpBB/viewtopic.php?f=29&amp;amp;t=103369&amp;amp;p=1045482 this thread]&lt;br /&gt;
&lt;br /&gt;
Consider face.png, 1024x1024, RGB888 for example.&lt;br /&gt;
&lt;br /&gt;
* 304K   face.png&lt;br /&gt;
* 3.1M   face.tga&lt;br /&gt;
* 516K   face.dds&lt;br /&gt;
* 344K   face.kmg&lt;br /&gt;
* 108K   face.kmg.gz&lt;br /&gt;
&lt;br /&gt;
If you store this texture on the CD as PNG, it will will take 304 kilobytes.&lt;br /&gt;
&lt;br /&gt;
After unpacking it and storing it in video memory it will take 3 megabytes (1024*1024 * 3 bytes = 3 MB).&lt;br /&gt;
&lt;br /&gt;
If you convert it from RGB888 to RGB565 it will still take 2 megabytes.&lt;br /&gt;
&lt;br /&gt;
The VQ compressed RGB565 texture takes 344 kilobytes in video memory. No decompression is required, it is quicker to upload to the PVR graphics chip and requires 6 times less video memory.&lt;br /&gt;
Depending on the amount of colors in the original image the quality loss may not be noticeable.&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=ROQ_Videos&amp;diff=719</id>
		<title>ROQ Videos</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=ROQ_Videos&amp;diff=719"/>
				<updated>2018-07-09T18:09:32Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RoQ is a video file format that originated in The 11th Hour game. After Graeme Devine, the creator of the format joined id Software, the RoQ file format has been in use in every game the company has released such as Quake III, Return to Castle Wolfenstein and DOOM 3. As it applies to id Tech 4 , these files are used for video sequences and animated materials and are stored in / base/video .&lt;br /&gt;
&lt;br /&gt;
EDGE uses ROQ as the format of choice for cinematic playback. &lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
The format runs at a fixed 30 frames per second with an optional 22050 Hz mono or stereo sound track. Videos may technically be up to 65520 x 65520 pixels with both dimensions divisible by 16 and produce a valid RoQ file, but none of id Software’s games will play back a video with dimensions that aren’t a power of two, most likely because of OpenGL’s texture sizing restrictions.&amp;lt;blockquote&amp;gt;'''NOTE''' : It’s been reported that movies with dimensions greater than 512 x 512 cause issues in EDGE. Whatever the dimensions, make sure they are POWER-OF-TWO!&amp;lt;/blockquote&amp;gt;RoQ is a motion compensating vector quanitizer format, similar to Cinepak, but higher quality due to the use of the ITU-R BT.601 colorspace (the same one used in component video, PAL televisions, JPEG and MPEG), whereas Cinepak uses a low-quality YUV-like colorspace designed for faster decoding that often results in gamut degradation before compression even begins.&lt;br /&gt;
&lt;br /&gt;
Because it’s a vector quantizer, RoQ files are very fast to decode and very slow to encode. Decoding involves nothing more than converting the colorspace of the codebooks and then copying data, whereas encoding involves using several complicated schemes to produce a “palette” of image fragments that will result in the least degradation.&lt;br /&gt;
&lt;br /&gt;
RoQ uses two codebooks per frame, with the second being constructed from pieces of the first, with up to 256 entries each. Due to this, only 1024 new colors can be introduced each frame, severely limiting the color gamut. This could arguably be improved by better predicting which sections will be motion compensated, but doing so is difficult, since codebook entries are generated from non-motion-compensated image sections, but whether or not they’ll be used depends on the quality of them compared to motion compensated sections, resulting in a chicken-and-egg problem. This is made worse by the fact that all three major RoQ codecs are single-pass.&lt;br /&gt;
&lt;br /&gt;
While the format is limited and much lower quality than MPEG and Indeo Video, it was presumedly preferred by id Software because of the lack of royalties, the lack of patent liability that presents a serious problem with most video formats, and the absence of complex platform-specific APIs.&lt;br /&gt;
&lt;br /&gt;
== Content creation ==&lt;br /&gt;
You can create your own RoQ files using one of the following:&lt;br /&gt;
* FFMPEG (see Tutorial below)&lt;br /&gt;
* [http://www.swift-tools.net/Quake/QVM/ Quake Video Maker]&lt;br /&gt;
* [http://icculus.org/~riot/ Switchblade] (also includes a patch for FFMPEG).&lt;br /&gt;
&lt;br /&gt;
== TUTORIAL ==&lt;br /&gt;
# To create a movie from a source file (either MP4 or AVI, but AVI is preferred) - you must have FFMPEG downloaded first. You can download the version you need from the [https://www.ffmpeg.org/ FFMPEG Website].&lt;br /&gt;
# Put your source movie into the same directory as you have the binary for FFMPEG.&lt;br /&gt;
# Next, open the command-prompt (or your CLR of choice), and type in the following switches:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;ffmpeg -i {yourmovie.format} -r 30 -s 512x512 -ar 22050 {output}.Roq&amp;lt;/blockquote&amp;gt;Where {&amp;lt;code&amp;gt;yourmovie&amp;lt;/code&amp;gt;} is the source title, &amp;lt;code&amp;gt;format&amp;lt;/code&amp;gt; is either MP4/AVI, and &amp;lt;code&amp;gt;output&amp;lt;/code&amp;gt; is the name of your ROQ. The technical gist is that it encodes the movie at &amp;lt;code&amp;gt;30FPS&amp;lt;/code&amp;gt; (which is hard-coded, so better to have your video at 30FPS before you encode it), with a fixed resolution of &amp;lt;code&amp;gt;512x512&amp;lt;/code&amp;gt; (power-of-two will upscale it automatically), and &amp;lt;code&amp;gt;22050&amp;lt;/code&amp;gt; is the sound frequency (MUST BE 22KHZ!).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;It's a good idea to do some video checks first. ROQ is limited to 512x512, but EDGE has scaling routines that make it look pretty decent in higher resolutions. '''Make sure your video is POWER OF TWO''', otherwise your ROQ will decode poorly.&amp;lt;/code&amp;gt;&lt;br /&gt;
# With your ROQ, name it {intro.roq} and put it in the /video namespace inside of your archive. Right now, EDGE is limited to playing ROQ animations on startup only. &lt;br /&gt;
&lt;br /&gt;
TODO: EDGE over-all integration&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=ROQ_Videos&amp;diff=718</id>
		<title>ROQ Videos</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=ROQ_Videos&amp;diff=718"/>
				<updated>2018-07-09T18:06:20Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RoQ is a video file format that originated in The 11th Hour game. After Graeme Devine, the creator of the format joined id Software, the RoQ file format has been in use in every game the company has released such as Quake III, Return to Castle Wolfenstein and DOOM 3. As it applies to id Tech 4 , these files are used for video sequences and animated materials and are stored in / base/video .&lt;br /&gt;
&lt;br /&gt;
EDGE uses ROQ as the format of choice for cinematic playback. &lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
The format runs at a fixed 30 frames per second with an optional 22050 Hz mono or stereo sound track. Videos may technically be up to 65520 x 65520 pixels with both dimensions divisible by 16 and produce a valid RoQ file, but none of id Software’s games will play back a video with dimensions that aren’t a power of two, most likely because of OpenGL’s texture sizing restrictions.&lt;br /&gt;
&lt;br /&gt;
'''NOTE''' : It’s been reported that movies with dimensions greater than 512 x 512 cause issues in various id Software games. Until this can be positively confirmed or denied it’s best to avoid higher resolutions.&lt;br /&gt;
&lt;br /&gt;
RoQ is a motion compensating vector quanitizer format, similar to Cinepak, but higher quality due to the use of the ITU-R BT.601 colorspace (the same one used in component video, PAL televisions, JPEG and MPEG), whereas Cinepak uses a low-quality YUV-like colorspace designed for faster decoding that often results in gamut degradation before compression even begins.&lt;br /&gt;
&lt;br /&gt;
Because it’s a vector quantizer, RoQ files are very fast to decode and very slow to encode. Decoding involves nothing more than converting the colorspace of the codebooks and then copying data, whereas encoding involves using several complicated schemes to produce a “palette” of image fragments that will result in the least degradation.&lt;br /&gt;
&lt;br /&gt;
RoQ uses two codebooks per frame, with the second being constructed from pieces of the first, with up to 256 entries each. Due to this, only 1024 new colors can be introduced each frame, severely limiting the color gamut. This could arguably be improved by better predicting which sections will be motion compensated, but doing so is difficult, since codebook entries are generated from non-motion-compensated image sections, but whether or not they’ll be used depends on the quality of them compared to motion compensated sections, resulting in a chicken-and-egg problem. This is made worse by the fact that all three major RoQ codecs are single-pass.&lt;br /&gt;
&lt;br /&gt;
While the format is limited and much lower quality than MPEG and Indeo Video, it was presumedly preferred by id Software because of the lack of royalties, the lack of patent liability that presents a serious problem with most video formats, and the absence of complex platform-specific APIs.&lt;br /&gt;
&lt;br /&gt;
== Content creation ==&lt;br /&gt;
You can create your own RoQ files using one of the following:&lt;br /&gt;
* FFMPEG (see Tutorial below)&lt;br /&gt;
* [http://www.swift-tools.net/Quake/QVM/ Quake Video Maker]&lt;br /&gt;
* [http://icculus.org/~riot/ Switchblade] (also includes a patch for FFMPEG).&lt;br /&gt;
&lt;br /&gt;
== TUTORIAL ==&lt;br /&gt;
# To create a movie from a source file (either MP4 or AVI, but AVI is preferred) - you must have FFMPEG downloaded first. You can download the version you need from the [https://www.ffmpeg.org/ FFMPEG Website].&lt;br /&gt;
# Put your source movie into the same directory as you have the binary for FFMPEG.&lt;br /&gt;
# Next, open the command-prompt (or your CLR of choice), and type in the following switches:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;ffmpeg -i {yourmovie.format} -r 30 -s 512x512 -ar 22050 {output}.Roq&amp;lt;/blockquote&amp;gt;Where {&amp;lt;code&amp;gt;yourmovie&amp;lt;/code&amp;gt;} is the source title, &amp;lt;code&amp;gt;format&amp;lt;/code&amp;gt; is either MP4/AVI, and &amp;lt;code&amp;gt;output&amp;lt;/code&amp;gt; is the name of your ROQ. The technical gist is that it encodes the movie at &amp;lt;code&amp;gt;30FPS&amp;lt;/code&amp;gt; (which is hard-coded, so better to have your video at 30FPS before you encode it), with a fixed resolution of &amp;lt;code&amp;gt;512x512&amp;lt;/code&amp;gt; (power-of-two will upscale it automatically), and &amp;lt;code&amp;gt;22050&amp;lt;/code&amp;gt; is the sound frequency (MUST BE 22KHZ!).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;It's a good idea to do some video checks first. ROQ is limited to 512x512, but EDGE has scaling routines that make it look pretty decent in higher resolutions. '''Make sure your video is POWER OF TWO''', otherwise your ROQ will decode poorly.&amp;lt;/code&amp;gt;&lt;br /&gt;
# With your ROQ, name it {intro.roq} and put it in the /video namespace inside of your archive. Right now, EDGE is limited to playing ROQ animations on startup only. &lt;br /&gt;
&lt;br /&gt;
TODO: EDGE over-all integration&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=ROQ_Videos&amp;diff=717</id>
		<title>ROQ Videos</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=ROQ_Videos&amp;diff=717"/>
				<updated>2018-07-09T18:04:46Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{TOC}&lt;br /&gt;
RoQ is a video file format that originated in The 11th Hour game. After Graeme Devine, the creator of the format joined id Software, the RoQ file format has been in use in every game the company has released such as Quake III, Return to Castle Wolfenstein and DOOM 3. As it applies to id Tech 4 , these files are used for video sequences and animated materials and are stored in / base/video .&lt;br /&gt;
&lt;br /&gt;
EDGE uses ROQ as the format of choice for cinematic playback. &lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
The format runs at a fixed 30 frames per second with an optional 22050 Hz mono or stereo sound track. Videos may technically be up to 65520 x 65520 pixels with both dimensions divisible by 16 and produce a valid RoQ file, but none of id Software’s games will play back a video with dimensions that aren’t a power of two, most likely because of OpenGL’s texture sizing restrictions.&lt;br /&gt;
&lt;br /&gt;
'''NOTE''' : It’s been reported that movies with dimensions greater than 512 x 512 cause issues in various id Software games. Until this can be positively confirmed or denied it’s best to avoid higher resolutions.&lt;br /&gt;
&lt;br /&gt;
RoQ is a motion compensating vector quanitizer format, similar to Cinepak, but higher quality due to the use of the ITU-R BT.601 colorspace (the same one used in component video, PAL televisions, JPEG and MPEG), whereas Cinepak uses a low-quality YUV-like colorspace designed for faster decoding that often results in gamut degradation before compression even begins.&lt;br /&gt;
&lt;br /&gt;
Because it’s a vector quantizer, RoQ files are very fast to decode and very slow to encode. Decoding involves nothing more than converting the colorspace of the codebooks and then copying data, whereas encoding involves using several complicated schemes to produce a “palette” of image fragments that will result in the least degradation.&lt;br /&gt;
&lt;br /&gt;
RoQ uses two codebooks per frame, with the second being constructed from pieces of the first, with up to 256 entries each. Due to this, only 1024 new colors can be introduced each frame, severely limiting the color gamut. This could arguably be improved by better predicting which sections will be motion compensated, but doing so is difficult, since codebook entries are generated from non-motion-compensated image sections, but whether or not they’ll be used depends on the quality of them compared to motion compensated sections, resulting in a chicken-and-egg problem. This is made worse by the fact that all three major RoQ codecs are single-pass.&lt;br /&gt;
&lt;br /&gt;
While the format is limited and much lower quality than MPEG and Indeo Video, it was presumedly preferred by id Software because of the lack of royalties, the lack of patent liability that presents a serious problem with most video formats, and the absence of complex platform-specific APIs.&lt;br /&gt;
&lt;br /&gt;
== Content creation ==&lt;br /&gt;
You can create your own RoQ files using one of the following:&lt;br /&gt;
* FFMPEG (see Tutorial below)&lt;br /&gt;
* [http://www.swift-tools.net/Quake/QVM/ Quake Video Maker]&lt;br /&gt;
* [http://icculus.org/~riot/ Switchblade] (also includes a patch for FFMPEG).&lt;br /&gt;
&lt;br /&gt;
== TUTORIAL ==&lt;br /&gt;
# To create a movie from a source file (either MP4 or AVI, but AVI is preferred) - you must have FFMPEG downloaded first. You can download the version you need from the [https://www.ffmpeg.org/ FFMPEG Website].&lt;br /&gt;
# Put your source movie into the same directory as you have the binary for FFMPEG.&lt;br /&gt;
# Next, open the command-prompt (or your CLR of choice), and type in the following switches:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;ffmpeg -i {yourmovie.format} -r 30 -s 512x512 -ar 22050 {output}.Roq&amp;lt;/blockquote&amp;gt;Where {&amp;lt;code&amp;gt;yourmovie&amp;lt;/code&amp;gt;} is the source title, &amp;lt;code&amp;gt;format&amp;lt;/code&amp;gt; is either MP4/AVI, and &amp;lt;code&amp;gt;output&amp;lt;/code&amp;gt; is the name of your ROQ. The technical gist is that it encodes the movie at &amp;lt;code&amp;gt;30FPS&amp;lt;/code&amp;gt; (which is hard-coded, so better to have your video at 30FPS before you encode it), with a fixed resolution of &amp;lt;code&amp;gt;512x512&amp;lt;/code&amp;gt; (power-of-two will upscale it automatically), and &amp;lt;code&amp;gt;22050&amp;lt;/code&amp;gt; is the sound frequency (MUST BE 22KHZ!).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;It's a good idea to do some video checks first. ROQ is limited to 512x512, but EDGE has scaling routines that make it look pretty decent in higher resolutions. '''Make sure your video is POWER OF TWO''', otherwise your ROQ will decode poorly.&amp;lt;/code&amp;gt;&lt;br /&gt;
# With your ROQ, name it {intro.roq} and put it in the /video namespace inside of your archive. Right now, EDGE is limited to playing ROQ animations on startup only. &lt;br /&gt;
&lt;br /&gt;
TODO: EDGE over-all integration&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=ROQ_Videos&amp;diff=716</id>
		<title>ROQ Videos</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=ROQ_Videos&amp;diff=716"/>
				<updated>2018-07-09T18:04:29Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: Created ROQ Videos, made a little tutorial.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RoQ is a video file format that originated in The 11th Hour game. After Graeme Devine, the creator of the format joined id Software, the RoQ file format has been in use in every game the company has released such as Quake III, Return to Castle Wolfenstein and DOOM 3. As it applies to id Tech 4 , these files are used for video sequences and animated materials and are stored in / base/video .&lt;br /&gt;
&lt;br /&gt;
EDGE uses ROQ as the format of choice for cinematic playback. &lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
The format runs at a fixed 30 frames per second with an optional 22050 Hz mono or stereo sound track. Videos may technically be up to 65520 x 65520 pixels with both dimensions divisible by 16 and produce a valid RoQ file, but none of id Software’s games will play back a video with dimensions that aren’t a power of two, most likely because of OpenGL’s texture sizing restrictions.&lt;br /&gt;
&lt;br /&gt;
'''NOTE''' : It’s been reported that movies with dimensions greater than 512 x 512 cause issues in various id Software games. Until this can be positively confirmed or denied it’s best to avoid higher resolutions.&lt;br /&gt;
&lt;br /&gt;
RoQ is a motion compensating vector quanitizer format, similar to Cinepak, but higher quality due to the use of the ITU-R BT.601 colorspace (the same one used in component video, PAL televisions, JPEG and MPEG), whereas Cinepak uses a low-quality YUV-like colorspace designed for faster decoding that often results in gamut degradation before compression even begins.&lt;br /&gt;
&lt;br /&gt;
Because it’s a vector quantizer, RoQ files are very fast to decode and very slow to encode. Decoding involves nothing more than converting the colorspace of the codebooks and then copying data, whereas encoding involves using several complicated schemes to produce a “palette” of image fragments that will result in the least degradation.&lt;br /&gt;
&lt;br /&gt;
RoQ uses two codebooks per frame, with the second being constructed from pieces of the first, with up to 256 entries each. Due to this, only 1024 new colors can be introduced each frame, severely limiting the color gamut. This could arguably be improved by better predicting which sections will be motion compensated, but doing so is difficult, since codebook entries are generated from non-motion-compensated image sections, but whether or not they’ll be used depends on the quality of them compared to motion compensated sections, resulting in a chicken-and-egg problem. This is made worse by the fact that all three major RoQ codecs are single-pass.&lt;br /&gt;
&lt;br /&gt;
While the format is limited and much lower quality than MPEG and Indeo Video, it was presumedly preferred by id Software because of the lack of royalties, the lack of patent liability that presents a serious problem with most video formats, and the absence of complex platform-specific APIs.&lt;br /&gt;
&lt;br /&gt;
== Content creation ==&lt;br /&gt;
You can create your own RoQ files using one of the following:&lt;br /&gt;
* FFMPEG (see Tutorial below)&lt;br /&gt;
* [http://www.swift-tools.net/Quake/QVM/ Quake Video Maker]&lt;br /&gt;
* [http://icculus.org/~riot/ Switchblade] (also includes a patch for FFMPEG).&lt;br /&gt;
&lt;br /&gt;
== TUTORIAL ==&lt;br /&gt;
# To create a movie from a source file (either MP4 or AVI, but AVI is preferred) - you must have FFMPEG downloaded first. You can download the version you need from the [https://www.ffmpeg.org/ FFMPEG Website].&lt;br /&gt;
# Put your source movie into the same directory as you have the binary for FFMPEG.&lt;br /&gt;
# Next, open the command-prompt (or your CLR of choice), and type in the following switches:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;ffmpeg -i {yourmovie.format} -r 30 -s 512x512 -ar 22050 {output}.Roq&amp;lt;/blockquote&amp;gt;Where {&amp;lt;code&amp;gt;yourmovie&amp;lt;/code&amp;gt;} is the source title, &amp;lt;code&amp;gt;format&amp;lt;/code&amp;gt; is either MP4/AVI, and &amp;lt;code&amp;gt;output&amp;lt;/code&amp;gt; is the name of your ROQ. The technical gist is that it encodes the movie at &amp;lt;code&amp;gt;30FPS&amp;lt;/code&amp;gt; (which is hard-coded, so better to have your video at 30FPS before you encode it), with a fixed resolution of &amp;lt;code&amp;gt;512x512&amp;lt;/code&amp;gt; (power-of-two will upscale it automatically), and &amp;lt;code&amp;gt;22050&amp;lt;/code&amp;gt; is the sound frequency (MUST BE 22KHZ!).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;It's a good idea to do some video checks first. ROQ is limited to 512x512, but EDGE has scaling routines that make it look pretty decent in higher resolutions. '''Make sure your video is POWER OF TWO''', otherwise your ROQ will decode poorly.&amp;lt;/code&amp;gt;&lt;br /&gt;
# With your ROQ, name it {intro.roq} and put it in the /video namespace inside of your archive. Right now, EDGE is limited to playing ROQ animations on startup only. &lt;br /&gt;
&lt;br /&gt;
TODO: EDGE over-all integration&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=CAMERA-MAN&amp;diff=715</id>
		<title>CAMERA-MAN</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=CAMERA-MAN&amp;diff=715"/>
				<updated>2018-06-04T18:13:21Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: finally added CAMERA-MAN basics&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
'''Camera-Man''' governs setup and handling of in-engine cameras. With Camera-Man, you can create dynamic, trigger-able (via [[Radius Trigger Script]] or [[COAL]]) cameras, using a simple-to-understand console commands.&lt;br /&gt;
&lt;br /&gt;
== Loading ==&lt;br /&gt;
In EDGE, cameras are recorded and stored as ''.CAMDAT'' files. The current directory the Camera-Man scripts are saved to is '''../doom_ddf/cameras/MAPNAME''', where ''MAPNAME'' is either a Map in ExMx, MAPxx, or any format tied to [[GlBSP|edgeBSP]] (using the GL_ prefixes for a custom map). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;code&amp;gt;'''&amp;lt;/nowiki&amp;gt;You can control the default directory to save CAMDAT files to, using the console command ''camera_subdir&amp;lt;nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/nowiki&amp;gt;.'' &lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1 Console Commands ===&lt;br /&gt;
Basic setup of the camera-man system is done via set of console commands, listed below:&amp;lt;blockquote&amp;gt;- 'actcam' - activates (turns on) the system, by default it is inactive; the command requires a single parameter to indicated whether to turn on or off the system (1 or 0),&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;- 'rstcam' - resets the system to its default state (erases all stored cameras and turns it off),&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;- 'addcam' - adds a new camera in player's current location and orientation; it requires two parameters - field-of-view angle, in degrees and a name for the camera (which is optional),&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;- 'remcam' - removes a camera of given idetifier (provided by 'addcam') or name; removal by name requires the first parameter to be set to -1,&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;- 'swtcam' - switches the view to the camera given by an identifier or a name; switching by name requires the first parameter to be set to -1,&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;- 'strcam' - sets the camera of given identifier or name as the first one (start) to interpolate between; setting the camera by name requires the first parameter to be set to -1,&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;- 'endcam' - sets the camera of given identifier or name as the second one (end) to interpolate between; setting the camera by name requires the first parameter to be set to -1,&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;- 'poscam' - sets position of the camera of given identifier or name to be players current position; setting the camera by name requires the first parameter to be set to -1,&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;- 'angcam' - sets angles of the camera of given identifier or name to be players current angles (vertical and horizontal); setting the camera by name requires the first parameter to be set to -1,&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;- 'fovcam' - sets field-of-view angle (in degrees) of the camera of given identifier or name to be of the given value; setting the camera by name requires the first parameter to be set to -1,&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;- 'savcam' - saves current state of the system to a file located in a sub-directory specified in 'camera_subdir' global variable (by default set to 'doom_ddf/cameras'); saved file name is the same as the name of the currently open map,&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;- 'lddcam' - loads the state of the system from a file located in a sub-directory specified in 'camera_subdir' global variable (by default set to 'doom_ddf/cameras'); loaded file name is the same as the name of the currently open map,&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;- 'prtcam' - prints debugging information about current state of the system (i.e. lists all cameras avaiable),&amp;lt;/blockquote&amp;gt;&amp;lt;blockquote&amp;gt;- 'tghelp' - toggles rendering of helper gizmos in the engine (e.g. gizmos showing where cameras were set up).&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.2 COAL Interface ===&lt;br /&gt;
Camera-man system is also controllable via COAL scripts, see the [[CAMERA-MAN Manual]] for more information.&lt;br /&gt;
&lt;br /&gt;
- [TODO]&lt;br /&gt;
&lt;br /&gt;
=== 2.3 RTS Interface ===&lt;br /&gt;
Camera-man system is also controllable via RTS scripts, see the [[CAMERA-MAN Manual]] for more information.&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Supported_data_formats&amp;diff=714</id>
		<title>Supported data formats</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Supported_data_formats&amp;diff=714"/>
				<updated>2018-05-06T00:30:59Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;3DGE supports a wide array of data formats for the end-user. Below is a short list:&lt;br /&gt;
&lt;br /&gt;
=[[Archive_format|ARCHIVE FORMATS]]=&lt;br /&gt;
* While 3DGE supports more, below are the most commonly used nowadays:&lt;br /&gt;
[[EPK]] - EDGE PAcKage: almost identical to [[PK3]], used only for EDGE&amp;lt;br /&amp;gt;&lt;br /&gt;
[[PK3]] - Quake 3 (etc) '''ZIP''' format with namespace support&amp;lt;br /&amp;gt;&lt;br /&gt;
[[PK7]] - 7Zip compressed archive format&amp;lt;br /&amp;gt;&lt;br /&gt;
[[PAK]] - Quake WAD equivalent&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=MODEL FORMATS=&lt;br /&gt;
[[MD2]] - Quake 2 Model format&amp;lt;br /&amp;gt;&lt;br /&gt;
[[MD3]] - Quake 3: Arena Model format (3DGE only)&amp;lt;br /&amp;gt;&lt;br /&gt;
[[MD5]] - DOOM 3 Model format (3DGE-only)&amp;lt;br /&amp;gt;&lt;br /&gt;
[[MDL]] - Half-Life Model format (3DGE-only)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=SOUNDS=&lt;br /&gt;
[[OGG]] - Ogg Vorbis sound format&amp;lt;br /&amp;gt;&lt;br /&gt;
[[WAV]] - DOOM WAV format&amp;lt;br /&amp;gt;&lt;br /&gt;
[[MIDI]] - DOOM MIDI format&amp;lt;br /&amp;gt;&lt;br /&gt;
[[VOC]] - ROTT VOC format&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=GRAPHICS=&lt;br /&gt;
[[JPG]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[PNG]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[TGA]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[PATCH]] - DOOM's INTERNAL PATCH FORMAT&lt;br /&gt;
[[ROTT PATCH]] - [[Rise of the Triad]]'s PATCH FORMAT&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=Radius_Trigger_Script&amp;diff=713</id>
		<title>Radius Trigger Script</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=Radius_Trigger_Script&amp;diff=713"/>
				<updated>2018-04-20T17:39:44Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RTS (&amp;quot;'''Radius Trigger Script'''&amp;quot;) is the scripting language invented by [[DOSDoom]] and greatly expanded upon in [[3DGE]]. It was the first such scripting language to be implemented in any source port.&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
RTS is not intended to replace [[DDF]], but accents and enhances DDF. Using both DDF and RTS together, you can create amazing events that even Quake 2 is not capable of.&lt;br /&gt;
&lt;br /&gt;
With RTS, you can create scripted events that cannot be controlled by [[linedef]] triggers alone, such as a simple on-screen tip message, multiple [[linetypes]] being triggered by one switch, or a complex event where an entire structure is destroyed, monsters are spawned, sounds are played, and light levels are changed dramatically. &lt;br /&gt;
&lt;br /&gt;
Somewhat more technically defined, a script is something a person writes in a text editor of some sort, that contains individual scripts (kind of like subroutines), commands, variable declarations, and so on. You cannot use word processor files (like &amp;quot;DOC&amp;quot; files), because these are not text files and 3DGE cannot read them.&lt;br /&gt;
&lt;br /&gt;
The RTS specs were originally written by [[John Cole]] for [[DosDoom]] v[[0.64]].&lt;br /&gt;
&lt;br /&gt;
=Getting Started=&lt;br /&gt;
This guide is still being migrated over from the old EDGE SourceForge RTS Documentation website. [http://edge.sourceforge.net/rts_online/start.htm Please visit the old site until this guide is completed].&lt;br /&gt;
&lt;br /&gt;
==Some general points about RTS scripting:==&lt;br /&gt;
&lt;br /&gt;
* [[#CLEAR_ALL]] (if used) must be at the top of your script, or else everything before it will be cleared.&lt;br /&gt;
&lt;br /&gt;
* [[#VERSION]] and [[#DEFINE]] values (if used) must be after #CLEARALL, but before the rest of your script&lt;br /&gt;
&lt;br /&gt;
* You must place all your radius triggers between [[START_MAP]] and [[END_MAP]].&lt;br /&gt;
&lt;br /&gt;
* All other commands can only exist between [[RADIUS_TRIGGER]] (or [[RECT_TRIGGER]]) and [[END_RADIUS_TRIGGER]].&lt;br /&gt;
&lt;br /&gt;
* '''Commands are not case sensitive''', hence &amp;quot;start_map&amp;quot;, &amp;quot;Start_Map&amp;quot; and &amp;quot;START_MAP&amp;quot; are all acceptable. Whether you use lowercase or uppercase is just a matter of personal taste.&lt;br /&gt;
&lt;br /&gt;
You can include comments (text which will be ignored by 3DGE) by simply placing a double slash &amp;quot;//&amp;quot; at the beginning of a line and then typing your text after it. &lt;br /&gt;
&lt;br /&gt;
'''For example:'''&lt;br /&gt;
//This is a comment&lt;br /&gt;
//and this is another one&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #f2e0ce; border: 2px solid #bfb1a3; padding: 0.6em; margin-top: 0.8em;&amp;quot;&amp;gt;Commands in RTS scripts can be extended over two (or more) actual lines by placing the \ character at the end. &lt;br /&gt;
'''There must not be any spaces after the \ character, otherwise it doesn't work.'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==General Tips==&lt;br /&gt;
&lt;br /&gt;
Check your spelling and values carefully, and add a few functions at a time, then test.&lt;br /&gt;
&lt;br /&gt;
Just like [[DDF]] development, adding a lot of entries without testing makes it much harder to find problems. If you add a little and test often, you have less scripting to rummage through to find errors.&lt;br /&gt;
&lt;br /&gt;
==Conventions==&lt;br /&gt;
&lt;br /&gt;
Most RTS commands take one or more parameters. Some parameters must be given, and the remaining parameters are optional (may be left out). Throughout this documentation the following bracket styles are used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Name&amp;gt; : a compulsory parameter&lt;br /&gt;
[Name] : an optional parameter&lt;br /&gt;
&lt;br /&gt;
[[Category:Languages]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{RTS}}&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	<entry>
		<id>https://3dfxdev.net/edgewiki/index.php?title=DOSDoom_Team&amp;diff=712</id>
		<title>DOSDoom Team</title>
		<link rel="alternate" type="text/html" href="https://3dfxdev.net/edgewiki/index.php?title=DOSDoom_Team&amp;diff=712"/>
				<updated>2018-04-20T17:19:59Z</updated>
		
		<summary type="html">&lt;p&gt;Corbin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:DOSDoomlogo.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
The [[DOSDoom]] Team, headed by [[Andrew Baker]], took over for [[Chi Hoang]] and continued development of the port, until version [[0.653]] was released in 1999, when it was decided to change the name to [[EDGE]].&lt;br /&gt;
&lt;br /&gt;
The DOSDoom Team:&lt;br /&gt;
* [[Chi Hoang]] : programming&lt;br /&gt;
* [[Andrew Baker]] (darkknight): programming&lt;br /&gt;
* [[Kester Maddock]] : programming&lt;br /&gt;
* [[Martin Howe]] : programming, cat lover&lt;br /&gt;
* [[John Cole]]: programming &lt;br /&gt;
* [[Rasem Brsiq]]: programming&lt;br /&gt;
* [[Captain Mellow]]: support, graphics&lt;br /&gt;
* [[CowMonster]] : support, graphics&lt;br /&gt;
* [[Ziggy Gnarly]]: support, graphics&lt;br /&gt;
* [[Sidearm Joe]]: support, graphics&lt;br /&gt;
* [[Matt Cooke]]: support &lt;br /&gt;
* [[Eric Simpson]] : support&lt;br /&gt;
Some team members would continue development of DOSDoom under its new name, EDGE.&lt;/div&gt;</summary>
		<author><name>Corbin</name></author>	</entry>

	</feed>