UMAPINFO

UMAPINFO is a lump introduced in PrBoom+ "um" which allows several source ports 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 separate MAPINFO system; however, not all the syntaxes are compatible. UMAPINFO seeks to mitigate this problem by being a cross-port standard.

It was first implemented by Christoph Oelckers (Graf Zahl) on April 22, 2017.

Syntax
Note: Taken directly from umapinfo.txt. UMAPINFO has a less complex structure than ZDoom's ZMAPINFO: There is a simpler episode definition, and cluster definitions are not implemented. The syntax of UMAPINFO is as follows:

MAP mapname {   key = value key = value1, value2,...   ... } 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 entries and Doom 1 only  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.

An example of a UMAPINFO entry is as follows:

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." }

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


 * 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.
 * Specifies the string to prepend to the levelname on the automap. If not specified the mapname will be used by default followed by a colon and a space character (e.g. "E1M1: ").
 * Only print the levelname on the automap.
 * 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.
 * Specifies the map the regular exit leads to. In Doom 1 this may cross episodes.
 * Specifies the map the secret exit leads to. In Doom 1 this may cross episodes.
 * Specifies the sky texture to be used for this map.
 * Specifies the music to be played on this map.
 * Specifies the background for the 'level finished' screen. This can override Doom's animated screens for E1-3.
 * Specifies the background for the 'entering level' screen. This can override Doom's animated screens for E1-3.
 * Specifies the level's par time.
 * Overrides a default map exit (e.g. ExM8 or MAP30).
 * Ends the game after this level, showing the default post-game screen for the current episode. Skips the 'entering level' screen.
 * Ends the game after this level, showing the specified graphic as an end screen. Skips the 'entering level' screen.
 * Ends the game after this level, showing the bunny scroller. Skips the 'entering level' screen.
 * Ends the game after this level, showing the cast call. Skips the 'entering level' screen.
 * Currently only working for levels that end the game: When true skips the 'level finished' screen.
 * 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.)
 * Disables default intermission text for the given map (e.g. to go from MAP06 to MAP07 without a text showing up.)
 * 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.
 * Disables default intermission text for the given map's secret exit.
 * 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 flat will be used, regardless of which map it is used on.
 * Music to be used for intertext and intertextsecret. If not specified will be used, depending on the IWAD.
 * Clears the episode menu of all previous entries. Should be used on the first map if a mod wants to define its own episodes. Doom 2 and Chex Quest have no episodes by default.
 * 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.
 * 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. uses ZDoom's class names (see list below.)
 * Disables any previously-defined boss actions (including map defaults) for the given map.

Default handling:

Normally, if some information cannot be found, the engine will fall back to its hard coded implementation, with a few exceptions:
 * 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!
 * 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.
 * 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.
 * This will not look up the default backdrop for a given map but always use.

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 MusicChanger Deh_Actor_145 [...]   Deh_Actor_249

Revisions
Being a new standard, UMAPINFO has had several revisions, listed below:


 * Rev 2.1 (by Rfomin, Jun 22 2021)
 * Lookup for default backdrop if 'interbackdrop' is not specified.


 * Rev 2 (by Fabian Greffrath, May 11 2021)
 * Introduce the new 'label' field to allow for overriding of the string that gets prepended to the 'levelname' on the automap.


 * Rev 1.6 (by Fabian Greffrath, Apr 19 2021)
 * Skip the 'entering level' screen if one of endgame, endpic, endbunny or endcast is set.


 * Rev 1.5 (by Shadow Hog, Apr 17 2021)
 * Add in all the additional actor names for DEHEXTRA.


 * Rev 1.4 (by Rfomin, Mar 23 2021)
 * Clarify the 'episode' field in the case of Doom 2 and Chex Quest.


 * Rev 1.3 (by Fabian Greffrath, Mar 5 2021)
 * If interbackdrop does not specify a valid flat, draw it as a patch instead.


 * Rev 1.2 (by JadingTsunami, Feb 12 2021)
 * Fix typo in ZDoom-style Actor name.


 * Rev 1.1 (by Xaser Acheron, Jan 24 2021)
 * Updates to the UMAPINFO docs to disambiguate the 'bossaction' field a bit.


 * Rev 1 (by Graf Zahl, Jul 10 2017)
 * Updated UMAPINFO spec to curly brace syntax.


 * Rev 0 (by Graf Zahl, Apr 22 2017)
 * Initial implementation.

Supported ports
UMAPINFO is supported by the following ports:
 * Doom Retro: Partial support
 * DSDA-Doom: Rev 2
 * Eternity Engine: In development
 * From Doom With Love: Rev 2 (Based off DSDA-Doom)
 * GZDoom: Rev 1 since version 4.6.0, but works correctly up to Rev 1.4
 * K8Vavoom: Partial support (Untested)
 * Nugget Doom (Based off Woof!)
 * Odamex: Supported since version 10.0.0
 * PrBoom+um: Rev 1.2. Development version: Rev 2
 * ReBoom: Rev 2 since version 2.05um as a option
 * Woof!: Rev 2 since version 6.0.0, Woof! 5.1.0 supports Rev 1.6