Latest revision |
Your text |
Line 1: |
Line 1: |
| With support of [[Universal Doom Map Format]] in releases of Eternity, ExtraData is now considered {{Deprecated}}. In the future new features introduced into UDMF will not be supported by ExtraData. ExtraData maps will still work, but new projects should use UDMF due to its greatly streamlined mapping experience, especially if using editors such as [https://www.doomworld.com/forum/topic/96943 Doom Builder X] or [https://forum.zdoom.org/viewtopic.php?t=54957 GZDoomBuilder-Bugfix] are used (the former including specific improvements for Eternity's UDMF, such as for [[linked portals]]).
| | ExtraData is a new data specification language for the [[Eternity Engine]] that allows arbitrary extension of mapthings, lines, and sectors with any number of new fields, with data provided in more or less any format. The use of a textual input language forever removes any future problems caused by binary format limitations. The ExtraData parser is based on the libConfuse configuration file parser library by Martin Hedenfalk, which is also used by GFS and EDF. |
|
| |
|
| ExtraData is a new data specification language for the [[Eternity Engine]] that allows arbitrary extension of mapthings, lines, and sectors with any number of new fields, with data provided in more or less any format. The use of a textual input language forever removes any future problems caused by binary format limitations. The ExtraData parser is based on the libConfuse configuration file parser library by Martin Hedenfalk, which is also used by GFS and EDF. | | Each section in this document deals with one of the ExtraData constructs, as well as how to embed ExtraData in a WAD and how to associate it with a given map. |
| | |
| | ExtraData will continue to be supported in future versions of Eternity, even though it will soon be superceded by support for the [[Universal Doom Map Format]]. |
|
| |
|
| Each section in this document deals with one of the ExtraData constructs, as well as how to embed ExtraData in a WAD and how to associate it with a given map.
| |
| {{Backto|Eternity Engine}}
| |
| {{editref}}
| |
| =General Syntax= | | =General Syntax= |
| ''See [[EDF#Syntax|EDF Syntax]], as it is the same.'' | | ''See [[EDF#Syntax|EDF Syntax]], as it is the same.'' |
Line 50: |
Line 49: |
| // These fields are ExtraData extensions | | // These fields are ExtraData extensions |
| tid <number> | | tid <number> |
| special <number>
| |
| args { <special field>, ... } | | args { <special field>, ... } |
| height <number> | | height <number> |
Line 64: |
Line 62: |
|
| |
|
| This field can also accept EDF thingtype mnemonics. EDF thingtype mnemonics must be prefixed with ''thing:'' -- this allows the parser to know it is dealing with a string instead of a number. EDF thingtypes must have a unique doomednum to be specified in an ExtraData mapthing record. If the specified EDF thingtype doesn't exist or has a doomednum of -1, an Unknown object will be spawned instead. | | This field can also accept EDF thingtype mnemonics. EDF thingtype mnemonics must be prefixed with ''thing:'' -- this allows the parser to know it is dealing with a string instead of a number. EDF thingtypes must have a unique doomednum to be specified in an ExtraData mapthing record. If the specified EDF thingtype doesn't exist or has a doomednum of -1, an Unknown object will be spawned instead. |
|
| |
| See [[Thing types]] for a list of potentially useful types, new to Eternity, to use here.
| |
|
| |
|
| Example: | | Example: |
Line 71: |
Line 67: |
| | | |
| mapthing { type DoomImp } // This record specifies an Imp by its EDF mnemonic | | mapthing { type DoomImp } // This record specifies an Imp by its EDF mnemonic |
| | | |
| ====options==== | | ====options==== |
| Default: No flags are set by default. | | Default: No flags are set by default. |
Line 91: |
Line 87: |
| FRIEND Thing uses MBF friendly logic | | FRIEND Thing uses MBF friendly logic |
| DORMANT Thing is dormant at map startup (script feature) | | DORMANT Thing is dormant at map startup (script feature) |
| STANDING Currently only used for [[Thing_types#Sector_actions|sector actions]].
| |
| ------------------------------------------------------------------------------ | | ------------------------------------------------------------------------------ |
| | | |
Line 114: |
Line 109: |
| Default: 0 | | Default: 0 |
|
| |
|
| The TID, or "Thing ID", is a tag for mapthings which is used for identification in [[ACS]] scripts. TID values must be positive numbers between 1 and 65535. The TID value zero means no TID. Negative TID values are reserved and are used to indicate special things within the engine. TIDs are not required to be unique, and most ACS functions that accept TIDs will perform an action on all mapthings which bear the same TID. | | The TID, or "Thing ID", is a tag for mapthings which is used for identification in [[Small]] scripts. TID values must be positive numbers between 1 and 65535. The TID value zero means no TID. Negative TID values are reserved and are used to indicate special things within the engine. TIDs are not required to be unique, and most Small functions that accept TIDs will perform an action on all mapthings which bear the same TID. Things spawned within Small scripts can also be given TIDs. |
| | |
| ====special====
| |
| Default: 0
| |
| | |
| The thing special field, which will execute when thing dies if it's a monster or picked up if it's an item. Use '''args''' to control the parameters.
| |
|
| |
|
| ====args==== | | ====args==== |
Line 134: |
Line 124: |
| For normal objects, this field indicates a distance above the floor that the thing will spawn at level start. For objects with the SPAWNCEILING flag, this field indicates a distance below the ceiling instead. This field will have no effect on objects which spawn at a randomized height. | | For normal objects, this field indicates a distance above the floor that the thing will spawn at level start. For objects with the SPAWNCEILING flag, this field indicates a distance below the ceiling instead. This field will have no effect on objects which spawn at a randomized height. |
|
| |
|
| =Linedefs =
| | Glad I've finally found smoething I agree with! |
| | |
| Linedefs define walls, two-sided textures, and provide action triggers within maps.
| |
| | |
| Each field in the linedef definition, with the exception of the '''recordnum''' field, is optional. If a field is not provided, it takes on the default value indicated below the syntax information. Fields may also be provided in any order.
| |
| | |
| Note that the order of linedef definitions in ExtraData is not important. The '''recordnum''' field serves to identify linedef records.
| |
| | |
| ==Creating ExtraData Linedefs ==
| |
| | |
| Linedef records in ExtraData are associated either with lines which bear the ExtraData Control Line Special (270), or with any linedef in a DOOM-format map which uses a parameterized line special. You can place the 270 special, as well as parameterized special numbers, into the normal "special" field of a line using virtually any map editor. Editors with Eternity-specific configurations should support these specials natively.
| |
| | |
| Each control linedef (or directly-used parameterized special) specifies its corresponding ExtraData linedef record number as an integer value in its linedef tag field. If your editor does not allow entering arbitrary values up to 32767 into the tag field of linedefs, you will need to use the BOOM command-line editor, CLED. As of the initial writing time of this document, both DETH and Doom Builder support entering arbitrary integer values for the tag field. Check your editor's documentation or user interface to verify if it supports this.
| |
| | |
| The flags, sidedefs, textures, and location of the ExtraData control linedef are used normally by the line and cannot be altered from within ExtraData. The true special (if 270 is used) and tag fields of the linedef, along with any extended fields, are specified in the ExtraData record which the control linedef references.
| |
| | |
| Any number of linedefs can reference the same ExtraData record. In the event that a control linedef references a non-existent ExtraData record or the ExtraData script for a level is missing, the special and tag of the ExtraData control linedef will both be set to zero.
| |
| | |
| ==Linedef Syntax and Fields ==
| |
| | |
| The syntax of the ExtraData linedef record is as follows. Remember that all fields except the '''recordnum''' field are optional and can be specified in any order.
| |
| linedef
| |
| {
| |
| recordnum <unique number>
| |
|
| |
| // These fields are normal linedef fields
| |
| special <number> OR <special name>
| |
| tag <number>
| |
|
| |
| // These fields are ExtraData extensions
| |
| extflags <extended line flags list>
| |
| args { <special field>, ... }
| |
| id <number>
| |
| alpha <number>
| |
| }
| |
| ===Explanation of fields: ===
| |
| ====recordnum====
| |
| The recordnum serves to identify this record, and is the number which ExtraData control linedefs must use to associate themselves with a linedef record. Every ExtraData linedef record must have a unique record number. If a duplicate record number is detected, the engine will currently exit with an error message. The record number is limited to values between 0 and 32767 inclusive. Some editors may only allow input of numbers up to 255 in the linedef tag field. Beware of this.
| |
| | |
| ====special====
| |
| :''Default: 0 ''
| |
| | |
| The special field determines what [[Linedef_types|type of action]] may be taken when a line is crossed, used, shot, etc. There are three types of linedef specials in Eternity: normal, generalized, and parameterized. Parameterized specials use the '''args''' field documented below to provide complete customization of line actions.
| |
| | |
| This field can accept numbers for any special type, including generalized and parameterized, but it can also accept special names for parameterized line types. See the [[Detailed parameterized linedef specification]] for a complete list of the available names.
| |
| | |
| ====tag====
| |
| :''Default: 0 ''
| |
| | |
| The tag of the linedef, used by DOOM-style line specials and sector effects.
| |
| | |
| ====extflags====
| |
| :''Default: No flags are set by default. ''
| |
| | |
| This field specifies extended linedef flag values which impact the functionality of parameterized linedef specials. This field uses the same syntax as BEX/EDF flag strings, but the syntax will be reviewed here for completeness.
| |
| | |
| A BEX flag list is a string of flag names separated by whitespace, pipe characters, commas, or plus characters. In ExtraData, if a flag list contains whitespace, commas, or plus signs, it must be enclosed in double or single quotations. Flags are combined using bitwise-OR logic, so a flag name can be specified more than once. Specifying a flag name causes that flag to be turned on. The default state of all flags is off.
| |
| | |
| These are the flag values which are available for this field:
| |
| Flag name Meaning
| |
| ---------------------------------------------------------------------------------------
| |
| CROSS Linedef can be activated by being crossed.
| |
| USE Linedef can be activated by being used.
| |
| IMPACT Linedef can be activated by being shot.
| |
| PUSH Linedef can be activated by being pushed.
| |
| PLAYER Linedef can be activated by players.
| |
| MONSTER Linedef can be activated by objects with SPACMONSTER flag.
| |
| MISSILE Linedef can be activated by objects with SPACMISSILE flag.
| |
| POLYOBJECT Linedef can be activated by polyobjects (only works with CROSS)
| |
| REPEAT Linedef action is repeatable.
| |
| 1SONLY Linedef can only be activated from first side.
| |
| ADDITIVE Linedef's midtexture is drawn with additive blending.
| |
| BLOCKALL Linedef will block everything that can be clipped.
| |
| ZONEBOUNDARY Linedef will work as a reverb effect boundary. Not needed for one-sided lines.
| |
| CLIPMIDTEX Linedef middle texture will not "bleed" on floor and ceiling.
| |
| LOWERPORTAL Linedef copies floor portal from its backside to its lower visible edge
| |
| UPPERPORTAL Linedef copies ceiling portal from its backside to its upper visible edge
| |
| ---------------------------------------------------------------------------------------
| |
|
| |
| Notes: IMPACT is currently only implemented for bullet weapons.
| |
| | |
| LOWERPORTAL and UPPERPORTAL are used to enable portals on the front side's upper and/or lower edges of a linedef, if the sector in front of the linedef is tall enough compared to the back sector to expose them. It is the only way to enable such portals, which will copy the sector portal(s) from the backside, if any.
| |
| | |
| Example flags fields -- All of these are equivalent:
| |
| // This is the only syntax that does not require quotations.
| |
|
| |
| linedef { extflags CROSS|PLAYER|MISSILE|REPEAT }
| |
|
| |
| // All of these syntaxes must be quoted, because unquoted strings in
| |
| // ExtraData cannot contain spaces, commas, or plus signs.
| |
|
| |
| linedef { extflags "CROSS PLAYER MISSILE REPEAT" }
| |
| linedef { extflags "CROSS | PLAYER | MISSILE | REPEAT" }
| |
| linedef { extflags "CROSS+PLAYER+MISSILE+REPEAT" }
| |
| linedef { extflags "CROSS + PLAYER + MISSILE + REPEAT" }
| |
| linedef { extflags "CROSS,PLAYER,MISSILE,REPEAT" }
| |
| linedef { extflags "CROSS, PLAYER, MISSILE, REPEAT" }
| |
| | |
| ====args====
| |
| :''Default: All args values default to zero. ''
| |
| | |
| The args field is a list of up to five special values which can have a broad range of meanings. Any values not provided in the args list will default, and if more than five values are provided, only the first five will be used. Currently, all args values are interpreted as integers (a non-number string evaluates to zero). This may change in the future. The args list is used by parameterized linedef specials.
| |
| | |
| Example args list:
| |
| linedef { args { 0, 1, 2, 3, 4 } }
| |
| | |
| ====id====
| |
| :''Default: 0''
| |
| This field is equivalent to '''tag'''. It will only have effect if '''tag''' is not already set.
| |
| | |
| ====alpha====
| |
| :''Default: Alpha defaults to 1.0.''
| |
| | |
| The alpha field takes a value from 0.0 to 1.0 to set the opacity at which this linedef's midtexture is drawn. When combined with the ADDITIVE extflag, this can be used for additive-blended translucency as well.
| |
|
| |
|
| =Sectors= | | =Sectors= |
Line 286: |
Line 163: |
| flooroffsetx <float> | | flooroffsetx <float> |
| flooroffsety <float> | | flooroffsety <float> |
| floorscalex <float>
| |
| floorscaley <float>
| |
| ceilingterrain <terrain name> | | ceilingterrain <terrain name> |
| ceilingangle <float> | | ceilingangle <float> |
| ceilingoffsetx <float> | | ceilingoffsetx <float> |
| ceilingoffsety <float> | | ceilingoffsety <float> |
| ceilingscalex <float>
| |
| ceilingscaley <float>
| |
| colormaptop <lump name> | | colormaptop <lump name> |
| colormapmid <lump name> | | colormapmid <lump name> |
Line 301: |
Line 174: |
| overlayalpha.floor <percentage or value from 0 to 255> | | overlayalpha.floor <percentage or value from 0 to 255> |
| overlayalpha.ceiling <percentage or value from 0 to 255> | | overlayalpha.ceiling <percentage or value from 0 to 255> |
| portalid.floor <number>
| |
| portalid.ceiling <number>
| |
| } | | } |
| ===Explanation of fields: === | | ===Explanation of fields: === |
Line 322: |
Line 193: |
| KILLSOUND Objects in sector cannot make sounds. | | KILLSOUND Objects in sector cannot make sounds. |
| KILLMOVESOUND Sector makes no movement sounds, even if it has a special sound sequence | | KILLMOVESOUND Sector makes no movement sounds, even if it has a special sound sequence |
| PHASEDLIGHT Sector is phased light sequence start
| |
| LIGHTSEQUENCE Sector is phased light sequence step (alternates with below flag)
| |
| LIGHTSEQALT Sector is phased light sequence alternate step (alternates with above flag)
| |
| --------------------------------------------------------------------------------------- | | --------------------------------------------------------------------------------------- |
| | | |
Line 407: |
Line 275: |
|
| |
|
| Specifies the x and y offsets of the floor flat, relative to the normal floor grid, in floating point units. | | Specifies the x and y offsets of the floor flat, relative to the normal floor grid, in floating point units. |
|
| |
| ====floorscalex/floorscaley====
| |
| :''Default: 1.0''
| |
|
| |
| Specifies the x and y offsets of the floor flat. A higher number means a smaller texture.
| |
|
| |
|
| ====ceilingterrain==== | | ====ceilingterrain==== |
Line 423: |
Line 286: |
| Specifies the angle of the ceiling flat in floating-point degrees from 0 to 359. Note that for compatibility with ZDoom, the angle specified advances in a '''clockwise''' fashion, contrary to most other angles in the DOOM engine. | | Specifies the angle of the ceiling flat in floating-point degrees from 0 to 359. Note that for compatibility with ZDoom, the angle specified advances in a '''clockwise''' fashion, contrary to most other angles in the DOOM engine. |
|
| |
|
| ====ceilingoffsetx/ceilingoffsety==== | | ====flooroffsetx/flooroffsety==== |
| :''Default: 0'' | | :''Default: 0'' |
|
| |
|
| Specifies the x and y offsets of the ceiling flat, relative to the normal ceiling grid, in floating point units. | | Specifies the x and y offsets of the ceiling flat, relative to the normal ceiling grid, in floating point units. |
|
| |
| ====ceilingscalex/ceilingscaley====
| |
| :''Default: 1.0''
| |
|
| |
| Specifies the x and y offsets of the ceiling flat. A higher number means a smaller texture.
| |
|
| |
|
| ====colormaptop==== | | ====colormaptop==== |
Line 448: |
Line 306: |
| Specifies the colormap lump to use when a player's viewpoint is below the fake floor of a BOOM 242 "deep water" effect applying to this sector. If left to default, the global colormap from MapInfo will be used as normal, unless one is specified by the 242 effect. | | Specifies the colormap lump to use when a player's viewpoint is below the fake floor of a BOOM 242 "deep water" effect applying to this sector. If left to default, the global colormap from MapInfo will be used as normal, unless one is specified by the 242 effect. |
|
| |
|
| ====portalflags.floor/portalflags.ceiling==== | | ====portalflags==== |
| :''Default: No flags are set by default.'' | | :''Default: No flags are set by default.'' |
|
| |
|
Line 457: |
Line 315: |
| Flag name Meaning | | Flag name Meaning |
| --------------------------------------------------------------------------------------- | | --------------------------------------------------------------------------------------- |
| DISABLED Portal is completely disabled | | DISABLED Portal is completely disabled |
| NORENDER Portal will not be rendered, but may still be interactive | | NORENDER Portal will not be rendered, but may still be interactive |
| NOPASS Objects cannot pass through the portal even if it is a linked portal | | NOPASS Objects cannot pass through the portal even if it is a linked portal |
| BLOCKSOUND Sound will not traverse through a linked portal | | BLOCKSOUND Sound will not traverse through a linked portal |
| OVERLAY The portal will render the sector's flat as a blended overlay | | OVERLAY The portal will render the sector's flat as a blended overlay |
| ADDITIVE If OVERLAY is also specified, the overlay will use additive blending | | ADDITIVE If OVERLAY is also specified, the overlay will use additive blending |
| USEGLOBALTEX Reserved for future per-portal texture specification | | USEGLOBALTEX Reserved for future per-portal texture specification |
| ATTACHEDPORTAL If a linked portal is on the respective floor or ceiling, move it along
| |
| with the surface. Useful for vertically moving platforms.
| |
| --------------------------------------------------------------------------------------- | | --------------------------------------------------------------------------------------- |
|
| |
|
| ====overlayalpha.floor/overlayalpha.ceiling==== | | ====overlayalpha==== |
| :''Default'': 100% | | :''Default'': 100% |
|
| |
|
| These two fields (overlayalpha.floor and overlayalpha.ceiling) specify the opacity of the corresponding portal overlay, if any exists. You can specify either a percentage value from 0% to 100%, or a plain integer number from 0 to 255. 100%/255 are completely solid, while 0% is invisible. | | These two fields (overlayalpha.floor and overlayalpha.ceiling) specify the opacity of the corresponding portal overlay, if any exists. You can specify either a percentage value from 0% to 100%, or a plain integer number from 0 to 255. 100%/255 are completely solid, while 0% is invisible. |
|
| |
| ====portalid.floor/portalid.ceiling====
| |
| :''Default'': 0
| |
|
| |
| These two fields control the placement of portals defined by [[Portal_Define]] on the floor or ceiling of this sector. Values can be positive (in which case the direct portal will be used) or negative (in which case the opposite direction portal will be used, ''if'' applicable).
| |