UDMF
UDMF is the extensible format that replaces the classic Doom format and ExtraData. Each level, instead of being defined by the classic lumps (THINGS, LINEDEFS, SIDEDEFS etc.) is defined by a human-readable lump named TEXTMAP, and can have associated lumps (e.g. ZNODES, BLOCKMAP, REJECT if needed) and other lumps, until a marker lump named ENDMAP.
TEXTMAP has a well-defined language. Check the UDMF article at doomwiki.org. Each game and port has its own namespace(s), for example we have these namespaces: "doom", "heretic", "hexen", "strife", "zdoom" and others. Eternity has the "eternity" namespace.
At its core, UDMF is made of many blocks, each titled "vertex", "sector", "sidedef", "linedef", "thing" and containing several properties, some mandatory, others optional. Each game or port namespace can define its own set, which is typically hard-coded, though it's also possible for the user to add their own fields (which have to be preceded by a safe prefix, to avoid conflicts with the standard).
Maps designed in UDMF no longer need ExtraData.
Basics
Eternity supports the "doom" and "eternity" namespaces. In the rest of this article, we'll detail the "eternity" namespace. A TEXTMAP for Eternity must start with this:
namespace = "eternity";
Node format
Nodes for UDMF use the uncompressed GL-nodes format under the ZNODES name. Tools such as ZDBSP should build such a lump upon detecting a TEXTMAP lump.
Vertices
No change yet from the base "doom" namespace.
Sectors
sector { heightfloor = <floating-point>; heightceiling = <floating-point>; xpanningfloor = <floating-point>; ypanningfloor = <floating-point>; xpanningceiling = <floating-point>; ypanningceiling = <floating-point>; xscalefloor = <floating-point>; yscalefloor = <floating-point>; rotationfloor = <floating-point>; rotationceiling = <floating-point>; secret = <boolean>; friction = <integer>; leakiness = <integer>; damageamount = <integer>; damageinterval = <integer>; damage_endgodmode = <boolean>; damage_exitlevel = <boolean>; damageterraineffect = <boolean>; damagetype = <string>; floorterrain = <string>; ceilingterrain = <string>; lightfloor = <integer>; lightceiling = <integer>; lightfloorabsolute = <boolean>; lightceilingabsolute = <boolean>; colormaptop = <string>; colormapmid = <string>; colormapbottom = <string>; floorid = <integer>; ceilingid = <integer>; attachfloor = <integer>; attachceiling = <integer>; soundsequence = <string>; portalfloor = <integer>; portalceiling = <integer>; portal_floor_disabled = <boolean>; portal_floor_norender = <boolean>; portal_floor_nopass = <boolean>; portal_floor_blocksound = <boolean>; portal_floor_useglobaltex = <boolean>; portal_floor_overlaytype = <string>; alphafloor = <floating-point>; portal_ceil_disabled = <boolean>; portal_ceil_norender = <boolean>; portal_ceil_nopass = <boolean>; portal_ceil_blocksound = <boolean>; portal_ceil_useglobaltex = <boolean>; portal_ceil_overlaytype = <string>; alphaceiling = <floating-point>; }