This is a documentation of the new editing features in Legacy. These features should be in Doom Legacy version 1.43 and up.
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.
|0 – 141||Original Doom and Doom2 linedef types|
|142 – 269||Boom extensions|
|272 – 306||Legacy extensions|
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|
|284 – 288||
These linedefs each apply a different translucency map to the middle texture. 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|
Water — Boom style
Creates swimmable water in all tagged sectors, with colormap transfer like Boom 242.
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 will also create a low fake ceiling if the control ceiling is lower than the target ceiling (this is usually not desired).
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:
Hex color values can be found via paint program or web editor.
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.
Solid 3D floor with shadow
Creates a solid 3D floor in all tagged sectors.
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.
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.
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.
Translucent 3D water
Creates translucent 3D water in all tagged sectors.
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').
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').
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').
Creates a 3D light below the control sector's ceiling height, in all tagged sectors.
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.
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|
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* line, with the exception of flying blood. :) This includes all generalized types that are W*.
Legacy supports up to 64 deathmatch starts. For compatibility with the existing maps, Legacy will use the player starts if all the deathmatch starts in a map are occupied. If all the player starts are occupied (including extended ones), then a dm start chosen randomly will be used.. and players might get stuck together, but this will happen normally only at the beginning of games with maps with few dm starts.
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.
|4001-4028||Playerstarts for players 5-32.||JDS group|
|5001, 5002||Point push and pull effects||Boom|
Doom Legacy consists of several new graphic and patch resources as well as supporting different variations of modifying them, view the following:
Like many other older games, Doom used originally 256 color paletted graphics. The graphics stored in a WAD do not have real color information but palette indices. The engine maps these indices to real RGB colors using the palettes defined by 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/32 bit truecolor images and quantize them to the Doom palette when they are done. Heretic palette is different from Doom's, but used exactly in 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.44 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.
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:
They are used to create colored area effects, such as sectors with colored lighting, or a colored fog for the whole level.
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. This old way of creating colormaps is somewhat deprecated due to the fact that they only would show up in software mode. Yet, still an option.
For both hardware and software modes, the easiest way to simulate colormaps is just by using Legacy's Generate colormap linetype and setting a hexadecimal RGB color value in its texture field. When this is done, an actual colormap lump is not needed.
The Doom software renderer uses a set of 34 different 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.
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:
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.
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:
|C_START, C_END||Software colormaps|
|P_START, P_END||Patch lumps (wall and sky textures)|
|F_START, F_END||Flat lumps (floor and ceiling textures)|
|S_START, S_END||Sprite lumps (mapthings)|
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.
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.
(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
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.
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.
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. 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 lump. Just slap them in your PWAD between the section markers F_START and F_END and your 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.
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-4 image framesets for your animation - depending wheater its 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.
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. This is a DEPRECATED feature, and is replaced in Legacy 2.0 by PNG.
S_START and S_END markers
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.
It is not needed anymore to append the missing sprites in a PWAD (using your faithful lump editor). You need only S_END (or SS_END) added after the last sprite in your 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's 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. since the original game IWAD is always the first one loaded.
If you put S_END, but not S_START, sprites will be searched from the beginning of the PWAD, up to the S_END. We could get rid of S_END, but the loading of sprites would be less efficient.
Another reason for section markers (S_START, S_END): 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, and use sprites in it, if you don't put the S_START, and
PLAYPAL is BEFORE the sprites, it will be taken as a sprite since it
starts with PLAY.
Solution: always use S_START/S_END, or put the PLAYPAL resource after S_END.
You can replace only some frames of a sprite in a PWAD, for example replacing PUNGA0, but not PUNGB0. this DOES NOT work using sprite renaming with DeHackEd. So I really encourage you to use sprites in a PWAD directly instead of DeHackEd sprite renaming. This is useful for the rocket for example, when you want to replace only the missile or only the explosion.
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.
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.
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.
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.
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:
Let's study each line one by one:
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.
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.
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:
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.
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.
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|
|dspdiehi||extreme death sound|
|dsoof||hitting the ground / missing a key to a locked door|
|dsouch||hitting head on ceiling|
|dsnoway||failed using something|
|dspunch||punch attack 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.
If you have a WAD with skins _AND_ other sprite replacements, make sure you use S_START, S_END sprite section markers so that the skin sprites are not replacing the default player sprites, in case you use 'PLAY' for the skin sprites. If the PLAYxxxx skin sprites are _outside_ of the sprite section markers, they will not be mistaken as the default player sprites.
To make it clear: Legacy will add skins _WAD PER WAD_. Which means it doesn't matter at all if there are resources with the same name in different PWADs. In fact, Legacy doesn't even bother if you put several markers with the same name in a PWAD (multiple S_SKINs 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, since they are delimited by skin markers (S_SKIN).
Now in version 1.44 and up.
Create Voodoo Dolls for extra player1 start positions. This is necessary for many WADs, which use the voodoo dolls for timers and action activators.
Simply place an (extra player 1 start) in your map.
The trick is using it in an area where the player or item can be pushed, pulled or teleported into effected areas.
For example, the appearance of the player will alert monsters, which is useful for teleporting monsters in front of your real player, without the old way (creating a small tunnel) or without any scripts. So, if you put the voodoo doll in a small room with a monster on the other side of a door, when the door opens, the monster walks forward, which then could be teleported in front of your (real) player start location.
This is only 1 example of the many different things that could be done with Voodoo dolls. Another example would be receiving health by means of conveyor or scrolling floor.
Even though similar effects can be done using Fraggle Script and spawning items. The difference is, Voodoo dolls don't require a script and can be implemented via map creation. This makes it easier when you already plan on doing loads of work to your map.
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.
|VERSION||legacy.wad version string, must match the engine version|
FraggleScript header file containing THING names
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.|
|DSOUCH||Player hits the ground or a wall.|
|DSFLOUSH||Walking through water.|
|DSGLOOP||Landing or jumping in water.|
|DSSPLASH||Splash, or getting out of water.|
|BLUD[ab]0||Random projectile blood|
|TNT1A0||Invisible sprite for invisible mapthings.|
|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).|
|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)|
|SBOAMMO8||super shotgun ammo|
Common older WAD utilities are WinTex version 4.3, by Olivier Montanuy and NWT (New Wad Tools) version 1.3, by Denis Miller. Both programs will allow you to insert new raw data resources into WADs.
Newer Doom lump editors such as XWE and SlumpED will also work for almost all lump editing variations covered in this document.
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.
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!