WAD Special Effects This text will constantly make references to the example WAD: spcial1b.zip (53K). The spcial1b.zip is a zipped file, and can be unzipped on a PC using Pkzip 2.04G (Binary).. I suggest you start by reading the contents, which follow below. Here you can jump directly to the special effect that interests you. If you need to read one of the other sections first, there will be a reference in the start of the section. Contents 1. The Deep Water effect 2. Invisible Stairs 3. Invisible Lift 4. Non-convex Invisible Areas 5. The Transparent Door effect 6. The Solid Window effect 1. The Deep Water effect To see the deep water effect, you can load in the spcial1b.zip (73K) WAD, and find the door marked SWIMPOOL to the west. Behind this door, you'll find a swimpool. When you walk into this swimpool, you will see that your viewpoint gradually lowers, giving you the illusion that you are walking on the button of the swimpool, and not on the surface of the water. The first time I saw this special effect demonstrated was in swimpool.zip (2K) by Robert Fenske Jr. (rfenske@swri.edu), where the effect is demonstrated convincingly in a single room. The effect was first described by Mathew J Ledding-Hill, and it was later improved by Robert Fenske Jr. The discovery of the deep water effect has lead to all kinds of other special effects, as we shall see later. This is one of the effects, that will give errors from any consistency checkers, so if you don't want to see any errors from your editors consistency checker, don't try to build this special effect. To build this special effect, you need an editor that lets you change the sector references in a sidedef. Some editors won't allow this, and are useless for this purpose. If you don't already know an editor that can change the sidedef references, I suggest you look around and try a few more editors. You might even learn an important lesson by doing this: No editor can currently claim to be the best at all things. One editor might be good at creating sectors, but doesn't allow you to set the 2s flags for yourself, while another has a great THING editor, but don't work too well with new graphics. Do what I do: Shift a lot between editors, and find the best editor for the task at hand. Construction of the Deep Water To create the deep water effect, you take advantage of the following rule: If you create a sector inside another sector, where the internal sectors sidedefs ONLY has sector references to the internal sector, then the floor texture will be painted in the floor height of the external sector, while the player will walk around in the floor height of the internal sector. To give an example, create the following map: (The numbers are sidedef sector references) x-----------------------x | 1 | (The dotted lines are two sided | | while the dashed lines are one-sided) | 2 | | x.......x | | : 2 : | |1 2:2 2:2 1| | : 2 : | | x.......x | | 2 | | | | 1 | x-----------------------x Now set the floor texture of sector 1 to F_WATER, set the floor height of sector 1 to 0, and set the floor height of sector 2 to be -40. This gives the impression of walking around in a pool of water. You can also set the floor height of sector 2 to be 70, and you will feel like flying. (Remember to make the ceiling high enough, so that a player can walk around in the height of 70). Also be careful when setting a height below -40 (relative to the floor), as you will get a HOM effect if the player get his head under water. This first example is great fun, but it doesn't really lead anywhere, as it's difficult to take the step of 40 units to get out of the deep water. To be able to both enter and leave the deep water, you will need to create sectors within sectors in different heights, so that they form a descending stair into the pool. This is very easy to construct: (The numbers are sidedef sector references) x---------------------------------------x | 1 | | | | 2 | | x.......................x | | : 2 : | | : : | | : 3 : | | : x.......x : | | : : 3 : : | |1 2:2 3:3 3:3 2:2 1| | : : 3 : : | | : x.......x : | | : 3 : | | : : | | : 2 : | | x.......................x | | 2 | | | | 1 | x---------------------------------------x This resembles the WAD: swimpool.zip (2K) created by Robert Fenske Jr. Here you can assign a floor height of 0 for sector 1, while sectors 2 and 3 get a floor height of -24 and -48 respectively. This will make the water quite deep, while it's still possible to climb out of it. Please note that in this special effects we use sectors inside sectors, to create the special effect needed. If we want to create other things like an invisible stair, it's suddenly quite difficult to form the stair, so that it consists of sectors inside sectors. Instead another method can be applied. 2. Invisible Stairs If you haven't read about the deep water effect , I suggest you do that now. The invisible stair special effect is very similar to the deep water effect. To find the special effect in the example WAD: spcial.zip (73K) , you should find the door marked "INVISIBLE STAIR" to the south, behind which you will be able to try the effect. Construction of invisible stairs As I mentioned earlier it's impossible to build a stair with sectors inside sectors like in the deep water. Instead I'll remind you of the general rule: If you create a sector inside another sector, where the internal sectors sidedefs ONLY has sector references to the internal sector, then the floor texture will be painted in the floor height of the external sector, while the player will walk around in the floor height of the internal sector. This general rule implies that it's possible to create an invisible stair like this: (The numbers are sidedef sector references) x-----------------------x | 1 | | 2 | | x.......x | | : 2 : | |1 2:2 2:2 1| | : 2 : | | x.......x | | 2 | | 1 | x.......................x | 3 | | 4 | | x.......x | | : 4 : | |3 4:4 4:4 3| | : 4 : | | x.......x | | 4 | | 3 | x.......................x | 5 | | 6 | | x.......x | | : 6 : | |5 6:6 6:6 5| | : 6 : | | x.......x | | 6 | | 5 | x.......................x | 7 | | 8 | | x.......x | | : 8 : | |7 8:8 8:8 7| | : 8 : | | x.......x | | 8 | | 7 | x.......................x The sectors 1, 3, 5 and 7 are the steps, and they should all have floor height 0. (This is the height in which the floor is painted). Now give the sectors 2, 4, 6 and 8 some different floor heights (for instance 16, 24, 40 and 56 respectively). This is the height in which the player will walk. Then you have an invisible stair. Invisible rising stair Now that you've created an invisible stair, you might want to go on and create an invisible rising stair. This is a bit difficult, but not impossible. I'll explain how to do it by extending on the stair that you already created . To have the stair start in the lower position set the floor heights of sectors 2, 4, 6 and 8 to zero. Now for a rising stair to work, the sectors need to be neighbours, but none of the sectors 2, 4, 6 or 8 are neighbours to other sectors than themselves, so we'll need to do some kind of trick to get it to work. The trick is this: create new neighbouring sectors that form a stair, and edit the sidedef sector references so that these new sectors get the same numbers: 2, 4, 6 and 8. Since sector 2, 4, 6 and 8 are neighbours now we can make the rising stair work just like a normal rising stair. One word of advise though: The linedef number of the new sector created should be smaller than any of the linedefs in the original sector. This can be hard to accomplish with most editors, so I advise you to build the dummy sectors 2, 4, 6 and 8 before the invisible stair itself. If you forgot to build the dummy sectors first, I can give you the following DEU trick: Split old lines in two, and one of the parts will get a new line number (higher than any other line number) normally the "front" part will get the new number: before: split: drag: ^ ^ | | <- New line number. | | | x <- drag this vertex | | | | x x <- to this vertex, and merge the two vertices. When you've completed the new sectors, your invisible stairs should look like this: (The numbers are sidedef sector references) x-----------------------x | 1 | | 2 | | x.......x | | : 2 : | |1 2:2 2:2 1| The "dummy" sectors: | : 2 : | | x.......x | | 2 | x-------x In the dummy sectors | 1 | | 2 | there are no special x.......................x x.......x sidedef sector references, | 3 | | 4 | so only one number is | 4 | x.......x displayed inside each sector. | x.......x | | 6 | this is the sector number, | : 4 : | x.......x and all sidedef references |3 4:4 4:4 3| | 8 | are created just as usual. | : 4 : | x-------x | x.......x | | 4 | | 3 | x.......................x | 5 | | 6 | | x.......x | | : 6 : | |5 6:6 6:6 5| | : 6 : | | x.......x | | 6 | | 5 | x.......................x | 7 | | 8 | | x.......x | | : 8 : | |7 8:8 8:8 7| | : 8 : | | x.......x | | 8 | | 7 | x.......................x Now you can make a linedef somewhere to activate the raising stair, and make it point to sector 2. The invisible raising stair is demonstrated in spcial1b.zip (73K) just behind the first invisible stair. If you let yourself drop down behind the first invisible stair, you will find it impossible to get back before you press the button, which triggers the invisible rising stair. Note however that the invisible stair is not entirely invisible. I've put a small texture on one of the steps, so you can see it raise... Only the normal texture on the special inner sector is shown, so to create a texture that sticks to the invisible raised floor like here, I've used the "lower unpegged" flag. Remember to put the dummy sectors close to the raising stair, as the sound propagates from the dummy sectors, and NOT from the special sectors inside the steps of the stair. (Actually I think the sound is generated by the lowest numbered linedef, which we put in the dummy sector). This could of course be used to generate a "Silent Invisible Raising Stair", but that might not be much fun. 3. Invisible Lift Now that you've seen how to create an invisible raising stair, an invisible lift should be easy to create. An example invisible lift can be found to the north in spcial1b.zip (73K). The invisible lift turns out to be easier than the invisible raising stair, because there is only 1 step... To create the lift you need to create dummy sectors again. Otherwise the special self-referencing sector will not be able to determine how low it should go. Remember to create the dummy sector first, so the linedefs here get the lowest numbers. The lift should look like this: (The numbers are sidedef sector references) : : : : | 4 | | | x-----------------------x | 1 | | 2 | | x.......x | | : 2 : | |1 2:2 2:2 1| The "dummy" sectors: | : 2 : | | x.......x | | 2 | x-------x | 1 | | 2 | x.......................x x.......x | | | 3 | | | x.......x : 5 : : : Assign a floor height of 0 to the sectors 1, 3 and 4, while the sectors 2 and 5 get a higher floor height like 64. Then make the linedef between sector 4 and 1 a switch activated lift, and make the sector reference point to sector 2. Now make the linedef between sector 5 and 1 trigger when the player walks over it, and the sector reference should again point to sector 2. That's all. Now your invisible lift should be working. The dummy sector 3 determines how low the lift will go, and the linedefs neighbouring sector 1 are set up to activate sector 2 as a lift, which controls the floor height. 4. Non-convex Invisible Areas Now that you know how to create invisible stairs and invisible lifts, you might think that you know how to apply this effect to any area, but if the outer sector isn't convex you'll get into trouble in no time. The problem is that any sub sector in the special raised sector needs to be a neighbour to the special self referencing sector inside. If this requirement is not met, you will drop to the level of the outer sector, and you could get trapped. To make sure this doesn't happen, you should simply create the inner sector so large that there simply is no room for the player to drop to the actual floor height. An example of a non-convex sector where you still can walk around in the air is given in the east part of spcial1b.zip (73K). Here I've enlarged the inner sector to almost fill the outside sector entirely. The following figure might clarify what I mean: x-----------------------x |.......................| (The dotted line is the internal |: :| self-referencing sector. |: ........... :| See the WWW page for a more exact |: :x-------x: :| representation of this) |:.....:| |:.....:| x-------x x-------x This ensures that all sub sectors are either inside the special sector, or is at least a neighbour to it. Now we have covered a lot about invisible floors. lets look at a different special effect: 5. Transparent Doors The transparent doors can be viewed in the deathmatch WAD spchaunt.zip (86K) created by Robert Fenske, Jr. (rfenske@swri.edu) The same effect can also be viewed in the north part of spcial1b.zip (73K), where I've used the standard DOOM 1 open door linedef. The effect is better if you use the blasting doors now available in version 1.666 and higher. As you can see in special.wad, there is a considerable amount of HOM when the door is opened and closed. This looks much better when the blasting doors are used. You might think that the transparent doors could be built much like the floor special effects we have seen so far, but since the DOOM engine treats sectors with the same ceiling and floor height in a special way this won't work. Instead another method has to be used. Construction of the Transparent Door (by Robert Fenske, Jr) In June of 1994, Alberto Barsella (alberto@astrpi.difi.unipi.it) reported to the DOOM editing mailing list that he had found a way to create transparent doors. His method was more cumbersome than the method shown below, but nevertheless paved the way to using this feature in new WADs. (The numbers are sededef sector references and the Ln are line numbers for further reference) L1 L3 L5 ....----x-------x----.... : 3 : : : 1 :2 2: 4 : : L7: :L8 : : : 3 : ....----x-------x----.... L2 L4 L6 As shown in the figure above, you must start with a three-region section of a level. You can start with a normal door sector and modify it appropriately. I will refer to the area bounded by LINEDEFS L3, L8, L4, and L7 as the door area. The six LINEDEFs labelled L1 through L6 are usual one-sided LINEDEFs. The two LINEDEFs L7 and L8 are two-sided ones that will constitute the actual door look. Sectors 1 and 4 are normally created sectors (and could be the same sector - see the note below). However, there are two sectors inside the door area, 2 and 3. The crucial aspects of a transparent door are all contained in LINEDEFs L7 and L8; the ordering of LINEDEFS L3, L4, L7, and L8; and sector 2. The table below details the specific requirements for each LINEDEF and sector: LINEDEF/SECTOR Description L1 one-sided wall, normal texture L2 one-sided wall, normal texture L3 one-sided wall, normal texture L4 one-sided wall, normal texture L5 one-sided wall, normal texture L6 one-sided wall, normal texture L7 two-sided wall no upper texture, one-patch transparent normal texture with Y offset equal to height of texture optional lower texture, second SIDEDEF references sector 2 L8 two-sided wall, no upper texture, one-patch transparent normal texture with Y offset equal to height of texture optional lower texture, second SIDEDEF references sector 2 1 floor height F, ceiling height C 2 floor height F+1, ceiling height F+1 3 floor height F, ceiling height C-1 4 floor height F, ceiling height C The most crucial requirement is not in the above table. This requirement is that one of the LINEDEFs L3 and L4 MUST have a lower index number than L7 or L8. If this is not the case, a HOM effect will be present inside the door. This ordering is required because the DOOM engine uses the lowest-numbered SEG in a SSECTOR (subsector) to determine which SECTOR to use to draw the SSECTOR. Technically, at least one of the SEGS derived from LINEDEFS L3 and L4 must be the lowest-numbered SEG of the SSECTOR created from the door region (or lowest-numbered SEG for each of the SSECTORs created if the region is split in any way or the region is non-convex to start with). In principle, having LINEDEFs L3 and L4 with lower indices than L7 and L8 could not guarantee the correct SEGs generation. But as a practical matter all the node builders I am aware of preserve the SEGs ordering and any extra SEGs created during the node generation are attached to the end of the SEGs list (and thus will never have lower indices than the SEGs originally derived from L3 and L4). Though the lower unpegged ("Lo") bit of LINEDEFs L3 and L4 are typically set for a normal door, this bit is irrelevant for movement for a transparent door as the sector associated with these LINEDEFs never moves. It's only use would be to anchor to the bottom the particular textures on these LINEDEFs. Do not make the transparent door wide enough so that a player can be fully inside the door when it closes. If this happens, the player has no way to get the door to open because the player will now be facing the left side of the LINEDEFs that are the door (L7 and L8) and consequently the door will not be activated. However, switches could be placed on LINEDEFs L3 and L4 to open the door. note: IF you create the door so that it has the same sector on both sides of the door, you should be aware that this means that sounds will pass through the door and might wake monsters on the other side. Maybe this is exactly what you want, and using this you can create doors that let sounds pass. Transparent door with closed sectors If you don't like to create the transparent door using the special sector configuration above, you can also do it like the SKY door. (The numbers are sector numbers) : : : 5 : | | x...............x |. .| | . . | |3 x 2 x 4| | . . | |. .| x...............x | | : 1 : : : The sectors 1, 3, 4 and 5 should have floor height 0, while sector 2 (the door) has both floor and ceiling height 1. No textures should be applied to the linedefs between the sectors 3, 4 and 2, while the transparent door texture can be applied to the lines between the sectors 1, 5 and 2. Obviously this closed sector arrangement has 4 more lines in it than the previous transparent door effect. Both methods work just fine, so you should make up your own mind: do you want 4 extra linedefs, or unclosed sectors? 6. The Solid Window effect (by Robert Fenske Jr.) The solid window effect is a window that the player can see through, but can't shoot through. Now that you've seen how to construct the transparent door special effect, it should be easy to make a solid window. You just omit the linedefs that opens the door, and place the "stuck" door inside the window. ------------------------------------------------------------------------------- DOOM is a trademark of id Software. ------------------------------------------------------------------------------- Jens Hykkelbjerg / hykkelbj@daimi.aau.dk