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. See the base UDMF specifications for the options not detailed in this document.
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.
Linedefs
linedef { polycross = <boolean>; midtex3d = <boolean>; firstsideonly = <boolean>; blockeverything = <boolean>; zoneboundary = <boolean>; clipmidtex = <boolean>; midtex3dimpassible = <boolean>; lowerportal = <boolean>; upperportal = <boolean>; portal = <integer>; alpha = <floating-point>; renderstyle = <string>; tranmap = <string>; }
Explanation of fields
- polycross
- If true, linedef is activated when a polyobject's center point crosses it.
- midtex3d
- If true, this linedef's middle texture uses 3dmidtex physics.
- firstsideonly
- Linedef can only be activated from front side.
- blockeverything
- Linedef blocks all objects, acting like an external solid wall
- zoneboundary
- Linedef acts like a boundary for reverb effects.
- clipmidtex
- Middle texture is clipped against the floor or ceiling as if a light change took place.
- midtex3dimpassible
- Treat the 3dmidtex line as a classic impassable middle texture, with regards to projectiles (i.e. they will pass through, just like hitscans).
- lowerportal, upperportal
- Apply edge portal on the lower or upper part of this linedef, copying back sector's floor or ceiling portal into it.
- portal
- The ID of the portal to apply on this linedef, as defined from Portal_Define
- alpha (default: 1.0)
- Opacity of this line.
- renderstyle
- Either "translucent" or "add". Default is "".
- tranmap
- Boom translucency map. Mutually exclusive with alpha and renderstyle.
Sidedefs
No new fields are in Eternity, but offsetx and offsety now work as floating-point, instead of integer.
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>; xscaleceiling = <floating-point>; yscaleceiling = <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>; }
Explanation of fields
- heightfloor, heightceiling (mandatory)
- Unlike the base field from the core specs, these ones allow floating-point values.
- xpanningfloor, ypanningfloor, xpanningceiling, ypanningceiling
- These properties control the panning of the floor or ceiling flat.
- xscalefloor, yscalefloor, xscaleceiling, yscaleceiling (default: 1.0)
- These properties control the scaling of the floor or ceiling flat. Greater values result in smaller textures.
- rotationfloor, rotationceiling
- These properties control the rotation of the floor or ceiling flat, in degrees.
- secret
- If true, the sector counts as a secret when visited by player.
- friction (default: -1)
- This one controls the friction of movement on the floor. The value of this field is equivalent to the length of a horizontal linedef with the classic Boom friction special. Default value: -1 (use usual Doom friction).
- leakiness
- This one controls the probability that, if this sector is also damaging, it will leak damage through the radiation suit. As reference, the classic Doom 20% sector has 5 leakiness. For damage which always goes through the suit, use 256.
- damageamount
- Damage per hit for players on the floor.
- damageinterval
- Time between hits. The classic Doom damaging floors use a 32 period.
- damage_endgodmode
- If true, it will cause the damaging floor to disable the godmode cheat.
- damage_exitlevel
- If true, it will cause the damaging floor to exit the level in victory if the player has too little health.
- damageterraineffect
- If true, then each damage hit will produce a splash, like the Heretic lava.
- damagetype (default: "Unknown")
- The damage type of the floor.
- floorterrain (default: "@flat")
- The terrain effect of the floor.
- ceilingterrain (default: "@flat")
- The terrain effect of the ceiling. Currently used for particle recolouring.
- lightfloor, lightceiling
- The light amount to add to the floor or ceiling, relative to the designated light level.
- lightfloorabsolute, lightceilingabsolute
- If true, then lightfloor or lightceiling just overrides the light.
- colormaptop, colormapmid, colormapbottom (default: "@default")
- The colormap to set for the top, normal or bottom part of a Boom sector with fake flats. Or for any normal part, if it's colormapmid. Use a lump from between C_START and C_END. "WATERMAP" and "LAVAMAP" are provided by Eternity.
- floorid, ceilingid
- ID of the floor or ceiling of this sector to use for attached surfaces. Use this id in attachfloor and attachceiling.
- attachfloor, attachceiling
- Makes the floor or ceiling of this sector move whenever sectors with floorid or ceilingid with the same number move their respective surfaces. If you want this sector's floor or ceiling to move in opposite direction, use the negative value.
- soundsequence
- Name of the soundsequence to use for the movement of this sector.
- portalfloor, portalceiling
- Portal ID to use on the floor or ceiling of this sector, using the same value as the one set in Portal_Define. For two-way portals, use the negative number for the opposite portal (i.e. one way uses portal n, and the other way uses -n).
- portal_floor_disabled, portal_ceil_disabled
- If true, the portal is disabled (has no effect).
- portal_floor_norender, portal_ceil_norended
- If true, the portal is not rendered but may have effects.
- portal_floor_nopass, portal_ceil_nopass
- If true, it disables any linked portals interaction.
- portal_floor_blocksound, portal_ceil_blocksound
- If true, it blocks sounds from monsters listening for alerts.
- portal_floor_useglobaltex, portal_ceil_useglobaltex
- Reserved.
- portal_floor_overlaytype, portal_ceil_overlaytype (default: "none")
- Can be "none", "translucent" or "additive". Controls the rendering of portal overlays.
- alphafloor, alphaceiling (default: 1.0)
- Alpha of the portal overlay. 1.0 makes it fully visible, 0.0 is invisible.
Things
thing { health = <floating-point>; }
Explanation of fields
- health
- Health modifier. Works like in ZDoom: 0 means no change from EDF, positive values multiply the initial spawn health, and negative values change the absolute spawn health.