UMAPINFO uses an ini-like syntax.
A map is defined with

MAP mapname
{
    key = value
    key = value1, value2,...
    ...
}

entries. Values can be strings, enclosed in quotation marks ("), numbers or identifiers. Identifiers are case insensitive names that start with a letter and may only contain letters, numbers or the underscore ('_')

The map names are limited to the format of the currently loaded IWAD, i.e. Doom 2 only supports MAPxx entries and Doom 1 only ExMy entries.
The numbers x and y can exceed their original limits, though, so MAP50, E5M6 or even MAP100 or E1M10 are valid map names for their respective game.
This limit comes from the game using numeric variables 'gameepisode' and 'gamemap' to identify a level. It may later be decided to lift the naming restriction but this cannot be done without some extensive refactoring which simply exceeds the scope of the initial implementation.

Currently the follwing keys are supported. If not given, the hardcoded default will be used, unless the following list says differently.

levelname = "name"          ; Specifies the readable name of the level (e.g. "Hangar") This will be used in the automap and also on the status screen if no name patch is specified.
levelpic = "graphic"        ; Specifies the patch that is used on the status screen for 'entering' and 'finished'. This can be omitted, in that case the levelname will be printed with the HUD font.
next = "mapname"            ; Specifies the map the regular exit leads to. In Doom 1 this may cross episodes.
nextsecret = "mapname"      ; Specifies the map the secret exit leads to. In Doom 1 this may cross episodes.
skytexture = "texture"      ; Specifies the sky texture to be used for this map.
music = "song"              ; Specifies the music to be played on this map.
exitpic = "graphic"         ; Specifies the background for the 'level finished' screen. This can override Doom's animated screens for E1-3.
enterpic = "graphic"        ; Specifies the background for the 'entering level' screen. This can override Doom's animated screens for E1-3.
partime = seconds           ; Specifies the level's par time.
endgame = false             ; Overrides a default map exit (e.g. ExM8 or MAP30)
endgame = true              ; Ends the game after this level, showing the default post-game screen for the current episode.
endpic = "graphic"          ; Ends the game after this level, showing the specified graphic as an end screen.
endbunny = true             ; Ends the game after this level, showing the bunny scroller.
endcast = true              ; Ends the game after this level, showing the cast call.
nointermission = true/false ; Currently only working for levels that end the game: When true skips the 'level finished' screen.
intertext = "text"          ; Shows an intermission text screen after the level is exited through the regular exit. "text" can be multiple lines, for ease of reading they can be specified as multiple parameters over several lines (see example below.)
intertext = clear           ; Disables default intermission text for the given map (e.g. to go from MAP06 to MAP07 without a text showing up.)
intertextsecret = "text"    ; Shows an intermission text screen after the level is exited through the secret exit. This will never default to 'intertext'. If not given, the defaults will be used
intertextsecret = clear     ; Disables default intermission text for the given map's secret exit.
interbackdrop = "flat", "patch"
                            ; Backdrop to be used for intertext and intertextsecret. If it does not specify a valid flat, it will be drawn as a patch instead. If not specified the FLOOR4_8 flat will be used, regardless of which map it is used on.
intermusic = "song"         ; Music to be used for intertext and intertextsecret. If not specified D_VICTOR/D_READ_M will be used, depending on the IWAD.
episode = clear             ; Clears the episode menu of all previous entries. Should be used on the first map if a mod wants to define its own episodes.
episode = "patch", "name", "key"
                            ; Defines an entry for the episode menu. If all defined episodes define a valid patch, those will be shown, otherwise the names will be used with the HUD font. At most 8 episodes can be defined.
bossaction = thingtype, linespecial, tag
                            ; Defines a boss death action, overriding any map default actions. Tag 0 is not allowed except for level exits. Shoot triggers, teleporters and locked doors are not supported. A map may define multiple death actions. Thingtype uses ZDoom's class names (see list below.)
bossaction = clear          ; Disables any previously-defined boss actions (including map defaults) for the given map.

k8: should specifying "bossaction" on map07, for example, clear default map07 boss actions first, or add to them?
what to do for:
  bossaction = boo, 666, 666
  bossaction = clear
  bossaction = boo, 888, 888
k8: btw. is quotes allowed in <thingtype>? looks like they aren't. also, are quores *required* for other cases? should
  intertext = clear
and
  intertext = "clear"
mean two different things?


Default handling:

Normally, if some information cannot be found, the engine will fall back to its hard coded implementation, with a few exceptions:

- nextsecret: If not present, it will use the normal exit's map if the current map has a MAPINFO record. This also applies to maps which by default have a secret exit!
- enterpic: If the map that was just left has an exitpic entry and the map to be entered has no enterpic entry, the previous map's exitpic entry will be used for both screens.
- levelpic: If not given, the status screen will instead print the map's name with a suitable font (PrBoom uses STFxxx) to ensure that the proper name is used.
- interbackdrop: This will not look up the default backdrop for a given map but always use FLOOR4_8.

Example:

MAP E1M7
{
    levelname = "The Hidden Cave"
    skytexture =  "sky2"
    intertext = "You have beaten the shit",
        "out of those big barons",
        "and now must continue the fight."
}

Thingtypes:

DoomPlayer
ZombieMan
ShotgunGuy
Archvile
ArchvileFire
Revenant
RevenantTracer
RevenantTracerSmoke
Fatso
FatShot
ChaingunGuy
DoomImp
Demon
Spectre
Cacodemon
BaronOfHell
BaronBall
HellKnight
LostSoul
SpiderMastermind
Arachnotron
Cyberdemon
PainElemental
WolfensteinSS
CommanderKeen
BossBrain
BossEye
BossTarget
SpawnShot
SpawnFire
ExplosiveBarrel
DoomImpBall
CacodemonBall
Rocket
PlasmaBall
BFGBall
ArachnotronPlasma
BulletPuff
Blood
TeleportFog
ItemFog
TeleportDest
BFGExtra
GreenArmor
BlueArmor
HealthBonus
ArmorBonus
BlueCard
RedCard
YellowCard
YellowSkull
RedSkull
BlueSkull
Stimpack
Medikit
Soulsphere
InvulnerabilitySphere
Berserk
BlurSphere
RadSuit
Allmap
Infrared
Megasphere
Clip
ClipBox
RocketAmmo
RocketBox
Cell
CellPack
Shell
ShellBox
Backpack
BFG9000
Chaingun
Chainsaw
RocketLauncher
PlasmaRifle
Shotgun
SuperShotgun
TechLamp
TechLamp2
Column
TallGreenColumn
ShortGreenColumn
TallRedColumn
ShortRedColumn
SkullColumn
HeartColumn
EvilEye
FloatingSkull
TorchTree
BlueTorch
GreenTorch
RedTorch
ShortBlueTorch
ShortGreenTorch
ShortRedTorch
Stalagtite
TechPillar
CandleStick
Candelabra
BloodyTwitch
Meat2
Meat3
Meat4
Meat5
NonsolidMeat2
NonsolidMeat4
NonsolidMeat3
NonsolidMeat5
NonsolidTwitch
DeadCacodemon
DeadMarine
DeadZombieMan
DeadDemon
DeadLostSoul
DeadDoomImp
DeadShotgunGuy
GibbedMarine
GibbedMarineExtra
HeadsOnAStick
Gibs
HeadOnAStick
HeadCandles
DeadStick
LiveStick
BigTree
BurningBarrel
HangNoGuts
HangBNoBrain
HangTLookingDown
HangTSkull
HangTLookingUp
HangTNoBrain
ColonGibs
SmallBloodPool
BrainStem
PointPusher
PointPuller
MBFHelperDog
PlasmaBall1
PlasmaBall2
EvilSceptre
UnholyBible
