A linguortal is a non-euclidean, portal-like effect that works in vanilla Doom. The effect is achieved by manually editing the NODES lump of a map. It was discovered in August 2015 by Andrew "Linguica" Stine, and named by him. As this is an effect achieved through a modified BSP tree, this effect may not work on all source ports, with Chocolate Doom, Mocha Doom, and Boom being notable exceptions.
The first documented linguortal was on a Doomworld Forums thread titled "Stupid BSP Tricks". Several examples were shown of effects possible by manually editing the NODES lump, including passageways that shut when the player is close to them, structures that disappear at certain angles, and manual SEGS editing to achieve a "fake wall" effect.
- Because this is a trick involving BSP structures, things may not be displayed properly through a linguortal. However, it is suggested that midtextures could be used to simulate decorations.
- On some source ports that use the original BSP, textures may be warped.
- As linguortals require a modified BSP, certain source ports that rebuild the BSP will not display the setup. Additionally, source ports that use GLNODES will not display the effect. It is not yet known if GLNODES can be modified to display the effect.
How it works
Linguortals are created by re-routing the path the BSP tree takes on a split, and repositioning the SEG rendering locations to be within the player's view. It is possible to create a linguortal setup by drawing a viewpoint sector into a wall, usually a box, and a symmetrical triangle sector, where the widest side touches the box. When the nodes are built, the triangle becomes its own subsector. With this in mind, the BSP tree is modified to "jump" from the original node attached to the triangle subsector to another node entirely. As Doom as no idea of the modification, it will jump to the contents of the substituted node.
However, a linguortal will not render unless the SEGS in the substituted node's viewpoint are moved in front of the viewpoint line. To accomplish this, additional vertices must be placed within the same relative distance as the separate area, with SEGS attached to these vertices. As of this writing, this must be performed manually in a hex editor.