UDMF

From Eternity Wiki
Revision as of 13:42, 8 January 2017 by Printz (talk | contribs) (Created page with "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 et...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

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>;
}