MAPINFO

From DoomWiki.org

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.

Contents

[edit] Versions

There are several different MAPINFO syntaxes.

[edit] 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).

[edit] 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.

Support for Hexen MAPINFO lumps, with certain ZDoom extensions to what it refers to as the "old syntax," were added to Eternity in Git commit 0de361f. Hexen MAPINFO is treated with lower priority than Eternity's native format - if a map has both defined for it, the Hexen MAPINFO data for that map will be discarded entirely.

[edit] 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.

[edit] 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.

[edit] Doomsday

Doomsday does not use the MAPINFO lumps (except when playing Hexen, for obvious reasons), and instead features "Map Info" blocks in DED files, that serve the same purpose. Risen3D, derived from Doomsday, uses the same system. Map Info features added in Doomsday after the fork may not be compatible with Risen3D and vice versa.

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

Intermission screens are defined using separate InFine definitions, while level progression is defined using the XG system.

[edit] See also