Floor movement classic specials: Difference between revisions

From Eternity Wiki
Jump to navigationJump to search
 
(17 intermediate revisions by the same user not shown)
Line 1: Line 1:
=Floor targets=
Classic floor movement specials move sector floors using the "stnmov" sound effect, ending with "pstop". Typically when blocked they stop, except for a few of them which can crush (the best known example of such a crusher is the rising trap from Doom 1 E2M4).


====Lowest Neighbor Floor (LnF)====
Their movement is defined to one of the following targets:
* down to lowest neighbour floor. Some of them can change their texture and damage behaviour to their surrounding area (the so-called numeric model), typical of platforms sinking into acid.
* up/down to next neighbour floor. These can be used progressively until they get to the highest/lowest floor.
* up to lowest neighbour ceiling. Some crush, some don't. The ones which crush also leave an 8-unit gap. NOTE: under vanilla compatibility, they keep moving, potentially trapping creatures forever. Under Boom and modern compatibility, they stop while causing damage (similar to Hexen crushers), allowing player to escape.
* down to highest neighbour floor. There are two varieties: a slow one with no lip, and a fast one with lip (similar to the lowering imp platform from Doom 1 E1M1).
* raise by an absolute value. 24, 32 and 512 units are available. Some of them also change texture and type to whatever is in front of the triggering switch (trigger model). NOTE: under Boom and modern compatibility modes, they no longer continue moving into the ceiling.
* raise by shortest lower texture. Uses the height of lower textures of sector's sides. '''WARNING''': this is highly dependent on gameplay compatibility settings. Its definition of "shortest lower texture" may differ. To make sure the setting you want is set, add an [[OPTIONS]] lump to your wad.
* floor transfer with no movement: these merely change texture and type using the trigger model (texture in front of switch) or numeric model (texture around the target sector). Useful to change textures quickly under Doom format maps (it was added in Boom).


This means that the floor moves to the height of the lowest neighboring floor including the floor itself. If the floor direction is up (only possible with generalized floors) motion is instant, else at the floor's speed.
{{backto|Linedef types}}


====Next Neighbor Floor (NnF)====
==Tricks==
* You can have finer control where a floor will move by creating a control sector outside the map, joining it with the tagged sector, and neighbouring it with sectors of desired height, different from whatever is in the main area. However, this has the side effect of shifting the sound origin, unless you make sure to counterbalance it with another control sector on the opposite side, joined as well.
* You can produce instant floor movement by using a "raise to lowest" or "lower to highest" movement type, and setting the neighbour sector in the opposite direction. The floor will have no choice but to instantly adjust to the lowest or highest neighbour's level.


This means that the floor moves up to the height of the lowest adjacent floor greater in height than the current, or down to the height of the highest adjacent floor less in height than the current, as determined by the floor's direction. Instant motion is not possible in this case. If no such floor exists, the floor does not move.
==Notes==
* Under vanilla Doom compatibility mode, any blocked floor may have the side effect of blocking any other nearby sectors. Boom and later have solved this problem.


====Lowest Neighbor Ceiling (LnC)====
==Regular types==


This means that the floor height changes to the height of the lowest ceiling possessed by any neighboring sector, including that floor's ceiling. If the target height is in the opposite direction to floor motion, motion is instant, otherwise at the floor action's speed.
{|class="wikitable sortable"
! #
! Trigger
! Parameterized equivalent
! Notes
|-
|| 60 || SR || [[Floor_LowerToLowest]](tag, 8)||Lowers to lowest neighbour floor.
|-
|| 23 || S1 || [[Floor_LowerToLowest]](tag, 8)||Lowers to lowest neighbour floor.
|-
|| 82 || WR || [[Floor_LowerToLowest]](tag, 8)||Lowers to lowest neighbour floor.
|-
|| 38 || W1 || [[Floor_LowerToLowest]](tag, 8)||Lowers to lowest neighbour floor.
|-
|| 177 || SR || [[Floor_LowerToLowest]](tag, 8, 6)||Change texture & type, numeric model
|-
|| 159 || S1 || [[Floor_LowerToLowest]](tag, 8, 6)||Change texture & type, numeric model
|-
|| 84 || WR || [[Floor_LowerToLowest]](tag, 8, 6)||Change texture & type, numeric model
|-
|| 37 || W1 || [[Floor_LowerToLowest]](tag, 8, 6)||Change texture & type, numeric model
|-
|| 69 || SR || [[Floor_RaiseToNearest]](tag, 8)||Raises to next neighbour floor.
|-
|| 18 || S1 || [[Floor_RaiseToNearest]](tag, 8)||Raises to next neighbour floor.
|-
|| 128 || WR || [[Floor_RaiseToNearest]](tag, 8)||Raises to next neighbour floor.
|-
|| 119 || W1 || [[Floor_RaiseToNearest]](tag, 8)||Raises to next neighbour floor.
|-
|| 132 || SR || [[Floor_RaiseToNearest]](tag, 32)||Raises to next neighbour floor, faster.
|-
|| 131 || S1 || [[Floor_RaiseToNearest]](tag, 32)||Raises to next neighbour floor, faster.
|-
|| 129 || WR || [[Floor_RaiseToNearest]](tag, 32)||Raises to next neighbour floor, faster.
|-
|| 130 || W1 || [[Floor_RaiseToNearest]](tag, 32)||Raises to next neighbour floor, faster.
|-
|| 222 || SR || [[Floor_LowerToNearest]](tag, 8)||Lowers to next neighbour floor.
|-
|| 221 || S1 || [[Floor_LowerToNearest]](tag, 8)||Lowers to next neighbour floor.
|-
|| 220 || WR || [[Floor_LowerToNearest]](tag, 8)||Lowers to next neighbour floor.
|-
|| 219 || W1 || [[Floor_LowerToNearest]](tag, 8)||Lowers to next neighbour floor.
|-
|| 64 || SR || [[Floor_RaiseToLowestCeiling]](tag, 8)||Raises floor to lowest neighbour ceiling.
|-
|| 101 || S1 || [[Floor_RaiseToLowestCeiling]](tag, 8)||Raises floor to lowest neighbour ceiling.
|-
|| 91 || WR || [[Floor_RaiseToLowestCeiling]](tag, 8)||Raises floor to lowest neighbour ceiling.
|-
|| 5 || W1 || [[Floor_RaiseToLowestCeiling]](tag, 8)||Raises floor to lowest neighbour ceiling.
|-
|| 24 || G1 || [[Floor_RaiseToLowestCeiling]](tag, 8)||Raises floor to lowest neighbour ceiling.
|-
|| 65 || SR || [[Floor_RaiseToLowestCeiling]](tag, 8, 0, 10, 8)||Raises floor to 8 units under the lowest neighbour ceiling, crushing things in the way.
|-
|| 55 || S1 || [[Floor_RaiseToLowestCeiling]](tag, 8, 0, 10, 8)||Raises floor to 8 units under the lowest neighbour ceiling, crushing things in the way.
|-
|| 94 || WR || [[Floor_RaiseToLowestCeiling]](tag, 8, 0, 10, 8)||Raises floor to 8 units under the lowest neighbour ceiling, crushing things in the way.
|-
|| 56 || W1 || [[Floor_RaiseToLowestCeiling]](tag, 8, 0, 10, 8)||Raises floor to 8 units under the lowest neighbour ceiling, crushing things in the way.
|-
|| 45 || SR || [[Floor_LowerToHighestEE]](tag, 8)
|-
|| 102 || S1 || [[Floor_LowerToHighestEE]](tag, 8)
|-
|| 83 || WR || [[Floor_LowerToHighestEE]](tag, 8)
|-
|| 19 || W1 || [[Floor_LowerToHighestEE]](tag, 8)
|-
|| 70 || SR || [[Floor_LowerToHighest]](tag, 32, 136)||Faster, lip of 8
|-
|| 71 || S1 || [[Floor_LowerToHighest]](tag, 32, 136)||Faster, lip of 8
|-
|| 98 || WR || [[Floor_LowerToHighest]](tag, 32, 136)||Faster, lip of 8
|-
|| 36 || W1 || [[Floor_LowerToHighest]](tag, 32, 136)||Faster, lip of 8
|-
|| 180 || SR || [[Floor_RaiseByValue]](tag, 8, 24)||Raises by 24 units
|-
|| 161 || S1 || [[Floor_RaiseByValue]](tag, 8, 24)||Raises by 24 units
|-
|| 92 || WR || [[Floor_RaiseByValue]](tag, 8, 24)||Raises by 24 units
|-
|| 58 || W1 || [[Floor_RaiseByValue]](tag, 8, 24)||Raises by 24 units
|-
|| 179 || SR || [[Floor_RaiseByValue]](tag, 8, 24, 5)||Raises by 24 units, change texture & type, trigger model
|-
|| 160 || S1 || [[Floor_RaiseByValue]](tag, 8, 24, 5)||Raises by 24 units, change texture & type, trigger model
|-
|| 93 || WR || [[Floor_RaiseByValue]](tag, 8, 24, 5)||Raises by 24 units, change texture & type, trigger model
|-
|| 59 || W1 || [[Floor_RaiseByValue]](tag, 8, 24, 5)||Raises by 24 units, change texture & type, trigger model
|-
|| 176 || SR || [[Floor_RaiseByTexture]](tag, 8)||Raises by shortest lower texture
|-
|| 158 || S1 || [[Floor_RaiseByTexture]](tag, 8)||Raises by shortest lower texture
|-
|| 96 || WR || [[Floor_RaiseByTexture]](tag, 8)||Raises by shortest lower texture
|-
|| 30 || W1 || [[Floor_RaiseByTexture]](tag, 8)||Raises by shortest lower texture
|-
|| 178 || SR || [[Floor_RaiseByValue]](tag, 8, 512)||Raises by 512 units
|-
|| 140 || S1 || [[Floor_RaiseByValue]](tag, 8, 512)||Raises by 512 units
|-
|| 147 || WR || [[Floor_RaiseByValue]](tag, 8, 512)||Raises by 512 units
|-
|| 142 || W1 || [[Floor_RaiseByValue]](tag, 8, 512)||Raises by 512 units
|-
|| 190 || SR || [[Floor_TransferTrigger]](tag)||Only changes texture & type, no movement
|-
|| 189 || S1 || [[Floor_TransferTrigger]](tag)||Only changes texture & type, no movement
|-
|| 154 || WR || [[Floor_TransferTrigger]](tag)||Only changes texture & type, no movement
|-
|| 153 || W1 || [[Floor_TransferTrigger]](tag)||Only changes texture & type, no movement
|-
|| 78 || SR || [[Floor_TransferNumeric]](tag)||Only changes texture & type, no movement
|-
|| 241 || S1 || [[Floor_TransferNumeric]](tag)||Only changes texture & type, no movement
|-
|| 240 || WR || [[Floor_TransferNumeric]](tag)||Only changes texture & type, no movement
|-
|| 239 || W1 || [[Floor_TransferNumeric]](tag)||Only changes texture & type, no movement
|}
===Donut movement===
Donut movement means that the tagged floor will lower, while its surrounding sector (the 'donut') will rise, all set to match the surrounding area. This effect is used in Doom 1 E1M2 and E2M2.


====8 Under Lowest Neighbor Ceiling (8uLnC)====
The specials are:
{|class="wikitable sortable"
! #
! Trigger
! Parameterized equivalent
|-
|| 191 || SR || [[Floor_Donut]]
|-
|| 9 || S1 || [[Floor_Donut]]
|-
|| 155 || WR || [[Floor_Donut]]
|-
|| 146 || S1 || [[Floor_Donut]]
|}


This means that the floor height changes to 8 less than the height of the lowest ceiling possessed by any neighboring sector, including that floor's ceiling. If the target height is in the opposite direction to floor motion, motion is instant, otherwise at the floor action's speed.
==Generalized types==
Generalized Boom specials for floors start at 24576 (hex 0x6000). Add the following values to setup the special:
* Trigger type: W1 (0), WR (1), S1 (2), SR (3), G1 (4), GR (5), D1 (6), DR (7).
* Speed: slow (0), normal (8), fast (16), turbo (24).
* Change model: trigger (0), model (32).
* Change type: nothing (0), change-zero (1024), change texture (2048), change texture & type (3072).
* Direction: down (0), up (64).
* Target: highest neighbour floor (0), lowest neighbour floor (128), next neighbour floor (256), lowest neighbour ceiling (384), ceiling (512), by shortest texture (640), by 24 (768), by 32 (896).
* Crush: no (0), yes (4096).


====Highest Neighbor Floor (HnF)====
NOTE: you can allow monsters to trigger generalized specials if you set change model to numeric and change type to nothing.


This means that the floor height changes to the height of the highest neighboring floor, excluding the floor itself. If no neighbor floor exists, the floor moves down to -32000. If the target height is in the opposite direction to floor motion, the motion is instant, otherwise it occurs at the floor action's speed.
There's a visual bug however, in that rising platforms of this type, if set to change texture, will change theirs only at the end of the movement, even if logically it makes sense for them to change it at the start (considering they work as platforms getting out of a liquid). This is unlike the regular specials above which change texture on rising. Parameterized specials don't have this problem, unless you opt to use [[Generic_Floor]], which emulates all of Boom generalized specials' quirks.


====8 Above Highest Neighbor Floor (8aHnF)====
==Parameterized Floor Types==
 
See [[Detailed_parameterized_linedef_specification#Floor_movement.2C_earthquake|Parameterized specials]].
This means that the floor height changes to 8 above the height of the highest neighboring floor, excluding the floor itself. If no neighbor floor exists, the floor moves down to -31992. If the target height is in the opposite direction to floor motion, the motion is instant, otherwise it occurs at the floor action's speed.
[[category:Editing reference]]
 
====Ceiling====
 
The floor moves up until its at ceiling height, instantly if floor direction is down (only available with generalized types), at the floor speed if the direction is up.
 
====24 Units (24)====
 
The floor moves 24 units in the floor action's direction. Instant motion is not possible with this linedef type.
 
====32 Units (32)====
 
The floor moves 32 units in the floor action's direction. Instant motion is not possible with this linedef type.
 
====512 Units (512)====
 
The floor moves 512 units in the floor action's direction. Instant motion is not possible with this linedef type.
 
====Shortest Lower Texture (SLT)====
 
The floor moves the height of the shortest lower texture on the boundary of the sector, in the floor direction. Instant motion is not possible with this type. In the case that there is no surrounding texture the motion is to -32000 or +32000 depending on direction.
 
====None====
 
Some pure texture type changes are provided for changing the floor texture and/or sector type without moving the floor.
 
====Up/Down Absolute Param====
Only available to parameterized floor specials, this target moves the floor in its indicated direction by the number of units provided as a special argument.
 
====To Absolute Height====
Only available to parameterized floor specials, this target moves the floor to an exact height which is provided as a parameter. This floor type always moves either up or down to the given height depending on whether it is higher or lower than the floor's current position. This means that instantaneous motion is not possible.
 
=Varieties of floors=
 
A floor can be activated by pushing on a linedef bounding it (generalized types only), or by pushing on a switch with the same tag as the floor sector, or by walking over a linedef with the same tag as the floor, or by shooting a linedef with the same tag as the floor with an impact weapon.
 
A floor can move either Up or Down.
 
A floor can move with speeds of Slow, Normal, Fast, or Turbo. If the target height specified by the floor function (see Floor Targets above) is in the opposite direction to the floor's motion, then travel is instantaneous, otherwise its at the speed specified. Parameterized floor types can move at any speed.
 
A floor action can be a texture change type, in which case after the action the floor texture of the affected floor, and possibly the sector type of the affected floor are changed to those of a model sector. The sector type may be zeroed instead of copied from the model, or not changed at all. These change types are referred to below as Tx (texture only), Tx0 (type zeroed), and TxTy (texture and type changed). The model sector for the change may be the sector on the first sidedef of the trigger (trigger model) or the sector with floor at destination height across the lowest numbered two-sided linedef surrounding the affected sector (numeric model). If no model sector exists, no change occurs. If a change occurs, floor texture is always affected, lighting is never affected, even that corresponding to the sector's type, nor is any other sector property other than the sector's type.
 
Numeric model algorithm:
 
1) Find all floors adjacent to the tagged floor at destination height
 
2) Find the lowest numbered linedef separating those floors from that tagged
 
3) The sector on the other side of that linedef is the model
 
A floor action can have the crush property, in which case players and monsters are crushed when the floor tries to move above the point where they fit exactly underneath the ceiling. This means they take damage until they die, leave the sector, or the floor action is stopped. A floor action never reverses on encountering an obstacle, even if the crush property is not true, the floor merely remains in the same position until the obstacle is removed or dies, then continues.
 
=Floor linedef types=
 
Regular and Extended Floor Types
--------------------------------------------------------------------------------------------------
#     Class  Trig  Dir Spd  Chg  Mdl Mon Crsh  Target                        ExtraData mnemonic
60    Reg    SR    Dn  Slow  None --  No  No    Lowest Neighbor Floor        SR_Floor_DnLnF_Slow
23    Reg    S1    Dn  Slow  None --  No  No    Lowest Neighbor Floor        S1_Floor_DnLnF_Slow
82    Reg    WR    Dn  Slow  None --  No  No    Lowest Neighbor Floor        WR_Floor_DnLnF_Slow
38    Reg    W1    Dn  Slow  None --  No  No    Lowest Neighbor Floor        W1_Floor_DnLnF_Slow
     
177  Ext    SR    Dn  Slow  TxTy Num No  No    Lowest Neighbor Floor        SR_Floor_DnLnF_cSn_Slow
159  Ext    S1    Dn  Slow  TxTy Num No  No    Lowest Neighbor Floor        S1_Floor_DnLnF_cSn_Slow
84    Reg    WR    Dn  Slow  TxTy Num No  No    Lowest Neighbor Floor        WR_Floor_DnLnF_cSn_Slow
37    Reg    W1    Dn  Slow  TxTy Num No  No    Lowest Neighbor Floor        W1_Floor_DnLnF_cSn_Slow
69    Reg    SR    Up  Slow  None --  No  No    Next Neighbor Floor          SR_Floor_UpNnF_Slow
18    Reg    S1    Up  Slow  None --  No  No    Next Neighbor Floor          S1_Floor_UpNnF_Slow
128  Reg    WR    Up  Slow  None --  No  No    Next Neighbor Floor          WR_Floor_UpNnF_Slow
119  Reg    W1    Up  Slow  None --  No  No    Next Neighbor Floor          W1_Floor_UpNnF_Slow
132  Reg    SR    Up  Fast  None --  No  No    Next Neighbor Floor          SR_Floor_UpNnF_Fast
131  Reg    S1    Up  Fast  None --  No  No    Next Neighbor Floor          S1_Floor_UpNnF_Fast
129  Reg    WR    Up  Fast  None --  No  No    Next Neighbor Floor          WR_Floor_UpNnF_Fast
130  Reg    W1    Up  Fast  None --  No  No    Next Neighbor Floor          W1_Floor_UpNnF_Fast
222  Ext    SR    Dn  Slow  None --  No  No    Next Neighbor Floor          SR_Floor_DnNnF_Slow
221  Ext    S1    Dn  Slow  None --  No  No    Next Neighbor Floor          S1_Floor_DnNnF_Slow
220  Ext    WR    Dn  Slow  None --  No  No    Next Neighbor Floor          WR_Floor_DnNnF_Slow
219  Ext    W1    Dn  Slow  None --  No  No    Next Neighbor Floor          W1_Floor_DnNnF_Slow
64    Reg    SR    Up  Slow  None --  No  No    Lowest Neighbor Ceiling      SR_Floor_UpLnC_Slow
101  Reg    S1    Up  Slow  None --  No  No    Lowest Neighbor Ceiling      S1_Floor_UpLnC_Slow
91    Reg    WR    Up  Slow  None --  No  No    Lowest Neighbor Ceiling      WR_Floor_UpLnC_Slow
5    Reg    W1    Up  Slow  None --  No  No    Lowest Neighbor Ceiling      W1_Floor_UpLnC_Slow
24    Reg    G1    Up  Slow  None --  No  No    Lowest Neighbor Ceiling      G1_Floor_UpLnC_Slow
65    Reg    SR    Up  Slow  None --  No  Yes  Lowest Neighbor Ceiling - 8  SR_Floor_UpLnCm8_Slow_Crush
55    Reg    S1    Up  Slow  None --  No  Yes  Lowest Neighbor Ceiling - 8  S1_Floor_UpLnCm8_Slow_Crush
94    Reg    WR    Up  Slow  None --  No  Yes  Lowest Neighbor Ceiling - 8  WR_Floor_UpLnCm8_Slow_Crush
56    Reg    W1    Up  Slow  None --  No  Yes  Lowest Neighbor Ceiling - 8  W1_Floor_UpLnCm8_Slow_Crush
45    Reg    SR    Dn  Slow  None --  No  No    Highest Neighbor Floor        SR_Floor_DnHnF_Slow
102  Reg    S1    Dn  Slow  None --  No  No    Highest Neighbor Floor        S1_Floor_DnHnF_Slow
83    Reg    WR    Dn  Slow  None --  No  No    Highest Neighbor Floor        WR_Floor_DnHnF_Slow
19    Reg    W1    Dn  Slow  None --  No  No    Highest Neighbor Floor        W1_Floor_DnHnF_Slow
70    Reg    SR    Dn  Fast  None --  No  No    Highest Neighbor Floor + 8    SR_Floor_DnHnFp8_Fast
71    Reg    S1    Dn  Fast  None --  No  No    Highest Neighbor Floor + 8    S1_Floor_DnHnFp8_Fast
98    Reg    WR    Dn  Fast  None --  No  No    Highest Neighbor Floor + 8    WR_Floor_DnHnFp8_Fast
36    Reg    W1    Dn  Fast  None --  No  No    Highest Neighbor Floor + 8    W1_Floor_DnHnFp8_Fast
180  Ext    SR    Up  Slow  None --  No  No    Absolute 24                  SR_Floor_Up24_Slow
161  Ext    S1    Up  Slow  None --  No  No    Absolute 24                  S1_Floor_Up24_Slow
92    Reg    WR    Up  Slow  None --  No  No    Absolute 24                  WR_Floor_Up24_Slow
58    Reg    W1    Up  Slow  None --  No  No    Absolute 24                  W1_Floor_Up24_Slow
179  Ext    SR    Up  Slow  TxTy Trg No  No    Absolute 24                  SR_Floor_Up24_cSt_Slow
160  Ext    S1    Up  Slow  TxTy Trg No  No    Absolute 24                  S1_Floor_Up24_cSt_Slow
93    Reg    WR    Up  Slow  TxTy Trg No  No    Absolute 24                  WR_Floor_Up24_cSt_Slow
59    Reg    W1    Up  Slow  TxTy Trg No  No    Absolute 24                  W1_Floor_Up24_cSt_Slow
176  Ext    SR    Up  Slow  None --  No  No    Abs Shortest Lower Texture    SR_Floor_UpsT_Slow
158  Ext    S1    Up  Slow  None --  No  No    Abs Shortest Lower Texture    S1_Floor_UpsT_Slow
96    Reg    WR    Up  Slow  None --  No  No    Abs Shortest Lower Texture    WR_Floor_UpsT_Slow
30    Reg    W1    Up  Slow  None --  No  No    Abs Shortest Lower Texture    W1_Floor_UpsT_Slow
178  Ext    SR    Up  Slow  None --  No  No    Absolute 512                  SR_Floor_Up512_Slow
140  Reg    S1    Up  Slow  None --  No  No    Absolute 512                  S1_Floor_Up512_Slow
147  Ext    WR    Up  Slow  None --  No  No    Absolute 512                  WR_Floor_Up512_Slow
142  Ext    W1    Up  Slow  None --  No  No    Absolute 512                  W1_Floor_Up512_Slow
190  Ext    SR    --  ----  TxTy Trg No  No    None                          SR_Floor_cSt
189  Ext    S1    --  ----  TxTy Trg No  No    None                          S1_Floor_cSt
154  Ext    WR    --  ----  TxTy Trg No  No    None                          WR_Floor_cSt
153  Ext    W1    --  ----  TxTy Trg No  No    None                          W1_Floor_cSt
78    Ext    SR    --  ----  TxTy Num No  No    None                          SR_Floor_cSn
241  Ext    S1    --  ----  TxTy Num No  No    None                          S1_Floor_cSn
240  Ext    WR    --  ----  TxTy Num No  No    None                          WR_Floor_cSn
239  Ext    W1    --  ----  TxTy Num No  No    None                          W1_Floor_cSn
The following tables show the possibilities for generalized floor linedef type parameters. Any combination of parameters is allowed:
 
Slow and Fast represent the same speeds as slow and fast regular floors. Normal is twice as fast as slow, Fast is twice normal, Turbo is twice Fast.
 
Generalized Floor Types
---------------------------------------------------------------------------
#      Class  Trig  Dir Spd  *Chg *Mdl Mon Crsh  Target
6000H- Gen    D1/DR  Up  Slow  None Trg Yes Yes  Lowest Neighbor Floor
7FFFH          S1/SR  Dn  Normal Tx  Num No  No    Next Neighbor Floor
                W1/WR      Fast  Tx0                Lowest Neighbor Ceiling
                G1/GR      Turbo  TxTy              Highest Neighbor Floor
                                                    Ceiling
                                                    24
                                                    32
*Mon(ster) enabled must be No if                    Shortest Lower Texture
Chg field is not None
Tx = Texture copied only          Trg = Trigger Model
Tx0 = Texture copied and Type->0  Num = Numeric Model
TxTy = Texture and Type copied
=Parameterized Floor Types=
*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'')
*313 '''Floor_LowerToLowestCeiling'''(''tag'', ''speed'', ''change'')
*314 '''Floor_RaiseToCeiling'''(''tag'', ''speed'', ''change'', ''crush'')
*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'')
:''tag'': Tag of sector whose floor to move. Use zero if the intended sector is behind the activating linedef, if applicable.
:''speed'': Speed in eights of units per tic. Doom's usual floors are equivalent to 8, others to 32. Note that some of Doom's drawbridges use the speed of 4.
:''height'': How many vertical map units to move the floor, if the parameterized special allows it.
:''change'': Set up whether to change the texture and/or type and how:
:*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'': If greater than zero, amount of damage to inflict at each four tics on obstructing shootable objects.
 
----
 
''Back to [[Linedef types]]''

Latest revision as of 02:46, 30 October 2021

Classic floor movement specials move sector floors using the "stnmov" sound effect, ending with "pstop". Typically when blocked they stop, except for a few of them which can crush (the best known example of such a crusher is the rising trap from Doom 1 E2M4).

Their movement is defined to one of the following targets:

  • down to lowest neighbour floor. Some of them can change their texture and damage behaviour to their surrounding area (the so-called numeric model), typical of platforms sinking into acid.
  • up/down to next neighbour floor. These can be used progressively until they get to the highest/lowest floor.
  • up to lowest neighbour ceiling. Some crush, some don't. The ones which crush also leave an 8-unit gap. NOTE: under vanilla compatibility, they keep moving, potentially trapping creatures forever. Under Boom and modern compatibility, they stop while causing damage (similar to Hexen crushers), allowing player to escape.
  • down to highest neighbour floor. There are two varieties: a slow one with no lip, and a fast one with lip (similar to the lowering imp platform from Doom 1 E1M1).
  • raise by an absolute value. 24, 32 and 512 units are available. Some of them also change texture and type to whatever is in front of the triggering switch (trigger model). NOTE: under Boom and modern compatibility modes, they no longer continue moving into the ceiling.
  • raise by shortest lower texture. Uses the height of lower textures of sector's sides. WARNING: this is highly dependent on gameplay compatibility settings. Its definition of "shortest lower texture" may differ. To make sure the setting you want is set, add an OPTIONS lump to your wad.
  • floor transfer with no movement: these merely change texture and type using the trigger model (texture in front of switch) or numeric model (texture around the target sector). Useful to change textures quickly under Doom format maps (it was added in Boom).
Back to Linedef types

Tricks[edit]

  • You can have finer control where a floor will move by creating a control sector outside the map, joining it with the tagged sector, and neighbouring it with sectors of desired height, different from whatever is in the main area. However, this has the side effect of shifting the sound origin, unless you make sure to counterbalance it with another control sector on the opposite side, joined as well.
  • You can produce instant floor movement by using a "raise to lowest" or "lower to highest" movement type, and setting the neighbour sector in the opposite direction. The floor will have no choice but to instantly adjust to the lowest or highest neighbour's level.

Notes[edit]

  • Under vanilla Doom compatibility mode, any blocked floor may have the side effect of blocking any other nearby sectors. Boom and later have solved this problem.

Regular types[edit]

# Trigger Parameterized equivalent Notes
60 SR Floor_LowerToLowest(tag, 8) Lowers to lowest neighbour floor.
23 S1 Floor_LowerToLowest(tag, 8) Lowers to lowest neighbour floor.
82 WR Floor_LowerToLowest(tag, 8) Lowers to lowest neighbour floor.
38 W1 Floor_LowerToLowest(tag, 8) Lowers to lowest neighbour floor.
177 SR Floor_LowerToLowest(tag, 8, 6) Change texture & type, numeric model
159 S1 Floor_LowerToLowest(tag, 8, 6) Change texture & type, numeric model
84 WR Floor_LowerToLowest(tag, 8, 6) Change texture & type, numeric model
37 W1 Floor_LowerToLowest(tag, 8, 6) Change texture & type, numeric model
69 SR Floor_RaiseToNearest(tag, 8) Raises to next neighbour floor.
18 S1 Floor_RaiseToNearest(tag, 8) Raises to next neighbour floor.
128 WR Floor_RaiseToNearest(tag, 8) Raises to next neighbour floor.
119 W1 Floor_RaiseToNearest(tag, 8) Raises to next neighbour floor.
132 SR Floor_RaiseToNearest(tag, 32) Raises to next neighbour floor, faster.
131 S1 Floor_RaiseToNearest(tag, 32) Raises to next neighbour floor, faster.
129 WR Floor_RaiseToNearest(tag, 32) Raises to next neighbour floor, faster.
130 W1 Floor_RaiseToNearest(tag, 32) Raises to next neighbour floor, faster.
222 SR Floor_LowerToNearest(tag, 8) Lowers to next neighbour floor.
221 S1 Floor_LowerToNearest(tag, 8) Lowers to next neighbour floor.
220 WR Floor_LowerToNearest(tag, 8) Lowers to next neighbour floor.
219 W1 Floor_LowerToNearest(tag, 8) Lowers to next neighbour floor.
64 SR Floor_RaiseToLowestCeiling(tag, 8) Raises floor to lowest neighbour ceiling.
101 S1 Floor_RaiseToLowestCeiling(tag, 8) Raises floor to lowest neighbour ceiling.
91 WR Floor_RaiseToLowestCeiling(tag, 8) Raises floor to lowest neighbour ceiling.
5 W1 Floor_RaiseToLowestCeiling(tag, 8) Raises floor to lowest neighbour ceiling.
24 G1 Floor_RaiseToLowestCeiling(tag, 8) Raises floor to lowest neighbour ceiling.
65 SR Floor_RaiseToLowestCeiling(tag, 8, 0, 10, 8) Raises floor to 8 units under the lowest neighbour ceiling, crushing things in the way.
55 S1 Floor_RaiseToLowestCeiling(tag, 8, 0, 10, 8) Raises floor to 8 units under the lowest neighbour ceiling, crushing things in the way.
94 WR Floor_RaiseToLowestCeiling(tag, 8, 0, 10, 8) Raises floor to 8 units under the lowest neighbour ceiling, crushing things in the way.
56 W1 Floor_RaiseToLowestCeiling(tag, 8, 0, 10, 8) Raises floor to 8 units under the lowest neighbour ceiling, crushing things in the way.
45 SR Floor_LowerToHighestEE(tag, 8)
102 S1 Floor_LowerToHighestEE(tag, 8)
83 WR Floor_LowerToHighestEE(tag, 8)
19 W1 Floor_LowerToHighestEE(tag, 8)
70 SR Floor_LowerToHighest(tag, 32, 136) Faster, lip of 8
71 S1 Floor_LowerToHighest(tag, 32, 136) Faster, lip of 8
98 WR Floor_LowerToHighest(tag, 32, 136) Faster, lip of 8
36 W1 Floor_LowerToHighest(tag, 32, 136) Faster, lip of 8
180 SR Floor_RaiseByValue(tag, 8, 24) Raises by 24 units
161 S1 Floor_RaiseByValue(tag, 8, 24) Raises by 24 units
92 WR Floor_RaiseByValue(tag, 8, 24) Raises by 24 units
58 W1 Floor_RaiseByValue(tag, 8, 24) Raises by 24 units
179 SR Floor_RaiseByValue(tag, 8, 24, 5) Raises by 24 units, change texture & type, trigger model
160 S1 Floor_RaiseByValue(tag, 8, 24, 5) Raises by 24 units, change texture & type, trigger model
93 WR Floor_RaiseByValue(tag, 8, 24, 5) Raises by 24 units, change texture & type, trigger model
59 W1 Floor_RaiseByValue(tag, 8, 24, 5) Raises by 24 units, change texture & type, trigger model
176 SR Floor_RaiseByTexture(tag, 8) Raises by shortest lower texture
158 S1 Floor_RaiseByTexture(tag, 8) Raises by shortest lower texture
96 WR Floor_RaiseByTexture(tag, 8) Raises by shortest lower texture
30 W1 Floor_RaiseByTexture(tag, 8) Raises by shortest lower texture
178 SR Floor_RaiseByValue(tag, 8, 512) Raises by 512 units
140 S1 Floor_RaiseByValue(tag, 8, 512) Raises by 512 units
147 WR Floor_RaiseByValue(tag, 8, 512) Raises by 512 units
142 W1 Floor_RaiseByValue(tag, 8, 512) Raises by 512 units
190 SR Floor_TransferTrigger(tag) Only changes texture & type, no movement
189 S1 Floor_TransferTrigger(tag) Only changes texture & type, no movement
154 WR Floor_TransferTrigger(tag) Only changes texture & type, no movement
153 W1 Floor_TransferTrigger(tag) Only changes texture & type, no movement
78 SR Floor_TransferNumeric(tag) Only changes texture & type, no movement
241 S1 Floor_TransferNumeric(tag) Only changes texture & type, no movement
240 WR Floor_TransferNumeric(tag) Only changes texture & type, no movement
239 W1 Floor_TransferNumeric(tag) Only changes texture & type, no movement

Donut movement[edit]

Donut movement means that the tagged floor will lower, while its surrounding sector (the 'donut') will rise, all set to match the surrounding area. This effect is used in Doom 1 E1M2 and E2M2.

The specials are:

# Trigger Parameterized equivalent
191 SR Floor_Donut
9 S1 Floor_Donut
155 WR Floor_Donut
146 S1 Floor_Donut

Generalized types[edit]

Generalized Boom specials for floors start at 24576 (hex 0x6000). Add the following values to setup the special:

  • Trigger type: W1 (0), WR (1), S1 (2), SR (3), G1 (4), GR (5), D1 (6), DR (7).
  • Speed: slow (0), normal (8), fast (16), turbo (24).
  • Change model: trigger (0), model (32).
  • Change type: nothing (0), change-zero (1024), change texture (2048), change texture & type (3072).
  • Direction: down (0), up (64).
  • Target: highest neighbour floor (0), lowest neighbour floor (128), next neighbour floor (256), lowest neighbour ceiling (384), ceiling (512), by shortest texture (640), by 24 (768), by 32 (896).
  • Crush: no (0), yes (4096).

NOTE: you can allow monsters to trigger generalized specials if you set change model to numeric and change type to nothing.

There's a visual bug however, in that rising platforms of this type, if set to change texture, will change theirs only at the end of the movement, even if logically it makes sense for them to change it at the start (considering they work as platforms getting out of a liquid). This is unlike the regular specials above which change texture on rising. Parameterized specials don't have this problem, unless you opt to use Generic_Floor, which emulates all of Boom generalized specials' quirks.

Parameterized Floor Types[edit]

See Parameterized specials.