Editing Parameterized linedef specials

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 1: Line 1:
The parameterized linedefs types are Hexen-like action specials with arguments, whose purpose is to be more customizable than the Boom generalized types. When mapping in UDMF, you have to use these parameterized specials instead of the classic parameter-less ones. They're also used in Hexen format maps (which is necessary when Hexen is going to be supported in Eternity), though Hexen format is not recommended or fully supported for other maps than vanilla Hexen in Eternity. To use parameterized specials in classic (Doom) format maps, provide an [[ExtraData]] lump by attaching it via [[MapInfo|EMAPINFO]] to the map. [[ACS]] scripts can also call parameterized specials. They're meant to be as compatible as possible with the ZDoom implementation, so minimal changes to zspecial.acs are needed, though Eternity may have extensions of its own. Most likely however the base zspecial.acs is going to be updated for Eternity. Parameters are only limited to 0-255 in the Hexen format (and some specials may have some legacy workarounds for that interval), but otherwise they're in the normal integer range for other environments (UDMF, ExtraData, ACS). Some specials have never been added to ExtraData, because of their mere purpose being to work under the limits of the Hexen map format.
The parameterized linedefs types are Hexen-like action specials with arguments, whose purpose is to be more customizable than the Boom generalized types. When mapping in UDMF, you have to use these parameterized specials instead of the classic parameter-less ones. They're also used in Hexen format maps (which is necessary when Hexen is going to be supported in Eternity), though Hexen format is not recommended or fully supported for other maps than vanilla Hexen in Eternity. Finally, to use parameterized specials in classic (Doom) format maps, provide an [[ExtraData]] lump by attaching it via [[MapInfo|EMAPINFO]] to the map. [[ACS]] scripts can also call parameterized specials. They're meant to be as compatible as possible with the ZDoom implementation, so minimal changes to zspecial.acs are needed, though Eternity may have extensions of its own. Parameters are only limited to 0-255 in the Hexen format (and some specials may have some legacy workarounds for that interval), but otherwise they're in the normal integer range for other environments (UDMF, ExtraData, ACS). Some specials have never been added to ExtraData, because of their mere purpose being to work under the limits of the Hexen map format.


Each parameterized line special has a name and two associated numbers: one for UDMF, ACS and Hexen formats, and another one for ExtraData support, set this way to avoid conflicts with classic Boom specials (since it's possible to use their number in the editor instead of the 270 "ExtraData special"). If you only see one number mentioned in the documentation, then it's the UDMF number (for ExtraData it's preferred to use the names).
Each parameterized line special has a name and two associated numbers: one for ExtraData support, set this way to avoid conflicts with classic Boom specials, and one for Hexen, ACS and UDMF formats.
 
For any parameterized special with first argument defined as ''tag'', if it's 0, it will affect the sector behind the line (if any). It will not affect all sectors with tag 0, or be rejected, as it is with classic specials. For thing specials, tag 0 usually means the activator, and tags -1, -2, -3, -4 mean each of the players in a multiplayer game, unless otherwise noted.


'''IMPORTANT''': all ''reserved'' parameters must be set to 0. Failure to do so will result in your maps being broken in later Eternity versions! Also, for "flag" arguments, do not add or provide other values than in the intended range, for the same reason.
'''IMPORTANT''': all ''reserved'' parameters must be set to 0. Failure to do so will result in your maps being broken in later Eternity versions! Also, for "flag" arguments, do not add or provide other values than in the intended range, for the same reason.
Notation: ''HexenNumber'' (''ExtraDataNumber'') ''Name''(''Parameters'')


{{Backto|Linedef types}}
{{Backto|Linedef types}}
==General info==
All sector tags, unless otherwise specified, have a special meaning if 0: that means to affect the sector behind the trigger linedef (like regular doors in vanilla Doom).


Thing tags (TIDs) have special meaning for values 0 and negative: 0 means activator, and -1 to -4 mean to affect players 1 to 4 (if present). '''Consider other negative values reserved''' and do not use them in your maps.
==Doors==
==Specials==
===Doors===
{|class="wikitable sortable"
{|class="wikitable sortable"
! UDMF #
! UDMF #
! ExtraData #
! DOOM Format #
! Name
! Name
! Args
! Arg1
! Summary
! Arg2
! Arg3
! Arg4
! Arg5
|-
|-
|| 10 || 302 || [[Door_Close]] || ''tag'', ''speed'', ''light_tag'' || Closes a door.
|| 12 || 300 || Door_Raise || ''tag'' || ''speed'' || ''delay'' || ''light_tag'' ||
|-
|-
|| 11 || 301 || [[Door_Open]] || ''tag'', ''speed'', ''light_tag'' || Opens a door.
|| 11 || 301 || Door_Open || ''tag'' || ''speed'' || ''light_tag'' || ||
|-
|-
|| 12 || 300 || [[Door_Raise]] || ''tag'', ''speed'', ''delay'', ''light_tag'' || Opens a door temporarily.
|| 10 || 302 || Door_Close || ''tag'' || ''speed'' || ''light_tag'' || ||
|-
|-
|| 13 || 429 || [[Door_LockedRaise]] || ''tag'', ''speed'', ''delay'', ''lock'', ''light_tag'' || Opens a locked door.
|| 13 || 429 || Door_LockedRaise || ''tag'' || ''speed'' || ''delay'' || ''lock'' || ''light_tag''
|-
|-
|| 105 || 304 || [[Door_WaitRaise]] || ''tag'', ''speed'', ''delay'', ''timeoffset'', ''light_tag'' || Opens a door temporarily after a delay.
|| 105 || 304 || Door_WaitRaise || ''tag'' || ''speed'' || ''delay'' || ''timeoffset'' || ''light_tag''
|-
|-
|| 106 || 305 || [[Door_WaitClose]] || ''tag'', ''speed'', ''timeoffset'', ''light_tag'' || Closes a door after a delay.
|| 105 || 305 || Door_WaitClose || ''tag'' || ''speed'' || ''timeoffset'' || ''light_tag'' ||
|-
|-
|| 249 || 303 || [[Door_CloseWaitOpen]] || ''tag'', ''speed'', ''delay_octics'', ''light_tag'' || Closes a door, waits a bit, then opens it back.
|| 249 || 303 || Door_CloseWaitOpen || ''tag'' || ''speed'' || ''delay_octics'' || ''light_tag'' ||
|}
|}
:''tag'': Tag of sector to affect. If it's 0, then the sector behind the linedef will be activated, if applicable.
:''tag'': Tag of sector to affect. If it's 0, then the sector behind the linedef will be activated, if applicable.
Line 41: Line 44:
:''lock'': One of the [[lock identifiers]] to specify the key or set of keys.
:''lock'': One of the [[lock identifiers]] to specify the key or set of keys.


===Floor movement, earthquake===
==Floor movement, earthquake==
{|class="wikitable sortable"
{|class="wikitable sortable"
! UDMF #
! UDMF #
! ExtraData #
! DOOM Format #
! Name
! Name
! Arg1
! Arg1
Line 51: Line 54:
! Arg4
! Arg4
! Arg5
! Arg5
! Description
|-
|-
|| 20 || 318 || [[Floor_LowerByValue]] || ''tag'' || ''speed'' || ''height'' || ''change'' ||
|| 24 || 306 || Floor_RaiseToHighest || ''tag'' || ''speed'' || ''change'' || ''crush'' ||
|-
|-
|| 21 || 309 || [[Floor_LowerToLowest]] || ''tag'' || ''speed'' || ''change'' || ||
|| 259 || 314 || Floor_RaiseToCeiling || ''tag'' || ''speed'' || ''change'' || ''crush'' || ''gap''
|-
|-
|| 22 || 311 || [[Floor_LowerToNearest]] || ''tag'' || ''speed'' || ''change'' || ||
|| 260 || 322 || Floor_ToCeilingInstant || ''tag'' || ''change'' || ''crush'' || ''gap'' ||
|-
|-
|| 23 || 317 || [[Floor_RaiseByValue]] || ''tag'' || ''speed'' || ''height'' || ''change'' || ''crush''
|| 25 || 310 || Floor_RaiseToNearest || ''tag'' || ''speed'' || ''change'' || ''crush'' ||
|-
|-
|| 24 || 306 || [[Floor_RaiseToHighest]] || ''tag'' || ''speed'' || ''change'' || ''crush'' ||
|| 238 || 312 || Floor_RaiseToLowestCeiling || ''tag'' || ''speed'' || ''change'' || ''crush'' || ''gap''
|-
|-
|| 25 || 310 || [[Floor_RaiseToNearest]] || ''tag'' || ''speed'' || ''change'' || ''crush'' ||
|| 257 || 308 || Floor_RaiseToLowest || ''tag'' || ''change'' || ''crush'' || ||
|-
|-
|| 28 || 451 || [[Floor_RaiseAndCrush]] || tag || speed || crush || ||
|| 23 || 317 || Floor_RaiseByValue || ''tag'' || ''speed'' || ''height'' || ''change'' || ''crush''
|-
|-
|| 35 || - || [[Floor_RaiseByValueTimes8]] || ''tag'' || ''speed'' || ''height'' || ''change'' || ''crush''
|| 35 || - || Floor_RaiseByValueTimes8 || ''tag'' || ''speed'' || ''height'' || ''change'' || ''crush''
|-
|-
|| 36 || - || [[Floor_LowerByValueTimes8]] || ''tag'' || ''speed'' || ''height'' || ''change'' ||
|| 240 || 315 || Floor_RaiseByTexture || ''tag'' || ''speed'' || ''change'' || ''crush'' ||
|-
|-
|| 37 || 319 || [[Floor_MoveToValue]] || ''tag'' || ''speed'' || ''height'' || ''neg'' || ''change''
|| 67 || 320 || Floor_RaiseInstant || ''tag'' || - || ''height'' || ''change'' || ''crush''
|-
|-
|| 46 || 452 || [[Floor_CrushStop]] || ''tag'' || || || || || Stops crushing floor movement.
|| 256 || 307 || Floor_LowerToHighestEE || ''tag'' || ''speed'' || ''change'' || ||
|-
|-
|| 66 || 321 || [[Floor_LowerInstant]] || ''tag'' || - || ''height'' || ''change'' || || Lowers floor instantly.
|| 242 || 416 || Floor_LowerToHighest || ''tag'' || ''speed'' || ''adjust'' || ''force_adjust'' ||
|-
|-
|| 67 || 320 || [[Floor_RaiseInstant]] || ''tag'' || - || ''height'' || ''change'' || ''crush'' || Raises floor instantly.
|| 22 || 311 || Floor_LowerToNearest || ''tag'' || ''speed'' || ''change'' || ||
|-
|-
|| 68 || - || [[Floor_MoveToValueTimes8]] || ''tag'' || ''speed'' || ''height'' || ''neg'' || ''change''
|| 258 || 313 || Floor_LowerToLowestCeiling || ''tag'' || ''speed'' || ''change'' || ||
|-
|-
|| 120 || 375 || [[Radius_Quake]] || intensity || duration || damage radius || tremor radius || foci tid
|| 21 || 309 || Floor_LowerToLowest || ''tag'' || ''speed'' || ''change'' || ||
|-
|-
|| 138 || 397 || [[Floor_Waggle]] || tag || height || speed || offset || timer
|| 20 || 318 || Floor_LowerByValue || ''tag'' || ''speed'' || ''height'' || ''change'' ||
|-
|-
|| 200 || 464 || [[Generic_Floor]] || tag || speed || height || target || flags || Boom-like generalized floor.
|| 36 || - || Floor_LowerByValueTimes8 || ''tag'' || ''speed'' || ''height'' || ''change'' ||
|-
|-
|| 228 || 475 || [[Plat_RaiseAndStayTx0]] || tag || speed || lock out || || || Variation of [[Floor_RaiseToNearest]].
|| 261 || 316 || Floor_LowerByTexture || ''tag'' || ''speed'' || ''change'' || ||
|-
|-
|| 230 || 476 || [[Plat_UpByValueStayTx]] || tag || speed || height || || || Variation of [[Floor_RaiseByValue]]
|| 66 || 321 || Floor_LowerInstant || ''tag'' || - || ''height'' || ''change'' ||
|-
|-
|| 231 || 487 || [[Plat_ToggleCeiling]] || tag || || || || || Toggles floor between ceiling and initial position.
|| 37 || 319 || Floor_MoveToValue || ''tag'' || ''speed'' || ''height'' || ''neg'' || ''change''
|-
|| 68 || - || Floor_MoveToValueTimes8 || ''tag'' || ''speed'' || ''height'' || ''neg'' || ''change''
|-
|-
|| 235 || 466 || [[Floor_TransferTrigger]] || ''tag'' || || || ||
|| 235 || 466 || [[Floor_TransferTrigger]] || ''tag'' || || || ||
|-
|-
|| 236 || 467 || [[Floor_TransferNumeric]] || ''tag'' || || || ||
|| 236 || 467 || [[Floor_TransferNumeric]] || ''tag'' || || || ||
|-
|| 238 || 312 || [[Floor_RaiseToLowestCeiling]] || ''tag'' || ''speed'' || ''change'' || ''crush'' || ''gap''
|-
|| 240 || 315 || [[Floor_RaiseByTexture]] || ''tag'' || ''speed'' || ''change'' || ''crush'' ||
|-
|| 242 || 416 || [[Floor_LowerToHighest]] || ''tag'' || ''speed'' || ''adjust'' || ''force_adjust'' ||
|-
|| 250 || 431 || [[Floor_Donut]] || pillar tag || pillar speed || pool speed || ||
|-
|| 256 || 307 || [[Floor_LowerToHighestEE]] || ''tag'' || ''speed'' || ''change'' || ||
|-
|| 257 || 308 || [[Floor_RaiseToLowest]] || ''tag'' || ''change'' || ''crush'' || || || Instantly lower floor to lowest neighbour.
|-
|| 258 || 313 || [[Floor_LowerToLowestCeiling]] || ''tag'' || ''speed'' || ''change'' || || || Lower floor to lowest ceiling.
|-
|| 259 || 314 || [[Floor_RaiseToCeiling]] || ''tag'' || ''speed'' || ''change'' || ''crush'' || ''gap'' || Raise floor to ceiling.
|-
|| 260 || 322 || [[Floor_ToCeilingInstant]] || ''tag'' || ''change'' || ''crush'' || ''gap'' || || Raise floor to ceiling instantly.
|-
|| 261 || 316 || [[Floor_LowerByTexture]] || ''tag'' || ''speed'' || ''change'' || || || Lower floor by shortest lower texture.
|-
|}
|}
:The 'ByTexture' types move by the shortest lower texture's height.
:For most of these, parameters are:
:*tag - the target sector(s) tag. If set to 0, it will target the sector beyond the triggering linedef, like how manual doors work.
:*speed - speed in eighths of units per tic. As a reference most of the Doom regular type floors move by 8.
:*change - 0 : No texture or type change.
::1 : Copy texture, zero type; trigger model.
::2 : Copy texture, zero type; numeric model.
::3 : Copy texture, preserve type; trigger model.
::4 : Copy texture, preserve type; numeric model.
::5 : Copy texture and type; trigger model.
::6 : Copy texture and type; numeric model.
:*crush - nonzero if to crush, and by how much damage per each event. Regular Doom crushers have 10 damage.
:*height - integer value specifying how much to move the floor, or which is the absolute destination Z coordinate to move it. The ''Times8'' and the ''LowerInstant'', ''RaiseInstant'' specials multiply this height by 8.
:*gap - for floors rising to ceiling, this one sets a gap to stop at before reaching destination. Useful when crushing.
*431:'''Floor_Donut''' (pillar_tag, pillar_speed, surrounding_speed)
:Does the donut movement behavior, allowing you to choose pillar speed and surrounding pool speed. The tag belongs to the pillar.
*397:'''Floor_Waggle''' ( tag, height, speed, offset, timer )
*397:'''Floor_Waggle''' ( tag, height, speed, offset, timer )
:This special implements the sinusoidal floor motion from Hexen. Its tag and speed parameters bear similar properties to the other floor specials, but -
:This special implements the sinusoidal floor motion from Hexen. Its tag and speed parameters bear similar properties to the other floor specials, but -
Line 125: Line 125:
*375:'''Radius_Quake''' (intensity, duration, damageradius, quakeradius, tid)
*375:'''Radius_Quake''' (intensity, duration, damageradius, quakeradius, tid)
:This special implements the earthquake effect, centred on the map spot with the given ''tid'', with user-selectable intensity, duration and separate thing damage radius and tremor radius (both being multiplied with 64).
:This special implements the earthquake effect, centred on the map spot with the given ''tid'', with user-selectable intensity, duration and separate thing damage radius and tremor radius (both being multiplied with 64).
*[[Floor_TransferTrigger]]
*[[Floor_TransferNumeric]]
*464:'''Generic_Floor'''(''tag'', ''speed'', ''height'', ''target'', ''flags'')
:Encapsulates and applies Boom generalized specials, including all their peculiarities. ''Height'' applies only if it's set to move by a parameterized abount. ''Target'' has the following meanings: 0 (move by ''height''), 1 (to highest neighbor floor), 2 (to lowest neighbor floor), 3 (to next neighbor floor), 4 (to lowest neighbor ceiling), 5 (to ceiling), 6 (by shortest lower texture). By default the floor moves down. To make it move up, add 8 to ''flags''. To make it crush, add 16 to ''flags''. To make it change floor texture, add 1 (zero special), 2 (keep special) or 3 (change special) to ''flags''. In this case, by default it will use the trigger model. To make it use the numeric model, add 4 to ''flags''.
:It is recommended to use the other floor specials instead. Use this if you need some exact Boom behavior.
*452:'''Floor_CrushStop'''(''tag'')
:For Hexen compatibility (and set to emulate Hexen bugs when run on classic Hexen maps), it stops any (and only) crushing floors from moving, and lets you apply other floor movement specials on those sectors (unlike crushing ceiling stoppers).
*451:'''Floor_RaiseAndCrush'''(''tag'', ''speed'', ''crush'')
*451:'''Floor_RaiseAndCrush'''(''tag'', ''speed'', ''crush'')
:This one is for Hexen compatibility. Please use '''Floor_RaiseToCeiling''' or '''Floor_RaiseToLowestCeiling''' instead.
:This one is for Hexen compatibility. Please use '''Floor_RaiseToCeiling''' or '''Floor_RaiseToLowestCeiling''' instead.
====See also====
*475:'''Plat_RaiseAndStayTx0'''(''tag'', ''speed'', ''hereticemu'')
*[[Floor movement classic specials]]: for the Doom format variants.
:This one is for Doom/Heretic compatibility. Raises a floor to the nearest neighbor and changes the texture and zeroes the type, according to the trigger model. If the sector is blocked by a thing, it will return to its initial position. '''Hereticemu''' emulates a Heretic bug where such lines would cause the sector to remain in stasis, with no possibility of being reused.
*476:'''Plat_UpByValueStayTX'''(''tag'', ''speed'', ''distance'')
:This one is for Doom/Heretic compatibility. Raises a floor by ''distance'' * 8 units. If a thing blocks the sector, the sector will return to its initial position. The texture will be changed, but not the sector type.


===Plats, lifts===
==Plats, lifts==
{|class="wikitable sortable"
*60 (410) '''Plat_PerpetualRaise'''(''tag'', ''speed'', ''delay'')
! UDMF #
:Starts a perpetual platform moving periodically between the lowest adjacent '''plus 8 units''' and highest adjacent neighbor floor. Important: this is not like the classic Doom special, and inherits the Hexen one. To act like Doom, use '''Plat_PerpetualRaiseLip''' with a lip of 0 units. The starting direction is decided randomly.
! DOOM Format #
! Name
! Arg1
! Arg2
! Arg3
! Arg4
! Arg5
! Description
|-
|| 60 || 410 || [[Plat_PerpetualRaise]] || tag || speed || delay || || || Perpetual lift with lip of 8
|-
|| 61 || 411 || [[Plat_Stop]] || tag || stop_mode || || ||
|-
|| 62 || 412 || [[Plat_DownWaitUpStay]] || tag || speed || delay || ||
|-
|| 63 || 413 || [[Plat_DownByValue]] || tag || speed || delay || height ||
|-
|| 64 || 414 || [[Plat_UpWaitDownStay]] || tag || speed || delay || ||
|-
|| 65 || 415 || [[Plat_UpByValue]] || tag || speed || delay || height ||
|-
|| 203 || 501 || [[Generic_Lift]] || tag || speed || delay || type || height ||
|-
|| 206 || 488 || [[Plat_DownWaitUpStayLip]] || tag || speed || delay || lip ||
|-
|| 207 || 489 || [[Plat_PerpetualRaiseLip]] || tag || speed || delay || lip ||
|}
*207 (489) '''Plat_PerpetualRaiseLip'''(''tag'', ''speed'', ''delay'', ''lip'')
*207 (489) '''Plat_PerpetualRaiseLip'''(''tag'', ''speed'', ''delay'', ''lip'')
:Like '''Plat_PerpetualRaise''', but lets you choose a "lip" (distance from lowest adjacent floor to move down to). If ''lip'' is 0, it will work like classic Doom perpetual plats.
:Like '''Plat_PerpetualRaise''', but lets you choose a "lip" (distance from lowest adjacent floor to move down to). If ''lip'' is 0, it will work like classic Doom perpetual plats.
Line 180: Line 162:
:Toggles a floor between the default position and touching the ceiling. It will be left busy after that.
:Toggles a floor between the default position and touching the ceiling. It will be left busy after that.


===Elevators===
==Elevators==
{|class="wikitable sortable"
{|class="wikitable sortable"
! UDMF #
! UDMF #
Line 191: Line 173:
! Arg5
! Arg5
|-
|-
|| 95 || 453 || [[FloorAndCeiling_LowerByValue]] || ''tag'' || ''speed'' || ''height'' || ||
|| 95 || 453 || FloorAndCeiling_LowerByValue || ''tag'' || ''speed'' || ''height'' || ||
|-
|-
|| 96 || 454 || [[FloorAndCeiling_RaiseByValue]] || ''tag'' || ''speed'' || ''height'' || ||
|| 96 || 454 || FloorAndCeiling_RaiseByValue || ''tag'' || ''speed'' || ''height'' || ||
|-
|-
|| 245 || 458 || [[Elevator_RaiseToNearest]] || ''tag'' || ''speed'' || || ||
|| 245 || 458 || Elevator_RaiseToNearest || ''tag'' || ''speed'' || || ||
|-
|-
|| 246 || 460 || [[Elevator_MoveToFloor]] || ''tag'' || ''speed'' || || ||
|| 246 || 460 || Elevator_MoveToFloor || ''tag'' || ''speed'' || || ||
|-
|-
|| 247 || 459 || [[Elevator_LowerToNearest]] || ''tag'' || ''speed'' || || ||
|| 247 || 459 || Elevator_LowerToNearest || ''tag'' || ''speed'' || || ||
|}
|}


===Ceiling movement===
==Ceiling movement==
{|class="wikitable sortable"
! UDMF #
! DOOM Format #
! Name
! Arg1
! Arg2
! Arg3
! Arg4
! Arg5
|-
|| 38 || 500 || [[Ceiling_Waggle]] || tag || height || speed || offset || timer
|-
|| 40 || 336 || [[Ceiling_LowerByValue]] || tag || speed || height || change || crush
|-
|| 41 || 335 || [[Ceiling_RaiseByValue]] || tag || speed || height || change ||
|-
|| 42 || 432 || [[Ceiling_CrushAndRaise]] || tag || speed || crush || crush mode ||
|-
|| 43 || 435 || [[Ceiling_LowerAndCrush]] || tag || speed || crush || crush mode ||
|-
|| 44 || 433 || [[Ceiling_CrushStop]] || tag || stop mode || || ||
|-
|| 45 || 434 || [[Ceiling_CrushRaiseAndStay]] || tag || speed || crush || crush mode ||
|-
|| 47 || 337 || [[Ceiling_MoveToValue]] || tag || speed || height || negate || change
|-
|| 69 || - || [[Ceiling_MoveToValueTimes8]] || tag || speed || height || negate || change
|-
|| 97 || 436 || [[Ceiling_LowerAndCrushDist]] || tag || speed || crush || gap || crush mode
|-
|| 104 || 441 || [[Ceiling_CrushAndRaiseSilentDist]] || tag || gap || speed || damage || crush mode
|-
|| 168 || 437 || [[Ceiling_CrushAndRaiseDist]] || tag || gap || speed || damage || crush mode
|-
|| 192 || 330 || [[Ceiling_LowerToHighestFloor]] || tag || speed || change || crush || gap to floor
|-
|| 193 || 339 || [[Ceiling_LowerInstant]] || tag || - || height * 8 || change || crush
|-
|| 194 || 338 || [[Ceiling_RaiseInstant]] || tag || - || height * 8 || change ||
|-
|| 195 || 438 || [[Ceiling_CrushRaiseAndStayA]] || tag || down speed || up speed || damage || crush mode
|-
|| 196 || 439 || [[Ceiling_CrushAndRaiseA]] || tag || down speed || up speed || damage || crush mode
|-
|| 197 || 440 || [[Ceiling_CrushAndRaiseSilentA]] || tag || down speed || up speed || damage || crush mode
|-
|| 198 || - || [[Ceiling_RaiseByValueTimes8]] || tag || speed || height * 8 || change ||
|-
|| 199 || - || [[Ceiling_LowerByValueTimes8]] || tag || speed || height * 8 || change || crush
|-
|| 201 || 465 || [[Generic_Ceiling]] || tag || speed || height || target || flags
|-
|| 205 || 443 || [[Generic_Crusher]] || tag || down speed || up speed || silent || damage
|-
|| 252 || 325 || [[Ceiling_RaiseToNearest]] || tag || speed || change || ||
|-
|| 253 || 328 || [[Ceiling_LowerToLowest]] || tag || speed || change || crush ||
|-
|| 254 || 332 || [[Ceiling_LowerToFloor]] || tag || speed || change || crush || gap
|-
|| 255 || 442 || [[Ceiling_CrushRaiseAndStaySilA]] || tag || down speed || up speed || damage || crush mode
|-
|| 262 || 323 || [[Ceiling_RaiseToHighest]] || tag || speed || change || ||
|-
|| 263 || 324 || [[Ceiling_ToHighestInstant]] || tag || change || crush || ||
|-
|| 264 || 326 || [[Ceiling_LowerToNearest]] || tag || speed || change || crush ||
|-
|| 265 || 327 || [[Ceiling_RaiseToLowest]] || tag || speed || change || ||
|-
|| 266 || 329 || [[Ceiling_RaiseToHighestFloor]] || tag || speed || change || ||
|-
|| 267 || 331 || [[Ceiling_ToFloorInstant]] || tag || change || crush || gap ||
|-
|| 268 || 333 || [[Ceiling_RaiseByTexture]] || tag || speed || change || ||
|-
|| 269 || 334 || [[Ceiling_LowerByTexture]] || tag || speed || change || crush ||
|}
*323:'''Ceiling_RaiseToHighest'''      ( tag, speed, change                )
*323:'''Ceiling_RaiseToHighest'''      ( tag, speed, change                )
*324:'''Ceiling_ToHighestInstant'''    ( tag, change, crush                )
*324:'''Ceiling_ToHighestInstant'''    ( tag, change, crush                )
Line 315: Line 219:
:See '''Generic_Floor''' for an explanation of parameters.
:See '''Generic_Floor''' for an explanation of parameters.


====Crushing ceilings====
===Crushing ceilings===
There are some crushing ceilings available now. Some originate from Hexen while others are extensions from ZDoom. ZDoom compatibility is considered where relevant. For all specials where it applies, ''crushmode'' can take one of these values:
There are some crushing ceilings available now. Some originate from Hexen while others are extensions from ZDoom. ZDoom compatibility is considered where relevant. For all specials where it applies, ''crushmode'' can take one of these values:
*0: compatibility. Act like it would do in ZDoom. This means that in Doom the crusher keeps pushing into the things it crushes, while in Hexen it stays on position while dealing damage. And if the game is Doom, the special has "Dist" in the name and the speed is set to 8, it will also slow down to speed 1 when crushing.
*0: compatibility. Act like it would do in ZDoom. This means that in Doom the crusher keeps pushing into the things it crushes, while in Hexen it stays on position while dealing damage. And if the game is Doom, the special has "Dist" in the name and the speed is set to 8, it will also slow down to speed 1 when crushing.
Line 336: Line 240:
*443: Generic_Crusher(tag, down_speed, up_speed, silent, damage)
*443: Generic_Crusher(tag, down_speed, up_speed, silent, damage)


===Stair building===
==Stair building==
{|class="wikitable sortable"
{|class="wikitable sortable"
! UDMF #
! UDMF #
Line 347: Line 251:
! Arg5
! Arg5
|-
|-
|| 204 || 502 || [[Generic_Stairs]] || ''tag'' || ''speed'' || ''height'' || ''flags'' || ''reset''
|| 217 || 340 || Stairs_BuildUpDoom || ''tag'' || ''speed'' || ''stepsize'' || ''delay'' || ''reset''
|-
|-
|| 217 || 340 || [[Stairs_BuildUpDoom]] || ''tag'' || ''speed'' || ''stepsize'' || ''delay'' || ''reset''
|| 270 || 341 || Stairs_BuildDownDoom || ''tag'' || ''speed'' || ''stepsize'' || ''delay'' || ''reset''
|-
|-
|| 270 || 341 || [[Stairs_BuildDownDoom]] || ''tag'' || ''speed'' || ''stepsize'' || ''delay'' || ''reset''
|| 271 || 342 || Stairs_BuildUpDoomSync || ''tag'' || ''speed'' || ''stepsize'' || ''reset'' ||
|-
|-
|| 271 || 342 || [[Stairs_BuildUpDoomSync]] || ''tag'' || ''speed'' || ''stepsize'' || ''reset'' ||
|| 272 || 343 || Stairs_BuildDownDoomSync || ''tag'' || ''speed'' || ''stepsize'' || ''reset'' ||
|-
|| 272 || 343 || [[Stairs_BuildDownDoomSync]] || ''tag'' || ''speed'' || ''stepsize'' || ''reset'' ||
|}
|}
  ------------------------------------------------------------------------------  
  ------------------------------------------------------------------------------  
Line 384: Line 286:
  ------------------------------------------------------------------------------
  ------------------------------------------------------------------------------


===Polyobjects===
==Polyobjects==
{|class="wikitable sortable"
! UDMF #
! DOOM Format #
! Name
! Arg1
! Arg2
! Arg3
! Arg4
! Arg5
|-
|| 1 || 348 || [[Polyobj_StartLine]] || id || mirror id || sound sequence || ||
|-
|| 2 || 356 || [[Polyobj_RotateLeft]] || id || speed || rotation || ||
|-
|| 3 || 354 || [[Polyobj_RotateRight]] || id || speed || rotation || ||
|-
|| 4 || 352 || [[Polyobj_Move]] || id || speed || angle || distance ||
|-
|| 5 || 349 || [[Polyobj_ExplicitLine]] || id || line index || mirror id || sound sequence ||
|-
|| 6 || - || [[Polyobj_MoveTimes8]] || id || speed || angle || distance ||
|-
|| 7 || 351 || [[Polyobj_DoorSwing]] || id || speed || rotation || delay ||
|-
|| 8 || 350 || [[Polyobj_DoorSlide]] || id || speed || angle || distance || delay
|-
|| 59 || 499 || [[Polyobj_OR_MoveToSpot]] || id || speed || [[TID]] || ||
|-
|| 86 || 496 || [[Polyobj_MoveToSpot]] || id || speed || [[TID]] || ||
|-
|| 87 || 474 || [[Polyobj_Stop]] || id || || || ||
|-
|| 88 || 497 || [[Polyobj_MoveTo]] || id || speed || x || y ||
|-
|| 89 || 498 || [[Polyobj_OR_MoveTo]] || id || speed || x || y ||
|-
|| 90 || 357 || [[Polyobj_OR_RotateLeft]] || id || speed || rotation || ||
|-
|| 91 || 355 || [[Polyobj_OR_RotateRight]] || id || speed || rotation || ||
|-
|| 92 || 353 || [[Polyobj_OR_Move]] || id || speed || angle || distance ||
|-
|| 93 || - || [[Polyobj_OR_MoveTimes8]] || id || speed || angle || distance ||
|}
*1 (348) '''Polyobj_StartLine'''(''id'', ''mirror_id'', ''sequence_id'')
*1 (348) '''Polyobj_StartLine'''(''id'', ''mirror_id'', ''sequence_id'')
*5 (349) '''Polyobj_ExplicitLine(''id'', ''linenum'', ''mirror_id'', ''sequence_id'')
*5 (349) '''Polyobj_ExplicitLine(''id'', ''linenum'', ''mirror_id'', ''sequence_id'')
Line 461: Line 319:
:Stops a polyobject from movement. It will then be free for other activations.
:Stops a polyobject from movement. It will then be free for other activations.


===Pillar building===
==Pillar building==
{|class="wikitable sortable"
! UDMF #
! DOOM Format #
! Name
! Arg1
! Arg2
! Arg3
! Arg4
! Arg5
|-
|| 29 || 362 || [[Pillar_Build]] || tag || speed || height || ||
|-
|| 30 || 364 || [[Pillar_Open]] || tag || speed || floor dist || ceil dist ||
|-
|| 94 || 363 || [[Pillar_BuildAndCrush]] || tag || speed || height || damage ||
|-
|| 251 || 468 || [[FloorAndCeiling_LowerRaise]] || tag || floor speed || ceiling speed || Boom emulation ||
|}
  ------------------------------------------------------------------------------
  ------------------------------------------------------------------------------
  #    Function                            ExtraData Name
  #    Function                            ExtraData Name
Line 520: Line 360:
*[[FloorAndCeiling_LowerRaise]]
*[[FloorAndCeiling_LowerRaise]]


===ACS Scripts===
==ACS Scripts==
{|class="wikitable sortable"
! UDMF #
! DOOM Format #
! Name
! Arg1
! Arg2
! Arg3
! Arg4
! Arg5
|-
|| 80 || 365 || [[ACS_Execute]] || script || map || arg1 || arg2 || arg3
|-
|| 81 || 366 || [[ACS_Suspend]] || script || map || || ||
|-
|| 82 || 367 || [[ACS_Terminate]] || script || map || || ||
|-
|| 83 || 430 || [[ACS_LockedExecute]] || script || map || arg1 || arg2 || lock id
|-
|| 84 || 420 || [[ACS_ExecuteWithResult]] || script || arg1 || arg2 || arg3 || arg4
|-
|| 85 || 490 || [[ACS_LockedExecuteDoor]] || script || map || arg1 || arg2 || lock id
|-
|| 226 || 477 || [[ACS_ExecuteAlways]] || script || map || arg1 || arg2 || arg3
|}
{{zdoomwiki}}
{{zdoomwiki}}
Eternity supports ACS script calling.
Eternity supports ACS script calling.
Line 560: Line 376:
:This one executes a script that requires the player to have a key or more. See [[Lock identifiers]] for info on what to put for the ''lock'' argument.
:This one executes a script that requires the player to have a key or more. See [[Lock identifiers]] for info on what to put for the ''lock'' argument.


===Lights===
==Lights==
{|class="wikitable sortable"
{|class="wikitable sortable"
! UDMF #
! UDMF #
Line 571: Line 387:
! Arg5
! Arg5
|-
|-
|| 110 || 368 || [[Light_RaiseByValue]] || tag || level || || ||
|| 233 || 473 || Light_MinNeighbor || ''tag'' || || || ||
|-
|| 111 || 369 || [[Light_LowerByValue]] || tag || level || || ||
|-
|| 112 || 370 || [[Light_ChangeToValue]] || tag || level || || ||
|-
|| 113 || 371 || [[Light_Fade]] || tag || dest value || tics || ||
|-
|| 114 || 372 || [[Light_Glow]] || tag || max || min || tics ||
|-
|| 115 || 373 || [[Light_Flicker]] || tag || max || min || ||
|-
|| 116 || 374 || [[Light_Strobe]] || tag || max value || min value || max time || min time
|-
|| 232 || 463 || [[Light_StrobeDoom]] || tag || max time || min time || ||
|-
|| 233 || 473 || [[Light_MinNeighbor]] || ''tag'' || || || ||
|-
|| 234 || 461 || [[Light_MaxNeighbor]] || ''tag'' || || || ||
|-
|-
|| 234 || 461 || Light_MaxNeighbor || ''tag'' || || || ||
|}
|}
If ''tag'' is 0, any such parameterized special will affect the sector behind the linedef, if applicable.
If ''tag'' is 0, any such parameterized special will affect the sector behind the linedef, if applicable.
Line 618: Line 417:
:Sets the lights in tagged sectors to their maximum neighbors' values
:Sets the lights in tagged sectors to their maximum neighbors' values


===Things===
==Things==
{|class="wikitable sortable"
*398:'''Thing_Spawn'''(tid, type, angle)
! UDMF #
:Spawns an object of '''acs_spawndata''' '''num''' ''type'' on top of map spot things marked with TID ''tid''. Note: teleportation fog is spawned as well.
! DOOM Format #
*399:'''Thing_SpawnNoFog'''(tid, type, angle)
! Name
:Similar to above, but without teleportation fog.
! Arg1
! Arg2
! Arg3
! Arg4
! Arg5
|-
|| 17 || 422 || [[Thing_Raise]] || tid || || || ||
|-
|| 19 || 423 || [[Thing_Stop]] || tid || || || ||
|-
|| 72 || 424 || [[ThrustThing]] || angle || speed || - || tid ||
|-
|| 73 || 426 || [[DamageThing]] || damage || mod || || ||
|-
|| 119 || 427 || [[Thing_Damage]] || tid || damage || mod || ||
|-
|| 128 || 425 || [[ThrustThingZ]] || tid || speed || up or down || set or add ||
|-
|| 130 || 404 || [[Thing_Activate]] || tid || || || ||
|-
|| 131 || 405 || [[Thing_Deactivate]] || tid || || || ||
|-
|| 132 || 478 || [[Thing_Remove]] || tid || || || ||
|-
|| 133 || 428 || [[Thing_Destroy]] || tid || - || sector tag || ||
|-
|| 134 || 402 || [[Thing_Projectile]] || tid || type || angle || speed || vertical speed
|-
|| 135 || 398 || [[Thing_Spawn]] || tid || type || angle || new_tid ||
|-
|| 136 || 403 || [[Thing_ProjectileGravity]] || tid || type || angle || speed || vertical speed
|-
|| 137 || 399 || [[Thing_SpawnNoFog]] || tid || type || angle || new_tid ||
|-
|| 176 || 421 || [[Thing_ChangeTID]] || oldtid || newtid || || ||
|-
|| 248 || 469 || [[HealThing]] || amount || max health || || ||
|}
*402:'''Thing_Projectile'''(tid, type, angle, speed, verticalspeed)
*402:'''Thing_Projectile'''(tid, type, angle, speed, verticalspeed)
:Throws a projectile from a map spot. Can also be used to throw a flying monster. Like in Thing_Spawn, ''type'' is an '''acs_spawndata num'''. Note that ''speed'' and ''verticalspeed'' are in eighths (units per 8 tics). Up is positive for ''verticalspeed''.
:Throws a projectile from a map spot. Can also be used to throw a flying monster. Like in Thing_Spawn, ''type'' is an '''acs_spawndata num'''. Note that ''speed'' and ''verticalspeed'' are in eighths (units per 8 tics). Up is positive for ''verticalspeed''.
*403:'''Thing_ProjectileGravity'''(tid, type, angle, speed, verticalspeed)
*403:'''Thing_ProjectileGravity'''(tid, type, angle, speed, verticalspeed)
:Same as above, but the thrown projectile or monster will be subject to gravity.
:Same as above, but the thrown projectile or monster will be subject to gravity.
*404:'''Thing_Activate'''(tid)
:"Activates" an object of TID ''tid''. The object will enter ''activestate'' while playing ''activatesound''. If the object is a monster (SHOOTABLE or KILLABLE flag set), its DORMANT flag will be reset as well, "waking it up" from a statue.
*405:'''Thing_Deactivate'''(tid)
:Analogous/opposite to the above, the object will enter ''inactivestate'' while playing ''deactivatesound''. If the object is a monster (SHOOTABLE or KILLABLE flag set), its DORMANT flag will be set as well, turning it into a statue.
*421:'''Thing_ChangeTID'''(oldtid, newtid) ''(since Nov 14 2015)''
*421:'''Thing_ChangeTID'''(oldtid, newtid) ''(since Nov 14 2015)''
:Sets the TID of all things which currently have ''oldtid'' to the value ''newtid''. If ''oldtid'' is zero, it will change the TID of the activator.
:Sets the TID of all things which currently have ''oldtid'' to the value ''newtid''. If ''oldtid'' is zero, it will change the TID of the activator.
*422:'''Thing_Raise'''(tid) ''(since Feb 24 2016)''
:Resurrects all corpses having ''tid'' if they have room. If ''tid'' is 0, it will resurrect the activator. Doesn't work on players.
*423:'''Thing_Stop'''(tid) ''(since Feb 24 2016)''
:Stops the movement of all things tagged ''tid''. If ''tid'' is 0, it will stop the activator. It works by resetting velocity to 0, which means that it will work against players, projectiles and other thrusted objects. It will not "paralyze" monsters because they use a different kind of movement.
*424:'''ThrustThing'''(angle, speed, reserved, tid) ''(since Feb 24 2016)''
:Pushes the thing in a direction using the specified speed. If ''tid'' is 0 it will push the activator. The argument ''reserved'' must be 0 and is intended to be used when Eternity has a working high-speed movement system. If the map is made for vanilla Hexen, it will only be activated from the front side; otherwise it will depend on the '''1SONLY''' [[ExtraData]] flag.
*425:'''ThrustThingZ'''(tid, speed, up_down, set_add) ''(since Feb 24 2016)''
:Pushes the things tagged ''tid'' vertically. The value from ''speed'' will be divided by 4 before being added to the thing's vertical speed. ''Up_down'' will cause the thing to be thrusted upwards if 0, downwards if 1. ''Set_add'' will cause the speed to override the current value if 0, or add to the current value if 1.
*426:'''DamageThing'''(damage, mod) ''(since Feb 24 2016)''
*426:'''DamageThing'''(damage, mod) ''(since Feb 24 2016)''
:Damages the activator. ''Mod'' is a means-of-death ([[damagetype]]), which can be used for custom obituaries and damage resistances. If ''damage'' is 0, it will actually do 10000 (gibbing) damage.
:Damages the activator. ''Mod'' is a means-of-death ([[damagetype]]), which can be used for custom obituaries and damage resistances. If ''damage'' is 0, it will actually do 10000 (gibbing) damage.
Line 683: Line 456:
:Enables and sets wind for Boom push/pull source things. If ''tag'' is non-zero, it looks for such things inside a tagged sector. Only one push/pull thing will be used for each tagged sector. If ''tag'' is zero, it will enable pushing for things tagged ''tid''. ''Amount'' is the force, and depending on thing type, it will be attractive or repulsive. If ''use_line'' is 1, it will use the linedef length as amount, not the ''amount'' argument. Either the tagged sector (if ''tag'' is non-zero) or the sectors containing the ''tid'' things must have the Boom generalized wind special.
:Enables and sets wind for Boom push/pull source things. If ''tag'' is non-zero, it looks for such things inside a tagged sector. Only one push/pull thing will be used for each tagged sector. If ''tag'' is zero, it will enable pushing for things tagged ''tid''. ''Amount'' is the force, and depending on thing type, it will be attractive or repulsive. If ''use_line'' is 1, it will use the linedef length as amount, not the ''amount'' argument. Either the tagged sector (if ''tag'' is non-zero) or the sectors containing the ''tid'' things must have the Boom generalized wind special.


===Sectors===
==Sectors==
{|class="wikitable sortable"
! UDMF #
! DOOM Format #
! Static
! Name
! Arg1
! Arg2
! Arg3
! Arg4
! Arg5
|-
|| 48 || 482 || yes || [[Sector_Attach3dMidtex]] || line id || optional sector tag || use ceiling || ||
|-
|| 140 || 495 || || [[Sector_ChangeSound]] || tag || sequence id || || ||
|-
|| 185 || 470 || || [[Sector_SetRotation]] || tag || floor angle || ceiling angle || ||
|-
|| 186 || 472 || || [[Sector_SetCeilingPanning]] || tag || x integer || x fractional || y integer || y fractional
|-
|| 187 || 471 || || [[Sector_SetFloorPanning]] || tag || x integer || x fractional || y integer || y fractional
|-
|| 190 || 481 || yes || [[Static_Init (sky transfer)]] || tag || 255 || flip sky || ||
|}
*470:'''Sector_SetRotation'''(tag, floor_angle, ceiling_angle)
*470:'''Sector_SetRotation'''(tag, floor_angle, ceiling_angle)
:Sets the floor and ceiling texture rotation of tagged sectors to the given values in degrees (0-360).
:Sets the floor and ceiling texture rotation of tagged sectors to the given values in degrees (0-360).
Line 721: Line 471:
*220 (479) '''Sector_SetCurrent'''(''tag'', ''strength'', ''angle'', ''flags'')
*220 (479) '''Sector_SetCurrent'''(''tag'', ''strength'', ''angle'', ''flags'')
:Similar to '''Sector_SetWind''', but meant for water flow setup, not air wind.
:Similar to '''Sector_SetWind''', but meant for water flow setup, not air wind.
*48 (482) '''Sector_Attach3dMidtex'''(''line_id'', ''tag'', ''do_ceiling'')
:Attaches 3DMidtex lines to the vertical movement of the front sector's floor or (if ''do_ceiling'' is 1) ceiling. Normally it will seek lines tagged ''line_id'', but if ''tag'' is non-zero, it can restrict search to lines belonging to tagged sectors. If ''line_id'' is zero while ''tag'' is nonzero, it will find all 3dmidtex lines belonging to sectors with ''tag'', regardless of line tags.


===Slopes===
==Slopes==
{|class="wikitable sortable"
*455/181:'''Plane_Align'''(''floor'', ''ceiling'')
! UDMF #
:Only activated on map startup, it sets up slopes in front (1), back (2) or both (3) parts of a line, for ''floor'' and ''ceiling''.
! DOOM Format #
*493/118:'''Plane_Copy'''(''frontfloortag'', ''frontceiltag'', ''backfloortag'', ''backceiltag'', ''shareslope'')
! Name
:Only activated on map startup, it copies the slopes from other sectors into the front and/or back sector. The ''shareslope'' parameter is used to apply a tagged slope ''both'' to the back and the front of a linedef, and can be a sum of the following values:
! Arg1
:*1: front floor copied to back
! Arg2
:*2: back floor copied to front
! Arg3
:*4: front ceiling copied to back
! Arg4
:*8: back ceiling copied to front
! Arg5
|-
|| 118 || 493 || [[Plane_Copy]] || front floor tag || front ceiling tag || back floor tag || back ceiling tag || share slope
|-
|| 181 || 455 || [[Plane_Align]] || floor || ceiling || || ||
|}


===Teleportation===
==Teleportation==
{|class="wikitable sortable"
! UDMF #
! DOOM Format #
! Name
! Arg1
! Arg2
! Arg3
! Arg4
! Arg5
|-
|| 70 || 444 || [[Teleport]] || tid || sector tag || || ||
|-
|| 71 || 445 || [[Teleport_NoFog]] || tid || use angle || sector tag || keep height ||
|-
|| 215 || 446 || [[Teleport_Line]] || - || dest_id || flip || ||
|}
*444:'''Teleport'''(tid, sector_tag, reserved)
*444:'''Teleport'''(tid, sector_tag, reserved)
:Teleports the activator. Depending on whether ''tid'' or ''sector_tag'' is nonzero, the behavior will be Hexen or Doom compatible. If ''tid'' is zero, then it will teleport like in Doom, into the first teleport destination found on sectors tagged ''sector_tag''.
:Teleports the activator. Depending on whether ''tid'' or ''sector_tag'' is nonzero, the behavior will be Hexen or Doom compatible. If ''tid'' is zero, then it will teleport like in Doom, into the first teleport destination found on sectors tagged ''sector_tag''.
Line 769: Line 499:
*446:'''Teleport_Line'''(reserved, dest_id, flip)
*446:'''Teleport_Line'''(reserved, dest_id, flip)
:Encapsulates the Boom line-teleporting functions. ''Dest_id'' is the tag of the target line. ''Flip'' will cause the user to rotate 180 degrees after teleporting.
:Encapsulates the Boom line-teleporting functions. ''Dest_id'' is the tag of the target line. ''Flip'' will cause the user to rotate 180 degrees after teleporting.
 
==Portals==
===Portals===
{|class="wikitable sortable"
! UDMF #
! DOOM Format #
! Name
! Arg1
! Arg2
! Arg3
! Arg4
! Arg5
|-
|| 9 || 450 || [[Line_Horizon]] || || || || ||
|-
|| 300 || 492 || [[Portal_Define]] || portal id || type || anchor line id || z parameter || flipped anchor
|-
|| 301 || 491 || [[Line_QuickPortal]] || visual-only || || || ||
|}
*'''Line_Horizon'''
:Simple linedef specials which converts the middle part with a horizon portal which uses front sector's floor and ceiling.
*'''Portal_Define'''
:See the [[Portal_Define|linked article]] for its description.
 
*'''Line_QuickPortal'''(''non-interactive'')
:Convenience linedef special to quickly create a portal between two areas, through a linedef's middle part. The two lines must be of equal length, and of opposite angles (if linked/interactive) or any angle if not linked. They must have the same, unique tag and the same ''non-interactive'' value, which is 0 for linked portals and 1 for two-way non-linked portals.
 
*'''Sector_SetPortal'''(''tag'', ''type'', ''plane'', ''misc'')
*'''Sector_SetPortal'''(''tag'', ''type'', ''plane'', ''misc'')
:'''Only needed for easily converting old maps with portals'''. You can skip this part if you're designing a new UDMF map.
:Only activates on map starts, this one sets a sector portal on floor and/or ceiling on the ''tag''ged sectors. See [[Portal]] for visual examples.
:Only activates on map starts, this one sets a sector portal on floor and/or ceiling on the ''tag''ged sectors. See [[Portal]] for visual examples.
:''Plane'' can be 0 (display portal on floor), 1 (display portal on ceiling), 2 (display portal on both);
:''Plane'' can be 0 (display portal on floor), 1 (display portal on ceiling), 2 (display portal on both);
Line 810: Line 514:
:''Misc'' has values depending on the ''type'' chosen. It makes sense for anchored and linked portals (with 0 meaning source line, and 1 meaning anchor line) and it also has a meaning for the copy types (1 and 5) where it specifies the tag of the sector with portals to copy.
:''Misc'' has values depending on the ''type'' chosen. It makes sense for anchored and linked portals (with 0 meaning source line, and 1 meaning anchor line) and it also has a meaning for the copy types (1 and 5) where it specifies the tag of the sector with portals to copy.


===Binary format specific===
==Binary format specific==
*378:'''Line_SetIdentification'''(id)
*378:'''Line_SetIdentification'''(id)
:Sets the linedef identification number (separate from tag) to ''id''. Useful for various specials that use the line id. Do not use in UDMF.
:Sets the linedef identification number (separate from tag) to ''id''. Useful for various specials that use the line id. Do not use in UDMF.


===Property transfer===
==Property transfer==
{|class="wikitable sortable"
! UDMF #
! DOOM Format #
! Static
! Name
! Arg1
! Arg2
! Arg3
! Arg4
! Arg5
|-
|| 209 || 242 || yes || [[Transfer_Heights]] || tag || || || ||
|-
|| 210 || 213 || yes || [[Transfer_FloorLight]] || tag || || || ||
|-
|| 211 || 261 || yes || [[Transfer_CeilingLight]] || tag || || || ||
|}
*'''Transfer_FloorLight'''(tag)
*'''Transfer_FloorLight'''(tag)
*'''Transfer_CeilingLight'''(tag)
*'''Transfer_CeilingLight'''(tag)
Line 840: Line 527:
:This is a multi-purpose special encapsulating several static specials from MBF and Boom. ''Tag'' is the tag of the target sector(s). ''Type'' can be 255 for MBF sky transfers. If ''flip_or_ceiling'' is 1, the sky will be flipped horizontally. If ''type'' is 255, ''move_type'' must be 0.
:This is a multi-purpose special encapsulating several static specials from MBF and Boom. ''Tag'' is the tag of the target sector(s). ''Type'' can be 255 for MBF sky transfers. If ''flip_or_ceiling'' is 1, the sky will be flipped horizontally. If ''type'' is 255, ''move_type'' must be 0.


===Scrollers===
==Scrollers==
{|class="wikitable sortable"
! UDMF #
! DOOM Format #
! Name
! Arg1
! Arg2
! Arg3
! Arg4
! Arg5
|-
|| 100 || 406 || [[Scroll_Texture_Left]] || amount || || || ||
|-
|| 101 || 407 || [[Scroll_Texture_Right]] || amount || || || ||
|-
|| 102 || 408 || [[Scroll_Texture_Up]] || amount || || || ||
|-
|| 103 || 409 || [[Scroll_Texture_Down]] || amount || || || ||
|-
|| 222 || 485 || [[Scroll_Texture_Model]] || line id || kind || || ||
|-
|| 223 || 484 || [[Scroll_Floor]] || tag || kind || move things || x || y
|-
|| 224 || 483 || [[Scroll_Ceiling]] || tag || kind || - || x || y
|-
|| 225 || ExtraData only || [[Scroll_Texture_Offsets]]
|}
*223 (484) '''Scroll_Floor'''(''tag'', ''kind'', ''scroll_things'', ''x'', ''y'')
*223 (484) '''Scroll_Floor'''(''tag'', ''kind'', ''scroll_things'', ''x'', ''y'')
*224 (483) '''Scroll_Ceiling'''(''tag'', ''kind'', ''unused'', ''x'', ''y'')
*224 (483) '''Scroll_Ceiling'''(''tag'', ''kind'', ''unused'', ''x'', ''y'')
*222 (485) '''Scroll_Texture_Model'''(''line_id'', ''kind'')
*222 (485) '''Scroll_Texture_Model'''(''line_id'', ''kind'')
:These specials do standard Boom scrolling. ''Kind'' specifies if it's a static scroller (0), displacement scroller (1) or accelerative scroller (2), and 4 can be added to it to discard arguments ''x'' and ''y'' and instead use the linedef's vertex coordinates do determine the scrolling vector. ''Scroll_things'' only apples for '''Scroll_Floor''' and means simple visual scrolling (0), thing movement with static floor (1) or thing movement with floor (2). ''X'' and ''y'' are the velocity components with which to scroll, if ''kind'' is less than 4 (otherwise the line's size is used).
:These specials do standard Boom scrolling. ''Kind'' specifies if it's a static scroller (0), accelerative scroller (1) or displacement scroller (2), and 4 can be added to it to discard arguments ''x'' and ''y'' and instead use the linedef's vertex coordinates do determine the scrolling vector. ''Scroll_things'' only apples for '''Scroll_Floor''' and means simple visual scrolling (0), thing movement with static floor (1) or thing movement with floor (2). ''X'' and ''y'' are the velocity components with which to scroll, if ''kind'' is less than 4 (otherwise the line's size is used).


:'''Scroll_Texture_Model''' does wall texture scrolling according to line's vector relative to the target lines.
:'''Scroll_Texture_Model''' does wall texture scrolling according to line's vector relative to the target lines.
*225 (255) '''Scroll_Texture_Offsets'''()
:This scrolls the current linedef based on texture offsets.


===Pushers===
==Exits==
{|class="wikitable sortable"
! UDMF #
! DOOM Format #
! Name
! Arg1
! Arg2
! Arg3
! Arg4
! Arg5
|-
|| 218 || 457 || [[Sector_SetWind]] || tag || force || angle || flags ||
|-
|| 219 || 223 || [[Sector_SetFriction]] || tag || || || ||
|-
|| 220 || 479 || [[Sector_SetCurrent]] || tag || force || angle || flags ||
|-
|| 227 || 480 || [[PointPush_SetForce]] || tag || tid || force || use line ||
|}
 
===Exits===
{|class="wikitable sortable"
! UDMF #
! DOOM Format #
! Name
! Arg1
! Arg2
! Arg3
! Arg4
! Arg5
|-
|| 74 || 449 || [[Teleport_NewMap]] || level number || || || ||
|-
|| 75 || 400 || [[Teleport_EndGame]] || || || || ||
|-
|| 179 || 462 || [[ChangeSkill]] || skill || || || ||
|-
|| 243 || 447 || [[Exit_Normal]] || || || || ||
|-
|| 244 || 448 || [[Exit_Secret]] || || || || ||
|}
*400:'''Teleport_EndGame'''
*400:'''Teleport_EndGame'''
:Ends the entire game in victory. This triggers the current game's assigned ending cutscene and the player can only choose to start a new game.
:Ends the game in victory.
*447:'''Exit_Normal'''(reserved)
*447:'''Exit_Normal'''(reserved)
:Exits to a normal destination level. The argument is reserved and must be 0.
:Exits to a normal destination level. The argument is reserved and must be 0.
Line 926: Line 549:
:Changes the current difficulty level, where ''skill'' is from 0 (I'm too young to die) to 4 inclusive (Nightmare!).
:Changes the current difficulty level, where ''skill'' is from 0 (I'm too young to die) to 4 inclusive (Nightmare!).


==See also==
*[[ACS functions]]
[[Category:Editing]]
[[Category:Editing reference]]
[[Category:Editing reference]]
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)

Templates used on this page: