ZDoom Line Specials

209:Transfer_Heights

Name

Transfer_Heights - create deep floors/ceilings or invisible floors/ceilings.

Synopsis

Transfer_Heights (tag, flags);
Transfer_Heights (
  tag,            // Tag of sector(s) to change the visible floor or ceiling height in
  flags           // Flags affecting the height transfer
);

Parameters

tag
This is the tag of the real sector or sectors to create the fake floor and/or ceiling in. When viewed normally, the real sector will display the control sector's floor and ceiling instead of its own. See the Remarks section for more details.
flags
These flags control the behavior of the effect created by this special. To use more than one flag at once, add their values together. For instance, if you want to use flags 2, 4, and 8 to create swimmable water, you should use the value 14 for the flags parameter. If you use ZETH, you don't need to worry about adding these values and can set each flag individually.
ValueMeaning
1 This value was used in ZDoom 1.22 but is now ignored because it didn't work as intended, so don't use it.
2 Only a fake floor is created. The real sector's ceiling is left untouched.
4 The fake floor is only drawn if it is above the real sector's real floor. Likewise, the fake ceiling is drawn only if it is above the real sector's real ceiling. This flag also alters the way floor and ceiling textures are applied: The control sector's floor texture will be drawn on the top and bottom of the fake floor and its ceiling texture will be drawn on the top and bottom of the fake ceiling. The real sector's floor texture will be used on the real floor, and its ceiling texture will be used on the real ceiling.
8 The area between the fake floor and the real floor is considered to be underwater. This is the same as if you had placed a WaterZone thing inside the control sector.
16 The fake floor and ceiling are not drawn at all. However, they can still trigger their related specials (such as the "Eyes Go Below Fake Floor" thing).
32 The control sector's lighting is not used in the area below the real sector's fake floor or above its fake ceiling.

ACS

Because Transfer_Heights requires a line to determine the control sector, you must place it on a line. It cannot be used in a script. Additionally, you cannot use ACS functions to place this special on a line or remove it from a line after the map has started.

Remarks

This is the famous BOOM 242 linedef. It is used to divide a sector into upper, lower, and middle regions. The drawn heights of the tagged sector's floor and ceiling come from the heights of the sector on the line's front side. The line's texture names can be used to specify a specify a special color map or palette blend to be used in those ranges. Palette blends are of the form "AARRGGBB". You can use the testblend command to find a good blend from inside the game.

The following description is taken from boomref.txt:

This allows the tagged sector to have two levels - an actual floor and ceiling, and another floor or ceiling where more flats are rendered. Things will stand on the actual floor or hang from the actual ceiling, while this function provides another rendered floor and ceiling at the heights of the sector on the first sidedef of the linedef. Typical use is "deep water" that can be over the player's head.

  Real sector's ceiling height
Control sector's ceiling texture
Real Ceiling
A

Control sector's light level

Upper texture as colormap or palette blend


  Control sector's floor texture
Control sector's ceiling height
Real sector's ceiling texture
Fake Ceiling
B

Real sector's light level

Normal texture as colormap or palette blend


Fake Floor Real sector's floor texture
Control sector's floor height
Control sector's ceiling texture
 
C

Control sector's light level

Lower texture as colormap or palette blend


Real Floor Control sector's floor texture
Real sector's floor height
 

Boom sectors controlled by a 242 linedef are partitioned into 3 spaces. The viewer's xyz coordinates uniquely determine which space they are in.

If they are in space B (normal space), then the floor and ceiling textures and lightlevel from the real sector are used, and the colormap from the 242 linedef's first sidedef's normal texture is used (COLORMAP is used if it's invalid or missing). The floor and ceiling are rendered at the control sector's heights.

If they are in space C ("underwater"), then the floor and ceiling textures and lightlevel from the control sector are used, and the lower texture in the 242 linedef's first sidedef is used as the colormap.

If they are in space A ("head over ceiling"), then the floor and ceiling textures and lightlevel from the control sector are used, and the upper texture in the 242 linedef's first sidedef is used as the colormap.

If only two of these adjacent partitions in z-space are used, such as underwater and normal space, one has complete control over floor textures, ceiling textures, light level, and colormaps, in each of the two partitions. The control sector determines the textures and lighting in the more "unusual" case (e.g. underwater).

It's also possible for the fake floor to extend below the real floor, in which case an invisible platform / stair effect is created. In that case, the picture looks like this (barring any ceiling effects too):
  Real sector's ceiling texture
Real Ceiling = Fake Ceiling
B

Real sector's light level

Normal texture as colormap or palette blend


Real Floor Real sector's floor height
Invisible, no texture drawn
 
C

Real sector's light level

Normal texture as colormap or palette blend


Fake Floor Real sector's floor texture
Control sector's floor height
 

In this case, since the viewer is always at or above the fake floor—no colormap/lighting/texture changes occur—the fake floor just gets drawn at the control sector's height, but at the real sector's lighting and texture, while objects stand on the higher height of the real floor.

It's the viewer's position relative to the fake floor and/or fake ceiling which determines whether the control sector's lighting and textures should be used, and which colormap should be used. If the viewer is always between the fake floor and fake ceiling, then no colormap, lighting, or texture changes occur, and the view just sees the real sector's textures and light level drawn at possibly different heights.

If the viewer is below the fake floor height set by the control sector, or is above the fake ceiling height set by the control sector, then the corresponding colormap is used (lower or upper texture name), and the textures and lighting are taken from the control sector rather than the real sector. They are still stacked vertically in standard order - the control sector's ceiling is always drawn above the viewer, and the control sector's floor is always drawn below the viewer.

The kaleidescope effect only occurs when F_SKY1 is used as the control sector's floor or ceiling. If F_SKY1 is used as the control sector's ceiling texture, then under water, only the control sector's floor appears, but it "envelops" the viewer. Similarly, if F_SKY1 is used as the control sector's floor texture, then when the player's head is over a fake ceiling, the control sector's ceiling is used throughout.

F_SKY1 causes HOM when used as a fake ceiling between the viewer and normal space. Since there is no other good use for it, this kaleidescope is an option turned on by F_SKY1. Note that this does not preclude the use of sky REAL ceilings over deep water - this is the control sector's ceiling, the one displayed when the viewer is underwater, not the real one.

A colormap has the same size and format as Doom's COLORMAP. Extra colormaps may defined in Boom by adding them between C_START and C_END markers in wads. Colormaps between C_START and C_END are automatically merged by Boom with any previously defined colormaps.

...

Ceiling bleeding may occur if required upper textures are not used.

As a special ZDoom extension, if you can see the underside of a fake floor through a window, the area beneath the fake floor will always be drawn whether your eyes are above the fake floor or not. For this effect to work properly, you must make sure that you cannot see the top side of any fake floors at the same time as the window.

If you just want to make deep water, it might be easier to use flags 2 (fake floor only) and 4 (clip fake floor) than to use the default BOOM behavior of this effect. This will let you raise and lower the control sector's floor to make the water appear to rise or fall. If the water level is below the real sector's floor, then the water is not drawn at all. The diagrams from the BOOM reference change to the following.

When the control sector's floor is above the real sector's floor, the sector is drawn like this:

  Real sector's ceiling height
Real sector's ceiling texture
Real Ceiling
B

Real sector's light level

Normal texture as colormap or palette blend


Fake Floor Control sector's floor texture
Control sector's floor height
Control sector's floor texture
 
C

Control sector's light level

Lower texture as colormap or palette blend


Real Floor Real sector's floor texture
Real sector's floor height
 

When the control sector's floor is below the real sector's floor, the sector is drawn like this:

  Real sector's ceiling height
Real sector's ceiling texture
Real Ceiling
B

Real sector's light level

Normal texture as colormap or palette blend


Real Floor Real sector's floor texture
Real sector's floor height
 
C


The area beneath the real floor is not drawn at all



Fake Floor

First Available In

ZDoom 1.16
All of the existing flags were added for ZDoom 1.23 beta 29

See Also