# Doom Legacy 1.48 Wad Editing Guide

2018-07-12

- User's Guide
- Map Editing
- Tutorial
- 3D Floors Tutorial
- FraggleScript
- Getting started
- Reference manual

- Editing Specs
- Linedef Types
- Thing Types
- Palettes, Colormaps and Textures
- Sprites and Skins
- Voodoo Dolls
- legacy.wad contents
- Editing Links
- Boom Reference

This is a documentation of the new editing features in Legacy. These features should be in Doom Legacy version 1.43 and later.

Doom Legacy supports most Boom editing features discussed in the Boom Reference.

These editing documents are also fairly lightweight and straight forward, if you would like a more comprehensive version, please visit the Doom Legacy Wiki.

## Linedef Types

Range | Use
--- | ---
0 – 141 | Original Doom and Doom2 linedef types
142 – 269 | Boom extensions
272 – 306 | Legacy extensions

### Legacy Linedef extensions

LINEDEF type | Effect
--- | ---
FraggleScript triggers See FS getting started and FS reference manual.
272 | Start FS script (tagnumber), WR
273 | Start FS script (tagnumber), WR, 1-sided
274 | Start FS script (tagnumber), W1
275 | Start FS script (tagnumber), W1, 1-sided
276 | Start FS script (tagnumber), SR
277 | Start FS script (tagnumber), S1
278 | Start FS script (tagnumber), GR
279 | Start FS script (tagnumber), G1
Translucency maps
| Translucency Apply a translucency map to the middle texture, making a stained glass effect. The corresponding translucency maps are stored in legacy.wad.
284 | TRANSMED: Brightens everything behind the line. Turns things kinda green though.
285 | TRANSMOR: Less brightness with a lot less green.
286 | TRANSHI: Darkens a little with no green tint.
287 | TRANSFIR: Brightens but with no green tint.
288 | TRANSFX1: Selective translucency. Only certain colors are translucent.
Colormaps and water
280 | Water — Boom style Creates swimmable water in all tagged sectors, with colormap transfer like Boom 242. Similar to the Boom 242 deep water type but swimmable (using the Legacy swimming code). It operates more like water than 242 does, but does not have ripples like types 301 and 304. Unlike type 242, this type will not make the actual floor or ceiling into invisible barriers. The water is only shown if it is above the target sector's floor; otherwise, the regular floor is rendered. When water is rendered, the properties for the top of the water "plane" and the bottom, are both taken from the control sector's floor. The lightlevel of the water is controlled by the target sector's lightlevel unless the target sector has been also tagged to a "Transfer floor properties" linedef, in which case, the water will have the transferred lightlevel. It also uses the sidedef1 upper, lower, and middle textures as colormaps in the targeted sector. * It will also create a low fake ceiling if the control ceiling is lower than the target ceiling (this is usually not desired).
282 | Generate colormap This type sets the colormap of all tagged sectors like described below, without changing the floor/ceiling or light values. This is nice for putting colored lighting in many different sectors of different floor/ceiling heights:
Texture | Value | Effect
--- | --- | ---
upper | #rrggbba | 6 hex chars giving the color value in RGB format of the colormap mask, 1 alphanumeric char (a-z) denoting the amount of the colormap mask.
middle | #abbcc | a = boolean value (0 or 1) denoting if this particular colormap should be treated like fog (i.e. equal application of colormap to all walls, etc.) bb = numerical value (0-32) of the colormap at which the fade begins cc = numerical value (1-33) of the colormap at which the destination color will be reached. (not yet supported in hardware mode)
lower | #rrggbb | 6 hex chars denoting the color the colormap will fade to. (not yet supported in hardware mode)
Hex color values can be found via paint program or web editor. There are tons of colors to choose from but here are some to get you started: #FF0000 #009900 #0099FF #FFFF00 #6600CC #FF6600
283 | Fog sheet Displays a 128 high transparent dark fog texture as the middle texture. This can be used to make a better fog effect by patching up the "holes" in fog sectors. Because you often will not want this effect on both sides of the line, this linedef will only affect sides with a middle texture.
3D floors
281 | Solid 3D floor with shadow Creates a solid 3D floor in all tagged sectors. It creates a floor, as a solid slab with thickness, that can be walked on and under.
289 | Solid 3D floor without shadow Creates a solid 3D floor in all tagged sectors, same as type 281, but without changing the lighting under the floor slab. The floor does not cast a shadow, so the light below the slab is the same as above. It puts a floor, as a solid slab with thickness, that can be walked on and under, inside all tagged sectors.
300 | Solid translucent 3D floor Creates a solid translucent 3D floor in all tagged sectors, same as type 281, but translucent, and without changing the lighting under the floor slab. It creates a floor, as a solid slab with thickness, that can be walked on and under. Sidedef1 upper texture: #nnn nnn = 3 digit number (0..255) that encodes for the translucent effect alpha. If it is empty then alpha is 128.
301 | Translucent 3D water Creates translucent 3D water in all tagged sectors. Set the control sector ceiling to the water top level, and the floor to the floor level (or below). Since 1.44 Alpha 4 it allows selectable fog effects with alpha. Before that only alpha was selectable and it was drawn clear. Sidedef1 upper texture: #nnnF nnn = 3 digit number (0..255) that encodes for the translucent effect alpha. If it is empty then alpha is 127. F = fog effect selection, as in linedef 302. The default is clear ('A').
304 | Opaque water Creates a 3D fluid, that is not translucent on the surface. The control sector is sidedef1 of the linedef. Since 1.44 Alpha 4 it allows selectable fog effects with alpha, and rendering of low visibility transluceny. Before that it did not have translucent effect, did not have alpha, and it was drawn clear, with the upper texture as normal. The default is the old transparent effect. Sidedef1 upper texture: #nnnF nnn = 3 digit number (0..255) that encodes for the translucent effect alpha inside the opaque water. If it is empty then alpha is 190. It does not affect the surfaces. An low visibility alpha of 127..255 is recommended for opaque water. F = fog effect selection, as in linedef 302. The default is clear ('A').
302 | 3D fog Creates 3D fog (using control sector's colormap) in all tagged sectors. The middle texture is used for the fog effect. It is sampled for color, texture, and transparent pattern, generating a fog texture by blending and blurring. The fog effect generated is slightly different for each drawing mode, with the RGBA 32 bit drawing being the reference and the others approximating that as close as possible. Because the fog modes will be improved in the future, it is not recommended to rely too heavily on the exact rendering in the current version. Sidedef1 upper texture: #nnnF nnn = 3 digit number (0..255) that encodes for the translucent effect alpha. If it is empty then alpha is 110. F = fog effect selection. The default is fogdust ('F').
Letter | Effect
--- | ---
A | "Clear": No fog. The old water default. This is useful where the swimmable effect is used to simulate low gravity, and no fog is wanted.
B | "Cast": Paint all surfaces with textures. Not implemented yet.
C | "Colormap": Uses only the colormap fog (which only colors all sectors). This is useful where the swimmable effect is used to simulate low gravity, and only the colormap fog is wanted.
D | "Inside": Only render inside side and plane views. The old fog effect. Has the same light effect as 303, but also tints anything seen through any of the edges, top, or bottom, like a translucent. Because the fog effect is not present within the fog itself, it helps to add some fog sheet linedefs (283).
E | "Fog Lite": Renders with outside side and plane views, with low alpha. This will be a light fog effect, without distance effects.
F | "Fog Dust": The normal fog effect, with normal alpha, without distance effects. The user can add fog sheets in the wad to augment it. This is the fog default.
G | "Fog Sheet": A fog with distance effects. The current implementation uses fog sheets that are automatically added where fog sectors are joined.
H | "Fog Fluid": A fog optimized for use within fluids. Does not have distance effects.
303 | Ceiling light Creates a 3D light below the control sector's ceiling height, in all tagged sectors. Does the 3D light and colormap of a 3D floor, without the floor.
305 | Double light effect Creates a 3D light similar to 303, except that the light is only affects the area between the control sector ceiling height, and the control sector floor height. Does the 3D light and colormap of a 3D floor, without the floor. The control sector light and colormap are used with-in the control sector floor and ceiling heights.
306 | Invisible floor Creates a 3D invisible floor, or slab in each tagged sector. The floor can be walked on, and will stop weapons, but does not affect light nor colormaps.
Instant z movement
290 | Instant lower floor
291 | Instant raise ceiling

### New Linedef Flags

- Legacy has 2 slightly newer Line Flags.
- These flags can usually be found in your map editor by selecting a linedef property.
- And then enabling it via Flags check box.

Linedef Flag | Effect
--- | ---
512 = 0x200 | Passthru: This flag when set allows a push or switch linedef trigger to pass the push action thru it to ones within range behind it. - Boom
1024 = 0x400 | Alltrigger: This flag, when set, will allow all things to activate a W* (walkover) line, with the exception of flying blood. :) This includes all generalized types that are W*.

## Thing Types

Doom Legacy supports up to 64 deathmatch starts. For compatibility with the existing maps, Legacy will try alternate spawn spots. At each spot it will first check that the spot is unoccupied, to prevent players from being stuck together.

1. Will try 64 randomly selected deathmatch starts.
2. Will try randomly selected positions around the last randomly selected deathmatch start.
3. Will try all the coop spawn spots.
4. Will try randomly selected positions around a coop spawn spot.
5. When a unoccupied spot cannot be found, it will spawn at the last coop spawn spot, even if occupied. The players will be stuck together. This should not happen very often.

The Doom map format refers to different types of THINGs (a.k.a. mapthings, map objects, mobjs) by unsigned 16-bit codes, known as DoomEd numbers. Doom and Heretic use different numberings, with the number ranges overlapping in some places. The situation has been made even more complicated by the different Doom source ports introducing their own, often conflicting, special THING types.

Legacy tries to honor the most common "new" thing types, especially those introduced by Boom and SMMU.

THING type | description | origin
--- | --- | ---
4001-4028 | Playerstarts for players 5-32. | JDS group
5001 | Point push effect | Boom
5002 | Point pull effects | Boom
5003 | Camera location | SMMU
5004 | Path node | SMMU
1200 | Scream Ambient Sound | Heretic
1201 | Squish Ambient Sound | Heretic
1202 | Drops Ambient Sound | Heretic
1203 | Slow footsteps Ambient Sound | Heretic
1204 | Heart beat Ambient Sound | Heretic
1205 | Bells Ambient Sound | Heretic
1206 | Growl Ambient Sound | Heretic
1207 | Magic Ambient Sound | Heretic
1208 | Laughter Ambient Sound | Heretic
1209 | Fast footsteps Ambient Sound | Heretic

## Palettes, Colormaps and Textures

Doom Legacy has several new graphic and patch resources, as well as supporting different variations of modifying them.

### Doom Color Palette

Like many other older games, Doom used the 256 color paletted graphics. The graphics stored in a WAD use palette indices for color, instead of the RGB colors we might use today. The drawing engine maps these indices to real RGB colors using the palettes defined in the PLAYPAL lump in the IWAD.

So say you want to make a few new textures in your paint program. You can either create paletted images using the Doom palette, or use 24 or 32 bit RGB images and quantize them to the Doom palette when they are done. The Heretic palette is different from the Doom palette, but used in exactly the same way. Modern lump editors such as XWE will convert your image to the proper color palette automatically, but the results will generally be better if you use the correct palette to begin with.

Legacy 1.48 does not support hi-res or hicolor textures or sprites. However, Legacy 2.0 does! Please check the Doom Legacy website for more info on Legacy 2.0.

### Colormaps

The Doom software renderer uses many different kinds of color mapping tables to simulate lighting and color blending effects. A colormap is a 256-byte array used to remap the colors inside a palette:

new_index = colormap[old_index]

They are used to create colored area effects, such as sectors with colored lighting, or a colored fog for the whole level. The hardware renderer tries to emulate these same effects as best it can.

Colormaps can be created with a utility called Inkworks. Inkworks is a DOS based program which allows you to manipulate the color palette and save it in a WAD which contains both PLAYPAL and COLORMAP lumps to merge or insert into your WAD.

A wild or complex effect multicolored colormap works for software rendering, but the hardware renderer cannot use colormaps directly. The hardware renderer will analyze the colormap and try to reduce it to a simple color blend that it can emulate. The result somewhat has the same tints, but not detailed color effects. This hardware renderer method cannot handle colormaps that only highlight certain colors and leave others unmodified. It will generate a color blend that tints everything. Because of this limitation it is not recommended to generate unusual custom colormaps.

For both hardware and software modes, the easiest way to simulate colormaps is by using the Legacy Generate colormap linetype and setting a hexadecimal RGB color value in its texture field. This will generate a colormap for the software renderer, and a color blend for the hardware renderer.

### [ADVANCED TOPIC] Lightmaps

The Doom software renderer uses a set of 34 colormaps (one for each light level plus 2 extra), called a lightmap, to simulate different visibility levels. The default lightmap is stored in the confusingly named COLORMAP lump. One can also simulate colored lighting and fog using lightmaps.

### [ADVANCED TOPIC] Translucency maps

A translucency map is a 256-by-256 byte array used for selective software translucency, where a background color is seen through a translucent foreground:

new_index = transmap[fg_index][bg_index]

You can visualize it as a set of 256 colormaps, one for each foreground color. Boom (and hence Legacy) uses the lump TRANSMAP as the default translucency map.

### Section marker overview

Certain lump types in an IWAD or PWAD should be in continous blocks surrounded by the appropriate section markers. Here are the markers used by Doom Legacy:

Markers | Section contents
--- | ---
C_START, C_END | Software colormaps
P_START, P_END | Patch lumps (wall and sky textures)
PP_START, PP_END | alternative
F_START, F_END | Flat lumps (floor and ceiling textures)
FF_START, FF_END | alternative
S_START, S_END | Sprite lumps (mapthings)
SS_START, SS_END | alternative

Not all lump types need section markers, for example graphics, sounds and music do not. More about section markers and the lumps that go between them will be found below, but we also encourage you to view your IWAD contents for more info.

### Wall textures

#### P_START and P_END markers

Legacy honors the section markers P_START and P_END when introduced as new Patch textures. As well as PP, P1, P2, and P3, just like Doom.

- After adding your section markers, load your texture images between them.
- When a new wall texture is added, it's name and number will also need to be added to the PNAMES lump, and it's scale, name and off-sets added to the TEXTURE1 lump. If the lump editor doesn't do this automatically, you will have to manually. - (in Xwe, right click the texture image, select 'add to Patch Names' and then again select 'add to Texture').

(The quickest way is automatically. The way to do this is by selecting the Patches Tab, and then loading new texture images. Entry>Load.) From that point Xwe should automatically add the P_START and P_END markers, as well as the PNAMES and TEXTURE1 lumps) required for the new patch textures. The engine then takes the texture name, number, and scale, and puts them where they are assigned to by the map, in game.

It's a general rule of mine to create NEW patch textures rather than replacing an exsiting one, or creating NEW patch textures with a New Name rather than replacing an existing one.

Standard wall texture sizes: 64x128, 128x128, 256x128.
However as of 1.41x, hardware video mode in Doom Legacy supports x2 large flats and wall textures

### Sky textures

The original sky texture size in Doom is 256x128, however, Legacy also supports sky textures the size of 256x240. This is because of freelook: you are able to look higher, thus seeing a part of the sky you couldn't see in the original Doom. A taller sky texture was needed.

Using a taller graphic is better than scaling up the original skies, it looks better. However for compatibility, Legacy scales up the SKY textures if it finds that they are the old small size 256x128.

The bottom 40 lines are under the horizon and not normally seen. The lines 100 to 199 are the ones you see while looking straight ahead. The top lines 0-99 are the lines of sky you see when looking up.

There is a small utility called LUMPY provided in this archive to create patches for the sky. Other editing utilities can be used to add the new sky patch to your WAD, XWE for example, see Editing Links.

To convert the sky with LUMPY: LUMPY image.pcx -width 256 -height 240

To add the sky to your WAD with XWE:
Open XWE, select the Patches Tab at the bottom. Select: Entry>Load. Load your image.

### Flat textures

Flats in a PWAD are supported by the 'addfile' console command (loading a PWAD file in the game world). This is useful for testing purposes.

#### F_START and F_END markers

Flats in a PWAD already worked with the original Doom, you had to put a 'F_END' after the last flat. However, it wasted memory because the engine took all resources from the F_START of the original game WAD, up to the F_END in your PWAD, as flats.

Legacy honors the section markers F_START and F_END. The alternatives FF_START and FF_END are also honored. Flats are expected to be within these markers and these flat areas will be searched first. Separate flat sections within PWAD files are supported, and they add flats to those found in the IWAD. If a flat name is not found within the flat markers then Legacy will search the entire IWAD and PWAD for the flat.

Most ports and vanilla Doom engines expect F_START and F_END, so use them. It makes your WAD compatible with other ports, and speeds up the name search in Legacy.

Unlike patch textures, Flats don't need a pname or texture description lump. The engine determines their parameters from the lump size. Just slap them in your PWAD between the section markers F_START and F_END and you are done.

The standard flat (floor / ceiling) texture size in Doom is 64x64 pixels. However as of 1.41x, hardware video mode in Doom Legacy supports x2 large flats and wall textures. More about x2 flats and wall textures can be found on the Doom Legacy Wiki.

Legacy texture flat loading supports any number of new flats (using new names), and it only animates (loads) those animated flats that are used in a level.

Flat sizes supported:

- 32x32
- 64x64, the standard default size
- 128x128
- 256x256
- 1024x1024
- 2048x2048

### Animated textures

Swantbl can be used to create new animations. Now you're probably wondering, what the heck is Swantbl?

Swantbl is a utility that creates SWITCHES and ANIMATED lumps to put in your WAD, used by Boom and of course Doom Legacy. First you will need 2 to 4 image framesets for your animation - depending on if it is a flat, a wall, or a switch. They will need to be (named) and in your WAD. And then, by editing the DEFSWANI.dat you add new image frame (names) from Last to First. Then compile it with Swantbl, which then outputs the 2 animation lumps to put in your WAD. More info can be found on the Wiki about animated textures. And of course the DEFSWANI.dat.

### pic_t graphics

For now, certain Legacy resources need to be in a format called pic_t. You can also use LUMPY or Deepsea to convert other image formats to pic_t. In Legacy 2.0, this will be DEPRECATED, and replaced by PNG.

Pictures in pic_t format.

Name | Description
--- | ---
CONSBACK | Console background
CBLEFT | Console left border
CBRIGHT | Console right border

## Sprites and Skins

### Using SPRITES in a PWAD

The standard sprite naming system is used. It has 4 letters for the sprite name, followed by frame and rotation characters (5,6). The same sprite can be displayed flipped (reversed) for another frame and rotation using characters (7,8). For most objects and standing monsters, the left view is the reverse of the right view. For walking monsters, the reversed rotation must use a different frame with the correct leg position.

Defining a sprite with rotation 0, makes it cover all rotations. These are often used for round objects, and dead monsters. Having dead monsters with only the 0 rotation is traditional, and it saves on the wad size. Because monsters that are dead are less interesting, it also saves effort. However, it is quite possible to have dead monsters with all the rotation views, such as a dead boss.

The normal 8 position sprites are still supported:
(1,2,3,4,5,6,7,8).
An example is PLAYA2C8, which is for frame A rotation 2, reversed for frame C rotation 8.
The usual standing 8 rotation sprites, using sprite xxxx frame K, are:
xxxxK1, xxxxK2K8, xxxxK3K7, xxxxK4K6, xxxxK5.
Using the 16 rotations adds 8 more positions between the existing 8 rotation positions.

With Doom Legacy 1.47 and later, sprites can have 16 rotation positions. This uses a sprite naming system used by EDGE2 (3DGE).
The 16 position sprite order is:
(1,9,2,A,3,B,4,C,5,D,6,E,7,F,8,G).
An example is PLAYAACF, which is for frame A rotation A, reversed for frame C for rotation F.
The usual standing 16 rotation sprites, using sprite xxxx frame K, are:
xxxxK1, xxxxK9KG, xxxxK2K8, xxxxKAKF, xxxxK3K7, xxxxKBKE, xxxxK4K6, xxxxKCKD, xxxxK5.

SPRITES in a PWAD are supported by the 'addfile' console command (loading a PWAD file in the game world). This is useful for testing purposes.

#### S_START and S_END markers

Doom Legacy locates the S_START and S_STOP lump markers to speed loading, and to protect against using the wrong lump that might have the same name. In your PWAD, put S_START before the first sprite, and S_END after the last. Another START marker will also end the sprite section. During loading, the sprite lump in the sprite section will have preference over any lump of the same name found elsewhere in the PWAD. S_START (or SS_START) is not obligatory, but is recommended to clearly separate sprites from skin sprites, and other sections that might redefine the same sprite, but for other uses. It is good practice to place both S_START and S_END in a PWAD when adding new sprite graphics.

All sprite resources found in a PWAD will replace those loaded before, just like with any other resources. Thus, sprites in a PWAD replace the original sprites of Doom, Doom2 etc. due to the original game IWAD always being the first one loaded.

Using section markers (S_START, S_END) prevents getting the wrong lump. Sprite resources are recognized by their first 4 letters. For example player sprites start with PLAY. Suppose you replace the PLAYPAL resource in a PWAD, along with some sprites. If you don't put in the S_START, and PLAYPAL is BEFORE the sprites, it will be taken as a sprite, because it starts with PLAY.

You can replace selected frames of a sprite using a PWAD, for example replacing PUNGA0, but not PUNGB0. This DOES NOT work with DeHacked sprite renaming. This is useful for the rocket for example, when you want to replace only the missile or only the explosion.

## Creating Skins

### OVERVIEW

In Doom Legacy, each sprite skin in a PWAD is defined by a lump named S_SKIN. It contains an ASCII text file which describes the name and properties of the skin.

If you put more than one skin into a WAD file, there are effectively multiple resources of the same name S_SKIN. If this is a problem you can add any characters after the S_SKIN letters, so that your WAD editor doesn't complain. Example: S_SKIN1, S_SKIN2, ... Legacy will search only for the first 6 letters.

#### Skin sprites

A skin is basically a sprite replacement for the player avatar. ALL the frames of the player sprite must be replaced; this includes the normal run, attack and hurt sequences, as well as the normal death, and the explode death sequences.

#### Skin face

Though the status bar face is viewable only by the player who uses the skin, it may be replaced in order to be consistent with the player character appearance. As soon as we ran some tests with a Leprechaun skin, and saw the marine's head in the status bar... we added support for replacing the status bar face. Like the sprites, all the face graphics need to be replaced, if some are not defined, the game will quit.

#### Skin sounds

To make it more fun, a skin can have a set of up to 10 sounds replaced, these are called the 'skin sounds'. Skin sounds are replacements of a set of the original Doom sounds, which are given out only by the skin that defines them. All the sounds need not be replaced.

### S_SKIN resource format

// comments start with '//' name = xxxxxxx <- The name of your skin, max 16 chars, NO SPACES! sprite = XXXX <- Identify the sprites to use for this skin, 4 characters, optional. face = XXX <- Identify the status bar face graphics to use for this skin. MUST be 3 characters. dsORIGNL = dsNEWXXX <- Replace one of the 10 customisable sounds with a new sound.

#### EXAMPLE

An example is better than 1000 words, so here we go. Here's a sample of a text file that you could have in the S_SKIN resource:

// Terminator skin by xxx mail me yyy@myhouse.com name = terminator sprite = TERM face = TER dsouch = dstmouch dsplpain = dstmpain dsslop = dstmexpl

Let's study each line one by one:

// Terminator skin by xxx mail me yyy@myhouse.com

This is just a comment line. Comments start with '//'. Use comments to enter author information. The comments are not displayed anywhere into the game, but they may be useful if someone hacks your WAD, he/she'll know where it comes from and who did it.

name = terminator

This tells that the skin name is "terminator". The skin name is displayed in the multiplayer->setup menu. It is used by the "skin" command, in the console. You would type "skin terminator" at the console to change the skin manually, of course it's easier to use the multiplayer menu. The skin name must be UNIQUE : if there are two skins in a WAD with the same name, however different the graphics maybe, only the first skin will be used.

The skin name is also displayed in the teamplay rankings, when using "teamskins". Since each team is identified by a skin in teamskin mode, the rankings would show like this:

107 LEPRECHAUNS TEAM
98 TERMINATOR TEAM

As you see, the name of the skin is used as the name of the team. If you don't specify the name of the skin, it receives a name like SKIN 1, SKIN 2, etc.. not fun.

The name can't have spaces in it... for example a name like "blues brothers" will make Legacy quit with a message like "unknown 'brothers' keyword". We should fix that later.

sprite = TERM

Tells the name of the sprite to use for the skin. Sprites in Doom use only 4 letters, the original player graphics sprite is PLAY. The line above tells Legacy to look for TERMA1 instead of PLAYA1, TERMA2A8 instead of PLAYA2A8 etc.

It is usually easiest to put all the sprites right after the S_SKIN resource. Example:

S_SKIN
TERMA1
TERMA2A8
TERMA3A7
TERMA4A6
etc.

If you put the sprites just after S_SKIN, the sprite name doesn't matter, Legacy looks for the first sprite name, and continues to collect all the frames with the same sprite name, until the name has changed, or the end of the wadfile. You will want to rename the skin sprites only if your WAD editor requests that all resources have a _unique_ name.

Since you can use any name for the sprites, even without using the "sprite = XXXX" statement, you will probably need this only if you really can't get the sprites ordered just after the S_SKIN resource.

Note: ALL the frames of the player sprites must be replaced.

face = TER

All the status bar face graphics resources in Doom WAD have a name that starts with STF: STFST01, STFGOD0, STFDEAD, etc. This line simply gives the three characters to use in place of STF. So in this example Legacy will look for TERGOD0 instead of STFGOD0, TERST01 instead of STFST01, etc.

The STFB1, STFB2 and STFB3 resources of the original Doom are not used anymore. Doom Legacy only uses STFB0, and remaps the green color to the color of the player, as like it does for sprites.

Contrary to the sprites renaming, you MUST use this line in order to change the status bar face graphics. You must replace all of the status bar face graphics, that is, provide a replacement for all the resources that start with STF.

dsouch = dstmouch dsplpain = dstmpain dsslop = dstmexpl

These lines tell Legacy to use new sounds for this skin in particular, in place of the game's original sounds.

Up to 10 sounds related to the player actions can be replaced. The new sound names MUST start with letters DS. Any of the 10 sounds can be replaced, or all. The sounds that are not replaced will sound just like the original.

Original sound name | Purpose
--- | ---
dsplpain | pain sound
dspldeth | death sound
dspdiehi | extreme death sound
dsslop | gibbing sound
dsoof | hitting the ground / missing a key to a locked door
dsouch | hitting head on ceiling
dsnoway | failed using something
dsjump | jumping sound
dspunch | punch attack sound
dsradio | message sound

Note: the replacement sound doesn't have to be a new sound, you can use any sound from the game. For example, if you create an imp skin, you could replace the player sounds with the imp sounds.

#### Skins and sprites in the same PWAD

If you have a WAD with skins and also have other sprite replacements, make sure you use the S_START and S_END sprite section markers around the sprites. This prevents the skin sprites from replacing the default player sprites, in case you used 'PLAY' for any of the skin sprites. The PLAYxxxx skin sprites that are outside of the sprite section markers, will not be mistaken as the default player sprites.

#### Same resource name on different PWADs

To make it clear: Legacy will add skins using lumps in the same WAD. This means it does not matter if there are resources with the same name in different PWADs. Legacy is not bothered if you put several markers with the same name in a PWAD (multiple S_SKIN for example). We added support for S_SKINxx where xx can be any character, just because some WAD utilities don't like multiple resources of the same name.

You could for example use the same sprite name for several skins in a single PWAD, because they are delimited by skin markers (S_SKIN).

## Voodoo dolls

Version 1.44 and later.

Vanilla Doom created Voodoo Dolls from extra player start positions. This has traditionally been player1, but any player start position will do it (for instance in PLUTONIA MAP06). Voodoo dolls can be used to trip linedefs. This is necessary for many WADs, which use the voodoo dolls for timers and action activators.

Due to the way vanilla Doom created voodoo dolls, the last player start position placed on the map is the actual player start position. A player object would have already been spawned for the previous start position, but the spawning of a new player object would disconnect it, which made it a voodoo doll. It would not respond to player commands, but you could see it, and if you hurt it the player would get hurt.

Simply place an extra player1 start position in your map. The lower numbered player start positions will become voodoo dolls. The last player1 start position will become the actual player1 start.

There are several tricks to using a voodoo doll, and it should be easy to find help documents about using them.

- A voodoo doll can be moved on a conveyor, which is a scrolling floor.
- It will trigger any player triggered linedef that it passes over.
- Any item that it passes over, it will pickup and pass to its player.
- It will pass to the player any damage it receives.
- When crushed by a crusher, or killed by telefrag, it passes the effect to its player.
- It will attract monsters like it was an actual player.

For example, the appearance of the voodoo doll will alert and attract monsters. This can be more effective than creating tunnels, and does not require scripts. You can put a voodoo doll on one side of a door with a monster on the other side, and when the door opens, the monster walks forward triggering a teleport. The monster will then appear in the teleport target sector, which can be anywhere.

Another example, put a health bonus (any item that can be picked up) on a conveyor or scrolling floor, and have it move the items to the voodoo doll. The player will get the health and items without seeing them or any mechanism.

Even though similar effects can be done using Fraggle Script and spawning items, the voodoo doll can be simpler to implement, and it works with other Doom ports.

## legacy.wad contents

legacy.wad is the main data file in the Doom Legacy distribution. It contains several resources used by the engine, any of which can be replaced using PWADs.

All the graphics in legacy.wad are in patch format, unless stated otherwise.

lump | contents
--- | ---
Text lumps
VERSION | legacy.wad version string, must match the engine version
THINGS.H | FraggleScript header file containing THING names and flags. Add include("things.h"); in your script heading to use it. See also FS things.h on the Wiki.
ENDOOM | End text, in a strange semi-binary format.
Lightmaps and translucency maps
WATERMAP | Boom bluish underwater lightmap.
TRANSMED TRANSMOR TRANSHI TRANSFIR TRANSFX1 | Maps for default software translucency.
Sounds
DSOUCH | Player hits the ground or a wall.
DSJUMP | Player jumps.
DSFLOUSH | Walking through water.
DSGLOOP | Landing or jumping in water.
DSSPLASH | Splash, or getting out of water.
Sprites
BLUD[ab]0 | Random projectile blood
SMOK[a-e]0 | Smoke
SPLA[a-c]0 | Water splash?
TNT1A0 | Invisible sprite for invisible mapthings.
Other graphics
CREDIT | Credits page
CROSHAI[1-3] | HUD crosshairs
RANKINGS | Deathmatch rankings graphic (while in a net-game).
BRDR_MM BRDR_MT | window border patches?
A_DMG[1-3] | Wall blood splat patches
WATER[0-7] | "Old water" flats. Legacy uses 8 animated water flat textures, instead of the original 4.
RSKY[1-3] | Replacement sky textures, 256x240 pixels (not 256x128 like the original ones).
Menu graphics
M_SINGLE | single-player
M_MULTI | multi-player
M_SETUPM | multi-player setup
M_SETUPA | player1 multi-player setup
M_SETUPB | player2 multi-player setup
M_2PLAYR | split-screen multi-player setup
M_STSERV | start-server multi-player setup
M_CONNEC | connect-server multi-player setup
M_CONTROL M_CDVOL M_VIDEO M_SLIDEL M_SLIDER M_SLIDEC | more menu patches
Additional pic_t graphics
CORONA | Corona luminosity map
CONSBACK | Console background picture, 320x200, when 'con_backpic' is true (the console variable) also used as the loading picture MUST BE 200 lines high, can be any width (default is 320)
CBLEFT | Console left border, used with translucent console background MUST BE 200 lines high, any width (default is 8)
CBRIGHT | Console right border, used with translucent console background MUST BE 200 lines high, any width (default is 8)
Status bar overlay icons, pic_t
SBOHEALT | health (default shows a red cross)
SBOFRAGS | frags (default shows a skull)
SBOARMOR | armor (default shows a green armor)
SBOAMMO1 | pistol ammo
SBOAMMO2 | shotgun ammo
SBOAMMO3 | chaingun ammo
SBOAMMO4 | rocket ammo
SBOAMMO5 | plasma ammo
SBOAMMO6 | BFG ammo
SBOAMMO8 | super shotgun ammo

## Editing Links

Many of these wad tools are also available on several platforms. We have not kept track.

#### Common older Wad utilities

- WinTex version 4.3, by Olivier Montanuy
- NWT (New Wad Tools) version 1.3, by Denis Miller
- DeuTex - Which includes many wad tools.

These programs will allow you to insert new raw data resources into WADs.

#### Newer Doom lump editors

- XWE
- SlumpED

These will also work for almost all lump editing variations covered in this document.

#### Windows map editing utilities

- Doom Builder
- SLADE
- Wad Author
- Deepsea
- Eureka - understands DoomLegacy extensions

#### Windows lump editing utilities

- XWE
- SlumpED
- Wintex4.3 - with required runtime files

#### Linux/Unix map and lump editing utilities

- Yadex - by Andrew Apted.
- Eureka - understands DoomLegacy extensions. Successor to Yadex by Andrew Apted.
- DeuTex - Which includes many wad tools.
- SLADE

#### MacOS map editing utilities

- Hellmaker 1.2b2

#### Node builders

- Zennode - Best for Legacy Opengl node building.
- BSP - Most stable up to date node builder that we know.

#### Standard references

These documents are the current standard references to the inner workings of Doom, Boom, Heretic and Hexen. Although many of the limitations of the original games have been lifted and new features have been added, they are still very useful to a Legacy map editor.

Editing docs can be found at:
DoomLegacy Doom Editing Docs .
Doomworld Editing Docs directory .
Recommended:

- Matt Fell's Unofficial Doom specs v1.666 [txt]
- Team TNT's Boom reference v1.3
- Dr Sleep's Unofficial Heretic specs v1.0
- Ben Morris's Hexen specs v0.9
- WDJ's Level design patterns for Doom
- WDJ's Level design concepts for Doom

If you have questions regarding the WAD tools in particular, please consult the Doom editing newsgroups, or ask questions on the Doom Legacy forum (go to http://doomlegacy.sourceforge.net and look for the forum link.)

And above all, please check the Doom Legacy Wiki with any other questions regarding Doom Legacy editing!

Have fun!