Linedef type 259

From SRB2 Wiki
Jump to navigation Jump to search
Note
The FF_ flags have been deprecated (though they're still supported) and now have their FOF_ equivalent.

They are essentially identical, but FOF_SHATTERBOTTOM, FOF_INTANGABLEFLATS, FOF_SHATTER, FOF_SPINBUST and FOF_STRONGBUST do not exist, and FOF_BOUNCY and FOF_SPLAT have been added.

An example of using custom FOF – invisible shatter block.

Linedef type 259, Custom FOF, is a special type of floor over floor block which can be configured to have any combination of the properties possessed by other types of FOFs, e.g., whether it casts a shadow, whether it crumbles, and so on. This is useful in circumstances where none of the other FOF linedef types have the specific combination of properties required in a given situation.

Setup

To use this effect, create a control sector outside of your map, set one of its linedefs to have linedef type 259, and tag it to the desired target sector(s) within the map. The control linedef must be double-sided, so you should also create another sector which shares the control linedef with the control sector.

The flats (if the flags are set to render floor and ceiling), floor height, and ceiling height of the FOF are determined by the flats, floor height, and ceiling height of the control sector, and the sidedefs of the FOF's walls (if the flags are set to render sides) are determined by the sidedef of the control linedef.

The light level of the control sector will determine the brightness of the shadow cast by the FOF (if the flags are set to cast a shadow). If the light level of the control sector is lower than that of the target sector, then it will cast a dark shadow. If the light level of the control sector is higher than that of the target sector, then the FOF will illuminate the area below it. If the light level of the control sector is equal to that of the target sector, then the FOF will not affect the light of the area below it.

The properties of FOFs created with this linedef type are specified by the value of the control linedef's upper texture on its back sidedef. Rather than specifying an actual texture, the value is a combination of one or more of the following flags:

Note: Flags like FF_SHATTER, FF_SHATTERBOTTOM, FF_SPINBUST, FF_STRONGBUST have been deprecated since the introduction of 2.2.11, we recommend you to use busttype instead. Also FF_INTANGABLEFLATS have been deprecated since the introduction of SRB2 2.2.11, we recommend to use FOF_INTANGIBLEFLATS instead.

Flag name Value (Hex) Description
FOF_EXISTS 0x1 The FOF exists. Without this flag, the FOF will not appear in-game at all – it will not be visible or tangible, and any special effects associated with it will not appear either. The flag can be added or removed at runtime via linedef type 445, which can be used to make FOFs appear or disappear dynamically. Every FOF should have this flag, unless it is not meant to appear immediately at level load because it will later be brought into existence at runtime.
FOF_BLOCKPLAYER 0x2 The FOF is solid to the player.
FOF_BLOCKOTHERS 0x4 The FOF is solid to the camera and all Objects besides the player.
FOF_SOLID 0x6 (FOF_BLOCKPLAYER + FOF_BLOCKOTHERS) The FOF is solid to the player, all other Objects and the camera. Setting Flag [5] / Slope Skew / Effect 1 on the control linedef will remove FOF_BLOCKOTHERS, while setting Flag [7] / No Midtexture Skew / Effect 2 will remove FOF_BLOCKPLAYER.
FOF_RENDERSIDES 0x8 The FOF's walls are rendered.
FOF_RENDERPLANES 0x10 The FOF's floor and ceiling are rendered.
FOF_RENDERALL 0x18 (FOF_RENDERSIDES + FOF_RENDERPLANES) The FOF's walls, floor, and ceiling are all rendered.
FOF_SWIMMABLE 0x20 The FOF is a water block.
FOF_NOSHADE 0x40 The FOF does not cast a shadow. Normally, the light level and colormap of the control sector affect the inside of the FOF and the area below it in the target sector. This flag disables that behavior.
FOF_CUTSOLIDS 0x80 Any "solid" walls that are directly adjacent to the FOF will not be drawn. A wall is considered "solid" for this purpose if it belongs to the upper or lower texture of a two-sided linedef, the middle texture of a two-sided linedef, or an FOF without FOF_EXTRA. Middle textures of two-sided linedefs and PolyObject walls are not considered "solid".
FOF_CUTEXTRA 0x100 Any walls belonging to an FOF with FOF_EXTRA that are directly adjacent to this FOF will not be drawn. If this FOF also has FOF_EXTRA, the following extra conditions apply: If one of the two FOFs has FOF_SWIMMABLE, the other must also have it in order for the walls to be cut. Similarly, if one has FOF_FOG, the other must also have it. This flag is commonly used to remove walls between adjacent fog or water FOFs.
FOF_CUTLEVEL 0x180 (FOF_CUTSOLIDS + FOF_CUTEXTRA) Any walls that are directly adjacent to the FOF will not be drawn. Middle textures of two-sided linedefs and PolyObject walls are exempt from this. This flag should be set if the adjacent walls will never be visible anyway, to reduce the rendering effort. This is usually the case if the FOF is opaque and solid.
FOF_CUTSPRITES 0x200 If a sprite is only partially inside the area illuminated by the FOF, the sprite is split vertically so that the light level and colormap are only applied to the affected part. This should generally be set for intangible or water FOFs that cast a shadow.
FOF_BOTHPLANES 0x400 Both the inner and outer sides of the FOF's floor and ceiling are rendered. Without this flag, only the outer sides are rendered.
FOF_EXTRA 0x800 The FOF can be obscured by other FOFs with the FOF_CUTEXTRA flag set.
FOF_TRANSLUCENT 0x1000 The FOF is translucent. Its alpha value is set in the front upper texture as a value between #000 (invisible) and #255 (opaque). If this value is omitted, it defaults to #128.
FOF_FOG 0x2000 The FOF acts like a fog block.
FOF_INVERTPLANES 0x4000 Only the inner sides of the FOF's floor and ceiling are rendered.
FOF_ALLSIDES 0x8000 Both the inner and outer sides of the FOF's walls are rendered. Without this flag, only the outer sides are rendered.
FOF_INVERTSIDES 0x10000 Only the inner sides of the FOF's walls are rendered.
FOF_DOUBLESHADOW 0x20000 The light level and colormap of the FOF's control sector only affect the inside of the FOF, but not the area below it.
FOF_FLOATBOB 0x40000 The FOF floats on water and bobs when stepped on.
FOF_NORETURN 0x80000 Used with FOF_CRUMBLE to prevent the FOF from reappearing in its original location once it has crumbled.
FOF_CRUMBLE 0x100000 The FOF will fall one second after being stepped on. Unless FOF_NORETURN is set, it will reappear in its original location after 15 seconds.
FOF_GOOWATER 0x200000 If combined with FOF_SWIMMABLE, the FOF acts like goo water.
FOF_MARIO 0x400000 The FOF behaves like a Mario item block.
FOF_BUSTUP 0x800000 The FOF behaves like a bustable block. It will shatter when touched in specific ways, such as being spindashed into from the side, being touched by Knuckles, being bounced on by Fang, or being hit by Amy's hammer. Flag [9] / Solid Midtexture / Effect 4 allows the FOF to be shattered by a pushable Object. Flag [10] / Repeat Midtexture / Effect 5 makes the FOF activate a linedef executor when it is shattered, using the control linedef's length to determine the tag of the linedef executor to activate.
FOF_QUICKSAND 0x1000000 The FOF behaves like a quicksand block. The player's sinking speed and movement reduction are determined by the linedef's X distance and Y distance, respectively.
FOF_PLATFORM 0x2000000 The FOF is intangible from below.
FOF_REVERSEPLATFORM 0x4000000 The FOF is intangible from above.
FOF_INTANGIBLEFLATS 0x6000000 (FOF_PLATFORM + FOF_REVERSEPLATFORM) The FOF's floor and ceiling are intangible, but its walls are still solid (provided that FOF_SOLID is set).
FOF_RIPPLE 0x8000000 The FOF's floor and ceiling will have a "ripple" effect, distorting both their flats and – if visible – the view displayed behind them. Note that this visual effect is exclusive to the Software renderer; this flag does nothing in OpenGL.
FOF_COLORMAPONLY 0x10000000 The inside of the FOF and the area below it in the target sector are affected by the colormap of the FOF's control sector, but not the light level.
FOF_BOUNCY 0x20000000 The FOF bounces any players upon contact.
FOF_SPLAT 0x40000000 The FOF uses the splat flat renderer, meaning it will treat any cyan pixels on it's texture as transparent.

In most (but not all) cases, a typical custom FOF should at least have FOF_EXISTS, FOF_RENDERALL, and FOF_CUTLEVEL.

The flags can be combined by performing a bitwise OR operation. The Windows Calculator applet can do this in its "programmer" mode (or "scientific" mode, for Windows XP and older). For example, to calculate the value required to set the FOF_EXISTS and FOF_FOG flags, switch into hexadecimal mode using the radio buttons at the top-left, enter 1, click Or, enter 2000 and click =. The result in this case will be 2001.

Sample

Example file: ex_ld259_customfof.wad (MAP01) 
  • This sample contains multiple custom FOFs, each of which demonstrates unique combinations of properties that cannot be achieved with standard FOFs.
  • The leftmost FOF is a quicksand water FOF.
  • The second FOF from the left is a spin-bustable Mario block that is intangible from above.
  • The third FOF from the left is invisible and tangible from the sides, but only for the player. Note that the fences are middle textures added to the target sector; they are not part of the FOF.
  • The rightmost FOF is an invisible shatter block.
How to use
  • You may load this file into your favorite map editor, such as Zone Builder. Select MAP01 as the map to load.
  • You may also load this file in the game:
    1. Save ex_ld259_customfof.wad into the addons folder of your SRB2 directory.
    2. Start SRB2, go to the Addons menu, and then select ex_ld259_customfof.wad.
    3. Start the game in Single Player mode.
    4. Press the Console button (~), and type in the command MAP MAP01 to access the example map.
  • When you load this file in the game, it replaces Greenflower Zone Act 1.
  Linedef typesFloor over floor [view]
Solid:
Solid, Opaque, ShadowcastingSolid, Opaque, Non-ShadowcastingSolid, TranslucentSolid, Sides OnlySolid, No SidesSolid, InvisibleIntangible from Bottom, OpaqueIntangible from Bottom, TranslucentIntangible from Bottom, Translucent, No SidesIntangible from Top, OpaqueIntangible from Top, TranslucentIntangible from Top, Translucent, No SidesOnly Tangible from Sides
Intangible:
Water, OpaqueWater, TranslucentWater, Opaque, No SidesWater, Translucent, No SidesGoo Water, TranslucentGoo Water, Translucent, No SidesIntangible, OpaqueIntangible, TranslucentIntangible, Sides OnlyIntangible, Invisible
Moving:
Air BobbingAir Bobbing (Adjustable)Reverse Air Bobbing (Adjustable)Dynamically Sinking PlatformWater BobbingRising Platform, Solid, Opaque, ShadowcastingRising Platform, Solid, Opaque, Non-ShadowcastingRising Platform, Solid, TranslucentRising Platform, Solid, InvisibleRising Platform, Intangible from Bottom, OpaqueRising Platform, Intangible from Bottom, Translucent
Crumbling:
Crumbling, RespawnCrumbling, No RespawnCrumbling, Respawn, Intangible from BottomCrumbling, No Respawn, Intangible from BottomCrumbling, Respawn, Intangible from Bottom, TranslucentCrumbling, No Respawn, Intangible from Bottom, TranslucentCrumbling, Respawn, Floating, BobbingCrumbling, No Respawn, Floating, BobbingCrumbling, Respawn, FloatingCrumbling, No Respawn, FloatingCrumbling, Respawn, Air Bobbing
Special:
Light BlockHalf Light BlockFog BlockMario BlockThwomp BlockShatter BlockShatter Block, TranslucentBustable BlockSpin-Bustable BlockSpin-Bustable Block, TranslucentQuicksandLaserCustom FOF