Doom Definition File

A Doom Definition File, or DDF, is a file used by the source port EDGE as an alternative to DeHackEd and as a method of expanded editing for EDGE's features. Many believe DDF is the most powerful function of EDGE so far, due to its fine-grained ability to control many different parts of the engine. Many weapon modifications have arisen based on EDGE and DDF.

Newer releases of EDGE has since expanded and added features that were not part of DDF in EDGE 1.x.

Current DDF Library
As of EDGE 2.1+, there are 18 different types of DDF files, each covering a specific aspect of EDGE's customizability.


 * ANIMS.DDF: Allows animated flats and textures to be defined or altered. This can also be used with custom patches.
 * ATTACKS.DDF: Allows attacks to be created or altered. Attack classes (corresponding to the Resistance and Immunity classes in THINGS.DDF) can be defined, along with custom radius areas, or even altered to kill or harm enemies and players in unique ways, including custom pain and death states.
 * COLMAP.DDF: Allows the definition of new colormaps (which are usually used with powerups, or submerged liquid sectors).
 * FONTS.DDF: Allows modification of the fonts used in the game. This was added in version 1.29 beta 1.
 * GAMES.DDF: Allows episodes to be defined or altered. As a bonus, this allows both Doom and Doom II to be played in the same game if the user has both programs; both games are displayed in the menu. "Hell on Earth" will be the name for the Doom II 'episode' when it is used in EDGE.
 * IMAGES.DDF: Allows extensive editing and customization of many types of images, such as flats, sprites, and wall textures. Currently, it supports PNG and JPG files, thereby allowing full 32 bit colour images to be used in-game. In the case of PNG files there is also alpha channel support for transparency. This was added in version 1.29 beta 1.
 * LANGUAGE.LDF: Allows multi-language support, editing of text strings, and (in a future release) editing of intermission texts. (Although it uses the LDF extension, this still works much like a DDF.) English, Turkish, French, Spanish, Swedish, Dutch, German and Finnish are initially supported as of version 1.29 beta 1. Additionally, this allows the mod author to change the text strings for most of the cheat codes.
 * LEVELS.DDF: Allows the definition of new mapname lumps, e.g. MAP00 or E0M0. This also allows control of whether or not levels have intermission screens, story intermission screens, or secret level exits in them, as well as which levels belong to which episodes.
 * LINES.DDF: Allows control over linedef types. Usually used for various new types of switches, Wolfenstein-style line-doors, light switches, teleporters, level exits, or several unique types (such as a shootable end switch).
 * PLAYLIST.DDF: Allows control of music lumps used by the game, or can be used to specify files on the user's hard drive or a CD-ROM for in-game play. Supports MUS, MIDI, CD Tracks, and now Ogg Vorbis as of version 1.29 beta 1 (MP3 was once supported, but then dropped by the EDGE team due to legal concerns). EDGE dropped CD playback due to SDL2 not supporting it, and added OPL playback.
 * SECTORS.DDF: Allows control of custom sector types. Examples can include a damage sector that inflicts damage much more often, silent teleporters, or even 'liquid' sectors (with the help of Extrafloors).
 * SOUNDS.DDF: Allows control of sound effect lumps.
 * SPRITES.DDF: Allows control over standard sprites (offsets, attributes, etc), as well as all-at-once PNG sprite-sheets.
 * STYLES.DDF: Allows control over the format of the menus, intermission screens, console, and automap. (Fonts can be changed with FONTS.DDF.) This feature was added in version 1.29 beta 1, and then removed after 1.31. EDGE 2.x restored most functionality.
 * SWITCH.DDF: Allows custom on/off animation sequences for wall switches, such as SW1STON6/SW2STON6, as well as control over the sounds the switches make when activated.
 * TERRAIN.DDF: Allows the customization of floors for mobjs or flats, such as sounds, actions, spawns, and ripple effects.
 * THINGS.DDF: Allows customization of things, such as monsters, items, keys, ammo, and even 'helper' creatures which attack hostile monsters or opposing players. Attack immunity and resistances are also supported, as is a seamless image resizing engine that allows sprites to be toned down without pixelization in the game (thus, higher resolution sprites may be used). Other features include custom thing states and permissions, allowing the creation of unusually complex creatures or items (e.g. a monster with 20+ different weapons).
 * WEAPONS.DDF: Allows extensive customizability of weapons, including support for secondary attacks, weapon silencing, weapon upgrading, spin up/spin down states, and other options (many of which have only recently been introduced). Up to 64 different weapons can be defined in the current release of EDGE.

Radius Trigger Script
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.


 * RSCRIPT.RTS: Not an actual DDF, but a somewhat primitive scripting language called "Radius Trigger Script" which uses radius markers on the X, Y, and optionally Z planes to define an area for scripted actions to occur.

COAL
COAL is a scripting language that functions independently as a VM - currently it has the ability to control HUDs and player-world interactions. It was introduced with EDGE 1.34 as a replacement to the Lua scripting language EDGE employed for a short time. The scripts are plain text, where EDGE then compiles both the API and the EC on run-time.

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. (This is a big difference from Lua where values have a fixed type and variables can take any kind of values). 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 draw_all) can be replaced.


 * COAL_API.EC: The overall API of the COAL VM System.
 * COAL_HUD.EC: User-Control file used by EDGE. It uses a QuakeC-based language for fine-control of all aspects of the HUD and player interaction systems.

Eventually COAL is going to deprecate many functions previously used by both RTS and DDF, and newer releases have indeed removed equivalent functions from DDF entirely in favor of COAL.

Abandoned DDF Types

 * HUD.DDF: This would have allowed the customization of the HUD display, while adding more features overall, including 4+ digit counters, separate counters for armor types, and support for up to 12 different ammo types. This has been replaced by COAL.
 * DECALS.DDF: This would have allowed the customization of wall splats and bullet holes.
 * LUAHUDS: This was the short-lived Lua based language for controlling the heads-up display, before it was replaced by COAL.