Editing Parameterized linedef specials
From Eternity Wiki
Jump to navigationJump to search
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. | 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. 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. | ||
Each parameterized line special has a name and two associated numbers: | 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. | ||
{{Backto|Linedef types}} | {{Backto|Linedef types}} | ||
==Specials== | ==Specials== | ||
===Doors=== | ===Doors=== | ||
Line 44: | Line 42: | ||
{|class="wikitable sortable" | {|class="wikitable sortable" | ||
! UDMF # | ! UDMF # | ||
! | ! DOOM Format # | ||
! Name | ! Name | ||
! Arg1 | ! Arg1 | ||
Line 51: | Line 49: | ||
! Arg4 | ! Arg4 | ||
! Arg5 | ! Arg5 | ||
|- | |- | ||
|| 20 || 318 || [[Floor_LowerByValue]] || ''tag'' || ''speed'' || ''height'' || ''change'' || | || 20 || 318 || [[Floor_LowerByValue]] || ''tag'' || ''speed'' || ''height'' || ''change'' || | ||
Line 73: | Line 70: | ||
|| 37 || 319 || [[Floor_MoveToValue]] || ''tag'' || ''speed'' || ''height'' || ''neg'' || ''change'' | || 37 || 319 || [[Floor_MoveToValue]] || ''tag'' || ''speed'' || ''height'' || ''neg'' || ''change'' | ||
|- | |- | ||
|| 46 || 452 || [[Floor_CrushStop]] || ''tag'' || || || || | || 46 || 452 || [[Floor_CrushStop]] || ''tag'' || || || || | ||
|- | |- | ||
|| 66 || 321 || [[Floor_LowerInstant]] || ''tag'' || - || ''height'' || ''change'' || | || 66 || 321 || [[Floor_LowerInstant]] || ''tag'' || - || ''height'' || ''change'' || | ||
|- | |- | ||
|| 67 || 320 || [[Floor_RaiseInstant]] || ''tag'' || - || ''height'' || ''change'' || ''crush'' | || 67 || 320 || [[Floor_RaiseInstant]] || ''tag'' || - || ''height'' || ''change'' || ''crush'' | ||
|- | |- | ||
|| 68 || - || [[Floor_MoveToValueTimes8]] || ''tag'' || ''speed'' || ''height'' || ''neg'' || ''change'' | || 68 || - || [[Floor_MoveToValueTimes8]] || ''tag'' || ''speed'' || ''height'' || ''neg'' || ''change'' | ||
Line 85: | Line 82: | ||
|| 138 || 397 || [[Floor_Waggle]] || tag || height || speed || offset || timer | || 138 || 397 || [[Floor_Waggle]] || tag || height || speed || offset || timer | ||
|- | |- | ||
|| 200 || 464 || [[Generic_Floor]] || tag || speed || height || target || flags | || 200 || 464 || [[Generic_Floor]] || tag || speed || height || target || flags | ||
|- | |- | ||
|| 228 || 475 || [[Plat_RaiseAndStayTx0]] || tag || speed || lock out || || | || 228 || 475 || [[Plat_RaiseAndStayTx0]] || tag || speed || lock out || || | ||
|- | |- | ||
|| 230 || 476 || [[Plat_UpByValueStayTx]] || tag || speed || height || || | || 230 || 476 || [[Plat_UpByValueStayTx]] || tag || speed || height || || | ||
|- | |- | ||
|| 231 || 487 || [[Plat_ToggleCeiling]] || tag || || || || | || 231 || 487 || [[Plat_ToggleCeiling]] || tag || || || || | ||
|- | |- | ||
|| 235 || 466 || [[Floor_TransferTrigger]] || ''tag'' || || || || | || 235 || 466 || [[Floor_TransferTrigger]] || ''tag'' || || || || | ||
Line 107: | Line 104: | ||
|| 256 || 307 || [[Floor_LowerToHighestEE]] || ''tag'' || ''speed'' || ''change'' || || | || 256 || 307 || [[Floor_LowerToHighestEE]] || ''tag'' || ''speed'' || ''change'' || || | ||
|- | |- | ||
|| 257 || 308 || [[Floor_RaiseToLowest]] || ''tag'' || ''change'' || ''crush'' || || | || 257 || 308 || [[Floor_RaiseToLowest]] || ''tag'' || ''change'' || ''crush'' || || | ||
|- | |- | ||
|| 258 || 313 || [[Floor_LowerToLowestCeiling]] || ''tag'' || ''speed'' || ''change'' || || | || 258 || 313 || [[Floor_LowerToLowestCeiling]] || ''tag'' || ''speed'' || ''change'' || || | ||
|- | |- | ||
|| 259 || 314 || [[Floor_RaiseToCeiling]] || ''tag'' || ''speed'' || ''change'' || ''crush'' || ''gap'' | || 259 || 314 || [[Floor_RaiseToCeiling]] || ''tag'' || ''speed'' || ''change'' || ''crush'' || ''gap'' | ||
|- | |- | ||
|| 260 || 322 || [[Floor_ToCeilingInstant]] || ''tag'' || ''change'' || ''crush'' || ''gap'' || | || 260 || 322 || [[Floor_ToCeilingInstant]] || ''tag'' || ''change'' || ''crush'' || ''gap'' || | ||
|- | |- | ||
|| 261 || 316 || [[Floor_LowerByTexture]] || ''tag'' || ''speed'' || ''change'' || || | || 261 || 316 || [[Floor_LowerByTexture]] || ''tag'' || ''speed'' || ''change'' || || | ||
|- | |- | ||
|} | |} | ||
*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). | ||
*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. | ||
*475:'''Plat_RaiseAndStayTx0'''(''tag'', ''speed'', ''hereticemu'') | |||
: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. | |||
====See also==== | ====See also==== | ||
*[[Floor movement classic specials]]: for the Doom format variants. | *[[Floor movement classic specials]]: for the Doom format variants. | ||
Line 140: | Line 149: | ||
! Arg4 | ! Arg4 | ||
! Arg5 | ! Arg5 | ||
|- | |- | ||
|| 60 || 410 || [[Plat_PerpetualRaise]] || tag || speed || delay || || | || 60 || 410 || [[Plat_PerpetualRaise]] || tag || speed || delay || || | ||
|- | |- | ||
|| 61 || 411 || [[Plat_Stop]] || tag || stop_mode || || || | || 61 || 411 || [[Plat_Stop]] || tag || stop_mode || || || | ||
Line 153: | Line 161: | ||
|- | |- | ||
|| 65 || 415 || [[Plat_UpByValue]] || tag || speed || delay || height || | || 65 || 415 || [[Plat_UpByValue]] || tag || speed || delay || height || | ||
|- | |- | ||
|| 206 || 488 || [[Plat_DownWaitUpStayLip]] || tag || speed || delay || lip || | || 206 || 488 || [[Plat_DownWaitUpStayLip]] || tag || speed || delay || lip || | ||
Line 160: | Line 166: | ||
|| 207 || 489 || [[Plat_PerpetualRaiseLip]] || tag || speed || delay || lip || | || 207 || 489 || [[Plat_PerpetualRaiseLip]] || tag || speed || delay || lip || | ||
|} | |} | ||
*60 (410) '''Plat_PerpetualRaise'''(''tag'', ''speed'', ''delay'') | |||
: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. | |||
*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 212: | Line 220: | ||
! Arg4 | ! Arg4 | ||
! Arg5 | ! Arg5 | ||
|- | |- | ||
|| 40 || 336 || [[Ceiling_LowerByValue]] || tag || speed || height || change || crush | || 40 || 336 || [[Ceiling_LowerByValue]] || tag || speed || height || change || crush | ||
Line 346: | Line 352: | ||
! Arg4 | ! Arg4 | ||
! Arg5 | ! Arg5 | ||
|- | |- | ||
|| 217 || 340 || [[Stairs_BuildUpDoom]] || ''tag'' || ''speed'' || ''stepsize'' || ''delay'' || ''reset'' | || 217 || 340 || [[Stairs_BuildUpDoom]] || ''tag'' || ''speed'' || ''stepsize'' || ''delay'' || ''reset'' | ||
Line 410: | Line 414: | ||
|- | |- | ||
|| 8 || 350 || [[Polyobj_DoorSlide]] || id || speed || angle || distance || delay | || 8 || 350 || [[Polyobj_DoorSlide]] || id || speed || angle || distance || delay | ||
|- | |- | ||
|| 87 || 474 || [[Polyobj_Stop]] || id || || || || | || 87 || 474 || [[Polyobj_Stop]] || id || || || || | ||
|- | |- | ||
|| 90 || 357 || [[Polyobj_OR_RotateLeft]] || id || speed || rotation || || | || 90 || 357 || [[Polyobj_OR_RotateLeft]] || id || speed || rotation || || | ||
Line 651: | Line 647: | ||
|| 134 || 402 || [[Thing_Projectile]] || tid || type || angle || speed || vertical speed | || 134 || 402 || [[Thing_Projectile]] || tid || type || angle || speed || vertical speed | ||
|- | |- | ||
|| 135 || 398 || [[Thing_Spawn]] || tid || type || angle || | || 135 || 398 || [[Thing_Spawn]] || tid || type || angle || || | ||
|- | |- | ||
|| 136 || 403 || [[Thing_ProjectileGravity]] || tid || type || angle || speed || vertical speed | || 136 || 403 || [[Thing_ProjectileGravity]] || tid || type || angle || speed || vertical speed | ||
|- | |- | ||
|| 137 || 399 || [[Thing_SpawnNoFog]] || tid || type || angle || | || 137 || 399 || [[Thing_SpawnNoFog]] || tid || type || angle || || | ||
|- | |- | ||
|| 176 || 421 || [[Thing_ChangeTID]] || oldtid || newtid || || || | || 176 || 421 || [[Thing_ChangeTID]] || oldtid || newtid || || || | ||
Line 865: | Line 861: | ||
|| 224 || 483 || [[Scroll_Ceiling]] || tag || kind || - || x || y | || 224 || 483 || [[Scroll_Ceiling]] || tag || kind || - || x || y | ||
|- | |- | ||
|| 225 || | || 225 || 255 || [[Scroll_Texture_Offset]] || || || || || | ||
|} | |} | ||
*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), | :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=== | ===Pushers=== | ||
Line 916: | Line 914: | ||
|} | |} | ||
*400:'''Teleport_EndGame''' | *400:'''Teleport_EndGame''' | ||
:Ends the | :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. |