ap_gen_tool Documentation

The Basics

Advanced game JSONs

ap_gen_tool is © Daivuk & Kaito Sinclaire, and is open source software released under the terms of the GNU GPL v2.
Website Source

Episode Structure

"name"

This controls what the name of the episode is, as shown on the options page of Archipelago.

If omitted, the default of "Episode n", where n is the episode number, is used.

Example:
{
  "name": "Knee Deep in the Dead",
  "boss_level": 8,
  "maps": [ 
    { "lump": "E1M1", "name": "Hangar (E1M1)" }
    // Remaining levels omitted for brevity
  ]
}

"description"

This is optional extra text added to the episode option's description just before the list of maps the episode contains. Use this if there's something extra you need to specify about the maps contained in an episode.

Example:
{
  "name": "Spaceflight to Io",
  "description": "MAP31 and MAP32 are part of the normal level progression.",
  "maps": [ 
    { "lump": "MAP12", "name": "The Cargo Hold (MAP12)" }
    // Remaining levels omitted for brevity
  ]
}

"is_minor_episode"

"Minor" episodes are short (usually three maps or less) collections of maps that are not intended to be played on their own, like Doom II's secret levels. The world will prevent playing such an episode on its own, and won't start the player with any levels from it.

The default is false.
{
  "name": "Secret Levels",
  "is_minor_episode": true,
  "maps": [ 
    { "lump": "MAP31", "name": "Wolfenstein (MAP31)" },
    { "lump": "MAP32", "name": "Grosse (MAP32)" }
  ]
}

"default_enabled"

Sets whether the option for this episode will be enabled by default.

The default is true.
{
  "name": "Thy Flesh Consumed",
  "default_enabled": false,
  "maps": [ 
    { "lump": "E4M1", "name": "Hell Beneath (E4M1)" }
    // Remaining levels omitted for brevity
  ]
}

"start_level"

Defines which level should be given to players at the start of the game. This is ignored for minor episodes, as the player isn't given a level of those episodes to start with anyway.

The default is 1.
{
  "start_level": 2,
  "maps": [ 
    // I dunno, I didn't actually have any episodes that used this
  ]
}

"boss_level"

Defines which level is considered the "boss" level of the episode. The only effect this has is to populate the defaults for the "Complete Specific Levels" goal. It is also ignored for minor episodes.

The default is whatever the number of the last map is.

Example:
{
  "name": "Knee Deep in the Dead",
  "boss_level": 8,
  "maps": [ 
    { "lump": "E1M1", "name": "Hangar (E1M1)" }
    // Remaining levels omitted for brevity
  ]
}

"maps"

This is where the actual meat of an Episode lies. This is a list of map structures; see Map Structure just below for more information.

Map Structure

There is realistically no limit to how many levels may be in a single episode, but you might have trouble fitting more than 16 onto the same level select screen.

"lump"

This is the actual name of the lump that ap_gen_tool and Archipelago Doom will load. For Doom and Heretic, this will be of the format "E#M#", and for Doom II, it will be "MAP##".

Note that Archipelago Doom does not have the same limits as vanilla when it comes to which maps can be played. "E1M0", "E9M6", "E3M11", and "MAP99", among countless others, are all valid lump names that ap_gen_tool and Archipelago Doom will load without issue. (But see "music" below.)

Examples:
{ "lump": "E1M1", "name": "Hangar (E1M1)" }
{ "lump": "MAP01", "name": "Entryway (MAP01)" }

"wad"

This tells ap_gen_tool which WAD file is the one that contains the data for this map. This does not need to be specified unless levels are split across multiple WAD files (e.g.: "DOOM2.WAD" and "nerve.wad").

Example:
// -- Doom 1993 + SIGIL --
// We want to allow playing both SIGIL and the rest of Doom 1993 at the same time
{ "wad": "DOOM.WAD", "lump": "E3M1", "name": "Hell Keep (E3M1)" },
{ "wad": "SIGIL_V1_23.wad", "lump": "E5M1", "name": "Baphomet's Demense (E5M1)" }

"name"

This is the name of the level, as displayed in location names, item names, the automap, the goal display screen, etc. It should end with the lump name in parenthesis, as this is both shown to the player in various spots, and is used to generate item name groups for easier hinting.

However, the lump name in parenthesis does not actually need to match the name given in "lump"; it is valid (and sometimes advisable) to use a "fake" lump name for the purposes of organization.

Examples:
{ "lump": "E1M8", "name": "Phobos Anomaly (E1M8)" }
{ "lump": "MAP30", "name": "Icon of Sin (MAP30)" }
// -- Chex Quest 3: Vanilla Edition --
// Uses specific, out of order map slots to simulate a shorter episode
{ "lump": "E1M9", "name": "Landing Zone (CQ1M1)" }
// -- No Rest for the Living --
// MAP01 - MAP09 are moved to MAP41 - MAP49 via "rename_lumps"
{ "wad": "nerve.wad", "lump": "MAP41", "music": "D_NRFTL1", "name": "The Earth Base (NERVE01)" }

"music"

This sets the music lump that the game will try to play by default, music rando notwithstanding. If unspecified, the game will play the default music.

If the map is in an out-of-bounds level slot (e.g. "MAP33"), you should specify which music it should play by default, because the "default" music may very well cause a crash!

Example:
{ "lump": "MAP33", "music": "D_READ_M", "name": "Zerstorung (MAP33)" }
// -- No Rest for the Living --
// MAP01 - MAP09 are moved to MAP41 - MAP49 via "rename_lumps"
{ "wad": "nerve.wad", "lump": "MAP41", "music": "D_NRFTL1", "name": "The Earth Base (NERVE01)" }