Carrying sector

Carrying sectors are sectors which induce movement to mobjs present in them. They exist in several variations: current effects, wind or current effects, conveyor belts and other scrollers, and pushers or pullers.

Boom
Boom provides two types of carrying sectors: scrollers (for conveyor belts) and pushers/pullers (for wind and current effects).

Boom scrollers, coded by Lee Killough, rely on special linedef types: 216, 217, 247, 248, 252, and 253 will all cause actors present on the sector to be moved. It is also possible to have sectors with scrolling flats which do not carry mobjs, or inversely, sectors that carry mobjs without scrolling flats. The scrolling direction is determined by the linedef's orientation, and the speed by the linedef's length. Scrollers only affect mobjs that are stepping on them: flying mobjs such as projectiles or floating monsters are not affected. Making the sector underwater (with the Boom deep water effect through line 242) will allow scrollers to carry flying and no-gravity mobjs.


 * Boom scroller force formula: The X and Y distance covered by the linedef are used as a vector, in 32th of map units per tic. A length of 1 corresponds therefore to slightly over 1 map unit per second.

Pushers and pullers, coded by Rand Phares, use special mobjs that either attract or repel the player. Pushers and pullers do not affect monsters or other non-player objects. A point pusher is thing type 4001, a point puller is thing type 4002. Sectors are then flagged to allow pushers and pullers to work by adding 512 to the sector type. The last step is to have a control linedef with type 226. The length of the linedef defines the 'full' magnitude of the force, and the force is inversely proportional to distance from the point source. If the length of the controlling linedef is L, then the force is reduced to zero at a distance of 2L. Vertical distance, however, is not factored in.

Linear, constant pushers also exist for wind (line type 224) and current (225). Like the point pushers, they require the sector to be flagged in order to work. The direction and force of the push depends on the linedef's angle and length as well, however the effect is uniform within the sector. However, the vertical position of the actor within the sector matters:


 * Boom pusher force formula: The X and Y distance covered by the linedef are used as a vector, in 128th of map units per tic. A length of 4 corresponds therefore to slightly over 1 map unit per second. The strength of point pushers and point pullers decrease proportionally to the square of their distance.

MBF
MBF uses the same types as Boom but modified point pushers and point pullers to also affect living monsters and other shootable objects. Constant pushers were not affected by this change.

Heretic
Heretic provides 33 different sector types, divided into two categories: scrollers and wind.

Heretic scrollers only affect the player. They can go in each of the four cardinal directions, and have five different levels of intensity (5, 10, 25, 30 and 35), these combinations make up 20 sector types, from 20 to 39. One additional scroller (sector type 4) presents the unique combination of having a different intensity (28) and also triggering lava damage and blinking lights. Finally, only the six east scrollers actually scroll the floor texture; the simple implementation of floor texture scrolling in Heretic not allowing arbitrary offsets. (This simplistic implementation is also why certain flats in Heretic have 64x65 instead of 64x64; namely FLTWAWA1&mdash;3 and FLTLAVA1&mdash;3). The scrolling speed of flat textures on the eastward scrollers is noticeably lesser than the player's own scrolling speed.

Heretic wind effects affect all actors with the WINDTHRUST flag. Like scrollers, they are divided into the four cardinal directions and varying intensities, the three levels being 5, 10 and 25. These twelve combinations occupy sector types 40 to 51. A good illustration of wind effects happen in the secret dock area of E1M1, where the undead warriors and their ethereal axes will be deviated by the wind, but the bloody axes they occasionally throw will fly true unaffected.

Windthrust mobjs in Heretic include the player, pods, unpowered hellstaff projectiles, ethereal crossbow side projectiles, chickens and their feathers, weredragon projectiles, primary ophidian projectiles, iron lich fireballs, gargoyle projectiles, and the aforementioned ethereal axes.


 * Intensity formula: The values are expressed in 1/32th of a map unit per tic, so slightly above one map unit per second. The maximal intensity, 35, corresponds to 38 map units per second.

Hexen
Hexen uses the same systems Heretic did, with a few changes. The wind effects are unmodified, however only the three player classes are affected by the wind. Players turned into pigs are affected as well, but not monsters turned into pigs.

The scrollers have been modified, to include both cardinal and ordinal directions, but the number of intensities was decreased to three: 5, 10 and 25. The twenty-four combinations occupy sector types 201 to 224. Floor textures can now scroll in all eight directions, and the flats meant to be used on such sectors (X_001 to X_011) are 64x128 to compensate.


 * Intensity formula: The values are expressed in 1/32th of a map unit per tic, so slightly above one map unit per second. The maximal intensity, 25, corresponds to 27 map units per second.

Strife
Strife implements a generic scroller, using sector type 18. The angle and intensity of the current is determined by the sector's tag. The strength is a value between 0 and 9, the maximum corresponds to an intensity of 18 in the Heretic/Hexen scale. Angle is a value between 0 and 7, 0 is east, 1 is northeast, 2 is north, and so on counterclockwise to 7 for southeast. The formula to compute the sector tag to use is 100 + (10 * angle) + strength. For example, to scroll to the southwest with a strength of 7, use 100 + 5*10 + 7 or 157.

Strife current only affects the player. Other mobjs are unaffected unless they call a dedicated codepointer, named A_ZombieInSpecialSector in Chocolate Strife and A_CheckTerrain in ZDoom. Even then, non-player mobjs are only affected if they are in such a sector on the tic they call this codepointer. For example, the peasants being converted into acolytes only call it every five tics, while the practice targets found in the firing ranges call it every two tics while intact, and every tic once hit.


 * Strength formula: The values are expressed in 1/16th of a map unit per tic, so slightly above two map unit per second for the player. The maximal strength, 9, corresponds to 19 map units per second. For the zombie peasant, this is instead just shy of 4 map units per second, and for an intact practice target, slightly under 10 map units per second.