"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BOSS_ID_TO_STAGE_IDS = exports.NON_STORY_BOSSES = exports.ALL_BOSSES = exports.STAGE_TO_COMBINED_BOSS_SET_MAP = exports.STAGE_ID_TO_BOSS_IDS = void 0;
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
const cachedEnumValues_1 = require("../cachedEnumValues");
const storyBosses_1 = require("../functions/storyBosses");
const ReadonlyMap_1 = require("../types/ReadonlyMap");
const ReadonlySet_1 = require("../types/ReadonlySet");
// The "bosspools.xml" file does not actually correspond to the real boss pools, so these data
// structures were determined through experimentation on v1.7.8a.
// We use sets of strings instead of tuples for these data structures because TypeScript/Lua does
// not have real tuples. If we store bosses as tuples, then we cannot do a set lookup in O(1).
/** For `StageID.BASEMENT` (1). */
const BASEMENT_BOSSES = [
    isaac_typescript_definitions_1.BossID.MONSTRO,
    isaac_typescript_definitions_1.BossID.LARRY_JR,
    isaac_typescript_definitions_1.BossID.FAMINE,
    isaac_typescript_definitions_1.BossID.DUKE_OF_FLIES,
    isaac_typescript_definitions_1.BossID.GEMINI,
    isaac_typescript_definitions_1.BossID.STEVEN,
    isaac_typescript_definitions_1.BossID.HEADLESS_HORSEMAN,
    isaac_typescript_definitions_1.BossID.FALLEN,
    isaac_typescript_definitions_1.BossID.DINGLE,
    isaac_typescript_definitions_1.BossID.GURGLING,
    isaac_typescript_definitions_1.BossID.LITTLE_HORN,
    // - `BossID.RAG_MAN` (61) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.DANGLE,
    isaac_typescript_definitions_1.BossID.TURDLING,
    isaac_typescript_definitions_1.BossID.BABY_PLUM, // 84 (added in Repentance)
];
/** For `StageID.CELLAR` (2). */
const CELLAR_BOSSES = [
    isaac_typescript_definitions_1.BossID.FAMINE,
    isaac_typescript_definitions_1.BossID.DUKE_OF_FLIES,
    // - `BossID.FISTULA` (18) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.HEADLESS_HORSEMAN,
    isaac_typescript_definitions_1.BossID.FALLEN,
    isaac_typescript_definitions_1.BossID.BLIGHTED_OVUM,
    isaac_typescript_definitions_1.BossID.WIDOW,
    isaac_typescript_definitions_1.BossID.PIN,
    isaac_typescript_definitions_1.BossID.HAUNT,
    isaac_typescript_definitions_1.BossID.LITTLE_HORN,
    isaac_typescript_definitions_1.BossID.RAG_MAN,
    isaac_typescript_definitions_1.BossID.BABY_PLUM, // 84 (added in Repentance)
];
/** For `StageID.BURNING_BASEMENT` (3). */
const BURNING_BASEMENT_BOSSES = [
    isaac_typescript_definitions_1.BossID.MONSTRO,
    isaac_typescript_definitions_1.BossID.LARRY_JR,
    isaac_typescript_definitions_1.BossID.FAMINE,
    isaac_typescript_definitions_1.BossID.DUKE_OF_FLIES,
    isaac_typescript_definitions_1.BossID.GEMINI,
    isaac_typescript_definitions_1.BossID.STEVEN,
    isaac_typescript_definitions_1.BossID.HEADLESS_HORSEMAN,
    isaac_typescript_definitions_1.BossID.FALLEN,
    // - `BossID.HAUNT` (43) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.DINGLE,
    isaac_typescript_definitions_1.BossID.GURGLING,
    isaac_typescript_definitions_1.BossID.LITTLE_HORN,
    isaac_typescript_definitions_1.BossID.RAG_MAN,
    isaac_typescript_definitions_1.BossID.DANGLE,
    isaac_typescript_definitions_1.BossID.TURDLING,
    isaac_typescript_definitions_1.BossID.BABY_PLUM, // 84 (added in Repentance)
];
/** For `StageID.DOWNPOUR` (27). */
const DOWNPOUR_BOSSES = [
    isaac_typescript_definitions_1.BossID.LIL_BLUB,
    isaac_typescript_definitions_1.BossID.WORMWOOD,
    isaac_typescript_definitions_1.BossID.RAINMAKER,
    isaac_typescript_definitions_1.BossID.MIN_MIN, // 91
];
/** For `StageID.DROSS` (28). */
const DROSS_BOSSES = [
    isaac_typescript_definitions_1.BossID.LIL_BLUB,
    isaac_typescript_definitions_1.BossID.WORMWOOD,
    isaac_typescript_definitions_1.BossID.CLOG,
    isaac_typescript_definitions_1.BossID.COLOSTOMIA,
    isaac_typescript_definitions_1.BossID.TURDLET, // 97
];
/** The set of unique bosses for Basement, Cellar, Burning Basement, Downpour, and Dross. */
const ALL_BASEMENT_BOSSES_SET = new ReadonlySet_1.ReadonlySet([
    ...BASEMENT_BOSSES,
    ...CELLAR_BOSSES,
    ...BURNING_BASEMENT_BOSSES,
    ...DOWNPOUR_BOSSES,
    ...DROSS_BOSSES,
]);
/** For `StageID.CAVES` (4). */
const CAVES_BOSSES = [
    isaac_typescript_definitions_1.BossID.CHUB,
    isaac_typescript_definitions_1.BossID.GURDY,
    isaac_typescript_definitions_1.BossID.PESTILENCE,
    isaac_typescript_definitions_1.BossID.PEEP,
    isaac_typescript_definitions_1.BossID.FISTULA,
    isaac_typescript_definitions_1.BossID.CHAD,
    isaac_typescript_definitions_1.BossID.HEADLESS_HORSEMAN,
    isaac_typescript_definitions_1.BossID.GURDY_JR,
    isaac_typescript_definitions_1.BossID.MEGA_FATTY,
    isaac_typescript_definitions_1.BossID.MEGA_MAW,
    // - `BossID.DARK_ONE` (50) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.FALLEN,
    isaac_typescript_definitions_1.BossID.STAIN,
    // - `BossID.FORSAKEN` (59) was removed in Repentance.
    // - `BossID.FRAIL` (66) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.RAG_MEGA,
    isaac_typescript_definitions_1.BossID.BIG_HORN,
    isaac_typescript_definitions_1.BossID.BUMBINO, // 94 (added in Repentance)
];
/** For `StageID.CATACOMBS` (5). */
const CATACOMBS_BOSSES = [
    isaac_typescript_definitions_1.BossID.PESTILENCE,
    isaac_typescript_definitions_1.BossID.PEEP,
    isaac_typescript_definitions_1.BossID.HEADLESS_HORSEMAN,
    isaac_typescript_definitions_1.BossID.FALLEN,
    isaac_typescript_definitions_1.BossID.HOLLOW,
    isaac_typescript_definitions_1.BossID.CARRION_QUEEN,
    isaac_typescript_definitions_1.BossID.GURDY_JR,
    isaac_typescript_definitions_1.BossID.HUSK,
    isaac_typescript_definitions_1.BossID.WRETCHED,
    isaac_typescript_definitions_1.BossID.DARK_ONE,
    isaac_typescript_definitions_1.BossID.POLYCEPHALUS,
    // - `BossID.STAIN` (57) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.FORSAKEN,
    isaac_typescript_definitions_1.BossID.FRAIL,
    isaac_typescript_definitions_1.BossID.RAG_MEGA,
    isaac_typescript_definitions_1.BossID.BIG_HORN,
    isaac_typescript_definitions_1.BossID.BUMBINO, // 94 (added in Repentance)
];
/** For `StageID.FLOODED_CAVES` (6). */
const FLOODED_CAVES_BOSSES = [
    isaac_typescript_definitions_1.BossID.CHUB,
    isaac_typescript_definitions_1.BossID.GURDY,
    isaac_typescript_definitions_1.BossID.PESTILENCE,
    isaac_typescript_definitions_1.BossID.PEEP,
    isaac_typescript_definitions_1.BossID.FISTULA,
    isaac_typescript_definitions_1.BossID.CHAD,
    isaac_typescript_definitions_1.BossID.HEADLESS_HORSEMAN,
    isaac_typescript_definitions_1.BossID.FALLEN,
    isaac_typescript_definitions_1.BossID.GURDY_JR,
    isaac_typescript_definitions_1.BossID.MEGA_MAW,
    isaac_typescript_definitions_1.BossID.MEGA_FATTY,
    // - `BossID.DARK_ONE` (50) was removed in Repentance.
    // - `BossID.POLYCEPHALUS` (52) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.STAIN,
    isaac_typescript_definitions_1.BossID.FORSAKEN,
    isaac_typescript_definitions_1.BossID.FRAIL,
    isaac_typescript_definitions_1.BossID.RAG_MEGA,
    isaac_typescript_definitions_1.BossID.BIG_HORN,
    isaac_typescript_definitions_1.BossID.BUMBINO, // 94 (added in Repentance)
];
/** For `StageID.MINES` (29). */
const MINES_BOSSES = [
    isaac_typescript_definitions_1.BossID.REAP_CREEP,
    isaac_typescript_definitions_1.BossID.TUFF_TWINS,
    isaac_typescript_definitions_1.BossID.HORNFEL,
    isaac_typescript_definitions_1.BossID.GREAT_GIDEON, // 83
];
/** For `StageID.ASHPIT` (30). */
const ASHPIT_BOSSES = [
    isaac_typescript_definitions_1.BossID.PILE,
    isaac_typescript_definitions_1.BossID.GREAT_GIDEON,
    isaac_typescript_definitions_1.BossID.SINGE,
    isaac_typescript_definitions_1.BossID.SHELL,
    isaac_typescript_definitions_1.BossID.CLUTCH, // 102
];
/** The set of unique bosses for Caves, Catacombs, Flooded Caves, Mines, and Ashpit. */
const ALL_CAVES_BOSSES_SET = new ReadonlySet_1.ReadonlySet([
    ...CAVES_BOSSES,
    ...CATACOMBS_BOSSES,
    ...FLOODED_CAVES_BOSSES,
    ...MINES_BOSSES,
    ...ASHPIT_BOSSES,
]);
/**
 * For `StageID.DEPTHS` (7).
 *
 * Note that this set includes Mom, even though they are not technically in the boss pool.
 */
const DEPTHS_BOSSES = [
    isaac_typescript_definitions_1.BossID.MONSTRO_2,
    isaac_typescript_definitions_1.BossID.MOM,
    isaac_typescript_definitions_1.BossID.WAR,
    isaac_typescript_definitions_1.BossID.LOKI,
    isaac_typescript_definitions_1.BossID.GISH,
    isaac_typescript_definitions_1.BossID.HEADLESS_HORSEMAN,
    isaac_typescript_definitions_1.BossID.FALLEN,
    isaac_typescript_definitions_1.BossID.GATE,
    isaac_typescript_definitions_1.BossID.CAGE,
    // - `BossID.ADVERSARY` (51) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.BROWNIE,
    isaac_typescript_definitions_1.BossID.SISTERS_VIS,
    isaac_typescript_definitions_1.BossID.REAP_CREEP, // 74 (added in Repentance)
];
/**
 * For `StageID.NECROPOLIS` (8).
 *
 * Note that this set includes Mom, even though they are not technically in the boss pool.
 */
const NECROPOLIS_BOSSES = [
    isaac_typescript_definitions_1.BossID.MOM,
    isaac_typescript_definitions_1.BossID.WAR,
    isaac_typescript_definitions_1.BossID.LOKI,
    isaac_typescript_definitions_1.BossID.HEADLESS_HORSEMAN,
    isaac_typescript_definitions_1.BossID.FALLEN,
    isaac_typescript_definitions_1.BossID.BLOAT,
    isaac_typescript_definitions_1.BossID.MASK_OF_INFAMY,
    // - `BossID.GATE` (46) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.ADVERSARY,
    isaac_typescript_definitions_1.BossID.BROWNIE,
    isaac_typescript_definitions_1.BossID.SISTERS_VIS,
    isaac_typescript_definitions_1.BossID.PILE, // 73 (added in Repentance)
];
/**
 * For `StageID.DANK_DEPTHS` (9).
 *
 * Note that this set includes Mom, even though they are not technically in the boss pool.
 */
const DANK_DEPTHS_BOSSES = [
    isaac_typescript_definitions_1.BossID.MONSTRO_2,
    isaac_typescript_definitions_1.BossID.MOM,
    isaac_typescript_definitions_1.BossID.WAR,
    isaac_typescript_definitions_1.BossID.LOKI,
    isaac_typescript_definitions_1.BossID.GISH,
    isaac_typescript_definitions_1.BossID.HEADLESS_HORSEMAN,
    isaac_typescript_definitions_1.BossID.FALLEN,
    isaac_typescript_definitions_1.BossID.GATE,
    isaac_typescript_definitions_1.BossID.CAGE,
    // - `BossID.ADVERSARY` (51) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.BROWNIE,
    isaac_typescript_definitions_1.BossID.SISTERS_VIS,
    isaac_typescript_definitions_1.BossID.REAP_CREEP, // 74 (added in Repentance)
];
/**
 * For `StageID.MAUSOLEUM` (31).
 *
 * Note that this set includes Mausoleum Mom, even though they are not technically in the boss pool.
 */
const MAUSOLEUM_BOSSES = [
    isaac_typescript_definitions_1.BossID.SIREN,
    isaac_typescript_definitions_1.BossID.HERETIC,
    isaac_typescript_definitions_1.BossID.MAUSOLEUM_MOM, // 89
];
/**
 * For `StageID.GEHENNA` (32).
 *
 * Note that this set includes Mausoleum Mom, even though they are not technically in the boss pool.
 */
const GEHENNA_BOSSES = [
    isaac_typescript_definitions_1.BossID.VISAGE,
    isaac_typescript_definitions_1.BossID.MAUSOLEUM_MOM,
    isaac_typescript_definitions_1.BossID.HORNY_BOYS, // 101
];
/** The set of unique bosses for Depths, Necropolis, Dank Depths, Mausoleum, and Gehenna. */
const ALL_DEPTHS_BOSSES_SET = new ReadonlySet_1.ReadonlySet([
    ...DEPTHS_BOSSES,
    ...NECROPOLIS_BOSSES,
    ...DANK_DEPTHS_BOSSES,
    ...MAUSOLEUM_BOSSES,
    ...GEHENNA_BOSSES,
]);
/**
 * For `StageID.WOMB` (10).
 *
 * Note that this set includes Mom's Heart & It Lives, even though they are not technically in the
 * boss pool.
 */
const WOMB_BOSSES = [
    isaac_typescript_definitions_1.BossID.SCOLEX,
    isaac_typescript_definitions_1.BossID.MOMS_HEART,
    isaac_typescript_definitions_1.BossID.DEATH,
    isaac_typescript_definitions_1.BossID.BLASTOCYST,
    isaac_typescript_definitions_1.BossID.HEADLESS_HORSEMAN,
    isaac_typescript_definitions_1.BossID.FALLEN,
    isaac_typescript_definitions_1.BossID.IT_LIVES,
    // - `BossID.BLOAT` (30) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.LOKII,
    // - `BossID.TERATOMA` (33) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.CONQUEST,
    // - `BossID.DADDY_LONG_LEGS` (41) was removed in Repentance.
    // - `BossID.TRIACHNID` (42) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.MAMA_GURDY,
    isaac_typescript_definitions_1.BossID.MR_FRED,
    // - `BossID.SISTERS_VIS` (68) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.MATRIARCH, // 72
];
/**
 * For `StageID.UTERO` (11).
 *
 * Note that this set includes Mom's Heart & It Lives, even though they are not technically in the
 * boss pool.
 */
const UTERO_BOSSES = [
    isaac_typescript_definitions_1.BossID.MOMS_HEART,
    isaac_typescript_definitions_1.BossID.DEATH,
    // - `BossID.BLASTOCYST` (16) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.HEADLESS_HORSEMAN,
    isaac_typescript_definitions_1.BossID.FALLEN,
    isaac_typescript_definitions_1.BossID.IT_LIVES,
    isaac_typescript_definitions_1.BossID.BLOAT,
    isaac_typescript_definitions_1.BossID.LOKII,
    isaac_typescript_definitions_1.BossID.TERATOMA,
    isaac_typescript_definitions_1.BossID.CONQUEST,
    isaac_typescript_definitions_1.BossID.DADDY_LONG_LEGS,
    isaac_typescript_definitions_1.BossID.TRIACHNID, // 42
    // - `BossID.MAMA_GURDY` (49) was removed in Repentance.
    // - `BossID.MR_FRED` (52) was removed in Repentance.
    // - `BossID.SISTERS_VIS` (68) was removed in Repentance.
    // - `BossID.MATRIARCH` (72) was removed in Repentance.
];
/**
 * For `StageID.SCARRED_WOMB` (12).
 *
 * Note that this set includes Mom's Heart & It Lives, even though they are not technically in the
 * boss pool.
 */
const SCARRED_WOMB_BOSSES = [
    isaac_typescript_definitions_1.BossID.SCOLEX,
    isaac_typescript_definitions_1.BossID.MOMS_HEART,
    isaac_typescript_definitions_1.BossID.DEATH,
    isaac_typescript_definitions_1.BossID.BLASTOCYST,
    isaac_typescript_definitions_1.BossID.HEADLESS_HORSEMAN,
    isaac_typescript_definitions_1.BossID.FALLEN,
    isaac_typescript_definitions_1.BossID.IT_LIVES,
    // - `BossID.BLOAT` (30) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.LOKII,
    // - `BossID.TERATOMA` (33) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.CONQUEST,
    // - `BossID.DADDY_LONG_LEGS` (41) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.TRIACHNID,
    isaac_typescript_definitions_1.BossID.MAMA_GURDY,
    isaac_typescript_definitions_1.BossID.MR_FRED,
    // - `BossID.SISTERS_VIS` (68) was removed in Repentance.
    isaac_typescript_definitions_1.BossID.MATRIARCH, // 72
];
/**
 * For `StageID.CORPSE` (33).
 *
 * Note that this set includes Mother, even though she is not technically in the boss pool.
 */
const CORPSE_BOSSES = [
    isaac_typescript_definitions_1.BossID.SCOURGE,
    isaac_typescript_definitions_1.BossID.CHIMERA,
    isaac_typescript_definitions_1.BossID.ROTGUT,
    isaac_typescript_definitions_1.BossID.MOTHER, // 88
];
/** The set of unique bosses for Womb, Utero, Scarred Womb, and Corpse. */
const ALL_WOMB_BOSSES_SET = new ReadonlySet_1.ReadonlySet([
    ...WOMB_BOSSES,
    ...UTERO_BOSSES,
    ...SCARRED_WOMB_BOSSES,
    ...CORPSE_BOSSES,
]);
const BLUE_WOMB_BOSSES = [
    isaac_typescript_definitions_1.BossID.HUSH, // 63
];
const ALL_BLUE_WOMB_BOSSES_SET = new ReadonlySet_1.ReadonlySet([...BLUE_WOMB_BOSSES]);
const SHEOL_BOSSES = [
    isaac_typescript_definitions_1.BossID.SATAN, // 24
];
const CATHEDRAL_BOSSES = [
    isaac_typescript_definitions_1.BossID.ISAAC, // 39
];
const ALL_STAGE_10_BOSSES_SET = new ReadonlySet_1.ReadonlySet([
    ...SHEOL_BOSSES,
    ...CATHEDRAL_BOSSES,
]);
/**
 * Note that this set includes Mega Satan, even though they are not technically in the boss pool.
 */
const DARK_ROOM_BOSSES = [
    isaac_typescript_definitions_1.BossID.LAMB,
    isaac_typescript_definitions_1.BossID.MEGA_SATAN, // 55
];
/**
 * Note that this set includes Mega Satan, even though they are not technically in the boss pool.
 */
const CHEST_BOSSES = [
    isaac_typescript_definitions_1.BossID.BLUE_BABY,
    isaac_typescript_definitions_1.BossID.MEGA_SATAN, // 55
];
const ALL_STAGE_11_BOSSES_SET = new ReadonlySet_1.ReadonlySet([
    ...DARK_ROOM_BOSSES,
    ...CHEST_BOSSES,
]);
const VOID_BOSSES = [
    isaac_typescript_definitions_1.BossID.DELIRIUM, // 70
];
const ALL_VOID_BOSSES_SET = new ReadonlySet_1.ReadonlySet([...VOID_BOSSES]);
/**
 * Includes Dogma and The Beast. Does not include Ultra Famine, Ultra Pestilence, Ultra War, and
 * Ultra Death (since they do not have boss IDs).
 */
const HOME_BOSSES = [
    isaac_typescript_definitions_1.BossID.DOGMA,
    isaac_typescript_definitions_1.BossID.BEAST, // 100
];
const ALL_HOME_BOSSES_SET = new ReadonlySet_1.ReadonlySet([...HOME_BOSSES]);
exports.STAGE_ID_TO_BOSS_IDS = new ReadonlyMap_1.ReadonlyMap([
    [isaac_typescript_definitions_1.StageID.BASEMENT, BASEMENT_BOSSES],
    [isaac_typescript_definitions_1.StageID.CELLAR, CELLAR_BOSSES],
    [isaac_typescript_definitions_1.StageID.BURNING_BASEMENT, BURNING_BASEMENT_BOSSES],
    [isaac_typescript_definitions_1.StageID.DOWNPOUR, DOWNPOUR_BOSSES],
    [isaac_typescript_definitions_1.StageID.DROSS, DROSS_BOSSES],
    [isaac_typescript_definitions_1.StageID.CAVES, CAVES_BOSSES],
    [isaac_typescript_definitions_1.StageID.CATACOMBS, CATACOMBS_BOSSES],
    [isaac_typescript_definitions_1.StageID.FLOODED_CAVES, FLOODED_CAVES_BOSSES],
    [isaac_typescript_definitions_1.StageID.MINES, MINES_BOSSES],
    [isaac_typescript_definitions_1.StageID.ASHPIT, ASHPIT_BOSSES],
    [isaac_typescript_definitions_1.StageID.DEPTHS, DEPTHS_BOSSES],
    [isaac_typescript_definitions_1.StageID.NECROPOLIS, NECROPOLIS_BOSSES],
    [isaac_typescript_definitions_1.StageID.DANK_DEPTHS, DANK_DEPTHS_BOSSES],
    [isaac_typescript_definitions_1.StageID.MAUSOLEUM, MAUSOLEUM_BOSSES],
    [isaac_typescript_definitions_1.StageID.GEHENNA, GEHENNA_BOSSES],
    [isaac_typescript_definitions_1.StageID.WOMB, WOMB_BOSSES],
    [isaac_typescript_definitions_1.StageID.UTERO, UTERO_BOSSES],
    [isaac_typescript_definitions_1.StageID.SCARRED_WOMB, SCARRED_WOMB_BOSSES],
    [isaac_typescript_definitions_1.StageID.CORPSE, CORPSE_BOSSES],
    [isaac_typescript_definitions_1.StageID.BLUE_WOMB, BLUE_WOMB_BOSSES],
    [isaac_typescript_definitions_1.StageID.SHEOL, SHEOL_BOSSES],
    [isaac_typescript_definitions_1.StageID.CATHEDRAL, CATHEDRAL_BOSSES],
    [isaac_typescript_definitions_1.StageID.DARK_ROOM, DARK_ROOM_BOSSES],
    [isaac_typescript_definitions_1.StageID.CHEST, CHEST_BOSSES],
    [isaac_typescript_definitions_1.StageID.VOID, VOID_BOSSES],
    [isaac_typescript_definitions_1.StageID.HOME, HOME_BOSSES], // 35
]);
exports.STAGE_TO_COMBINED_BOSS_SET_MAP = new ReadonlyMap_1.ReadonlyMap([
    [isaac_typescript_definitions_1.LevelStage.BASEMENT_1, ALL_BASEMENT_BOSSES_SET],
    [isaac_typescript_definitions_1.LevelStage.BASEMENT_2, ALL_BASEMENT_BOSSES_SET],
    [isaac_typescript_definitions_1.LevelStage.CAVES_1, ALL_CAVES_BOSSES_SET],
    [isaac_typescript_definitions_1.LevelStage.CAVES_2, ALL_CAVES_BOSSES_SET],
    [isaac_typescript_definitions_1.LevelStage.DEPTHS_1, ALL_DEPTHS_BOSSES_SET],
    [isaac_typescript_definitions_1.LevelStage.DEPTHS_2, ALL_DEPTHS_BOSSES_SET],
    [isaac_typescript_definitions_1.LevelStage.WOMB_1, ALL_WOMB_BOSSES_SET],
    [isaac_typescript_definitions_1.LevelStage.WOMB_2, ALL_WOMB_BOSSES_SET],
    [isaac_typescript_definitions_1.LevelStage.BLUE_WOMB, ALL_BLUE_WOMB_BOSSES_SET],
    [isaac_typescript_definitions_1.LevelStage.SHEOL_CATHEDRAL, ALL_STAGE_10_BOSSES_SET],
    [isaac_typescript_definitions_1.LevelStage.DARK_ROOM_CHEST, ALL_STAGE_11_BOSSES_SET],
    [isaac_typescript_definitions_1.LevelStage.VOID, ALL_VOID_BOSSES_SET],
    [isaac_typescript_definitions_1.LevelStage.HOME, ALL_HOME_BOSSES_SET], // 13
]);
exports.ALL_BOSSES = cachedEnumValues_1.BOSS_ID_VALUES.filter((bossID) => bossID !== isaac_typescript_definitions_1.BossID.RAGLICH);
exports.NON_STORY_BOSSES = exports.ALL_BOSSES.filter((bossID) => !(0, storyBosses_1.isStoryBossID)(bossID));
exports.BOSS_ID_TO_STAGE_IDS = (() => {
    const partialBossIDsToStageIDs = {};
    for (const bossID of cachedEnumValues_1.BOSS_ID_VALUES) {
        const stageIDs = new Set();
        for (const [stageID, bossIDs] of exports.STAGE_ID_TO_BOSS_IDS) {
            if (bossIDs.includes(bossID)) {
                stageIDs.add(stageID);
            }
        }
        partialBossIDsToStageIDs[bossID] = stageIDs;
    }
    const bossIDsToStageIDs = partialBossIDsToStageIDs;
    // In Repentance, the following bosses will have empty sets:
    // - BossID.ULTRA_GREED (62)
    // - BossID.ULTRA_GREEDIER (71)
    // - BossID.MAUSOLEUM_MOMS_HEART (90)
    // - BossID.RAGLICH (98)
    bossIDsToStageIDs[isaac_typescript_definitions_1.BossID.ULTRA_GREED].add(isaac_typescript_definitions_1.StageID.ULTRA_GREED); // 62
    bossIDsToStageIDs[isaac_typescript_definitions_1.BossID.ULTRA_GREEDIER].add(isaac_typescript_definitions_1.StageID.ULTRA_GREED); // 71
    bossIDsToStageIDs[isaac_typescript_definitions_1.BossID.MAUSOLEUM_MOMS_HEART].add(isaac_typescript_definitions_1.StageID.MAUSOLEUM); // 90
    bossIDsToStageIDs[isaac_typescript_definitions_1.BossID.MAUSOLEUM_MOMS_HEART].add(isaac_typescript_definitions_1.StageID.GEHENNA); // 90
    return bossIDsToStageIDs;
})();
