Sidedef

A sidedef contains the wall texture data for each linedef (though sidedefs do not reference linedefs directly, indeed it is the other way around). Each sidedef contains texture data, offsets for the textures and the number of the sector it references (this is how sectors get their 'shape').

Upper texture - This contains the name of a texture that will be displayed on the border between a sector and its neighboring ceiling of a different height. If the linedef that contains this sidedef is one sided this field is meaningless.

Middle texture - On one sided linedefs this will be the only texture displayed; as the main wall texture. On two sided linedefs this will be displayed as a 'floating' texture which the player is able to walk through. Middle floating textures can be used to achieve a variety of faux 3D effects such as 3D bridges. Note that middle floating textures will only tile horizontally and not vertically, where they only repeat once.

Lower texture - This performs a similar function to the upper texture; the lower texture is displayed on the border between a sector and its neighboring floor of a different height.

x offset - How many pixels to shift all the sidedef textures on the X axis (right or left).

y offset - How many pixels to shift all the sidedef textures on the Y axis (up or down).

Regardless of the texture used on a sidedef, each sidedef will still take up the same amount of space since textures are referred to by name (in Doomstring format).

Sidedef Structure
Each Sidedef is 30 bytes large. Sidedefs are stored in WAD files in the following format:

Sidedefs are exactly the same in ZDoom/Hexen format as they are in the original Doom format.

Sidedef compression
Linedefs reference two sidedefs: one for the left side, and one for the right side, by their order into the SIDEDEFS lump. Naive map authoring tools will generate a unique sidedef for every linedef side in the game (so one per one-sided linedef, two per two-sided).

Wad compression tools can reduce the number of sidedef entries by making multiple linedefs reference the same sidedef, when the linedefs have the same texture, offsets, and sector.

The index used by the linedef entry is an unsigned 16-bit integer, which restricts the number of sidedefs that can occur to 65535 (sidedefs 0–65534) per level. The value "65535" / (uint16_t)-1 is reserved to denote "no sidedef". For huge maps, this figure can be surpassed by sharing sidedefs between linedefs.