local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
local BeastVariant = ____isaac_2Dtypescript_2Ddefinitions.BeastVariant
local BloodPuppyVariant = ____isaac_2Dtypescript_2Ddefinitions.BloodPuppyVariant
local BoomFlyVariant = ____isaac_2Dtypescript_2Ddefinitions.BoomFlyVariant
local Charger2Variant = ____isaac_2Dtypescript_2Ddefinitions.Charger2Variant
local DogmaVariant = ____isaac_2Dtypescript_2Ddefinitions.DogmaVariant
local EntityType = ____isaac_2Dtypescript_2Ddefinitions.EntityType
local FacelessVariant = ____isaac_2Dtypescript_2Ddefinitions.FacelessVariant
local Gaper2Variant = ____isaac_2Dtypescript_2Ddefinitions.Gaper2Variant
local GuttyFattyVariant = ____isaac_2Dtypescript_2Ddefinitions.GuttyFattyVariant
local HiveVariant = ____isaac_2Dtypescript_2Ddefinitions.HiveVariant
local HopperVariant = ____isaac_2Dtypescript_2Ddefinitions.HopperVariant
local IsaacVariant = ____isaac_2Dtypescript_2Ddefinitions.IsaacVariant
local MegaSatanVariant = ____isaac_2Dtypescript_2Ddefinitions.MegaSatanVariant
local MoleVariant = ____isaac_2Dtypescript_2Ddefinitions.MoleVariant
local MotherVariant = ____isaac_2Dtypescript_2Ddefinitions.MotherVariant
local PooterVariant = ____isaac_2Dtypescript_2Ddefinitions.PooterVariant
local RoundWormVariant = ____isaac_2Dtypescript_2Ddefinitions.RoundWormVariant
local SubHorfVariant = ____isaac_2Dtypescript_2Ddefinitions.SubHorfVariant
local SuckerVariant = ____isaac_2Dtypescript_2Ddefinitions.SuckerVariant
local UltraGreedVariant = ____isaac_2Dtypescript_2Ddefinitions.UltraGreedVariant
local WallCreepVariant = ____isaac_2Dtypescript_2Ddefinitions.WallCreepVariant
local ____ReadonlySet = require("types.ReadonlySet")
local ReadonlySet = ____ReadonlySet.ReadonlySet
--- "Armor" refers to the damage scaling mechanic. The following list corresponds to the entities
-- that have the "shieldStrength" field in the "entities2.xml" file, with some exceptions.
-- (Invulnerable enemies are not included. Furthermore, Ultra Greed, Ultra Greedier, and Delirium
-- all have damage scaling, but do not have a corresponding "shieldStrength" field.)
-- 
-- Also see:
-- https://bindingofisaacrebirth.fandom.com/wiki/Damage_Scaling#Entities_with_Armor_Values
-- 
-- We use strings instead of a type + variant tuple so that we can have O(1) lookups.
____exports.ENTITIES_WITH_ARMOR_SET = __TS__New(
    ReadonlySet,
    {
        (tostring(EntityType.POOTER) .. ".") .. tostring(PooterVariant.TAINTED_POOTER),
        (tostring(EntityType.HIVE) .. ".") .. tostring(HiveVariant.TAINTED_MULLIGAN),
        (tostring(EntityType.BOOM_FLY) .. ".") .. tostring(BoomFlyVariant.TAINTED_BOOM_FLY),
        (tostring(EntityType.HOPPER) .. ".") .. tostring(HopperVariant.TAINTED_HOPPER),
        tostring(EntityType.SPITTY),
        (tostring(EntityType.SUCKER) .. ".") .. tostring(SuckerVariant.TAINTED_SUCKER),
        (tostring(EntityType.ISAAC) .. ".") .. tostring(IsaacVariant.BLUE_BABY_HUSH),
        (tostring(EntityType.WALL_CREEP) .. ".") .. tostring(WallCreepVariant.TAINTED_SOY_CREEP),
        (tostring(EntityType.ROUND_WORM) .. ".") .. tostring(RoundWormVariant.TAINTED_ROUND_WORM),
        (tostring(EntityType.ROUND_WORM) .. ".") .. tostring(RoundWormVariant.TAINTED_TUBE_WORM),
        (tostring(EntityType.MEGA_SATAN) .. ".") .. tostring(MegaSatanVariant.MEGA_SATAN),
        (tostring(EntityType.MEGA_SATAN) .. ".") .. tostring(MegaSatanVariant.MEGA_SATAN_RIGHT_HAND),
        (tostring(EntityType.MEGA_SATAN) .. ".") .. tostring(MegaSatanVariant.MEGA_SATAN_LEFT_HAND),
        (tostring(EntityType.MEGA_SATAN_2) .. ".") .. tostring(MegaSatanVariant.MEGA_SATAN),
        (tostring(EntityType.MEGA_SATAN_2) .. ".") .. tostring(MegaSatanVariant.MEGA_SATAN_RIGHT_HAND),
        (tostring(EntityType.MEGA_SATAN_2) .. ".") .. tostring(MegaSatanVariant.MEGA_SATAN_LEFT_HAND),
        (tostring(EntityType.ULTRA_GREED) .. ".") .. tostring(UltraGreedVariant.ULTRA_GREED),
        (tostring(EntityType.ULTRA_GREED) .. ".") .. tostring(UltraGreedVariant.ULTRA_GREEDIER),
        tostring(EntityType.HUSH) .. ".0",
        tostring(EntityType.DELIRIUM) .. ".0",
        (tostring(EntityType.BLOOD_PUPPY) .. ".") .. tostring(BloodPuppyVariant.SMALL),
        (tostring(EntityType.BLOOD_PUPPY) .. ".") .. tostring(BloodPuppyVariant.LARGE),
        (tostring(EntityType.SUB_HORF) .. ".") .. tostring(SubHorfVariant.TAINTED_SUB_HORF),
        (tostring(EntityType.FACELESS) .. ".") .. tostring(FacelessVariant.TAINTED_FACELESS),
        (tostring(EntityType.MOLE) .. ".") .. tostring(MoleVariant.TAINTED_MOLE),
        (tostring(EntityType.GUTTED_FATTY) .. ".") .. tostring(GuttyFattyVariant.GUTTED_FATTY),
        (tostring(EntityType.GAPER_LVL_2) .. ".") .. tostring(Gaper2Variant.GAPER),
        (tostring(EntityType.GAPER_LVL_2) .. ".") .. tostring(Gaper2Variant.HORF),
        (tostring(EntityType.GAPER_LVL_2) .. ".") .. tostring(Gaper2Variant.GUSHER),
        (tostring(EntityType.CHARGER_LVL_2) .. ".") .. tostring(Charger2Variant.CHARGER),
        (tostring(EntityType.CHARGER_LVL_2) .. ".") .. tostring(Charger2Variant.ELLEECH),
        tostring(EntityType.SHADY) .. ".0",
        (tostring(EntityType.MOTHER) .. ".") .. tostring(MotherVariant.MOTHER_1),
        (tostring(EntityType.MOTHER) .. ".") .. tostring(MotherVariant.MOTHER_2),
        (tostring(EntityType.DOGMA) .. ".") .. tostring(DogmaVariant.TV),
        (tostring(EntityType.DOGMA) .. ".") .. tostring(DogmaVariant.ANGEL_PHASE_2),
        (tostring(EntityType.BEAST) .. ".") .. tostring(BeastVariant.BEAST),
        (tostring(EntityType.BEAST) .. ".") .. tostring(BeastVariant.ULTRA_FAMINE),
        (tostring(EntityType.BEAST) .. ".") .. tostring(BeastVariant.ULTRA_PESTILENCE),
        (tostring(EntityType.BEAST) .. ".") .. tostring(BeastVariant.ULTRA_WAR),
        (tostring(EntityType.BEAST) .. ".") .. tostring(BeastVariant.ULTRA_DEATH)
    }
)
return ____exports
