Changes

From DoomWiki.org

WAD

8,239 bytes removed, 02:04, 14 October 2007
Replacing page with 'a'
'''WAD''' (which, according to the [[Doom Bible]], is an acronym for "Where's All the Data?" [http://5years.doomworld.com/doombible/doombible.pdf]) is the file format used by Doom and all Doom-engine-based games for storing data. A WAD file consists of a header, a directory, and the data that makes up the resources stored within the file. WADs can be either [[IWAD]]s or [[PWAD]]s. A WAD file can be read and/or edited by many tools such as [[Editors#WAD_editors|WAD editors]] some other [[Editors|editors]] ==Header== A WAD file always starts with a 12-byte header. It contains three values:{| {{prettytable}} ! colspan="4" | wadinfo_t|-!Position !! Length !! Name !! Description|-|0x00 || 4 || identification || The [[Wikipedia:ASCII|ASCII]] characters "IWAD" or "PWAD". Defines whether the WAD is a [[IWAD]] or an [[PWAD]].|-|0x04 || 4 || numlumps|An integer specifying the number of lumps in the WAD.|-|0x08 || 4 || infotableofs || An integer holding a pointer to the location of the directory.|}All integers are 4 bytes long in [[Wikipedia:x86|x86]]-style [[Wikipedia:Endianness|little-endian]] order. Their values can never exceed 2<sup>31</sup>-1, since Doom reads them as [[Wikipedia:Signedness|signed]] ints. ==Directory== The directory associates names of lumps with the data that belong to them. It consists of a number of entries, each with a length of 16 bytes. The length of the directory is determined by the number given in the WAD header. The structure of each entry is as follows: {| {{prettytable}}! colspan="4" | filelump_t|-!Offset !! Length !! Name !! Content|-|0x00 || 4 || filepos || An integer holding a pointer to the start of the lump's data in the file.|-|0x04 || 4 || size || An integer representing the size of the lump in bytes.|-|0x08 || 8 || name || An ASCII string defining the lump's name. Only the characters A-Z (uppercase), 0-9, and [ ] - _ should be used in lump names (an exception has to be made for some of the [[Arch-Vile]] sprites, which use "\"). When a string is less than 8 bytes long, it should be null-padded to the tight byte.|} Tools should not assume the lump-order in the WAD to be sorted by their byte offset into the WAD. "Virtual" lumps (such as '''F_START''') only exist in the directory, having a size of 0. Their offset value therefore is nonsensical (often 0). It is possible for more than one lump to have the same offset value, aswell as having offsets that overlap other lump data. ==Lump order==The majority of lumps have no restrictions on where they must be located in WAD files, although there are typically some guidelines to make the file easily readable by other people. For certain lumps, however, the location is crucial. ===Map data lumps===A map in Doom is made up of several lumps, each containing specific data required to construct and execute the map. The first lump gives the internal name of the map. In Doom, this had to be in the form ExMy or MAPxx, where x and y could not exceed 4 and 9 respectively (Ultimate Doom), and xx could not exceed 32 (Doom 2/Final Doom). Other than defining the name of the map, the lump is usually empty but can contain data. The level name marks the start of this map. In order to work properly, the following lumps must follow immediately after the the level name: *[[Thing|THINGS]]: A lump listing all the Things present in this map: their X and Y coordinates, starting angles, type and flags. As with all of these lumps, this list will be generated by your level editor and should generally be left alone. {{ref|1}} *[[Linedef|LINEDEFS]]: A list of linedefs, defined by their starting and ending vertices, flags, type, tag, args, and front and back sidedefs (if any). Note: The standard Doom format does not contain args. *[[Sidedef|SIDEDEFS]]: A list of the sidedefs that are linked to the linedefs. These contain the data for what textures appear where on the side of each line, their X and Y offsets, and what sector this side of the linedef belongs to. *[[Vertex|VERTEXES]]: A list of each vertex in the map, using X and Y coordinates. *[[Seg|SEGS]]: A list of line segments called "segs" that connect to form subsectors. Created by a [[node builder]]. *[[Subsector|SSECTORS]]: A list of subsectors, created by a node builder. *[[Node|NODES]]: The node tree which Doom uses to speed up the rendering process. Similar to a vismap in modern 3D games (such as Quake 3). Created by a node builder. *[[Sector|SECTORS]]: Defines the floor and ceiling heights and textures, as well as light value, tag, and type of each sector in your map. *[[Reject|REJECT]]: Optionally compiled by the node builder, this lump contains data about which sectors are visible from which other sectors. Originally, Doom used this to optimize the game speed by skipping AI routines for enemies whose target was in a rejected sector. Some modern [[source port]]s do not require this lump any more; [[ZDoom]] for example has been designed to work even without this lump present. For compatibility purposes, an empty (0-filled) REJECT lump should be included if nothing else. The REJECT lump can also be used to create certain special effects (sectors into which enemies cannot see, for example) if modified carefully. *[[Blockmap|BLOCKMAP]]: Collision-detection information which determines whether objects in a map are touching. *[[Behavior|BEHAVIOR]]: Not originally a part of Doom, the BEHAVIOR lump was first used in Hexen and contains the compiled scripts that this map will use. Vanilla Doom and other ports designed for Doom only will crash when this lump is present because Hexen format levels are not compatible with Doom format levels. This lump must be present for Hexen format levels since it is the only way to tell if a map is in Hexen or Doom format. ====Notes==== * {{note|1}} Various Doom-derivatives extend the THINGS lump with information on Z-height, action specials and tags. ===[[Flat]]s, [[Sprite]]s, and [[Patch]]es=== These three resources must be located between special marker lumps so that Doom knows what it is looking at. Other than defining the beginning and end of a graphics section, these lumps contain no data and are 0 bytes long.  The markers consist of names X_START and X_END, where X is the first 1 or 2 letters of the appropriate resource. For example, sprites should be located between S_START and S_END markers. SS_START and SS_END are usually used for user WAD files. These markers are required by DOOM:{| {{prettytable}}! Start marker !! End marker !! What !! Used by|-| F_START || F_END || [[Flat]] delimiters || All versions|-| S_START || S_END || [[Sprite]] delimiters || All versions|} These markers are found in the official WAD files, but are unused by known DOOM engines:{| {{prettytable}}! Start marker !! End marker !! Found in !! What !! Used by|-| P_START || P_END || || [[Patch]] delimiters || All versions|-| P1_START || P1_END || inside P_ range || Shareware, [[Heretic]] or [[Hexen]] patches || Doom Shareware and up (but not Final Doom), Heretic, Hexen|-| P2_START || P2_END || inside P_ range || Registered, Heretic or Hexen patches || Doom Registered and up (but not Final Doom), Heretic, Hexen|-| P3_START || P3_END || inside P_ range || Doom2 patches || Doom2, but not Final Doom|-| F1_START || F1_END || inside F_ range || Shareware, Heretic or Hexen flats || Doom Shareware and up (but not Final Doom), Heretic, Hexen|-| F2_START || F2_END || inside F_ range || Registered, Heretic or Hexen flats || Doom Registered and up (but not Final Doom), Heretic, Hexen|} Patches are not required to have any markers. Some [[lump]] management utilities require P_START and P_END. ===Miscellaneous=== Some lumps are known by their names and apply to the game as a whole. Some of these are:* Sound effects* Music* [[PLAYPAL]]: Color palettes for various situations.* [[COLORMAP]]: Map to adjust pixel values for reduced brightness.* [[ENDOOM]]: Text displayed when [[vanilla Doom]] exits.* [[TEXTURE1]], [[TEXTURE2]], [[PNAMES]]: Data defining the [[wall texture]]s.* [[Demo|DEMO]]s: Recorded games, auto-played before any level is started. [[Category:Resources]][[Category:Doom engine]]
Anonymous user