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. | The parameterized linedefs types are Hexen-like action specials with arguments, whose purpose is to be more customizable than the Boom generalized types. Currently they can be implemented by using [[ExtraData]] lumps attached via [[MapInfo|EMAPINFO]] to each map, or by designing the level in the Hexen format. They can also be called from ACS. When called in ExtraData or ACS, their parameters aren't limited to 0-255 as it is the case with 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 (upcoming) 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. | ||
'''IMPORTANT''': all ''reserved'' parameters must be set to 0. Failure to do so will result in your maps being broken in later Eternity versions! | |||
{{Backto|Linedef types}} | {{Backto|Linedef types}} | ||
==Doors== | |||
*300:'''Door_Raise'''(''tag'', ''speed'', ''delay'', ''light_tag'') | |||
*301:'''Door_Open'''(''tag'', ''speed'', ''light_tag'') | |||
*302:'''Door_Close'''(''tag'', ''speed'', ''light_tag'') | |||
*303:'''Door_CloseWaitOpen'''(''tag'', ''speed'', ''delay'', ''light_tag'') | |||
*304:'''Door_WaitRaise'''(''tag'', ''speed'', ''delay'', ''timeoffset'', ''light_tag'') | |||
*305:'''Door_WaitClose'''(''tag'', ''speed'', ''timeoffset'', ''light_tag'') | |||
*429:'''Door_LockedRaise'''(''tag'', ''speed'', ''delay'', ''lock'', ''light_tag'') ''(since Feb 25 2016)'' | |||
*457:'''Door_LockedOpen'''(''tag'', ''speed'', ''lock'', ''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. | ||
:''speed'': How fast, in eights of units per tic, the door should move. Doom normal doors are as fast as 16, and blazing doors are 64. | :''speed'': How fast, in eights of units per tic, the door should move. Doom normal doors are as fast as 16, and blazing doors are 64. | ||
:''delay'': Time in tics (1/35 seconds) for the door before it returns to its opposite movement. | :''delay'': Time in tics (1/35 seconds) for the door before it returns to its opposite movement. | ||
:''timeoffset'': Time in tics before the door activates. | :''timeoffset'': Time in tics before the door activates. | ||
:''light_tag'': Sector tag to receive light changes to maximum or minimum neighbor depending on whether the door is closed or opened. | :''light_tag'': Sector tag to receive light changes to maximum or minimum neighbor depending on whether the door is closed or opened. | ||
:''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== | |||
*306:'''Floor_RaiseToHighest''' ( tag, speed, change, crush ) | |||
*307:'''Floor_LowerToHighest''' ( tag, speed, change ) | |||
*308:'''Floor_RaiseToLowest''' ( tag, change, crush ) | |||
*309:'''Floor_LowerToLowest''' ( tag, speed, change ) | |||
*310:'''Floor_RaiseToNearest''' ( tag, speed, change, crush ) | |||
*311:'''Floor_LowerToNearest''' ( tag, speed, change ) | |||
*312:'''Floor_RaiseToLowestCeiling''' ( tag, speed, change, crush, gap ) | |||
*313:'''Floor_LowerToLowestCeiling''' ( tag, speed, change ) | |||
*314:'''Floor_RaiseToCeiling''' ( tag, speed, change, crush, gap ) | |||
*315:'''Floor_RaiseByTexture''' ( tag, speed, change, crush ) | |||
*316:'''Floor_LowerByTexture''' ( tag, speed, change ) | |||
*317:'''Floor_RaiseByValue''' ( tag, speed, height, change, crush ) | |||
*318:'''Floor_LowerByValue''' ( tag, speed, height, change ) | |||
*319:'''Floor_MoveToValue''' ( tag, speed, height, change, crush ) | |||
*320:'''Floor_RaiseInstant''' ( tag, height, change, crush ) | |||
*321:'''Floor_LowerInstant''' ( tag, height, change ) | |||
*322:'''Floor_ToCeilingInstant''' ( tag, change, crush ) | |||
:Most of these are self-explanatory. The first six functions move the floor relative to the neighbor ''floor'' and the next two to the neighbor ceiling. The 'ByTexture' types move by the shortest lower texture's height. Parameters follow - | |||
:*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 eights 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. | |||
:*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 64: | ||
*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]] | |||
*'''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. | |||
*'''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). | |||
*'''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. | ||
==Plats, lifts== | |||
:410:'''Plat_PerpetualRaise'''(''tag'', ''speed'', ''delay'') | |||
:411:'''Plat_Stop'''(''tag'') | |||
:412:'''Plat_DownWaitUpStay'''(''tag'', ''speed'', ''delay'') | |||
:413:'''Plat_DownByValue'''(''tag'', ''speed'', ''delay'', ''height'') | |||
:414:'''Plat_UpWaitDownStay'''(''tag'', ''speed'', ''delay'') | |||
:415:'''Plat_UpByValue'''(''tag'', ''speed'', ''delay'', ''height'') | |||
:458:'''Elevator_RaiseToNearest'''(''tag'', ''speed'') | |||
:459:'''Elevator_LowerToNearest'''(''tag'', ''speed'') | |||
:460:'''Elevator_MoveToFloor'''(''tag'', ''speed'') | |||
:454:'''FloorAndCeiling_RaiseByValue'''(''tag'', ''speed'', ''height'') | |||
:453:'''FloorAndCeiling_LowerByValue'''(''tag'', ''speed'', ''height'') | |||
: | |||
: | |||
: | |||
: | |||
: | |||
: | |||
: | |||
: | |||
== | ==Ceiling movement== | ||
------------------------------------------------------------------------------ | |||
# Function ExtraData Name | |||
323 Up to Highest Neighbor Ceiling Ceiling_RaiseToHighest | |||
324 Up to HnC Instant Ceiling_ToHighestInstant | |||
325 Up to Nearest Neighbor Ceiling Ceiling_RaiseToNearest | |||
326 Down to Nearest Neighbor Ceiling Ceiling_LowerToNearest | |||
327 Up to Lowest Neighbor Ceiling Ceiling_RaiseToLowest | |||
328 Down to Lowest Neighbor Ceiling Ceiling_LowerToLowest | |||
329 Up to Highest Neighbor Floor Ceiling_RaiseToHighestFloor | |||
330 Down to Highest Neighbor Floor Ceiling_LowerToHighestFloor | |||
331 Down to Floor Instant Ceiling_ToFloorInstant | |||
332 Down to Floor Ceiling_LowerToFloor | |||
333 Up Abs Shortest Upper Texture Ceiling_RaiseByTexture | |||
334 Down Abs Shortest Upper Texture Ceiling_LowerByTexture | |||
335 Up Absolute Param Ceiling_RaiseByValue | |||
336 Down Absolute Param Ceiling_LowerByValue | |||
337 To Absolute Height Ceiling_MoveToValue | |||
338 Up Absolute Param, Instant Ceiling_RaiseInstant | |||
339 Down Absolute Param, Instant Ceiling_LowerInstant | |||
Parameters | |||
--------------------------------------------------------------- | |||
Ceiling_RaiseToHighest tag, speed, change | |||
Ceiling_ToHighestInstant tag, change, crush | |||
Ceiling_RaiseToNearest tag, speed, change | |||
Ceiling_LowerToNearest tag, speed, change, crush | |||
Ceiling_RaiseToLowest tag, speed, change | |||
Ceiling_LowerToLowest tag, speed, change, crush | |||
Ceiling_RaiseToHighestFloor tag, speed, change | |||
Ceiling_LowerToHighestFloor tag, speed, change, crush | |||
Ceiling_ToFloorInstant tag, change, crush, gap | |||
Ceiling_LowerToFloor tag, speed, change, crush, gap | |||
Ceiling_RaiseByTexture tag, speed, change | |||
Ceiling_LowerByTexture tag, speed, change, crush | |||
Ceiling_RaiseByValue tag, speed, height, change | |||
Ceiling_LowerByValue tag, speed, height, change, crush | |||
Ceiling_MoveToValue tag, speed, height, change, crush | |||
Ceiling_RaiseInstant tag, height, change | |||
Ceiling_LowerInstant tag, height, change, crush | |||
Values | |||
--------------------------------------------------------------- | |||
tag : Tag of the sector(s) to affect. A tag of zero means to | |||
affect the sector on the second side of the line. | |||
speed : Speed of ceiling in eighths of a unit per tic. | |||
change : This parameter takes the following values: | |||
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 : Amount of crushing damage ceiling inflicts at each | |||
crushing event (when gametic % 4 = 0). If this | |||
amount is less than or equal to zero, no crushing | |||
damage is done. | |||
height : An integer number of units, either the amount to | |||
move the floor by or the exact z coordinate to move | |||
the floor toward. Negative numbers are valid for | |||
the latter case. | |||
gap : Distance to keep from the destination. Useful if crush | |||
is nonzero | |||
------------------------------------------------------------------------------ | |||
*465:'''Generic_Ceiling'''(''tag'', ''speed'', ''height'', ''target'', ''flag'') | *465:'''Generic_Ceiling'''(''tag'', ''speed'', ''height'', ''target'', ''flag'') | ||
: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 332: | Line 172: | ||
*435: Ceiling_LowerAndCrush(tag, speed, damage, crushmode) | *435: Ceiling_LowerAndCrush(tag, speed, damage, crushmode) | ||
*436: Ceiling_LowerAndCrushDist(tag, speed, damage, ground_distance, crushmode) | *436: Ceiling_LowerAndCrushDist(tag, speed, damage, ground_distance, crushmode) | ||
*433: Ceiling_CrushStop(tag | *433: Ceiling_CrushStop(tag) | ||
*443: Generic_Crusher(tag, down_speed, up_speed, silent, damage) | *443: Generic_Crusher(tag, down_speed, up_speed, silent, damage) | ||
==Stair building== | |||
------------------------------------------------------------------------------ | |||
# Function ExtraData Name | |||
340 Build stairs up, DOOM method Stairs_BuildUpDoom | |||
341 Build stairs down, DOOM method Stairs_BuildDownDoom | |||
342 Build stairs up sync*, DOOM method Stairs_BuildUpDoomSync | |||
343 Build stairs dn sync*, DOOM method Stairs_BuildDownDoomSync | |||
------------------------------------------------------------------------------ | |||
* Synchronized stairs have each step move at a different speed so that all the | * Synchronized stairs have each step move at a different speed so that all the | ||
steps reach the destination height at the same time. This stair building | steps reach the destination height at the same time. This stair building | ||
style is only available with these parameterized line types. | style is only available with these parameterized line types. | ||
Parameters | |||
--------------------------------------------------------------- | |||
Stairs_BuildUpDoom tag, speed, stepsize, delay, reset | |||
Stairs_BuildDownDoom tag, speed, stepsize, delay, reset | |||
Stairs_BuildUpDoomSync tag, speed, stepsize, reset | |||
Stairs_BuildDownDoomSync tag, speed, stepsize, reset | |||
Values | Values | ||
Line 382: | Line 215: | ||
building action but in the reverse direction. If | building action but in the reverse direction. If | ||
zero, the stairs will never reset. | zero, the stairs will never reset. | ||
------------------------------------------------------------------------------ | |||
==PolyObject control== | |||
------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ||
# Function ExtraData Name | |||
348 Marks first line in PolyObject* Polyobj_StartLine | |||
349 Explicitly includes a line* Polyobj_ExplicitLine | |||
350 Open PolyObject as sliding door Polyobj_DoorSlide | |||
351 Open PolyObject as swinging door Polyobj_DoorSwing | |||
352 Move PolyObject in xy plane Polyobj_Move | |||
353 Move PolyObject w/override** Polyobj_OR_Move | |||
354 Rotate PolyObject right Polyobj_RotateRight | |||
355 Rotate PolyObject right w/override Polyobj_OR_RotateRight | |||
356 Rotate PolyObject left Polyobj_RotateLeft | |||
357 Rotate PolyObject left w/override Polyobj_OR_RotateLeft | |||
474 Stop PolyObject*** Polyobj_Stop | |||
* There are two different methods of creating a PolyObject. In the first, | |||
the "first" line is given the Polyobj_StartLine special, and subsequent | |||
lines are added to the PolyObject by following segs from vertex to vertex. | |||
To use this, all the lines around the PolyObject must run in the same | |||
direction, and the last line must end at the same vertex which starts the | |||
first line (in other words, it must be closed). | |||
With the second method, every line to be included must be given the | |||
Polyobj_ExplicitLine special and must be given a linenum param which is | |||
unique amongst all lines that will added to that polyobject. Polyobjects | |||
of this sort should also be closed for proper rendering, but the game | |||
engine cannot and will not verify that this is the case. | |||
Only PolyObjects created with the Polyobj_StartLine method can have other | |||
line specials on the PolyObject's lines themselves. | |||
** Override types will take effect even if an action is already affecting the | |||
specified polyobject. Normal actions will fail in this case. | |||
*** This will stop a polyobject from its action, leaving it free for other movement. | |||
Parameters | |||
------------------------------------------------------------------ | |||
Polyobj_StartLine polyobj_id, mirror_id, sndseq_id | |||
Polyobj_ExplicitLine polyobj_id, linenum, mirror_id, sndseq_id | |||
Polyobj_DoorSlide polyobj_id, speed, angle, dist, delay | |||
Polyobj_DoorSwing polyobj_id, aspeed, adist, delay | |||
Polyobj_Move polyobj_id, speed, angle, dist | |||
Polyobj_OR_Move polyobj_id, speed, angle, dist | |||
Polyobj_RotateRight polyobj_id, aspeed, adist | |||
Polyobj_OR_RotateRight polyobj_id, aspeed, adist | |||
Polyobj_RotateLeft polyobj_id, aspeed, adist | |||
Polyobj_OR_RotateLeft polyobj_id, aspeed, adist | |||
* | Polyobj_Stop polyobj_id | ||
Values | |||
--------------------------------------------------------------- | |||
polyobj_id : ID number of the PolyObject of which this line is | |||
a part. PolyObject ID numbers are defined in the | |||
angle field of their EEPolyObjSpawnSpot object | |||
(DoomEd numbers 9301 or 9302). Every PolyObject | |||
must be given a valid unique ID number greater | |||
than zero. | |||
mirror_id : The ID number of a PolyObject that wants to mirror | |||
every action that this PolyObject makes. This | |||
number cannot refer to the self-same PolyObject, | |||
nor should PolyObjects attempt to mirror each | |||
other in a cycle since this will create problems | |||
with override actions. Angle of motion is always | |||
reversed when applying an action to a mirroring | |||
PolyObject. If a mirror is already in motion for | |||
a non-override action, the mirror will not be | |||
affected even if the main object was moved. Mirror | |||
polyobjects can themselves define a mirror, and | |||
an action will affect all mirroring polyobjects | |||
in the chain. | |||
sndseq_id : Selects the EDF sound sequence this | |||
PolyObject uses when moving. | |||
linenum : For Polyobj_ExplicitLine only, specifies the | |||
order in which lines should be added to the | |||
PolyObject. Each line must have a number greater | |||
than zero which is unique within all lines that | |||
belong to that PolyObject. Although, unlike Hexen, | |||
there is no requirement that the numbers be in | |||
consecutive order or that they start at 1. | |||
speed : Linear speed of PolyObject motion in eighths of a | |||
unit per tic. | |||
angle : Byte angle of linear motion. * | |||
dist : Total linear distance to move in units. | |||
delay : Time to wait before closing in tics. | |||
aspeed : Byte angle specifying speed in degrees per tic. * | |||
adist : Byte angle specifying total angular distance to | |||
rotate. *, ** | |||
--------------------------------------------------------------- | |||
* Byte angles follow this system: | |||
0 = 0 degrees (East) | |||
64 = 90 degrees (North) | |||
128 = 180 degrees (West) | |||
192 = 270 degrees (South) | |||
To convert from degrees to byte angles, use the following calculation: | |||
byteangle = (degrees * 256) / 360 | |||
* | |||
Chop or round the result to an integer. | |||
Valid byte angles fall between 0 and 255, so adjust any angles less than | |||
0 or greater than or equal to 360 before performing this conversion. | |||
** For the adist parameter to Polyobj_Rotate-type specials (excluding | |||
Polyobj_DoorSwing), the values 0 and 255 have the following special | |||
* | meanings: | ||
0 == The PolyObject will rotate exactly 360 degrees. | |||
255 == The PolyObject will rotate perpetually. | |||
All other byte angle values have their normal meaning. | |||
------------------------------------------------------------------------------ | |||
==Pillar building== | |||
: | |||
------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ||
# Function ExtraData Name | # Function ExtraData Name | ||
Line 519: | Line 371: | ||
------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ||
*[[FloorAndCeiling_LowerRaise]] | *[[FloorAndCeiling_LowerRaise]] | ||
==ACS Scripts== | |||
{{zdoomwiki}} | {{zdoomwiki}} | ||
Eternity supports ACS script calling. | Eternity supports ACS script calling. | ||
Line 551: | Line 378: | ||
:If the specified script was previously executed but then suspended, then execution will begin at the point immediately after where it was suspended instead of starting over again at the beginning. | :If the specified script was previously executed but then suspended, then execution will begin at the point immediately after where it was suspended instead of starting over again at the beginning. | ||
:The number of usable arguments is limited to 3. | :The number of usable arguments is limited to 3. | ||
*366:'''ACS_Suspend'''(''scriptnum'', ''mapnum'') | *366:'''ACS_Suspend'''(''scriptnum'', ''mapnum'') | ||
:Suspends execution of a script until an ACS_Execute special resumes it. | :Suspends execution of a script until an ACS_Execute special resumes it. | ||
Line 560: | Line 385: | ||
: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== | |||
Eternity supports the following light level controlling parameterized linedef specials. If ''tag'' is 0, any such parameterized special will affect the sector behind the linedef, if applicable. | Eternity supports the following light level controlling parameterized linedef specials. If ''tag'' is 0, any such parameterized special will affect the sector behind the linedef, if applicable. | ||
*368:'''Light_RaiseByValue'''(''tag'', ''lvl'') | *368:'''Light_RaiseByValue'''(''tag'', ''lvl'') | ||
Line 618: | Line 408: | ||
:Sets the lights in tagged sectors to their maximum neighbors' values | :Sets the lights in tagged sectors to their maximum neighbors' values | ||
==Things== | |||
*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. They will retain their alignment (friend or foe) before their death. 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 673: | Line 437: | ||
*428:'''Thing_Destroy'''(tid, reserved, sectortag) ''(since Feb 24 2016)'' | *428:'''Thing_Destroy'''(tid, reserved, sectortag) ''(since Feb 24 2016)'' | ||
:Causes 10000 damage to all things tagged ''tid''. Beware that, in accordance to Hexen, ''tid'' 0 will NOT affect the activator; for that use '''DamageThing'''. ''Reserved'' must be set to 0. ''Sectortag'' can be used to only kill things inside sectors with given tag. | :Causes 10000 damage to all things tagged ''tid''. Beware that, in accordance to Hexen, ''tid'' 0 will NOT affect the activator; for that use '''DamageThing'''. ''Reserved'' must be set to 0. ''Sectortag'' can be used to only kill things inside sectors with given tag. | ||
*469:'''HealThing'''(amount, maxhealth) | *469:'''HealThing'''(amount, maxhealth) | ||
:Heals the activator by ''amount''. ''Maxhealth'' influences maximum health and only affects player activators. For monsters and other objects, the maximum health is always the spawn health. On players, ''maxhealth'' has the following meanings: | :Heals the activator by ''amount''. ''Maxhealth'' influences maximum health and only affects player activators. For monsters and other objects, the maximum health is always the spawn health. On players, ''maxhealth'' has the following meanings: | ||
Line 680: | Line 442: | ||
:*If 1, it will heal the player up to the soulsphere maximum health (in default Doom) or the initial health + 100 (if no soulsphere is defined in current game mode) | :*If 1, it will heal the player up to the soulsphere maximum health (in default Doom) or the initial health + 100 (if no soulsphere is defined in current game mode) | ||
:*Otherwise, it will heal the player up to ''maxhealth''. | :*Otherwise, it will heal the player up to ''maxhealth''. | ||
==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 713: | Line 450: | ||
*472:'''Sector_SetCeilingPanning'''(tag, x_int, x_frac, y_int, y_frac) | *472:'''Sector_SetCeilingPanning'''(tag, x_int, x_frac, y_int, y_frac) | ||
:Same as Sector_SetFloorPanning, but for the ceiling texture. | :Same as Sector_SetFloorPanning, but for the ceiling texture. | ||
* | ==Slopes== | ||
: | *455:'''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''. | |||
: | |||
==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 469: | ||
*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. | |||
:Only activates on map starts, this one sets a sector portal on floor and/or ceiling on the ''tag''ged sectors | |||
:''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); | ||
:''Type'' can be: | :''Type'' can be: | ||
:*0: anchored portal. This line must correspond to another line named "anchor", whose first 3 parameters are the same with this one, except that ''misc'' is | :*0: anchored portal. This line must correspond to another line named "anchor", whose first 3 parameters are the same with this one, except that ''misc'' is 1, while the current line has ''misc'' 0. | ||
:*2: skybox portal. Uses the skybox camera object as a source, and displays the skybox (view of this camera) in tagged sectors. | :*2: skybox portal. Uses the skybox camera object as a source, and displays the skybox (view of this camera) in tagged sectors. | ||
:*3: plane portal. Renders the ceiling texture of line's front sector at a fixed camera distance. | :*3: plane portal. Renders the ceiling texture of line's front sector at a fixed camera distance. | ||
Line 810: | Line 484: | ||
:''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 | :Sets the linedef identification number (separate from tag) to ''id''. Useful for various specials that use the line id. | ||
==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 500: | ||
: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]] |