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. 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. | ||
Notation: ''HexenNumber'' (''ExtraDataNumber'') ''Name''(''Parameters'') | |||
{{Backto|Linedef types}} | {{Backto|Linedef types}} | ||
==Doors== | |||
{|class="wikitable sortable" | {|class="wikitable sortable" | ||
! UDMF # | ! UDMF # | ||
! | ! DOOM Format # | ||
! Name | ! Name | ||
! | ! Arg1 | ||
! | ! Arg2 | ||
! Arg3 | |||
! Arg4 | |||
! Arg5 | |||
|- | |- | ||
|| | || 12 || 300 || [[Door_Raise]] || ''tag'' || ''speed'' || ''delay'' || ''light_tag'' || | ||
|- | |- | ||
|| 11 || 301 || [[Door_Open]] || ''tag'' | || 11 || 301 || [[Door_Open]] || ''tag'' || ''speed'' || ''light_tag'' || || | ||
|- | |- | ||
|| | || 10 || 302 || [[Door_Close]] || ''tag'' || ''speed'' || ''light_tag'' || || | ||
|- | |- | ||
|| 13 || 429 || [[Door_LockedRaise]] || ''tag'' | || 13 || 429 || [[Door_LockedRaise]] || ''tag'' || ''speed'' || ''delay'' || ''lock'' || ''light_tag'' | ||
|- | |- | ||
|| 105 || 304 || [[Door_WaitRaise]] || ''tag'' | || 105 || 304 || [[Door_WaitRaise]] || ''tag'' || ''speed'' || ''delay'' || ''timeoffset'' || ''light_tag'' | ||
|- | |- | ||
|| | || 105 || 305 || [[Door_WaitClose]] || ''tag'' || ''speed'' || ''timeoffset'' || ''light_tag'' || | ||
|- | |- | ||
|| 249 || 303 || [[Door_CloseWaitOpen]] || ''tag'' | || 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== | |||
{|class="wikitable sortable" | {|class="wikitable sortable" | ||
! UDMF # | ! UDMF # | ||
! | ! DOOM Format # | ||
! Name | ! Name | ||
! Arg1 | ! Arg1 | ||
Line 51: | Line 54: | ||
! Arg4 | ! Arg4 | ||
! Arg5 | ! Arg5 | ||
|- | |- | ||
|| | || 24 || 306 || Floor_RaiseToHighest || ''tag'' || ''speed'' || ''change'' || ''crush'' || | ||
|- | |||
|| 259 || 314 || Floor_RaiseToCeiling || ''tag'' || ''speed'' || ''change'' || ''crush'' || ''gap'' | |||
|- | |- | ||
|| | || 260 || 322 || Floor_ToCeilingInstant || ''tag'' || ''change'' || ''crush'' || ''gap'' || | ||
|- | |- | ||
|| | || 25 || 310 || Floor_RaiseToNearest || ''tag'' || ''speed'' || ''change'' || ''crush'' || | ||
|- | |- | ||
|| | || 238 || 312 || Floor_RaiseToLowestCeiling || ''tag'' || ''speed'' || ''change'' || ''crush'' || ''gap'' | ||
|- | |- | ||
|| | || 257 || 308 || Floor_RaiseToLowest || ''tag'' || ''change'' || ''crush'' || || | ||
|- | |- | ||
|| | || 23 || 317 || Floor_RaiseByValue || ''tag'' || ''speed'' || ''height'' || ''change'' || ''crush'' | ||
|- | |- | ||
|| | || 35 || - || Floor_RaiseByValueTimes8 || ''tag'' || ''speed'' || ''height'' || ''change'' || ''crush'' | ||
|- | |- | ||
|| | || 240 || 315 || Floor_RaiseByTexture || ''tag'' || ''speed'' || ''change'' || ''crush'' || | ||
|- | |- | ||
|| | || 67 || 320 || Floor_RaiseInstant || ''tag'' || - || ''height'' || ''change'' || ''crush'' | ||
|- | |- | ||
|| | || 256 || 307 || Floor_LowerToHighestEE || ''tag'' || ''speed'' || ''change'' || || | ||
|- | |- | ||
|| | || 242 || 416 || Floor_LowerToHighest || ''tag'' || ''speed'' || ''adjust'' || ''force_adjust'' || | ||
|- | |- | ||
|| | || 22 || 311 || Floor_LowerToNearest || ''tag'' || ''speed'' || ''change'' || || | ||
|- | |- | ||
|| | || 258 || 313 || Floor_LowerToLowestCeiling || ''tag'' || ''speed'' || ''change'' || || | ||
|- | |- | ||
|| | || 21 || 309 || Floor_LowerToLowest || ''tag'' || ''speed'' || ''change'' || || | ||
|- | |- | ||
|| | || 20 || 318 || Floor_LowerByValue || ''tag'' || ''speed'' || ''height'' || ''change'' || | ||
|- | |- | ||
|| | || 36 || - || Floor_LowerByValueTimes8 || ''tag'' || ''speed'' || ''height'' || ''change'' || | ||
|- | |- | ||
|| | || 261 || 316 || Floor_LowerByTexture || ''tag'' || ''speed'' || ''change'' || || | ||
|- | |- | ||
|| | || 66 || 321 || Floor_LowerInstant || ''tag'' || - || ''height'' || ''change'' || | ||
|- | |- | ||
|| | || 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'' || || || || | ||
|} | |} | ||
: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. | ||
*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. | |||
==Plats, lifts== | |||
*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 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== | |||
{|class="wikitable sortable" | {|class="wikitable sortable" | ||
! UDMF # | ! UDMF # | ||
Line 191: | Line 173: | ||
! Arg5 | ! Arg5 | ||
|- | |- | ||
|| 95 || 453 || | || 95 || 453 || FloorAndCeiling_LowerByValue || ''tag'' || ''speed'' || ''height'' || || | ||
|- | |- | ||
|| 96 || 454 || | || 96 || 454 || FloorAndCeiling_RaiseByValue || ''tag'' || ''speed'' || ''height'' || || | ||
|- | |- | ||
|| 245 || 458 || | || 245 || 458 || Elevator_RaiseToNearest || ''tag'' || ''speed'' || || || | ||
|- | |- | ||
|| 246 || 460 || | || 246 || 460 || Elevator_MoveToFloor || ''tag'' || ''speed'' || || || | ||
|- | |- | ||
|| 247 || 459 || | || 247 || 459 || Elevator_LowerToNearest || ''tag'' || ''speed'' || || || | ||
|} | |} | ||
==Ceiling movement== | |||
*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=== | |||
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== | |||
{|class="wikitable sortable" | {|class="wikitable sortable" | ||
! UDMF # | ! UDMF # | ||
Line 347: | Line 251: | ||
! Arg5 | ! Arg5 | ||
|- | |- | ||
|| | || 217 || 340 || Stairs_BuildUpDoom || ''tag'' || ''speed'' || ''stepsize'' || ''delay'' || ''reset'' | ||
|- | |- | ||
|| | || 270 || 341 || Stairs_BuildDownDoom || ''tag'' || ''speed'' || ''stepsize'' || ''delay'' || ''reset'' | ||
|- | |- | ||
|| | || 271 || 342 || Stairs_BuildUpDoomSync || ''tag'' || ''speed'' || ''stepsize'' || ''reset'' || | ||
|- | |- | ||
|| 272 || 343 || Stairs_BuildDownDoomSync || ''tag'' || ''speed'' || ''stepsize'' || ''reset'' || | |||
|| 272 || 343 || | |||
|} | |} | ||
------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ||
Line 384: | Line 286: | ||
------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ||
==Polyobjects== | |||
{|class="wikitable sortable" | {|class="wikitable sortable" | ||
! UDMF # | ! UDMF # | ||
Line 394: | Line 296: | ||
! Arg4 | ! Arg4 | ||
! Arg5 | ! Arg5 | ||
|- | |- | ||
|| 2 || 356 || [[Polyobj_RotateLeft]] || id || speed || rotation || || | || 2 || 356 || [[Polyobj_RotateLeft]] || id || speed || rotation || || | ||
Line 402: | Line 302: | ||
|- | |- | ||
|| 4 || 352 || [[Polyobj_Move]] || id || speed || angle || distance || | || 4 || 352 || [[Polyobj_Move]] || id || speed || angle || distance || | ||
|- | |- | ||
|| 6 || - || [[Polyobj_MoveTimes8]] || id || speed || angle || distance || | || 6 || - || [[Polyobj_MoveTimes8]] || id || speed || angle || distance || | ||
Line 410: | Line 308: | ||
|- | |- | ||
|| 8 || 350 || [[Polyobj_DoorSlide]] || id || speed || angle || distance || delay | || 8 || 350 || [[Polyobj_DoorSlide]] || id || speed || angle || distance || delay | ||
|} | |} | ||
*1 (348) '''Polyobj_StartLine'''(''id'', ''mirror_id'', ''sequence_id'') | *1 (348) '''Polyobj_StartLine'''(''id'', ''mirror_id'', ''sequence_id'') | ||
Line 461: | Line 341: | ||
: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== | |||
------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ||
# Function ExtraData Name | # Function ExtraData Name | ||
Line 520: | Line 382: | ||
*[[FloorAndCeiling_LowerRaise]] | *[[FloorAndCeiling_LowerRaise]] | ||
==ACS Scripts== | |||
{{zdoomwiki}} | {{zdoomwiki}} | ||
Eternity supports ACS script calling. | Eternity supports ACS script calling. | ||
Line 560: | Line 398: | ||
: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== | |||
{|class="wikitable sortable" | {|class="wikitable sortable" | ||
! UDMF # | ! UDMF # | ||
Line 571: | Line 409: | ||
! Arg5 | ! Arg5 | ||
|- | |- | ||
|| 233 || 473 || Light_MinNeighbor || ''tag'' || || || || | |||
|| 233 || 473 || | |||
|- | |- | ||
|| 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 439: | ||
:Sets the lights in tagged sectors to their maximum neighbors' values | :Sets the lights in tagged sectors to their maximum neighbors' values | ||
==Things== | |||
{|class="wikitable sortable" | {|class="wikitable sortable" | ||
! UDMF # | ! UDMF # | ||
Line 632: | Line 453: | ||
|- | |- | ||
|| 19 || 423 || [[Thing_Stop]] || tid || || || || | || 19 || 423 || [[Thing_Stop]] || tid || || || || | ||
|} | |} | ||
*398:'''Thing_Spawn'''(tid, type, angle) | |||
: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. | |||
*399:'''Thing_SpawnNoFog'''(tid, type, angle) | |||
:Similar to above, but without teleportation fog. | |||
*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 492: | ||
: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== | |||
*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 507: | ||
*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== | |||
*455/181:'''Plane_Align'''(''floor'', ''ceiling'') | |||
: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''. | |||
*493/118:'''Plane_Copy'''(''frontfloortag'', ''frontceiltag'', ''backfloortag'', ''backceiltag'', ''shareslope'') | |||
: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: | |||
:*1: front floor copied to back | |||
:*2: back floor copied to front | |||
:*4: front ceiling copied to back | |||
:*8: back ceiling copied to front | |||
==Teleportation== | |||
*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 535: | ||
*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== | |||
*'''Sector_SetPortal'''(''tag'', ''type'', ''plane'', ''misc'') | *'''Sector_SetPortal'''(''tag'', ''type'', ''plane'', ''misc'') | ||
: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 550: | ||
:''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== | |||
*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== | |||
*'''Transfer_FloorLight'''(tag) | *'''Transfer_FloorLight'''(tag) | ||
*'''Transfer_CeilingLight'''(tag) | *'''Transfer_CeilingLight'''(tag) | ||
Line 840: | Line 563: | ||
: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== | |||
*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. | |||
==Exits== | |||
*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. | ||
Line 926: | Line 585: | ||
: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!). | ||
[[Category:Editing reference]] | [[Category:Editing reference]] |