MAPINFO

MAPINFO is a lump introduced in Hexen which allows to describe meta-data associated to levels (such as their name, music, sky texture, par time, etc.) instead of having them hardcoded in the engine. Several ports have adopted a MAPINFO system; however not all the syntaxes are compatible. Doomsday does not use the MAPINFO lump outside of Hexen, but features "Map Info" definition included in DED files.

Versions
There are several different MAPINFO syntaxes.

Hexen
A Hexen-style MAPINFO lump contains declarations of this form: ;This is the first map map 1 "WINNOWING HALL" warptrans 1 next 2 cluster 1 sky1 SKY2 0 sky2 SKY3 0 lightning cdtrack 13 The map is identified by a number, which means this syntax is only adapted to map lumps named according to the MAPxx convention. There are no clear separators between two commands other than a linebreak, making it difficult to parse if unknown keywords are encountered since the amount of parameters for each command can only be known from the keyword (for example, two parameters for sky1 but only one for cdtrack).

Eternity Engine
The Eternity Engine uses a different syntax, with a different lump name to avoid compatibility issues: EMAPINFO. [MAP01] levelname = De kerker edf-intername = true The syntax is similar to that used by SMMU in map marker lumps (e.g. MAP01), except that Eternity recommends a centralized lump (EMAPINFO).

Map definitions are cumulative, so any value not mentioned uses the default value for the level -- in this example, the sky, music, par time, and so on are unmodified compared to the hardcoded default values for MAP01.

ZDoom (old)
The first ZDoom MAPINFO format was simply an evolution of the Hexen format, adapted to take into account the needs of other supported games. This is an example of the old ZDoom MAPINFO syntax: map E1M4 "UAC Waste and Storage Facility" cluster 1 next E1M5 secretnext E1M0 par 660 sucktime 1 music D_SOLOBT The map is identified by its lump name. Contrarily to Hexen-format, clusters are not implicit and must be defined too, as well as episodes (episodes being actually merely a way to give a name to a choice of a starting map when starting a new game). Syntactically is otherwise identical with the Hexen format. Other ports, such as Risen3D and Vavoom, also use this syntax though with some minor differences in supported keywords (for example, Vavoom uses secret instead of secretnext). Because cluster definitions include intermission messages (such as the one displayed between the MAP06 and MAP07 slots in Doom II), parsing must allow multi-line commands, which makes unknown commands problematic.

ZDoom (new)
The new ZDoom MAPINFO format was designed to have a strong syntax that would allow correct parsing of MAPINFO lumps with unknown keywords. This is an example of the new ZDoom MAPINFO syntax: map E1M1 "Hangar" { 	levelnum = 1 titlepatch = "WILV00" next = "E1M2" secretnext = "E1M9" sky1 = "SKY1" cluster = 1 par = 30 music = "D_E1M1" } The use of curly braces clearly delineates the extent of the map definition, and the use of the equal sign clearly identifies a token as being a keyword. This also allows for keywords with optional parameters, such as sky1 here which does not mention its second parameter. The language was also extended to allow definition of skills and more generic game information (such as the name of the info screen lumps displayed by "Read This!"/F1 key, or of the ENDOOM lump). Because of its differences with older MAPINFO lumps that are read by other ports as well, the ZMAPINFO alias can be used to avoid compatibility issues with other ports.

Doomsday
Doomsday does not use the MAPINFO lumps (except jHexen for obvious reasons), and instead features "Map Info" definitions in DED files, that serve the same purpose. Risen3D, derived from Doomsday, uses the same system. As a result of the fork, compatibility issues may arise if newer DED features are used in such a lump.

Map Info { ID = "E1M1"; Name = "HUSTR_E1M1"; Author = "id Software"; Music = "e1m1"; Par time = 30; Gravity = 1; Sky = "sky1"; }

Interludes are defined using separate InFine scripts.