LINE TYPES ************ This file is written by Brian McKimens (samneric@connected.com) dmspec13 is written by Matt Fell (matt.burnett@acebbs.com) and distributed by Hank Leukart (ap641@cleveland.freenet.edu) DEU 5.1 is written by Raphael Quinet (quinet@montefiore.ulg.ac.be) and Brendon J. Wyber (b.wyber@csc.canterbury.ac.nz) Following is a list of LINE TYPES available for wad editing. I hope this information will allow you to better design levels. I gathered this information from dmspec13 and from experiments with DEU 5.1 to determine the actual effects of the line types. I found numerous errors in the descriptions in DEU 5.1 and many omissions in the descriptions in dmspec13. I just started to figure out what 1 particular type did. In the course of experimenting, I was able to determine what other line types actually do and to fill-in a large part of the missing descriptions. Newly discovered line types are preceeded by an asterisk (*). I don't pretend that this is error-free, but in as many cases as possible, I tested those line types that I DID test under as many different conditions as needed to feel secure in the description. If you find errors, please e-mail me and be sure to include a GOOD description of the discrepency (hopefully, a zipped, binary wad containing NO MORE THAN NECESSARY to run and illustrate the condition!). There are still line types not defined, and they are listed at the end of this file. There are also sector types (2) not defined yet and some of these line types may behave differently when tagged to those type of sectors. Who knows?... A bottle of Murine to whoever figures out what these undefined sector and line types do! DEU 5.1 allows use of these new and corrected types to be inserted manually by entering a decimal number for the line type by hand. It allows you to insert a number up to 255, but the known line types at this time only range from 0-104. Dmspec13 refers to a line type of -1 that occurs in E2M7 in one room. Since this doesn't "appear" to have a function in the room that uses it (on every major wall, I might add), I'm gonna consider it a bug for ID to squash when they get around to it. Like that Sargeant stuck between walls, and the Spectre stuck TO a wall, in E1M6. At least until someone come up with a purpose for it. LINE TYPE is a term that refers to an effect that can be triggered by an ACTION on the related linedef. The word "function" might better describe TYPE than "type" does. The DOOM engine calls certains functions when the linedefs are activated by shooting, crossing, or butting up next to them and hitting the spacebar. ID isn't likely to release their source code, but we can experiment and discover "what happens" when we set a linedef to a certain TYPE and then activate it. This is what dmspec13 contains - results of experiments performed on wads to see what happens. This file is just a continuation of the efforts of other people to unravel the "secrets" that the mighty DOOM engine hides... I use some terms in this file that I have not seen used before to describe the line types or the sectors that they affect, so I will define them as I go. The first two that I'll introduce refer to the relationship of two sectors that share one or more linedefs. Such sectors are ADJACENT. All sectors are also adjacent to themselves, as they share linedefs (sidedefs even!) with themselves. Sectors A & B below are adjacent, as are C & D, E & F. Sector E can also be said to CONTAIN sector F. Sector F shares all of it's lindefs, but with only one sector (E). CONTAIN is a term that figures into the operation of line type #9 (a floor-affecting line type). ___________ ___________ ___________ | | | | | | | | | D | | ___ E | ____| B | |____ | | | F | | | A | | | C | | | |___| | |____|___________| |____|______| |___________| In describing the floor effects, dmspec13 used the term "neighbor" ("ne."). This term was also echoed by the authors of the various editors. The problem with this term is that it implies that a neighbor to sector #X can not be sector #X itself. When the DOOM engine looks for the Lowest Adjacent Ceiling to raise a floor up to, it may find that the LAC is the ceiling belonging to the same sector as the rising floor. If it stops 8 below the LAC in this instance, it will be 8 below it's own ceiling. If we can adopt these or similar terms, then describing effects of certain linetypes will be easier. ---------------- Following are the terms used in the descriptions of line types: DEC# **** Decimal number of the line type. ACT. **** Activated by. This indicates what will activate the effect. S 1 - Switch activated. Not repeatable. S R - Switch - repeatable after sector is reset. S X - Switch - repeatable without requiring sector reset. (use of this linetype is not recommended) W 1 - Walking across line activates. Not repeatable. W R - Walking - repeatable after sector reset. W X - Walking - repeatable without requiring resetting. (use of this linetype is not recommended) G 1 - Gun activated. (Shoot at or through line to activate) EFFECT ****** What happens to the involved sector when triggered by the linedef. EFFECT Terms: HAC - Highest Adjacent Ceiling LAC - Lowest Adjacent Ceiling HAF _ Highest Adjacent Floor LAF - Lowest Adjacent Floor NAF - Numeric Adjacent Floor. This is the floor of the adjacent sector that shares the lowest numbered linedef of the tagged sector. NUMERIC CHANGE - defined before the section on floors TRIGGER CHANGE - defined before the section on floors DEC# ACT. EFFECT **** **** ****** 0 - - Normal (used to indicate no special handling of linedef) ----------- DOORS These are actually ceiling effects, as doors are just ceilings that are raised and lowered to allow access to the sectors lying beyond them. I'm grouping them separately since designers put "doors" in wads, not "ceilings with specific behaviors". LOCAL DOORS - sectors bound to 2nd sidedef of activating linedef. (activated at door surface) DEC# ACT. EFFECT **** **** ****** 1 S R Open door. Closes in 6 secs 26 S R Open door. Closes in 6 secs. Blue key 27 S R Open door. Closes in 6 secs. Yellow key 28 S R Open door. Closes in 6 secs. Red key 31 S 1 Open door. Stays open 46 G 1 Open door. Stays open 32 S 1 Open door. Stays open Blue key 33 S 1 Open door. Stays open Yellow key 34 S 1 Open door. Stays open Red key REMOTE DOORS - sectors tagged by activating linedef. (remotely activated at wall switches, walk-over lines) (* indicates not in dmspec13 and unavailable in editor menus at this time.) DEC# ACT. EFFECT **** **** ****** 103 S 1 Open door. Stays open 61 S R Open door. Stays open 2 W 1 Open door. Stays open 86 W R Open door. Stays open 29 S 1 Open door. Closes in 6 seconds 63 S R Open door. Closes in 6 seconds * 4 W 1 Open door Closes in 6 seconds 90 W R Open door. Closes in 6 seconds * 50 S 1 Close door 42 S R Close door 3 W 1 Close door 75 W R Close door 16 W 1 Close door for 30 seconds 76 W R Close door for 30 seconds ---------------------- CEILINGS DEC# ACT. EFFECT **** **** ****** 40 W 1 Raise to HAC 41 S 1 Lower to own floor * 43 S R Lower to own floor * 49 S 1 Lower to 8 above own floor. 44 W 1 Lower to 8 above own floor * 72 W R Lower to 8 above own floor * 25 W 1 Start fast crushing ceiling. Fast crush. Slow damage * 6 W 1 Start fast crushing ceiling. Fast crush. Fast damage 77 W R Start fast crushing ceiling. Fast crush. Slow damage 73 W R Start slow crushing ceiling. Slow crush. Fast damage * 57 W 1 Stop crushing ceiling 74 W R Stop crushing ceiling ------------------ FLOORS Floor-affecting types trigger effects best described as RAISE, LOWER, GOTO. There are also types affecting MOVING FLOORS, LIFTS, and STAIRS, but I'm treating these as separate cases since most designers view these as complete entities - much the same as doors are considered separate from ceilings, even though door actions are actually ceiling actions. RAISE types will move the floor up, either until a given numerical distance has been traveled, or until it reaches a position relative to an adjacent floor or ceiling. RAISE types should not be used if the relative position is, or can be relocated to, BELOW the floor before triggering. LOWER types will move the floor only to positions relative to an adjacent floor or ceiling. LOWER types should not be used if the relative position is, or can be relocated to, ABOVE the floor before triggering. The GOTO type is a term not used before. GOTO raises OR lowers the floor to a given height or location. Many of the earlier descriptions referred to RAISE or LOWER types only, because the floors that were studied to find the resulting actions were set below or above the GOTO destination already. GOTO types are useful when multiple sectors are tagged together, each having a different height. Each will move in whatever direction is required to end up at the same height. SPECIAL NOTE ************ Some floor types also cause the tagged sector to change floor texture and "damage" trait to that of a 2nd sector (MODEL sector, for lack of a better term). There are 2 different models involved in the changes. A TRIGGER model is the sector that is bound to the first sidedef of the triggering linedef. A NUMERIC model is the adjacent sector sharing the LOWEST NUMBERED LINEDEF comprising the tagged sector. These are referred to in the EFFECTS column below as either TRIGGER CHANGE or NUMERIC CHANGE. In either case, the tagged sector takes on the floor texture of the model sector. In the case of the NUMERIC CHANGE a second trait is also passed to the tagged sector - the ability to do health damage. This was previously considered to be a passing of the SECTOR TYPE from the model to the tagged sector, but that is not the case. The sector type also describes light characteristics, but these are not passed to the tagged sector. A TRIGGER CHANGE also appears to "lock-out" any further changes to a sector by any linedef tagged to it. I refer to the floor of a Numeric model as an NAF - Numeric Adjacent Floor. Dmspec13 referred to the change as "matching", but it also used that term to describe a RAISE or LOWER destination height. I will try to avoid the term, as its meaning has already been muddied. One notable line type involving floors: Line type #9 is recognizable as the switch to activate the chainsaw pillar in E1M2. The tagged sector (pillar) moves in GOTO mode to its NAF (Numeric Adjacent Floor) comprised of the acid pool surrounding it. (If the acid pool is the tagged sector and the pillar shares its lowest numbered linedef, the pool will GOTO the level of the pillar. You can turn off clipping and climb up to it and still be harmed by the acid.) But in this case, the pillar is tagged, so it moves to the floor level of the acid pool sector. Note that the pillar is CONTAINED by its NAF sector, as all of its linedefs are shared by the acid pool. Because of this, a second condition sets in - the acid pool "GOesTO" >its< NAF and undergoes a NUMERIC CHANGE, assuming the same floor texture and damage trait (no longer damaging to health). The acid pool is contained by its own NAF in this case, but that is not required for the second step to occur. The pool would move to its NAF even if stuck in a corner, as long as the lowest numbered linedef bounding the acid pool is a TWO-SIDED LINEDEF. The primary NAF sector (the acid pool) does NOT consider the tagged sector (the pillar) to contain its NAF. It looks elsewhere, EVEN IF its lowest numbered linedef is shared with the tagged sector. The acid pool finds its NAF among its other shared linedefs. There is a bug I found. If the acid pool's lowest numbered linedef is a ONE-SIDED linedef, the pillar and acid pool floors both GOTO a height of 34, and the acid pool turns from NUKAGEn to TLITE6_6 - the last one on the list. (Probably from a function returning a pointer to it after being passed junk.) Since ID doesn't make this mistake, you would do well to emulate them. One last note on this line type - If the tagged sector's lowest numbered linedef is ONE-SIDED, it is considered to have no NAF, and nothing happens. FLOORS DEC# ACT. EFFECT **** **** ****** 18 S 1 Raise to next-higher floor * 69 S X Raise to next-higher floor 5 W 1 Raise to next-higher floor 20 S 1 Raise to next-higher floor TRIGGER CHANGE * 68 S 1 Raise to next-higher floor TRIGGER CHANGE 22 W 1 Raise to next-higher floor TRIGGER CHANGE * 95 W 1 Raise to next-higher floor TRIGGER CHANGE * 47 G 1 Raise to next-higher floor TRIGGER CHANGE * 101 S 1 Raise to LAC * 64 S R Raise to LAC * 24 G 1 Raise to LAC * 55 S 1 Raise to 8 below LAC CRUSH * 65 S R Raise to 8 below LAC CRUSH * 94 W 1 Raise to 8 below LAC CRUSH 56 W 1 Raise to 8 below LAC CRUSH 58 W 1 Raise 24 * 92 W X Raise 24 * 15 S 1 Raise 24 TRIGGER CHANGE * 66 S X Raise 24 TRIGGER CHANGE 59 W 1 Raise 24 TRIGGER CHANGE * 93 W X Raise 24 TRIGGER CHANGE 14 S 1 Raise 32 TRIGGER CHANGE * 67 S X Raise 32 TRIGGER CHANGE 30 W 1 Raise 128 * 96 W X Raise 128 23 S 1 Lower to LAF * 60 S R Lower to LAF 38 W 1 Lower to LAF 82 W R Lower to LAF 37 W 1 Lower to LAF NUMERIC CHANGE * 84 W R Lower to LAF NUMERIC CHANGE 91 W R Goto LAC 102 S 1 Goto HAF * 45 S R Goto HAF 19 W 1 Goto HAF * 83 W R Goto HAF * 71 S 1 Goto 8 above HAF 70 S R Goto 8 above HAF 36 W 1 Goto 8 above HAF 98 W R Goto 8 above HAF This next one is a bit involved. Explained further above. Example: switch activating pillar with chainsaw in E1M2. 9 S 1 { Goto NAF1; IF (contained by NAF1) { NAF1 Goto its own NAF2 and undergo NUMERIC CHANGE; } } FLOORS USED AS LIFTS DEC# ACT. EFFECT **** **** ****** 21 S 1 Lower quickly for 3 seconds, then return 62 S R Lower quickly for 3 seconds, then return 10 W 1 Lower quickly for 3 seconds, then return 88 W R Lower quickly for 3 seconds, then return MOVING FLOORS DEC# ACT. EFFECT **** **** ****** * 53 W 1 Start moving floor 87 W R Start moving floor * 54 W 1 Stop moving floor 89 W R Stop moving floor ------------------------------------------ From here on down, with the exception of those types marked with an asterisk (*) and those as yet undefined, I didn't experiment with these line types. Most of the descriptions are unchanged from how they appear in dmspec13. STAIRS DEC# ACT. EFFECT **** **** ****** 7 S 1 Staircase rises up from floor in appropriate sectors. 8 W 1 Stairs END LEVEL DEC# ACT. EFFECT **** **** ****** 11 S - End level. Go to next level. 51 S - End level. Go to secret level 9. 52 W - End level. Go to next level TELEPORT DEC# ACT. EFFECT **** **** ****** 39 W 1 Teleport to sector. (Only ONE sector per tag #) 97 W R Teleport to sector. (Only ONE sector per tag #) LIGHT LEVELS DEC# ACT. EFFECT **** **** ****** 13 W 1 Brightness goes to 255 * 17 W 1 Change light to blink - 1 sec. 104 W 1 Light drops to lowest light level amongst neighbor sectors 35 W 1 Light drops to 0. * 79 W R Light drops to 0. 80 W R Brightness to maximum neighbor light level MISCELLANEOUS DEC# ACT. EFFECT **** **** ****** 48 - - Animated, horizontally scrolling wall texture (right to left) (This is an non-triggered condition affecting only how the wall texture is painted onto the sidedef.) STILL UNKNOWN AT THIS TIME 12 - affects light level 78 81 83 84 85 99 100