Editing UDMF

From Eternity Wiki
Jump to navigationJump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 6: Line 6:


Maps designed in UDMF no longer need ExtraData.
Maps designed in UDMF no longer need ExtraData.
The standard was defined by James "Quasar" Haley and has also been successfully implemented in Vavoom, ZDoom and the ZDoom-derivative ports.
* See also the [https://www.doomworld.com/eternity/engine/stuff/udmf11.txt base UDMF specifications]


==Basics==
==Basics==


Eternity supports the "doom" and "eternity" namespaces. In the rest of this article, we'll detail the "eternity" namespace. See the [https://www.doomworld.com/eternity/engine/stuff/udmf11.txt base UDMF specifications] for the options not detailed in this document.
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:
 
A TEXTMAP for Eternity must start with this:
  namespace = "eternity";
  namespace = "eternity";
===Eternity compatibility===
You can also add the following field in UDMF TEXTMAP:
ee_compat = true;
which, no matter the namespace used (e.g. "zdoom"), assumes the map is going to work in Eternity. In other words, it is equivalent to setting namespace as "eternity". Any fields not supported by Eternity, however, may make the mod fail.


===Node format===
===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.
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
{
  blocklandmonsters = <boolean>;
  blockplayers = <boolean>;
  polycross = <boolean>;
  monstershoot = <boolean>;
  midtex3d = <boolean>;
  firstsideonly = <boolean>;
  blockeverything = <boolean>;
  zoneboundary = <boolean>;
  clipmidtex = <boolean>;
  midtex3dimpassible = <boolean>;
  lowerportal = <boolean>;
  upperportal = <boolean>;
  portal = <integer>;
  alpha = <floating-point>;        // default 1.0
  renderstyle = <string>;
  tranmap = <string>;
}
===Explanation of fields===
*'''blocklandmonsters'''
:If true, linedef blocks walking monsters but allows fliers to pass. Players can pass anyway.
*'''blockplayers'''
:If true, linedef blocks players but allows monsters and projectiles to pass.
*'''polycross'''
:If true, linedef is activated when a polyobject's center point crosses it.
*'''monstershoot'''
:If true, linedef is activated when a monster fires hitscan on it.
*'''midtex3d'''
:If true, this linedef's middle texture uses [[3DMidTex_tutorial|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 [[EDF_sound_reference#Sound_environments|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 portals|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==
sidedef
{
  offsetx = <floating-point>;
  offsety = <floating-point>;
  offsetx_top = <floating-point>;
  offsety_top = <floating-point>;
  offsetx_mid = <floating-point>;
  offsety_mid = <floating-point>;
  offsetx_bottom = <floating-point>;
  offsety_bottom = <floating-point>;
  light = <integer>;
  lightabsolute = <boolean>;
  light_top = <integer>;
  lightabsolute_top = <boolean>;
  light_mid = <integer>;
  lightabsolute_mid = <boolean>;
  light_bottom = <integer>;
  lightabsolute_bottom = <boolean>;
  skew_top_type = <string>;
  skew_middle_type = <string>;
  skew_bottom_type = <string>;
}
===Explanation of fields===
*'''offsetx''', '''offsety'''
:Overall horizontal and vertical offsets for the top, middle, and bottom textures of this sidedef.
*'''offsetx_top''', '''offsety_top''', '''offsetx_mid''', '''offsety_mid''', '''offsetx_bottom''', '''offsety_bottom'''
:Horizontal and vertical offsets for the individual top, middle, and bottom portions of this sidedef.
*'''light''', '''light_top''', '''light_mid''', '''light_bottom''', '''lightabsolute''', '''lightabsolute_top''', '''lightabsolute_mid''', '''lightabsolute_bottom'''
:Brightness for the whole, and the individual top, middle, and bottom portions of this sidedef. By default the values are additive to the inherited brightness. If the "absolute" properties are set to "true" the values are not additive anymore, but absolute.
*'''skew_top_type''', '''skew_bottom_type''', '''skew_middle_type'''
:The type of skewing that the a given texture of this sidedef has. This skew starts at the left side of the sidedef (if viewing the sidedef straight-on) and conforms to either the slope on the front or back side of the line the sidedef is on. Either the floor or ceiling slope can be picked as the slope for the skewing to conform to. Values are "none", "front_floor", "front_ceiling", "back_floor", and "back_ceiling", with "none" being the default.


==Vertices==
==Vertices==
Line 134: Line 31:
   xscalefloor = <floating-point>;
   xscalefloor = <floating-point>;
   yscalefloor = <floating-point>;
   yscalefloor = <floating-point>;
  xscaleceiling = <floating-point>;
  yscaleceiling = <floating-point>;
   rotationfloor = <floating-point>;
   rotationfloor = <floating-point>;
   rotationceiling = <floating-point>;
   rotationceiling = <floating-point>;
Line 157: Line 52:
   lightfloorabsolute = <boolean>;
   lightfloorabsolute = <boolean>;
   lightceilingabsolute = <boolean>;
   lightceilingabsolute = <boolean>;
  phasedlight = <boolean>;
  lightsequence = <boolean>;
  lightseqalt = <boolean>;
   
   
   colormaptop = <string>;
   colormaptop = <string>;
   colormapmid = <string>;
   colormapmid = <string>;
   colormapbottom = <string>;
   colormapbottom = <string>;
  scroll_ceil_x = <floating-point>;
  scroll_ceil_y = <floating-point>;
  scroll_ceil_type = <string>;
  scroll_floor_x = <floating-point>;
  scroll_floor_y = <floating-point>;
  scroll_floor_type = <string>;
   
   
   floorid = <integer>;
   floorid = <integer>;
Line 190: Line 74:
   portal_floor_overlaytype = <string>;
   portal_floor_overlaytype = <string>;
   alphafloor = <floating-point>;
   alphafloor = <floating-point>;
  portal_floor_attached = <boolean>;
   
   
   portal_ceil_disabled = <boolean>;
   portal_ceil_disabled = <boolean>;
Line 199: Line 82:
   portal_ceil_overlaytype = <string>;
   portal_ceil_overlaytype = <string>;
   alphaceiling = <floating-point>;
   alphaceiling = <floating-point>;
  portal_ceil_attached = <boolean>;
}
=== 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 [[damagetype|damage type]] of the floor. For Doom damaging floors you can use "Slime".
*'''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.
* phasedlight = <boolean>;
:Equivalent to ExtraData flag.
* lightsequence = <boolean>;
:Equivalent to ExtraData flag.
* lightseqalt = <boolean>;
:Equivalent to ExtraData flag.
*'''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.
*'''scroll_ceil_x''', '''scroll_ceil_y''', '''scroll_floor_x''', '''scroll_floor_y'''
:These fields make the sector ceiling or floor scroll at startup. The values you input there are the equivalents of a Boom trigger linedef length divided by 10. So to emulate a linedef pointing east of length 64 having a scroll trigger, set value 6.4 on '''scroll_ceil_x''' or '''scroll_floor_x'''.
*'''scroll_ceil_type''', '''scroll_floor_type''' (default: "none")
:These fields control the kind of scrolling for each surface and can be: "none" (no scrolling enabled), "visual" (only scroll the texture), "physical" (only carry the things), "both" (both scroll and carry). For now, '''scroll_ceil_type''' only supports "none" or "visual".
*'''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. It will only work if said soundsequence has an '''id'''. It can also be a number (the sound sequence '''id''') surrounded by quotes.
*'''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.
*'''portal_floor_attached''', '''portal_ceil_attached'''
:If true, and the sector has a linked portal on the floor or ceiling, the portal will move along with the floor or ceiling surface, instead of remaining at the same height as default. This is useful for easily moving platforms vertically.
==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.
Please note that all contributions to Eternity Wiki are considered to be released under the GNU Free Documentation License 1.2 (see Eternity Wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)