home *** CD-ROM | disk | FTP | other *** search
- Trinity.Wad: How I Made It.
- For lost drunken men who no longer know
- where they are, but DO care. (Cell #2)
- Steve McCrea
- <<FIRST DRAFT 8th September 1994>>
-
-
-
-
-
- ----------------------------------------------------------------------------
-
- This information is published with DeuTex
- with permission from Steve McCrea
-
- This file is a bit obsolete. Get the last
- version directly from Steve McCrea.
-
-
- Examples are taken from doomtex, which was used for TRINITY.WAD.
- to convert doomtex format to DeuTex format, simply add a '*' then a space
- before each patch name (not before wall names). Here is an example:
- --------
- doomtex:
- --------
- DOORCRST 128 128
- door11_1 4 0
- door11_1 124 0
- door11_1 -116 0
- pcrest4 46 37
- -------
- DeuTex:
- -------
- DOORCRST 128 128
- * door11_1 4 0
- * door11_1 124 0
- * door11_1 -116 0
- * pcrest4 46 37
-
- case is not significant for DeuTex, but it was for doomtex.
-
- ----------------------------------------------------------------------------
-
-
-
-
- I am writing this article in response to numerous inquiries about the
- techniques used in the creation of Trinity, and in particular a
- direct request from Ian Mapleson. It is in no way intended as a
- textbook approach, and I accept no responsibility for any time wasted
- as a result of following the procedures documented here. I may stray
- from the subject matter from time to time, as I said to the producer
- last week... Although titled "How I Made It", this may not be
- strictly true. I leave it as an exercise to the reader to determine
- which bits have been glossed over for clarity.
-
- LEVEL DESIGN
-
- As with all design, it is important to have the right tools and be
- familiar with them. I restricted myself unnecessarily at this early
- stage by only downloading DEU. I think this was a big mistake. The
- other editors out there may well have some great features I missed
- out on totally. I know, for instance, that at least one of the others
- supports auto stair contruction. But since I didn't get the others, I
- don't know what else is available to speed design. My recommendation
- for those starting out in WAD design is to get them all, find out
- which does what best and then mix and match. You may find yourself
- using one for most of the layout and then just switching quickly to
- another to do some trick or other. Hopefully you won't get too
- confused!
-
- Before I started on Trinity, I had designed a few mini-levels in DEU.
- The first was just one room, then I did a couple of Wolfenstein
- levels, and so on. This got all the big mistakes out of the way,
- such as overlaying lines and vertices, splitting sectors wrongly,
- and losing work because DEU crashed. Then I laid out the courts in
- Trinity from memory, and ran about in Doom checking that the scale
- felt right. Initially there was an area surrounding the college but
- I dropped it because it was going to be boring, and the map was huge
- anyway. I left most walls the standard texture, and only added
- things like wood for gates. Having satisfied the sense of scale, I
- put in most of the rooms and passages, and added rough doors.
-
- SCANNING PHOTOGRAPHS
-
- About this time, I realised that it would be doing the college an
- injustice to use the standard Doom textures. I decided to scan some
- photographs of the college and put them in, so I borrowed Peter
- Morgan's (thanks Pete) camera on a sunny day and wandered over to
- Trinity. I tried to make the photographs I took clear from
- obstruction, shadow free and square to the viewer, i.e., with as
- little distortion as possible. I then scanned standard sized 6"x4"
- prints at on average 150dpi with Bill Milne's (thanks Bill) colour
- scanner. I used Adobe PhotoShop on Bill's Mac to straighten the
- images and crop off what I was sure I didn't need, but I DIDN'T
- change the resolution or convert from 24 bit colour and I DIDN'T
- crop right up to the edges of what I wanted.
-
- This was AFTER the test run on the Wren library, the southern upper
- wall of the southwest courtyard (NOTE: Apologies to those who know
- Trinity: yes, I have rotated the college 90 degrees!), when I scaled
- the image to 64x256 and saved it as an 8 bit GIF. If you look
- carefully at the texture in the level, you will see that it is now
- 128 wide, scaled from 64! Yech. I wasn't going to make that mistake
- again, although I couldn't be bothered to rescan the Wren library.
-
- When I was pretty sure what size I wanted for graphics, I COPIED
- the images, cropped, scaled, tinted, smoothed, converted to GIF, and
- so on. Some graphics didn't tile very well, and I either touched
- them up to tile properly (e.g., stone) or mirrored one half (e.g.,
- the windows on the outside of the dining hall).
-
- There are three hand drawn graphics in Trinity: the sky, plaster, and
- the burgundy wood panelling. Again I started with a 24 bit palette,
- and used the pencil and airbrush tools before blending, motion
- blurring, tinting etc. to produce the final image. Several edit
- cycles were required to get something that I was (sort of) happy with
- in Doom.
-
- TALL WALLS
-
- The standard Doom texture is a maximum of 128 pixels high, and on
- walls higher than this the texture repeats vertically. Clearly I
- didn't want this in Trinity, so I use a couple of tricks to avoid it.
- On walls with void space behind (no sector behind) a sector is added
- with floor and ceiling heights chosen to divide the wall into
- sections less than 128 high. (Notice that I say _less_ than 128 high.
- Initially you might think, as I did, that 128 high would be perfect.
- However, if there is a substantial colour change from top to bottom
- of a texture then, as in Trinity, glitches appear on the walls at the
- dividing lines due to round off in the vertical texture mapping.)
- _____________
- / added \
- / sector \
- ---------------------
- tall wall
- ----------------- top of wall
- | upper texture
- | ----------------- ceiling of added sector
- +----> normal texture
- ----------------- floor of added sector
- lower texture
- ----------------- bottom of wall
- Textures are applied as shown. The line between the sectors is marked
- as 2S/Im/So in DEU, i.e., two sided, impassable, and blocks sound.
- The blocks sound bit is to reduce the size of the REJECT data. See
- the unofficial specs for details. The impassable bit is to prevent
- you or monsters going into the sector (I had this problem with skulls
- initially. It was disturbing to find skulls appearing from nowhere!).
- The normal texture must be a single patch or the Medusa effect (looks
- like snakes and you turn to stone) will occur.
-
- In Doom, each texture is constructed from one or more graphics
- patches. The texture definition contains no image data, just the size
- of the texture, and a list of patches and their position in the
- texture. The _patch_ definition contains the image data.
-
- For walls which already had sectors behind them (e.g., above a doorway)
- non-repeating tall textures are acheived by "stepping" the wall. A
- separate sector is required for each step. In side view,
-
- ------- ceiling
- |
- |<-- top texture
- |
- -
- |
- |<-- middle texture
- |
- ---------
-
- doorway
- ------------------- floor
- This is not as neat as the other method because the ceiling texture
- of the sector between the top and middle textures will always be
- visible, and must be chosen to minimise breaking up the look of the
- wall. It is also harder to add because the sector should clearly
- be very thin (in Trinity they are 2 units thick) and this is very
- fiddly work away from the autogrid.
-
- GRAPHICS ADDITION
-
- Initially I just replaced patches in single patch textures. I hacked
- around with dmgraph to make it convert a GIF directly to a patch.
- Then I used a program I had previously written for sound lumps to
- make a PWAD of patches with names the same as the names of patches in
- single patch textures. These then replaced the same-named patches
- when the PWAD is included using -file.
-
- However a better solution was necessary as (a) I was running out of
- single patch textures, and (b) I needed some user defined multipatch
- textures. So I wrote a program to convert the texture definition
- entries in the main Doom WAD to an ASCII format, and another which
- recreated the binary definition entries from the ASCII format. The
- big advantage of this method was that it allowed the creation of NEW
- textures with sensible names like "stone" and "plaster". A typical
- definition of a new texture "doorcrst", a 128x128 texture with
- three old patches and one new:
-
- DOORCRST 128 128
- door11_1 4 0
- door11_1 124 0
- door11_1 -116 0
- pcrest4 46 37
-
- For textures to repeat properly when the length is greater than the
- width of the texture, the width should be a power of two. For some
- reason, the "aastinky" texture in Doom is 24 units wide. The last
- eight columns of the graphic will never be seen (but they're not
- very exciting anyway).
-
- The first released version of Trinity had redefined switch textures,
- so that when the switch was encountered later in the standard levels,
- it looked really bad. In the second version I fixed this by setting
- the switches into walls so that only the switch part of the texture
- was visible. This is _highly_ recommended for levels which may be
- grouped into PWAD episodes.
-
- old switch texture
- |
- v
- x--------x <-- thin sector with 'metal' textures
- -----x---x--------x---x-----
- ^ ^ wall
- | |
- +------------+------ new switch surround
-
- Actually it's just occurred to me that there is a neater, if more
- memory hungry, way to do this seamlessly. Widen the switch texture
- and put the new switch on the right of the old one, then when using
- your new switch offset the texture by the appropriate amount. As
- long as no other levels use a repeated switch on a wall, then this
- is perfect. For example, say you wanted a new switch pair, you could
- tack them on the right of the SW1BRN1 and SW2BRN1 switch pair. The
- original definition of SW1BRN1 is
- SW1BRN1 64 128
- wall02_2 0 56
- wall02_2 0 0
- sw3s0 16 75
- which you redefine to be
- SW1BRN1 256 128
- wall02_2 192 56
- wall02_2 192 0
- wall02_2 64 56
- wall02_2 64 0
- wall02_2 0 56
- wall02_2 0 0
- sw3s0 16 75
- pplast 96 0
- pplast 160 0
- sw3s0 144 75
- The old switch is still at offset 0. The new switch is at offset 128.
- Note the repetition of the wall patch. This allows for roundoff error
- in the texture mapping engine, which expects similar texture to be
- just to the left and just to the right of the texture being drawn.
- Don't forget to define the other switch position SW2BRN1 similarly!
- This technique allows for a large number of different switch designs
- to be used in a PWAD. Not that I'm condoning the use of a large
- number of switches in PWADs - in fact, some of the best PWADs are
- totally ruined by switches everywhere. (No Return01s, I mean names,
- mentioned. Speaking of which, which I'm not of course, did you know
- that there are two graphics added to Return to Phobos? Switches!
- Both of them! Good grief, Michael! _Beautiful_ WAD, but...)
-
- Note: remember to make the textures a power of two wide if you want to
- allow for roundoff.
-
- The programs I mention in this section are available as a zip
- dmtex10c.zip at infant2. Alternatively you could try deutex by Olivier
- Montanuy which is easier to use, and will be supported and updated.
-
- THE "ANIMATION"
-
- If you haven't seen Trinity.WAD, I recommend you look at it before
- reading this section as it contains a massive spoiler. However if you
- haven't seen Trinity you probably aren't reading this document (?!?),
- so...
-
- Several people have asked how the cyberdemon movie is done. I have
- even heard it described as "voodoo magic"! Nothing could be further
- from the truth. It is actually very simple. To quote Matt Fell in
- the unofficial Doom specs 1.3,
-
- "It is possible to change the walls and floors that are
- animated, like the green blocks with a sewer-like grate that's
- spewing green slime (SLADRIPx). The game engine sets up as many as 8
- animation cycles for walls based on the entries in the TEXTURE
- resources, and up to 5 based on what's between F_START and F_END. The
- entries in FirstTexture and LastTexture, below, and all the entries
- between them (in the order that they occur in a TEXTURE list), are
- linked. If one of them is called by a sidedef, that sidedef will
- change texture to the next in the cycle about 5 times a second,
- going back to First after Last. Note that the entries between First
- and Last need not be the same in number as in the original, nor do
- they have to follow the same naming pattern, though that would
- probably be wise. E.g. one could set up ROCKRED1, ROCKREDA, ROCKREDB,
- ROCKREDC, ROCKREDD, ROCKREDE, ROCKRED3 for a 7-frame animated wall!"
-
- Hence the movie in Trinity is defined in the ASCII texture file as a
- series of textures SLADRIP1, MOVIE01, MOVIE02, ..., MOVIE98,
- SLADRIP3. The important thing is the order in which the textures
- are listed. The Doom EXE contains the names of the FirstTextures
- and LastTextures so it isn't possible to have additional animation
- cycles in a PWAD.
-
- And because the sprites and the Doom logo have the same format
- as patches, they are just listed as if they were patches. For
- example, a frame of the movie is defined
-
- MOVIE08 256 128
- pblak 0 0
- pblak 64 0
- pblak 128 0
- pblak 192 0
- t 67 40
- r 86 40
- i 106 40
- n 124 40
- i 144 40
- t 162 40
- y 181 40
- m_doom 67 50
- cybre7 -20 20
- playf3f7 198 64
-
- where "pblak" is a totally black patch, and t, r, i, n, and y are
- the characters. Initially, the movie used the character set in the
- game but this caused crashes (for a reason I won't go into now) so
- after consulting iD, I included the character set again in the PWAD
- with new names.
-
- The technique described in the Graphics Addition section for adding
- new switches can also be applied to new animated textures. Just
- make the new animation length a multiple of the old length, and
- put the old animation at the left of the textures. Don't forget to
- satisfy the roundoff errors! You could squeeze twenty or more thin
- animations into a large texture!
-
- THE SKY
-
- You may not have noticed, but the sky in the latest version of Trinity
- doesn't repeat anywhere around the horizon. (Thanks to Olivier
- Montanuy, author of DeuTex, for teaching me this trick.) This is done
- by defining a sky texture (SKY1, SKY2, or SKY3 depending on the
- episode) which is 1024x128 in size, and pasting patches into it so
- that 0=East, 256=North, 512=West, and 768=South. Note that this means
- that the textures are left/right mirrored! I can't think of any way
- to make the sky texture animated. However you could fake twin skies
- by only allowing the player to see half the sky during one part of a
- level, and then later only allowing him to see the other half! A
- crap example would be bright blue skies -> red skies+mushroom cloud.
- It's probably a good idea to disorient the player in between with,
- for example, a teleport, so he doesn't catch on to the trick too
- quickly.
-
- CONCLUSION
-
- In this document I have outlined some techniques which can be used to
- seemingly extend the Doom engine. The use of these inevitably slows
- down Doom and so should be used sparingly, unless you _really_ need
- (well, really _want_, anyway) the effect.
-
- If you're about to start your first big WAD, collect together as many
- tools as you can, and read all the documentation you can find,
- particularly the Unofficial specs. Good luck!
-